diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..2f164f1 --- /dev/null +++ b/404.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>404 | Vutron</title> + <meta name="description" content="Not Found"> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"></div> + + + </body> +</html> \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..14f6980 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +vutron.cdget.com \ No newline at end of file diff --git a/assets/app.Dgw6wb0Y.js b/assets/app.Dgw6wb0Y.js new file mode 100644 index 0000000..e50dc66 --- /dev/null +++ b/assets/app.Dgw6wb0Y.js @@ -0,0 +1 @@ +import{t as i}from"./chunks/theme.DP4UGt4y.js";import{R as o,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,ac as v,d as P,u as y,v as C,s as b,ad as w,ae as R,af as E,ag as S}from"./chunks/framework.BQmytedh.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{b(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&w(),R(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(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 _(){return g(T)}function j(){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&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/chunks/@localSearchIndexko.CSoybntL.js b/assets/chunks/@localSearchIndexko.CSoybntL.js new file mode 100644 index 0000000..1adbcf9 --- /dev/null +++ b/assets/chunks/@localSearchIndexko.CSoybntL.js @@ -0,0 +1 @@ +const t='{"documentCount":33,"nextId":33,"documentIds":{"0":"/ko/electron-how-to/#electron-개요","1":"/ko/electron-how-to/main-and-renderer-process#메인과-렌더러-프로세스","2":"/ko/electron-how-to/main-and-renderer-process#렌더러에서-node-js를-실행하는-방법은-무엇인가요","3":"/ko/electron-how-to/preload-script#프리로드-스크립트","4":"/ko/installation-and-build/build-configuration#빌드-구성","5":"/ko/installation-and-build/build-configuration#멀티플랫폼-빌드를-하려면-어떻게-해야-하나요","6":"/ko/installation-and-build/build-configuration#개발-파일을-제외하여-번들-크기-줄이기","7":"/ko/installation-and-build/build-configuration#네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정","8":"/ko/installation-and-build/automated-testing#자동화-테스트","9":"/ko/installation-and-build/getting-started#시작하기","10":"/ko/installation-and-build/getting-started#프로젝트-복제하기","11":"/ko/installation-and-build/getting-started#방법-1-npm-init-권장","12":"/ko/installation-and-build/getting-started#방법-2-템플릿-사용","13":"/ko/installation-and-build/getting-started#방법-3-리포지토리-복제","14":"/ko/installation-and-build/getting-started#설치하기","15":"/ko/installation-and-build/getting-started#개발-환경에서-실행","16":"/ko/installation-and-build/#설치-그리고-빌드","17":"/ko/installation-and-build/install-local-documentation#로컬-문서-관리","18":"/ko/installation-and-build/install-local-documentation#installation","19":"/ko/installation-and-build/npm-scripts#npm-스크립트","20":"/ko/installation-and-build/npm-scripts#일반","21":"/ko/installation-and-build/npm-scripts#문서용","22":"/ko/other-projects#기타-프로젝트","23":"/ko/other-projects#react로-만든-electron-템플릿을-찾고-계신가요","24":"/ko/other-projects#사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요","25":"/ko/project-structures/#프로젝트-구조","26":"/ko/project-structures/pre-configured-components#사전-구성된-구성-요소","27":"/ko/project-structures/pre-configured-components#웹-앱-프레임워크","28":"/ko/project-structures/pre-configured-components#개발-도움말-도구","29":"/ko/project-structures/pre-configured-components#프론트엔드-프레임워크-vue","30":"/ko/project-structures/pre-configured-components#디자인-프레임워크","31":"/ko/project-structures/pre-configured-components#테스트","32":"/ko/project-structures/project-structure#프로젝트-구조"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,1],"1":[3,1,100],"2":[7,3,33],"3":[2,1,128],"4":[2,1,57],"5":[7,2,82],"6":[6,2,165],"7":[7,2,27],"8":[2,1,108],"9":[1,1,1],"10":[2,1,1],"11":[6,3,21],"12":[4,3,20],"13":[4,3,25],"14":[1,1,20],"15":[3,1,33],"16":[3,1,1],"17":[3,1,28],"18":[1,3,39],"19":[2,1,6],"20":[1,2,80],"21":[1,2,32],"22":[2,1,1],"23":[7,2,17],"24":[9,2,34],"25":[2,1,1],"26":[4,1,1],"27":[3,4,4],"28":[3,4,4],"29":[4,4,5],"30":[2,4,2],"31":[1,4,2],"32":[2,1,190]},"averageFieldLength":[3.303030303030303,1.9696969696969697,38.45454545454545],"storedFields":{"0":{"title":"Electron 개요","titles":[]},"1":{"title":"메인과 렌더러 프로세스","titles":[]},"2":{"title":"렌더러에서 Node.js를 실행하는 방법은 무엇인가요?","titles":["메인과 렌더러 프로세스"]},"3":{"title":"프리로드 스크립트","titles":[]},"4":{"title":"빌드 구성","titles":[]},"5":{"title":"멀티플랫폼 빌드를 하려면 어떻게 해야 하나요?","titles":["빌드 구성"]},"6":{"title":"개발 파일을 제외하여 번들 크기 줄이기","titles":["빌드 구성"]},"7":{"title":"네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정","titles":["빌드 구성"]},"8":{"title":"자동화 테스트","titles":[]},"9":{"title":"시작하기","titles":[]},"10":{"title":"프로젝트 복제하기","titles":["시작하기"]},"11":{"title":"방법 1: npm init (권장)","titles":["시작하기","프로젝트 복제하기"]},"12":{"title":"방법 2: 템플릿 사용","titles":["시작하기","프로젝트 복제하기"]},"13":{"title":"방법 3: 리포지토리 복제","titles":["시작하기","프로젝트 복제하기"]},"14":{"title":"설치하기","titles":["시작하기"]},"15":{"title":"개발 환경에서 실행","titles":["시작하기"]},"16":{"title":"설치 그리고 빌드","titles":[]},"17":{"title":"로컬 문서 관리","titles":[]},"18":{"title":"Installation","titles":["로컬 문서 관리"]},"19":{"title":"Npm 스크립트","titles":[]},"20":{"title":"일반","titles":["Npm 스크립트"]},"21":{"title":"문서용","titles":["Npm 스크립트"]},"22":{"title":"기타 프로젝트","titles":[]},"23":{"title":"React로 만든 Electron 템플릿을 찾고 계신가요?","titles":["기타 프로젝트"]},"24":{"title":"(사용 중단) Webpack 5 컴파일러로 Vutron을 찾고 계신가요?","titles":["기타 프로젝트"]},"25":{"title":"프로젝트 구조","titles":[]},"26":{"title":"사전 구성된 구성 요소","titles":[]},"27":{"title":"웹 앱 프레임워크","titles":["사전 구성된 구성 요소"]},"28":{"title":"개발 도움말 도구","titles":["사전 구성된 구성 요소"]},"29":{"title":"프론트엔드 프레임워크 (Vue)","titles":["사전 구성된 구성 요소"]},"30":{"title":"디자인 프레임워크","titles":["사전 구성된 구성 요소"]},"31":{"title":"테스트","titles":["사전 구성된 구성 요소"]},"32":{"title":"프로젝트 구조","titles":[]}},"dirtCount":0,"index":[["라이선스",{"2":{"32":1}}],["라우팅",{"2":{"32":2}}],["서식을",{"2":{"32":1}}],["서버를",{"2":{"18":1}}],["업로드하지",{"2":{"32":1}}],["규칙",{"2":{"32":3}}],["규칙을",{"2":{"6":1}}],["목록",{"2":{"32":3}}],["목표를",{"2":{"24":1}}],["무시할",{"2":{"32":1}}],["무엇인가요",{"0":{"2":1}}],["공통",{"2":{"32":1}}],["저장",{"2":{"32":1}}],["엔트리",{"2":{"32":1}}],["인덱스",{"2":{"32":1}}],["의해",{"2":{"32":1}}],["상태",{"2":{"32":1}}],["스크린샷",{"2":{"32":1}}],["스크립트를",{"2":{"1":1,"2":1,"3":1,"7":1}}],["스크립트",{"0":{"3":1,"19":1},"1":{"20":1,"21":1},"2":{"1":1}}],["스크립트의",{"2":{"1":1}}],["스크립트는",{"2":{"1":2,"3":2}}],["스토어",{"2":{"32":1}}],["샘플",{"2":{"32":1}}],["표시되는",{"2":{"32":1}}],["발생",{"2":{"32":1}}],["발생할",{"2":{"6":1}}],["오류",{"2":{"32":1}}],["정적",{"2":{"32":2}}],["정의",{"2":{"32":7}}],["플러그인",{"2":{"32":1}}],["플랫폼을",{"2":{"5":1,"8":1}}],["플랫폼에서",{"2":{"5":1}}],["플랫폼",{"2":{"4":1,"5":1}}],["언어",{"2":{"32":1}}],["레이아웃",{"2":{"32":1}}],["콜렉션",{"2":{"32":1}}],["브릿지",{"2":{"32":1}}],["브릿지를",{"2":{"1":1}}],["커뮤니케이션",{"2":{"32":1}}],["윈도우",{"2":{"32":1}}],["핸들러",{"2":{"32":1}}],["진입점",{"2":{"32":1}}],["글로벌",{"2":{"32":3}}],["유틸리티",{"2":{"32":3}}],["소스",{"2":{"32":2}}],["루트",{"2":{"32":3}}],["루트에",{"2":{"8":1}}],["페이지의",{"2":{"32":1}}],["활성화",{"2":{"32":1}}],["활용하려면",{"2":{"3":1}}],["선택적으로",{"2":{"32":1}}],["출력",{"2":{"32":1}}],["`electron",{"2":{"32":1}}],["등",{"2":{"32":1}}],["등에",{"2":{"32":1}}],["워크플로우",{"2":{"32":1}}],["└─",{"2":{"32":26}}],["│",{"2":{"32":74}}],["├─",{"2":{"32":39}}],["디자인",{"0":{"30":1}}],["디렉토리",{"2":{"21":1,"32":2}}],["디렉터리",{"2":{"8":1}}],["디렉터리에",{"2":{"8":1}}],["도구",{"0":{"28":1}}],["도움말",{"0":{"28":1}}],["앱",{"0":{"27":1},"2":{"32":1}}],["앱에서",{"2":{"15":1}}],["요소",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1}}],["종료될",{"2":{"24":1}}],["종속성을",{"2":{"7":1}}],["곧",{"2":{"24":1}}],["분리되었으며",{"2":{"24":1}}],["분리하고",{"2":{"1":1}}],["달성했습니다",{"2":{"24":1}}],["달라집니다",{"2":{"8":1}}],["속도를",{"2":{"24":1}}],["속성에",{"2":{"6":1}}],["줄이고",{"2":{"24":1}}],["줄이기",{"0":{"6":1}}],["5",{"0":{"24":1},"2":{"24":1}}],["5173을",{"2":{"15":1}}],["중단",{"0":{"24":1}}],["확인해",{"2":{"23":1}}],["확인해야",{"2":{"15":1}}],["계신가요",{"0":{"23":1,"24":1}}],["찾고",{"0":{"23":1,"24":1}}],["찾을",{"2":{"4":1}}],["만든",{"0":{"23":1}}],["만들",{"2":{"12":1}}],["만들지",{"2":{"11":1}}],["만들려면",{"2":{"5":1}}],["ui",{"2":{"23":1}}],["used",{"2":{"21":1}}],["use",{"2":{"20":2}}],["utils",{"2":{"32":2}}],["util",{"2":{"6":1}}],["util|pre",{"2":{"6":1}}],["+",{"2":{"20":1,"23":3}}],["일반적인",{"2":{"32":1}}],["일반적으로",{"2":{"1":1,"3":1}}],["일반",{"0":{"20":1}}],["작업은",{"2":{"18":1}}],["작동합니다",{"2":{"17":1}}],["지침의",{"2":{"18":1}}],["지원이",{"2":{"24":1}}],["지원합니다",{"2":{"8":2}}],["지원되는",{"2":{"3":1}}],["폴더는",{"2":{"17":1}}],["폴더에서",{"2":{"18":1}}],["폴더에",{"2":{"3":1}}],["함수는",{"2":{"17":1}}],["함수입니다",{"2":{"3":2}}],["볼",{"2":{"17":1}}],["뷰어를",{"2":{"17":1}}],["관리",{"0":{"17":1},"1":{"18":1},"2":{"32":1}}],["관련",{"2":{"11":1,"18":1}}],["그리고",{"0":{"16":1}}],["할",{"2":{"15":1}}],["포인트renderer",{"2":{"32":1}}],["포트",{"2":{"15":1}}],["포트를",{"2":{"15":1}}],["포함되지",{"2":{"17":1}}],["포함되어",{"2":{"8":1}}],["포함하는",{"2":{"1":1}}],["다른",{"2":{"15":1}}],["다음은",{"2":{"3":1}}],["다음",{"2":{"1":1,"2":1,"3":2,"4":1,"5":3,"7":1,"8":2,"14":1,"18":1}}],["환경과",{"2":{"24":1}}],["환경의",{"2":{"15":1}}],["환경에서",{"0":{"15":1},"2":{"15":1,"17":1}}],["터미널에서",{"2":{"14":1}}],["후에도",{"2":{"15":1}}],["후",{"2":{"14":1}}],["적합합니다",{"2":{"13":1}}],["기여에만",{"2":{"32":1}}],["기여하는",{"2":{"13":1,"21":1}}],["기존",{"2":{"24":1}}],["기타",{"0":{"22":1},"1":{"23":1,"24":1}}],["기본적으로",{"2":{"15":1}}],["기본",{"2":{"8":1,"15":1}}],["직접",{"2":{"13":1}}],["3",{"0":{"13":1}}],["로고",{"2":{"32":1}}],["로컬",{"0":{"17":1},"1":{"18":1},"2":{"17":1,"18":1}}],["로컬에",{"2":{"12":1}}],["로드된",{"2":{"32":1}}],["로드되기",{"2":{"1":1}}],["로드",{"2":{"1":1}}],["즉시",{"2":{"12":2}}],["나타나지",{"2":{"15":1}}],["나만의",{"2":{"12":1}}],["나뉩니다",{"2":{"1":1}}],["클릭하면",{"2":{"12":1}}],["버튼을",{"2":{"12":1}}],["버전의",{"2":{"3":2}}],["2",{"0":{"12":1}}],["복제된",{"2":{"17":1}}],["복제한",{"2":{"14":1}}],["복제합니다",{"2":{"13":1}}],["복제",{"0":{"13":1}}],["복제해야",{"2":{"12":1}}],["복제할",{"2":{"11":1}}],["복제하기",{"0":{"10":1},"1":{"11":1,"12":1,"13":1}}],["쉽게",{"2":{"11":1}}],["명령줄",{"2":{"15":1}}],["명령을",{"2":{"14":1,"15":1,"18":2}}],["명령만으로",{"2":{"11":1}}],["명령어로",{"2":{"8":1}}],["명령어를",{"2":{"4":1,"5":2,"13":1}}],["권장",{"0":{"11":1},"2":{"32":1}}],["권장합니다",{"2":{"5":1}}],["1",{"0":{"11":1}}],["방법을",{"2":{"12":1}}],["방법",{"0":{"11":1,"12":1,"13":1}}],["방법은",{"0":{"2":1},"2":{"11":1,"13":1}}],["컴포넌트",{"2":{"32":4}}],["컴파일러",{"2":{"32":1}}],["컴파일러를",{"2":{"24":2}}],["컴파일러로",{"0":{"24":1}}],["컴파일합니다",{"2":{"8":1}}],["컴퓨터에서",{"2":{"5":1}}],["비활성화할",{"2":{"32":1}}],["비우고",{"2":{"8":1}}],["비동기적으로",{"2":{"3":1}}],["를",{"2":{"8":1}}],["모든",{"2":{"8":1,"18":1}}],["모듈을",{"0":{"7":1},"2":{"7":2,"8":1}}],["모듈",{"2":{"4":1}}],["모듈은",{"2":{"3":1}}],["모듈이",{"2":{"1":1}}],["모듈이나",{"2":{"1":1}}],["결과",{"2":{"8":2,"32":1}}],["결과를",{"2":{"1":1}}],["현재",{"2":{"8":1}}],["범위에",{"2":{"8":1}}],["고급",{"2":{"8":1}}],["매우",{"2":{"8":1}}],["화면",{"2":{"32":3}}],["화면에",{"2":{"8":1}}],["화이트리스트에",{"2":{"3":1}}],["템플릿을",{"0":{"23":1}}],["템플릿",{"0":{"12":1},"2":{"8":1,"12":1}}],["템플릿에는",{"2":{"8":1}}],["템플릿에서",{"2":{"3":1}}],["여기에서",{"2":{"8":1}}],["여러",{"2":{"5":2}}],["크로스",{"2":{"8":1}}],["크기를",{"2":{"24":1}}],["크기",{"0":{"6":1}}],["바로",{"2":{"8":1}}],["바랍니다",{"2":{"6":1}}],["없이",{"2":{"8":1}}],["없습니다",{"2":{"1":1}}],["별도의",{"2":{"8":2}}],["완벽하게",{"2":{"8":1}}],["완료되면",{"2":{"4":1,"8":1}}],["최적화되어",{"2":{"8":1}}],["최신",{"2":{"3":1}}],["애플리케이션이",{"2":{"15":1}}],["애플리케이션의",{"2":{"8":1}}],["애플리케이션",{"2":{"8":1,"32":1}}],["애플리케이션은",{"2":{"1":1,"15":1}}],["웹",{"0":{"27":1},"2":{"8":1}}],["테스트용",{"2":{"8":1}}],["테스트는",{"2":{"8":1}}],["테스트만",{"2":{"8":1}}],["테스트를",{"2":{"8":3}}],["테스트에",{"2":{"8":1}}],["테스트가",{"2":{"8":1}}],["테스트",{"0":{"8":1,"31":1},"2":{"8":4,"32":6}}],["자동화된",{"2":{"8":1}}],["자동화",{"0":{"8":1}}],["자세히",{"2":{"5":2,"8":1}}],["자세한",{"2":{"1":1,"2":1,"3":1,"4":1,"8":1}}],["리소스",{"2":{"32":5}}],["리포지토리로",{"2":{"24":1}}],["리포지토리에",{"2":{"13":1}}],["리포지토리",{"0":{"13":1}}],["리포지토리가",{"2":{"12":1}}],["리포지토리를",{"2":{"11":1,"13":1}}],["리빌드가",{"2":{"7":1}}],["리스너를",{"2":{"3":1}}],["리스너입니다",{"2":{"3":2}}],["your",{"2":{"20":2}}],["yaml",{"2":{"6":1}}],["yarnpkg",{"2":{"14":1,"18":1}}],["yarn",{"2":{"6":1,"14":2,"18":2}}],["yml",{"2":{"6":1,"32":2}}],["hpp",{"2":{"6":1}}],["h",{"2":{"6":1}}],["html",{"2":{"6":1,"32":1}}],["htdocs",{"2":{"6":1}}],["https",{"2":{"1":1,"2":1,"3":1,"4":1,"5":2,"8":2,"13":1,"14":2,"18":2,"23":1,"24":1}}],["x3c",{"2":{"13":1}}],["x64",{"2":{"6":1}}],["xcconfig",{"2":{"6":1}}],["xcodeproj",{"2":{"6":1}}],["xcode",{"2":{"6":1}}],["xml",{"2":{"6":1}}],["funding",{"2":{"32":1}}],["file",{"2":{"20":2}}],["filters",{"2":{"6":1}}],["fixtures",{"2":{"32":1}}],["fix",{"2":{"20":6}}],["fp",{"2":{"6":1}}],["flow",{"2":{"6":1}}],["format",{"2":{"20":2}}],["force",{"2":{"20":1}}],["for",{"2":{"4":3,"20":8,"21":2}}],["karma",{"2":{"6":1}}],["git에",{"2":{"32":1}}],["gitignore",{"2":{"32":1}}],["git",{"2":{"13":1}}],["github에서만",{"2":{"32":2}}],["github에",{"2":{"12":1}}],["github",{"2":{"2":1,"8":1,"11":1,"13":1,"21":1,"23":1,"24":1,"32":4}}],["gyp",{"2":{"6":5}}],["gypi",{"2":{"6":1}}],["gruntfile",{"2":{"6":1}}],["gulpfile",{"2":{"6":1}}],["검토하시기",{"2":{"6":1}}],["따라",{"2":{"6":1,"8":1}}],["예정입니다",{"2":{"24":1}}],["예시입니다",{"2":{"6":1}}],["예를",{"2":{"1":1,"5":1}}],["불필요한",{"2":{"6":1,"11":1}}],["절약할",{"2":{"6":2}}],["용량을",{"2":{"6":1}}],["패턴으로",{"2":{"6":1}}],["패턴을",{"2":{"6":1}}],["패키지",{"2":{"32":3}}],["패키지는",{"2":{"4":1,"5":1}}],["패키지를",{"2":{"4":1,"5":2,"8":1,"18":1}}],["않을",{"2":{"32":1}}],["않습니다",{"2":{"8":1,"11":1,"17":1}}],["않은",{"2":{"6":1}}],["않는다면",{"2":{"15":1}}],["않는",{"2":{"3":1}}],["필요한",{"2":{"7":1}}],["필요하지",{"2":{"6":1}}],["필요할",{"2":{"5":2}}],["시",{"2":{"32":1}}],["시작하기",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1,"15":1}}],["시작할",{"2":{"8":1}}],["시점에",{"2":{"6":1}}],["시스템",{"2":{"3":1}}],["번들을",{"2":{"6":1}}],["번들",{"0":{"6":1},"2":{"6":1,"24":1}}],["번에",{"2":{"5":2}}],["제공",{"2":{"8":1}}],["제외할",{"2":{"6":1}}],["제외하여",{"0":{"6":1}}],["제거합니다",{"2":{"3":1}}],["파일들",{"2":{"32":1}}],["파일",{"2":{"6":3,"32":15}}],["파일은",{"2":{"6":1,"8":3}}],["파일을",{"0":{"6":1},"2":{"8":1,"11":1}}],["파일에서",{"2":{"2":1}}],["알아보려면",{"2":{"5":1}}],["알아보세요",{"2":{"5":1,"8":1}}],["링크를",{"2":{"5":1}}],["원하는",{"2":{"5":1}}],["개선한다는",{"2":{"24":1}}],["개발",{"0":{"6":1,"15":1,"28":1},"2":{"15":1,"24":1}}],["개별",{"2":{"5":1}}],["개요",{"0":{"0":1}}],["때",{"2":{"7":1}}],["때문입니다",{"2":{"5":1}}],["때는",{"2":{"3":1}}],["가지",{"2":{"5":1}}],["몇",{"2":{"5":1}}],["경우에만",{"2":{"17":1,"21":1}}],["경우에",{"2":{"13":1}}],["경우",{"2":{"5":1,"7":1,"17":1}}],["동적",{"2":{"32":1}}],["동작",{"2":{"8":1}}],["동시에",{"2":{"5":1}}],["동일한",{"2":{"5":1}}],["준비가",{"2":{"5":1}}],["약간의",{"2":{"5":1}}],["한",{"2":{"5":2}}],["각",{"2":{"5":1}}],["해야",{"0":{"5":1}}],["어떻게",{"0":{"5":1}}],["하면",{"2":{"6":1}}],["하지만",{"2":{"5":2}}],["하나요",{"0":{"5":1}}],["하나의",{"2":{"3":1,"5":2}}],["하려면",{"0":{"5":1}}],["멀티플랫폼",{"0":{"5":1},"2":{"5":1}}],["menus",{"2":{"32":1}}],["mts",{"2":{"32":2}}],["modify",{"2":{"20":2}}],["modules",{"2":{"4":1,"6":19,"32":1}}],["microsoft",{"2":{"8":1}}],["microsoft의",{"2":{"8":1}}],["mk",{"2":{"6":1}}],["md",{"2":{"6":1,"32":3}}],["msvc",{"2":{"6":1}}],["multi",{"2":{"5":1}}],["multipass에",{"2":{"5":1}}],["multipass",{"2":{"5":2}}],["material",{"2":{"23":1}}],["map",{"2":{"6":4}}],["man",{"2":{"6":1}}],["management",{"2":{"4":1}}],["makefile",{"2":{"6":2}}],["mac",{"2":{"4":1,"20":1}}],["macos를",{"2":{"5":1}}],["macos용",{"2":{"5":1}}],["macos",{"2":{"4":1,"5":2,"20":1}}],["mainscreen",{"2":{"32":1}}],["mainrunner",{"2":{"32":1}}],["mainwindow",{"2":{"3":1}}],["mainapi에서",{"2":{"3":1}}],["mainapi는",{"2":{"3":1}}],["mainapi",{"2":{"3":2}}],["mainavailchannels",{"2":{"3":1}}],["main의",{"2":{"1":1}}],["main은",{"2":{"1":1}}],["main",{"2":{"1":1,"32":2}}],["bluebird",{"2":{"6":2}}],["binding",{"2":{"6":1}}],["bin",{"2":{"6":1}}],["browser",{"2":{"6":4}}],["be",{"2":{"20":1}}],["benchmark",{"2":{"6":1}}],["below",{"2":{"4":1}}],["bower",{"2":{"6":1}}],["builder`",{"2":{"32":1}}],["builders",{"2":{"21":1}}],["builder가",{"2":{"7":1}}],["builder",{"2":{"6":1,"7":1,"20":1,"27":1,"32":1}}],["buildassets",{"2":{"6":1,"32":1}}],["build",{"2":{"4":5,"5":3,"20":17,"21":2}}],["against",{"2":{"20":2}}],["and",{"2":{"20":2}}],["auto",{"2":{"20":2}}],["author",{"2":{"6":1}}],["at",{"2":{"20":1}}],["a",{"2":{"20":6,"21":1}}],["as",{"2":{"20":3}}],["async",{"2":{"6":2}}],["ajv",{"2":{"6":2}}],["ac",{"2":{"6":1}}],["all",{"2":{"4":2,"5":1,"20":1}}],["api",{"2":{"32":1}}],["api를",{"2":{"1":1}}],["app",{"2":{"7":1,"32":1}}],["appx",{"2":{"4":2}}],["layout",{"2":{"32":1}}],["latest",{"2":{"1":1,"3":1}}],["locales",{"2":{"32":1}}],["local",{"2":{"21":3}}],["lock",{"2":{"6":2,"32":1}}],["lodash",{"2":{"6":1}}],["log",{"2":{"6":1}}],["license",{"2":{"32":1}}],["lint",{"2":{"20":2}}],["linux용",{"2":{"5":1}}],["linux",{"2":{"4":2,"5":1,"20":4}}],["lib|package",{"2":{"6":1}}],["lib",{"2":{"6":3}}],["directory",{"2":{"20":1}}],["dir",{"2":{"20":1}}],["dist|package",{"2":{"6":1}}],["dist",{"2":{"6":2,"8":1,"32":1}}],["d",{"2":{"6":1}}],["dsw",{"2":{"6":1}}],["dsp",{"2":{"6":1}}],["does",{"2":{"20":3}}],["document",{"2":{"21":3}}],["doc",{"2":{"6":1}}],["docs",{"2":{"1":1,"3":1,"6":1,"8":1,"17":1,"18":2,"21":1,"32":1}}],["doxy",{"2":{"6":1}}],["development",{"2":{"20":3,"21":1}}],["dev",{"2":{"8":1,"15":1,"18":1,"20":3,"21":1}}],["dependabot",{"2":{"32":1}}],["dependency",{"2":{"4":1}}],["deps",{"2":{"7":1}}],["def",{"2":{"6":1}}],["demo",{"2":{"6":1}}],["description",{"2":{"4":1,"20":1,"21":1}}],["debug",{"2":{"20":4}}],["deb",{"2":{"4":2}}],["dmg",{"2":{"4":2}}],["router",{"2":{"29":1,"32":1}}],["rc",{"2":{"6":1}}],["rcs",{"2":{"6":1}}],["rpm",{"2":{"4":2}}],["run",{"2":{"4":4,"5":2,"8":1,"15":1,"18":1,"19":1,"20":4}}],["results",{"2":{"32":1}}],["results에",{"2":{"8":1}}],["resources",{"2":{"32":1}}],["retron",{"2":{"23":2}}],["react",{"2":{"23":1}}],["react로",{"0":{"23":1}}],["readme",{"2":{"6":3,"32":2}}],["requires",{"2":{"20":1}}],["release",{"2":{"4":1}}],["remote",{"2":{"3":1}}],["rendereravailchannels",{"2":{"3":1}}],["renderer의",{"2":{"1":1}}],["renderer",{"2":{"1":1,"2":1,"32":1}}],["$",{"2":{"4":4,"14":3,"18":3,"19":1}}],["간단하고",{"2":{"8":1}}],["간단하게",{"2":{"4":1}}],["간단한",{"2":{"5":1,"8":1}}],["간의",{"2":{"3":1}}],["아이콘",{"2":{"32":1}}],["아래는",{"2":{"6":1}}],["아래",{"2":{"4":1,"6":1,"13":1,"18":2,"24":1}}],["아닌",{"2":{"3":1}}],["구조",{"0":{"25":1,"32":1}}],["구현되어",{"2":{"8":1}}],["구현할",{"2":{"1":1}}],["구축하려는",{"2":{"5":1}}],["구성된",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"23":1}}],["구성이",{"2":{"5":1,"8":1}}],["구성할",{"2":{"5":1}}],["구성",{"0":{"4":1,"26":1},"1":{"5":1,"6":1,"7":1,"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"32":8}}],["빌드에",{"2":{"5":1,"32":2}}],["빌드에는",{"2":{"5":1}}],["빌드해야",{"2":{"5":2}}],["빌드를",{"0":{"5":1},"2":{"5":2}}],["빌드된",{"2":{"4":1}}],["빌드할",{"2":{"4":1,"5":1}}],["빌드",{"0":{"4":1,"7":1,"16":1},"1":{"5":1,"6":1,"7":1},"2":{"5":1,"6":1,"8":1,"24":1,"32":1}}],["editorconfig",{"2":{"32":1}}],["errorscreen",{"2":{"32":1}}],["eslintrc",{"2":{"32":1}}],["eslint에서",{"2":{"32":1}}],["eslintignore",{"2":{"32":1}}],["eslint",{"2":{"20":2,"28":1,"32":1}}],["entry",{"2":{"32":1}}],["entire",{"2":{"20":1}}],["environment",{"2":{"20":3}}],["exp",{"2":{"6":1}}],["exposeinmainworld를",{"2":{"3":1}}],["examples",{"2":{"6":1}}],["example",{"2":{"6":2}}],["exe",{"2":{"4":2}}],["electron으로",{"2":{"23":1}}],["electron과의",{"2":{"3":1}}],["electronjs",{"2":{"1":1,"3":1}}],["electron이",{"2":{"1":1}}],["electron",{"0":{"0":1,"23":1},"2":{"2":2,"3":2,"4":1,"5":1,"7":2,"8":1,"20":4,"27":2,"32":4}}],["있으며",{"2":{"8":2}}],["있으므로",{"2":{"6":1}}],["있기",{"2":{"5":1}}],["있는지",{"2":{"15":1}}],["있는",{"2":{"3":1,"6":1,"8":1}}],["있습니다",{"2":{"1":2,"3":2,"4":2,"5":5,"6":2,"8":4,"11":1,"12":2,"15":1,"17":1,"18":1}}],["데이터를",{"2":{"3":1}}],["ide용",{"2":{"32":1}}],["ide에서",{"2":{"32":1}}],["images",{"2":{"32":1}}],["issue",{"2":{"32":1}}],["i18n",{"2":{"29":1,"32":1}}],["it",{"2":{"20":2}}],["io",{"2":{"14":1,"18":1}}],["i",{"2":{"14":2,"18":2}}],["icons",{"2":{"32":1}}],["ico",{"2":{"6":1}}],["inspection",{"2":{"20":4}}],["installation",{"0":{"18":1}}],["install",{"2":{"6":1,"7":1,"14":1,"18":1}}],["installing",{"2":{"4":1}}],["init",{"0":{"11":1},"2":{"11":1,"17":1}}],["internal",{"2":{"6":1}}],["in",{"2":{"6":1}}],["index",{"2":{"3":1,"32":3}}],["invoke",{"2":{"3":1}}],["ipcs",{"2":{"32":1}}],["ipcrenderer",{"2":{"3":1}}],["ipc",{"2":{"1":2,"3":2,"32":1}}],["처리합니다",{"2":{"7":1}}],["처리",{"2":{"3":1}}],["처리하는",{"2":{"1":1}}],["호스팅에",{"2":{"32":1}}],["호스팅되는",{"2":{"18":1}}],["호출만",{"2":{"3":1}}],["호환성",{"2":{"3":1}}],["보세요",{"2":{"23":1}}],["보내고",{"2":{"3":1}}],["보낸",{"2":{"3":2}}],["보냅니다",{"2":{"3":1}}],["보안을",{"2":{"3":1}}],["보안",{"2":{"2":1,"3":1}}],["보안상의",{"2":{"1":1}}],["변경하고",{"2":{"3":1}}],["변경할",{"2":{"3":1}}],["변수에",{"2":{"3":1}}],["액세스합니다",{"2":{"3":1}}],["객체에",{"2":{"3":1}}],["대해",{"2":{"5":2,"8":1}}],["대해서만",{"2":{"5":1}}],["대신",{"2":{"3":1}}],["대한",{"2":{"1":2,"2":1,"5":1,"8":2}}],["store",{"2":{"32":1}}],["studio",{"2":{"32":1}}],["start",{"2":{"20":3,"21":2}}],["system",{"2":{"20":2}}],["support",{"2":{"6":2}}],["screens",{"2":{"32":1}}],["script",{"2":{"19":1,"20":2,"21":1}}],["scripts",{"2":{"6":1,"7":1}}],["schema",{"2":{"6":1}}],["sccs",{"2":{"6":1}}],["source",{"2":{"6":3}}],["sh",{"2":{"6":1}}],["shell$",{"2":{"5":1,"8":1,"11":1,"13":1,"15":1,"18":2}}],["shell",{"2":{"4":1,"14":1,"18":1}}],["sln",{"2":{"6":1}}],["specs",{"2":{"32":1}}],["specification",{"2":{"20":2}}],["specified",{"2":{"20":1}}],["spec",{"2":{"6":2}}],["sample",{"2":{"6":1}}],["secondscreen",{"2":{"32":1}}],["serve",{"2":{"21":1}}],["server",{"2":{"21":3}}],["separately",{"2":{"20":1}}],["see",{"2":{"4":1}}],["send",{"2":{"3":4}}],["snap",{"2":{"4":2}}],["src",{"2":{"1":2,"3":2,"32":1}}],["workflows",{"2":{"32":1}}],["with",{"2":{"20":2}}],["win",{"2":{"4":1,"20":1}}],["windows",{"2":{"4":1,"5":1,"20":1}}],["window",{"2":{"3":2}}],["webpack",{"0":{"24":1},"2":{"4":1,"24":2}}],["webcontents",{"2":{"3":1}}],["www",{"2":{"1":1,"3":1}}],["전체",{"2":{"17":1}}],["전송할",{"2":{"3":1}}],["전송합니다",{"2":{"3":2}}],["전에",{"2":{"1":1,"6":1,"8":1}}],["추가하세요",{"2":{"7":1}}],["추가하여",{"2":{"3":1,"6":1}}],["추가로",{"2":{"6":1}}],["추가합니다",{"2":{"3":1}}],["허용하도록",{"2":{"3":1}}],["채널",{"2":{"3":1}}],["채널을",{"2":{"3":1}}],["생성한",{"2":{"17":1}}],["생성되지만",{"2":{"12":1}}],["생성하지",{"2":{"8":1}}],["생성하려면",{"2":{"3":1}}],["생성합니다",{"2":{"1":1}}],["새",{"2":{"3":1}}],["및",{"2":{"3":1,"8":1,"24":1,"32":2}}],["참고하세요",{"2":{"3":1}}],["참조하세요",{"2":{"1":1,"2":1,"4":1,"5":1,"8":1}}],["에디터",{"2":{"32":1}}],["에",{"2":{"3":1}}],["영역입니다",{"2":{"3":1}}],["영역에서",{"2":{"1":1}}],["설치합니다",{"2":{"18":1}}],["설치",{"0":{"16":1}}],["설치하기",{"0":{"14":1}}],["설치할",{"2":{"7":1}}],["설치가",{"2":{"4":1,"8":1}}],["설정은",{"2":{"8":1}}],["설정",{"0":{"7":1},"2":{"8":1,"32":4}}],["설정만으로",{"2":{"5":1}}],["설정한",{"2":{"3":1}}],["설정해야",{"2":{"2":1}}],["설계된",{"2":{"3":1}}],["public",{"2":{"32":2}}],["pinia",{"2":{"29":1,"32":1}}],["pnpm",{"2":{"14":3,"18":3}}],["png",{"2":{"6":1}}],["process",{"2":{"32":1}}],["project",{"2":{"13":1}}],["prettierrc",{"2":{"32":1}}],["prettierignore",{"2":{"32":1}}],["prettier",{"2":{"20":2,"28":1,"32":2}}],["preconfigured",{"2":{"20":3}}],["pre",{"2":{"6":4,"20":1}}],["preload",{"2":{"3":3,"32":1}}],["point",{"2":{"32":1}}],["postinstall",{"2":{"7":1}}],["porting",{"2":{"6":1}}],["pdb",{"2":{"6":1}}],["pc",{"2":{"6":1}}],["page",{"2":{"21":1}}],["packages",{"2":{"20":3}}],["package",{"2":{"6":2,"7":1,"20":4,"32":2}}],["path",{"2":{"1":1}}],["playwright에",{"2":{"8":1}}],["playwright는",{"2":{"8":1}}],["playwright",{"2":{"8":5,"31":1,"32":4}}],["platform",{"2":{"4":1,"5":1,"20":1}}],["plugins",{"2":{"32":1}}],["plugin",{"2":{"2":1}}],["jooy2",{"2":{"13":1,"23":1,"24":1}}],["javascriptrendererplugin",{"2":{"2":1}}],["js|abi",{"2":{"6":1}}],["js|node",{"2":{"6":1}}],["jst",{"2":{"6":1}}],["jsdoc",{"2":{"6":1}}],["json에",{"2":{"7":1}}],["json|lib",{"2":{"6":1}}],["json",{"2":{"6":11,"7":1,"32":5}}],["js를",{"0":{"2":1}}],["js의",{"2":{"1":1,"3":1}}],["js에서",{"2":{"1":1}}],["js",{"2":{"1":2,"2":1,"6":6,"32":1}}],["합니다",{"2":{"2":1,"3":1,"5":2,"18":1,"21":1}}],["template",{"2":{"32":1}}],["testutil",{"2":{"32":1}}],["testing",{"2":{"20":2}}],["tests",{"2":{"6":1,"8":2,"20":2,"32":1}}],["test",{"2":{"6":2,"8":2,"20":4}}],["typescript",{"2":{"28":1,"32":2}}],["typings",{"2":{"6":1}}],["the",{"2":{"20":7,"21":2}}],["this",{"2":{"20":1}}],["to",{"2":{"20":3}}],["todo",{"2":{"6":1}}],["time",{"2":{"20":1}}],["tlog",{"2":{"6":1}}],["txt",{"2":{"6":1}}],["target",{"2":{"6":1}}],["true",{"2":{"2":1}}],["true로",{"2":{"2":1}}],["ts이며",{"2":{"8":1}}],["tslint",{"2":{"6":1}}],["tsconfig",{"2":{"6":1,"32":2}}],["ts의",{"2":{"6":1}}],["ts에서",{"2":{"3":1}}],["ts",{"2":{"2":1,"6":2,"32":11}}],["tutorial",{"2":{"1":1,"3":2}}],["ci",{"2":{"20":1}}],["current",{"2":{"20":1}}],["cache",{"2":{"20":1}}],["clean",{"2":{"20":1}}],["clone",{"2":{"13":1}}],["cd",{"2":{"18":1}}],["cross",{"2":{"20":1}}],["crosswalk",{"2":{"6":1}}],["crypto와",{"2":{"1":1}}],["cc",{"2":{"6":1}}],["c",{"2":{"6":1}}],["cpp",{"2":{"6":1}}],["cmd",{"2":{"6":1}}],["cmake",{"2":{"6":1}}],["cmakelists",{"2":{"6":1}}],["cvs",{"2":{"6":1}}],["changelog",{"2":{"6":3}}],["channelname",{"2":{"3":2}}],["cname",{"2":{"6":1}}],["code",{"2":{"20":8,"32":2}}],["coffee",{"2":{"6":1}}],["copying",{"2":{"6":1}}],["conduct",{"2":{"32":1}}],["constants",{"2":{"32":1}}],["conf",{"2":{"6":2}}],["configuration",{"2":{"8":1,"20":1}}],["config",{"2":{"2":1,"6":1,"8":1,"32":4}}],["contributing",{"2":{"6":1}}],["contributors",{"2":{"6":1}}],["components",{"2":{"32":1}}],["composer",{"2":{"6":1}}],["commonly",{"2":{"20":1}}],["commands",{"2":{"20":1}}],["com",{"2":{"2":1,"8":1,"13":1,"14":1,"18":1,"23":1,"24":1}}],["vscode",{"2":{"32":1}}],["visual",{"2":{"32":1}}],["via",{"2":{"14":3,"18":3}}],["vitepress",{"2":{"17":1,"32":3}}],["vite는",{"2":{"15":1}}],["vite",{"2":{"2":3,"15":1,"20":3,"23":1,"24":1,"27":1,"32":2}}],["v",{"2":{"6":1}}],["vcxproj",{"2":{"6":2}}],["vcproj",{"2":{"6":1}}],["vagrant",{"2":{"6":1}}],["versioning",{"2":{"6":1}}],["version",{"2":{"4":1}}],["vuetify",{"2":{"30":1}}],["vue",{"0":{"29":1},"2":{"29":3,"32":13}}],["vue와",{"2":{"1":1}}],["vutron은",{"2":{"24":1}}],["vutron을",{"0":{"24":1}}],["vutron으로",{"2":{"17":1}}],["vutron에는",{"2":{"8":1}}],["vutron의",{"2":{"3":1,"17":1}}],["vutron",{"2":{"1":1,"3":1,"11":1,"13":2,"24":1,"32":1}}],["건너뛰고",{"2":{"2":1}}],["문서에",{"2":{"21":1}}],["문서용",{"0":{"21":1}}],["문서가",{"2":{"18":1}}],["문서는",{"2":{"17":1}}],["문서",{"0":{"17":1},"1":{"18":1},"2":{"32":3}}],["문서와",{"2":{"11":1}}],["문서를",{"2":{"1":1,"2":1,"3":1,"4":1,"5":1,"8":1}}],["문제가",{"2":{"6":1}}],["문제를",{"2":{"2":1}}],["of",{"2":{"32":1}}],["off",{"2":{"3":1}}],["operating",{"2":{"20":2}}],["obj",{"2":{"6":3}}],["only",{"2":{"20":1,"21":1}}],["once",{"2":{"3":1}}],["on",{"2":{"3":1}}],["org",{"2":{"1":1,"3":1}}],["os에서",{"2":{"5":2}}],["os에",{"2":{"5":2}}],["os",{"2":{"1":1}}],["내용은",{"2":{"1":1,"2":1,"3":1,"4":1,"8":1}}],["통신",{"2":{"3":2}}],["통신을",{"2":{"1":1,"3":2}}],["통해",{"2":{"1":2,"5":2,"17":1,"18":1}}],["좋습니다",{"2":{"1":1,"3":2}}],["것이",{"2":{"1":1,"3":2}}],["메뉴",{"2":{"32":1}}],["메시징을",{"2":{"1":1}}],["메인에",{"2":{"3":1}}],["메인에서",{"2":{"3":3}}],["메인으로",{"2":{"3":3}}],["메인",{"2":{"1":3,"3":2,"8":1,"32":8}}],["메인과",{"0":{"1":1},"1":{"2":1}}],["노드",{"0":{"7":1},"2":{"1":1,"3":1,"7":1}}],["안전한",{"2":{"1":1}}],["위치",{"2":{"32":1}}],["위치에서",{"2":{"4":1,"21":1}}],["위의",{"2":{"5":1,"11":1}}],["위해서는",{"2":{"5":1}}],["위해",{"2":{"1":2,"3":2}}],["위한",{"2":{"1":1}}],["격리하기",{"2":{"1":1}}],["이",{"2":{"8":1,"12":2,"13":2,"17":1}}],["이렇게",{"2":{"6":1}}],["이를",{"2":{"3":1,"5":1}}],["이름이며",{"2":{"3":1}}],["이름을",{"2":{"3":1}}],["이벤트",{"2":{"3":1}}],["이벤트를",{"2":{"3":7}}],["이벤트나",{"2":{"3":1}}],["이전",{"2":{"3":1}}],["이에",{"2":{"1":1,"2":1,"8":1}}],["이유로",{"2":{"1":1}}],["이는",{"2":{"1":2}}],["실행해야",{"2":{"21":1}}],["실행한",{"2":{"15":1}}],["실행합니다",{"2":{"14":1}}],["실행하기",{"2":{"8":1}}],["실행하는",{"0":{"2":1}}],["실행하고",{"2":{"1":1}}],["실행",{"0":{"15":1},"2":{"1":1,"8":1,"32":1}}],["실행을",{"2":{"1":2}}],["실행됩니다",{"2":{"1":1,"15":1}}],["실행할",{"2":{"1":1,"8":1,"18":1}}],["사양",{"2":{"8":2,"32":1}}],["사용되는",{"2":{"32":6}}],["사용할",{"2":{"12":1}}],["사용합니다",{"2":{"8":1,"15":1}}],["사용",{"0":{"12":1,"24":1},"2":{"6":1,"12":1,"32":1}}],["사용됩니다",{"2":{"3":1,"21":1}}],["사용하고",{"2":{"15":1}}],["사용하면",{"2":{"6":1,"12":1}}],["사용하여",{"2":{"4":1,"5":1,"13":1,"18":1,"24":1}}],["사용하지",{"2":{"3":1}}],["사용하려면",{"2":{"2":1}}],["사용하는",{"0":{"7":1},"2":{"1":1,"3":1,"7":1,"24":1,"32":1}}],["사전",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":1}}],["네이티브",{"0":{"7":1},"2":{"1":1,"7":1}}],["not",{"2":{"20":3}}],["nodeintegration",{"2":{"2":1}}],["nodeintegration을",{"2":{"2":1}}],["node",{"0":{"2":1},"2":{"1":4,"2":1,"4":1,"6":23,"32":3}}],["name",{"2":{"19":1,"20":1,"21":1}}],["name>",{"2":{"13":1}}],["native",{"2":{"4":1}}],["need",{"2":{"20":1}}],["news",{"2":{"6":1}}],["net",{"2":{"1":1}}],["npm",{"0":{"11":1,"19":1},"1":{"20":1,"21":1},"2":{"4":4,"5":1,"8":1,"11":2,"14":2,"15":1,"17":1,"18":3,"19":1}}],["또는",{"2":{"1":2,"5":1}}],["들어",{"2":{"1":1,"5":1}}],["수행해야",{"2":{"18":1}}],["수행할",{"2":{"5":2}}],["수도",{"2":{"5":1}}],["수정해야",{"2":{"3":1}}],["수정하려면",{"2":{"3":1}}],["수신할",{"2":{"3":3}}],["수신하는",{"2":{"1":1}}],["수",{"2":{"1":2,"3":2,"4":2,"5":5,"6":4,"8":2,"11":1,"12":2,"15":1,"17":1,"18":1}}],["렌더링",{"2":{"1":1,"32":1}}],["렌더러로",{"2":{"3":1}}],["렌더러에서",{"0":{"2":1},"2":{"2":1,"3":2}}],["렌더러가",{"2":{"1":1,"3":1}}],["렌더러는",{"2":{"1":2}}],["렌더러",{"0":{"1":1},"1":{"2":1},"2":{"1":3,"3":1,"32":4}}],["프레임워크",{"0":{"27":1,"29":1,"30":1}}],["프레임워크를",{"2":{"8":1}}],["프레임워크는",{"2":{"8":1}}],["프로젝트도",{"2":{"23":1}}],["프로젝트가",{"2":{"17":1}}],["프로젝트를",{"2":{"12":2,"14":1,"17":1}}],["프로젝트",{"0":{"10":1,"22":1,"25":1,"32":1},"1":{"11":1,"12":1,"13":1,"23":1,"24":1},"2":{"8":1,"21":1,"24":1,"32":4}}],["프로젝트의",{"0":{"7":1},"2":{"7":1}}],["프로젝트에",{"2":{"6":1,"11":1}}],["프로세스에",{"2":{"1":1,"32":1}}],["프로세스에서",{"2":{"1":2,"3":1}}],["프로세스를",{"2":{"1":1}}],["프로세스로",{"2":{"1":1}}],["프로세스와",{"2":{"1":1,"3":1}}],["프로세스",{"0":{"1":1},"1":{"2":1},"2":{"1":1,"3":1,"32":11}}],["프리로드",{"0":{"3":1},"2":{"3":2,"32":1}}],["프론트엔드",{"0":{"29":1},"2":{"1":1}}],["같은",{"2":{"1":2}}],["주로",{"2":{"1":2}}],["코드",{"2":{"32":2}}],["코드입니다",{"2":{"1":2}}],["코드로",{"2":{"1":2}}],["코드가",{"2":{"1":1}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexroot.VjN8Yo4J.js b/assets/chunks/@localSearchIndexroot.VjN8Yo4J.js new file mode 100644 index 0000000..42df9a4 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.VjN8Yo4J.js @@ -0,0 +1 @@ +const e='{"documentCount":33,"nextId":33,"documentIds":{"0":"/electron-how-to/#electron-how-to","1":"/electron-how-to/main-and-renderer-process#main-vs-renderer-process","2":"/electron-how-to/main-and-renderer-process#how-to-run-node-js-on-a-renderer","3":"/electron-how-to/preload-script#preload-script","4":"/installation-and-build/automated-testing#automated-testing","5":"/installation-and-build/build-configuration#build-configurations","6":"/installation-and-build/build-configuration#what-do-i-need-to-do-for-a-multi-platform-build","7":"/installation-and-build/build-configuration#reduce-bundle-size-by-excluding-development-files","8":"/installation-and-build/build-configuration#build-settings-for-projects-that-use-native-node-modules","9":"/installation-and-build/getting-started#getting-started","10":"/installation-and-build/getting-started#clone-project","11":"/installation-and-build/getting-started#method-1-npm-init-recommend","12":"/installation-and-build/getting-started#method-2-use-this-template","13":"/installation-and-build/getting-started#method-3-clone-this-repository","14":"/installation-and-build/getting-started#installation","15":"/installation-and-build/getting-started#run-in-development-environment","16":"/installation-and-build/#installation-and-build","17":"/installation-and-build/install-local-documentation#manage-local-documentation","18":"/installation-and-build/install-local-documentation#installation","19":"/installation-and-build/npm-scripts#npm-scripts","20":"/installation-and-build/npm-scripts#general","21":"/installation-and-build/npm-scripts#for-documentation","22":"/project-structures/#project-structures","23":"/other-projects#other-projects","24":"/other-projects#looking-for-electron-templates-made-with-react","25":"/other-projects#deprecated-looking-for-vutron-with-webpack-5-compiler","26":"/project-structures/pre-configured-components#pre-configured-components","27":"/project-structures/pre-configured-components#web-app-frameworks","28":"/project-structures/pre-configured-components#development-help-tools","29":"/project-structures/pre-configured-components#front-end-frameworks-vue","30":"/project-structures/pre-configured-components#design-frameworks","31":"/project-structures/pre-configured-components#testing","32":"/project-structures/project-structure#project-structure"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,1],"1":[4,1,98],"2":[9,4,39],"3":[2,1,131],"4":[2,1,103],"5":[2,1,62],"6":[11,2,84],"7":[7,2,174],"8":[9,2,34],"9":[2,1,1],"10":[2,2,1],"11":[6,4,30],"12":[5,4,30],"13":[5,4,29],"14":[1,2,22],"15":[4,2,39],"16":[3,1,1],"17":[3,1,34],"18":[1,3,42],"19":[2,1,6],"20":[1,2,80],"21":[2,2,33],"22":[2,1,1],"23":[2,1,1],"24":[8,2,21],"25":[9,2,42],"26":[3,1,1],"27":[3,3,4],"28":[3,3,4],"29":[5,3,5],"30":[2,3,2],"31":[1,3,2],"32":[2,1,192]},"averageFieldLength":[3.8181818181818183,2.0303030303030303,40.878787878787875],"storedFields":{"0":{"title":"Electron How-to","titles":[]},"1":{"title":"Main vs Renderer Process","titles":[]},"2":{"title":"How to run Node.js on a renderer?","titles":["Main vs Renderer Process"]},"3":{"title":"Preload Script","titles":[]},"4":{"title":"Automated Testing","titles":[]},"5":{"title":"Build Configurations","titles":[]},"6":{"title":"What do I need to do for a multi-platform build?","titles":["Build Configurations"]},"7":{"title":"Reduce bundle size by excluding development files","titles":["Build Configurations"]},"8":{"title":"Build settings for projects that use Native Node modules","titles":["Build Configurations"]},"9":{"title":"Getting Started","titles":[]},"10":{"title":"Clone project","titles":["Getting Started"]},"11":{"title":"Method 1: npm init (Recommend)","titles":["Getting Started","Clone project"]},"12":{"title":"Method 2: Use this template","titles":["Getting Started","Clone project"]},"13":{"title":"Method 3: Clone this repository","titles":["Getting Started","Clone project"]},"14":{"title":"Installation","titles":["Getting Started"]},"15":{"title":"Run in development environment","titles":["Getting Started"]},"16":{"title":"Installation and Build","titles":[]},"17":{"title":"Manage Local Documentation","titles":[]},"18":{"title":"Installation","titles":["Manage Local Documentation"]},"19":{"title":"Npm Scripts","titles":[]},"20":{"title":"General","titles":["Npm Scripts"]},"21":{"title":"For Documentation","titles":["Npm Scripts"]},"22":{"title":"Project Structures","titles":[]},"23":{"title":"Other Projects","titles":[]},"24":{"title":"Looking for Electron templates made with React?","titles":["Other Projects"]},"25":{"title":"(Deprecated) Looking for Vutron with Webpack 5 compiler?","titles":["Other Projects"]},"26":{"title":"Pre-configured Components","titles":[]},"27":{"title":"Web app frameworks","titles":["Pre-configured Components"]},"28":{"title":"Development help tools","titles":["Pre-configured Components"]},"29":{"title":"Front-end frameworks (Vue)","titles":["Pre-configured Components"]},"30":{"title":"Design frameworks","titles":["Pre-configured Components"]},"31":{"title":"Testing","titles":["Pre-configured Components"]},"32":{"title":"Project Structure","titles":[]}},"dirtCount":0,"index":[["`electron",{"2":{"32":1}}],["└─",{"2":{"32":26}}],["│",{"2":{"32":74}}],["├─",{"2":{"32":39}}],["5",{"0":{"25":1},"2":{"25":1}}],["5173",{"2":{"15":1}}],["+",{"2":{"20":1,"24":3}}],["3",{"0":{"13":1}}],["2",{"0":{"12":1}}],["1",{"0":{"11":1}}],["x3c",{"2":{"13":1}}],["x64",{"2":{"7":1}}],["xcconfig",{"2":{"7":1}}],["xcodeproj",{"2":{"7":1}}],["xcode",{"2":{"7":1}}],["xml",{"2":{"7":1}}],["yaml",{"2":{"7":1}}],["yarnpkg",{"2":{"14":1,"18":1}}],["yarn",{"2":{"7":1,"14":2,"18":2}}],["yml",{"2":{"7":1,"32":2}}],["your",{"2":{"2":2,"3":1,"4":1,"8":1,"11":1,"12":1,"15":1,"20":2}}],["you",{"2":{"2":2,"3":4,"4":2,"5":1,"6":6,"7":2,"11":1,"12":2,"15":1,"17":1,"18":1}}],["karma",{"2":{"7":1}}],["keep",{"2":{"1":1}}],["$",{"2":{"5":4,"14":3,"18":3,"19":1}}],["upload",{"2":{"32":1}}],["ui",{"2":{"24":1}}],["utilities",{"2":{"32":3}}],["utilize",{"2":{"3":1}}],["utils",{"2":{"32":2}}],["util",{"2":{"7":1}}],["util|pre",{"2":{"7":1}}],["unnecessary",{"2":{"7":1,"11":1}}],["using",{"2":{"3":1,"7":2,"13":1,"18":1,"25":2}}],["uses",{"2":{"4":1,"15":1}}],["use",{"0":{"8":1,"12":1},"2":{"2":1,"8":1,"12":2,"20":2}}],["used",{"2":{"1":1,"3":1,"15":1,"21":2,"32":8}}],["global",{"2":{"32":3}}],["goals",{"2":{"25":1}}],["gitignore",{"2":{"32":1}}],["git",{"2":{"13":1,"32":1}}],["github",{"2":{"2":1,"4":1,"11":1,"12":1,"13":1,"21":1,"24":1,"25":1,"32":7}}],["getting",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1,"15":1}}],["generate",{"2":{"4":1}}],["general",{"0":{"20":1},"2":{"1":1}}],["gyp",{"2":{"7":5}}],["gypi",{"2":{"7":1}}],["gruntfile",{"2":{"7":1}}],["gulpfile",{"2":{"7":1}}],["jooy2",{"2":{"13":1,"24":1,"25":1}}],["just",{"2":{"6":2,"11":1}}],["javascriptrendererplugin",{"2":{"2":1}}],["js|abi",{"2":{"7":1}}],["js|node",{"2":{"7":1}}],["jst",{"2":{"7":1}}],["jsdoc",{"2":{"7":1}}],["json|lib",{"2":{"7":1}}],["json",{"2":{"7":11,"8":2,"32":5}}],["js",{"0":{"2":1},"2":{"1":4,"2":1,"3":1,"7":6,"32":1}}],["workflows",{"2":{"32":2}}],["works",{"2":{"17":1}}],["which",{"2":{"24":1}}],["whitelist",{"2":{"3":1}}],["where",{"2":{"18":1,"32":1}}],["when",{"2":{"3":1,"8":1,"17":1,"32":1}}],["what",{"0":{"6":1}}],["win",{"2":{"5":1,"20":1}}],["windows",{"2":{"5":1,"6":1,"20":1}}],["window",{"2":{"3":2,"32":1}}],["will",{"2":{"4":1,"7":1,"8":1,"11":1,"12":1,"25":1}}],["with",{"0":{"24":1,"25":1},"2":{"3":1,"4":1,"5":1,"6":2,"11":1,"17":1,"20":2}}],["webpack",{"0":{"25":1},"2":{"5":1,"25":2}}],["web",{"0":{"27":1},"2":{"4":1}}],["webcontents",{"2":{"3":1}}],["we",{"2":{"3":1,"25":1}}],["want",{"2":{"2":1,"3":1,"6":2}}],["www",{"2":{"1":1,"3":1}}],["dynamic",{"2":{"32":1}}],["d",{"2":{"7":1}}],["dsw",{"2":{"7":1}}],["dsp",{"2":{"7":1}}],["dmg",{"2":{"5":2}}],["disable",{"2":{"32":1}}],["displayed",{"2":{"32":1}}],["dist|package",{"2":{"7":1}}],["dist",{"2":{"4":1,"7":2,"32":1}}],["dir",{"2":{"20":1}}],["direct",{"2":{"13":1}}],["directory",{"2":{"4":2,"20":1,"21":1,"32":2}}],["divided",{"2":{"1":1}}],["deprecated",{"0":{"25":1}}],["deps",{"2":{"8":1}}],["dependabot",{"2":{"32":1}}],["dependencies",{"2":{"8":1}}],["dependency",{"2":{"5":1}}],["depending",{"2":{"7":1}}],["depend",{"2":{"4":1}}],["definition",{"2":{"32":7}}],["default",{"2":{"15":2}}],["def",{"2":{"7":1}}],["demo",{"2":{"7":1}}],["design",{"0":{"30":1}}],["designed",{"2":{"3":1}}],["description",{"2":{"5":1,"20":1,"21":1}}],["debug",{"2":{"20":4}}],["deb",{"2":{"5":2}}],["development",{"0":{"7":1,"15":1,"28":1},"2":{"15":1,"20":3,"21":1,"25":1}}],["dev",{"2":{"4":1,"15":1,"18":1,"20":3,"21":1}}],["data",{"2":{"3":1}}],["doxy",{"2":{"7":1}}],["done",{"2":{"18":1}}],["don",{"2":{"7":1}}],["document",{"2":{"21":3,"32":1}}],["documents",{"2":{"17":1,"18":1,"32":1}}],["documentation",{"0":{"17":1,"21":1},"1":{"18":1},"2":{"4":1,"11":1,"21":1,"32":1}}],["doc",{"2":{"7":1}}],["docs",{"2":{"1":1,"3":1,"4":1,"7":1,"17":1,"18":2,"21":1,"32":1}}],["doesn",{"2":{"15":1}}],["does",{"2":{"4":1,"20":3}}],["do",{"0":{"6":2},"2":{"3":2,"6":1}}],["language",{"2":{"32":1}}],["layout",{"2":{"32":2}}],["launch",{"2":{"4":1}}],["latest",{"2":{"1":1,"3":2}}],["learn",{"2":{"4":1,"6":2}}],["license",{"2":{"32":2}}],["list",{"2":{"32":3}}],["listener",{"2":{"3":3}}],["lib|package",{"2":{"7":1}}],["lib",{"2":{"7":3}}],["lint",{"2":{"20":2}}],["line",{"2":{"15":1}}],["link",{"2":{"6":1}}],["linux",{"2":{"5":2,"6":2,"20":4}}],["like",{"2":{"1":1}}],["looking",{"0":{"24":1,"25":1}}],["lodash",{"2":{"7":1}}],["logo",{"2":{"32":1}}],["log",{"2":{"7":1}}],["locales",{"2":{"32":1}}],["local",{"0":{"17":1},"1":{"18":1},"2":{"17":1,"18":1,"21":3}}],["locally",{"2":{"12":1}}],["location",{"2":{"5":1,"21":1}}],["located",{"2":{"3":1,"4":2}}],["lock",{"2":{"7":2,"32":1}}],["loaded",{"2":{"1":1,"32":1}}],["public",{"2":{"32":2}}],["pinia",{"2":{"29":1,"32":1}}],["pnpm",{"2":{"14":3,"18":3}}],["png",{"2":{"7":1}}],["point",{"2":{"32":2}}],["port",{"2":{"15":2}}],["porting",{"2":{"7":1}}],["postinstall",{"2":{"8":1}}],["pdb",{"2":{"7":1}}],["pc",{"2":{"7":1}}],["perform",{"2":{"6":1}}],["pages",{"2":{"32":1}}],["page",{"2":{"21":1}}],["pattern",{"2":{"7":2}}],["path",{"2":{"1":1}}],["packages",{"2":{"5":1,"6":1,"18":1,"20":3}}],["package",{"2":{"4":1,"5":1,"6":2,"7":2,"8":1,"20":4,"32":5}}],["please",{"2":{"5":1,"7":1}}],["platforms",{"2":{"6":1}}],["platform",{"0":{"6":1},"2":{"4":1,"5":2,"6":3,"20":1}}],["playwright",{"2":{"4":7,"31":1,"32":4}}],["plugins",{"2":{"32":1}}],["plugin",{"2":{"2":1,"32":1}}],["prettierrc",{"2":{"32":1}}],["prettierignore",{"2":{"32":1}}],["prettier",{"2":{"20":2,"28":1,"32":2}}],["preconfigured",{"2":{"20":3}}],["pre",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"7":4,"20":1}}],["preparation",{"2":{"6":1}}],["preload",{"0":{"3":1},"2":{"1":1,"3":5,"32":2}}],["problems",{"2":{"7":1}}],["property",{"2":{"7":1}}],["projects",{"0":{"8":1,"23":1},"1":{"24":1,"25":1},"2":{"8":1}}],["project",{"0":{"10":1,"22":1,"32":1},"1":{"11":1,"12":1,"13":1},"2":{"4":1,"7":1,"11":1,"12":2,"13":1,"14":1,"17":2,"21":1,"24":1,"25":1,"32":4}}],["processing",{"2":{"32":1}}],["processes",{"2":{"3":1}}],["process",{"0":{"1":1},"1":{"2":1},"2":{"1":7,"3":1,"32":11}}],["npm",{"0":{"11":1,"19":1},"1":{"20":1,"21":1},"2":{"4":1,"5":4,"6":1,"11":2,"14":2,"15":1,"17":1,"18":3,"19":1}}],["name>",{"2":{"13":1}}],["name",{"2":{"3":2,"19":1,"20":1,"21":1}}],["native",{"0":{"8":1},"2":{"1":1,"5":1,"8":1}}],["no",{"2":{"4":1}}],["not",{"2":{"3":2,"4":1,"11":1,"17":1,"20":3,"32":1}}],["nodeintegration",{"2":{"2":2}}],["node",{"0":{"2":1,"8":1},"2":{"1":5,"2":1,"3":1,"5":1,"7":23,"8":1,"32":3}}],["news",{"2":{"7":1}}],["new",{"2":{"3":1}}],["need",{"0":{"6":1},"2":{"2":1,"3":1,"7":1,"12":1,"15":1,"20":1}}],["net",{"2":{"1":1}}],["occur",{"2":{"32":1}}],["our",{"2":{"25":1}}],["output",{"2":{"32":1}}],["out",{"2":{"24":1}}],["other",{"0":{"23":1},"1":{"24":1,"25":1}}],["optionally",{"2":{"32":1}}],["optimized",{"2":{"4":1}}],["operating",{"2":{"20":2}}],["own",{"2":{"12":1}}],["obj",{"2":{"7":3}}],["object",{"2":{"3":1}}],["old",{"2":{"3":1,"25":1}}],["one",{"2":{"3":1,"6":2}}],["only",{"2":{"3":1,"4":1,"17":1,"20":1,"21":2,"32":3}}],["once",{"2":{"3":1,"4":1,"5":1,"6":2}}],["on",{"0":{"2":1},"2":{"1":1,"2":1,"3":1,"4":2,"6":4,"7":1,"12":1,"32":2}}],["os",{"2":{"1":1,"6":4}}],["org",{"2":{"1":1,"3":1}}],["or",{"2":{"1":3,"3":1}}],["off",{"2":{"3":1}}],["of",{"2":{"1":4,"3":2,"4":1,"7":1,"8":1,"24":1,"25":1,"32":4}}],["mts",{"2":{"32":2}}],["menu",{"2":{"32":1}}],["menus",{"2":{"32":1}}],["method",{"0":{"11":1,"12":1,"13":1},"2":{"11":1,"12":1,"13":1}}],["messaging",{"2":{"1":1}}],["mk",{"2":{"7":1}}],["md",{"2":{"7":1,"32":3}}],["msvc",{"2":{"7":1}}],["might",{"2":{"6":1}}],["microsoft",{"2":{"4":2}}],["must",{"2":{"6":2,"21":1}}],["multiplatform",{"2":{"6":1}}],["multiple",{"2":{"6":1}}],["multipass",{"2":{"6":3}}],["multi",{"0":{"6":1},"2":{"6":2}}],["material",{"2":{"24":1}}],["made",{"0":{"24":1}}],["map",{"2":{"7":4}}],["manage",{"0":{"17":1},"1":{"18":1}}],["management",{"2":{"5":1,"32":1}}],["man",{"2":{"7":1}}],["makefile",{"2":{"7":2}}],["may",{"2":{"6":1,"7":1,"15":1}}],["machine",{"2":{"6":1}}],["mac",{"2":{"5":1,"20":1}}],["macos",{"2":{"5":1,"6":4,"20":1}}],["mainscreen",{"2":{"32":1}}],["mainrunner",{"2":{"32":1}}],["mainwindow",{"2":{"3":1}}],["mainapi",{"2":{"3":4}}],["mainavailchannels",{"2":{"3":1}}],["mainly",{"2":{"1":2}}],["main",{"0":{"1":1},"1":{"2":1},"2":{"1":5,"3":9,"4":1,"32":10}}],["modify",{"2":{"3":2,"20":2}}],["module",{"2":{"3":1,"5":1,"8":1}}],["modules",{"0":{"8":1},"2":{"1":2,"5":1,"7":19,"8":1,"32":1}}],["more",{"2":{"1":1,"2":1,"3":1,"4":2,"5":1,"6":2}}],["routing",{"2":{"32":2}}],["router",{"2":{"29":1,"32":1}}],["root",{"2":{"4":1,"32":3}}],["rc",{"2":{"7":1}}],["rcs",{"2":{"7":1}}],["rule",{"2":{"32":2}}],["rules",{"2":{"7":1,"32":1}}],["running",{"2":{"4":1,"15":1}}],["run",{"0":{"2":1,"15":1},"2":{"1":2,"4":2,"5":4,"6":2,"14":1,"15":2,"18":2,"19":1,"20":4,"21":1}}],["rpm",{"2":{"5":2}}],["result",{"2":{"32":1}}],["results",{"2":{"1":1,"4":3,"32":1}}],["resource",{"2":{"32":3}}],["resources",{"2":{"32":3}}],["reducing",{"2":{"25":1}}],["reduce",{"0":{"7":1}}],["retron",{"2":{"24":2}}],["repositories",{"2":{"25":1}}],["repository",{"0":{"13":1},"2":{"11":1,"12":1,"13":1}}],["repo",{"2":{"13":1}}],["relevant",{"2":{"18":1}}],["release",{"2":{"5":1}}],["related",{"2":{"11":1}}],["rebuilding",{"2":{"8":1}}],["react",{"0":{"24":1},"2":{"24":1}}],["readme",{"2":{"7":3,"32":2}}],["reasons",{"2":{"1":1}}],["review",{"2":{"7":1,"15":1}}],["required",{"2":{"6":1}}],["require",{"2":{"6":1,"8":1}}],["requires",{"2":{"4":1,"20":1}}],["refer",{"2":{"5":1}}],["remove",{"2":{"3":1}}],["remote",{"2":{"3":1}}],["receive",{"2":{"3":3}}],["receives",{"2":{"1":1}}],["recommend",{"0":{"11":1},"2":{"3":1}}],["recommended",{"2":{"1":1,"3":1,"6":1,"32":1}}],["rendering",{"2":{"1":1}}],["rendereravailchannels",{"2":{"3":1}}],["renderer",{"0":{"1":1,"2":1},"1":{"2":1},"2":{"1":7,"2":2,"3":5,"32":6}}],["bluebird",{"2":{"7":2}}],["binding",{"2":{"7":1}}],["bin",{"2":{"7":1}}],["browser",{"2":{"7":4}}],["bridge",{"2":{"1":1,"32":1}}],["bower",{"2":{"7":1}}],["but",{"2":{"12":1}}],["bundles",{"2":{"7":1}}],["bundle",{"0":{"7":1},"2":{"7":1,"25":1}}],["builder`",{"2":{"32":1}}],["builders",{"2":{"21":1}}],["builder",{"2":{"7":1,"8":2,"20":1,"27":1,"32":1}}],["buildassets",{"2":{"7":1,"32":1}}],["builds",{"2":{"6":3}}],["build",{"0":{"5":1,"6":1,"8":1,"16":1},"1":{"6":1,"7":1,"8":1},"2":{"4":1,"5":6,"6":7,"7":1,"20":17,"21":2,"25":1,"32":3}}],["built",{"2":{"4":1,"5":1,"6":1}}],["being",{"2":{"15":1}}],["benchmark",{"2":{"7":1}}],["because",{"2":{"6":1}}],["below",{"2":{"5":2,"7":2,"13":1,"18":2,"25":1}}],["been",{"2":{"4":1,"25":1}}],["behavioral",{"2":{"4":1}}],["between",{"2":{"3":1}}],["before",{"2":{"1":1,"4":1,"7":1,"12":1}}],["be",{"2":{"1":2,"3":1,"5":1,"6":3,"17":1,"18":1,"20":1,"21":1,"32":1}}],["by",{"0":{"7":1},"2":{"1":2,"3":2,"7":1,"15":2,"25":1,"32":3}}],["check",{"2":{"24":1}}],["changelog",{"2":{"7":3}}],["change",{"2":{"3":1}}],["changed",{"2":{"3":1}}],["channelname",{"2":{"3":2}}],["channel",{"2":{"3":2}}],["ci",{"2":{"20":1}}],["current",{"2":{"20":1}}],["currently",{"2":{"4":1}}],["cd",{"2":{"18":1}}],["clean",{"2":{"20":1}}],["cloning",{"2":{"14":1}}],["cloned",{"2":{"17":1}}],["clone",{"0":{"10":1,"13":1},"1":{"11":1,"12":1,"13":1},"2":{"11":1,"12":1,"13":2}}],["click",{"2":{"12":1}}],["cc",{"2":{"7":1}}],["c",{"2":{"7":1}}],["cpp",{"2":{"7":1}}],["cmd",{"2":{"7":1}}],["cmake",{"2":{"7":1}}],["cmakelists",{"2":{"7":1}}],["cvs",{"2":{"7":1}}],["cname",{"2":{"7":1}}],["cache",{"2":{"20":1}}],["care",{"2":{"8":1}}],["cause",{"2":{"7":1}}],["capacity",{"2":{"7":1}}],["call",{"2":{"3":1}}],["can",{"2":{"1":1,"3":2,"4":2,"5":2,"6":4,"7":2,"11":1,"12":1,"17":1,"18":1}}],["cannot",{"2":{"1":1}}],["crosswalk",{"2":{"7":1}}],["cross",{"2":{"4":1,"20":1}}],["created",{"2":{"17":1}}],["create",{"2":{"3":1,"6":1,"11":1,"12":1}}],["creates",{"2":{"1":1,"12":1}}],["crypto",{"2":{"1":1}}],["collection",{"2":{"32":1}}],["coffee",{"2":{"7":1}}],["copying",{"2":{"7":1}}],["component",{"2":{"32":2}}],["components",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"32":3}}],["composer",{"2":{"7":1}}],["complete",{"2":{"5":1}}],["compiler",{"0":{"25":1},"2":{"25":2,"32":1}}],["compile",{"2":{"4":1}}],["compatibility",{"2":{"3":1}}],["common",{"2":{"32":2}}],["commonly",{"2":{"20":1}}],["commands",{"2":{"6":1,"15":1,"18":1,"20":1}}],["command",{"2":{"4":1,"5":1,"6":1,"11":1,"13":1,"14":1,"15":1,"18":1}}],["communication",{"2":{"1":1,"3":4,"32":1}}],["com",{"2":{"2":1,"4":1,"13":1,"14":1,"18":1,"24":1,"25":1}}],["conduct",{"2":{"32":1}}],["constants",{"2":{"32":1}}],["consists",{"2":{"24":1}}],["conf",{"2":{"7":2}}],["configured",{"0":{"26":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"4":1,"6":1}}],["configurations",{"0":{"5":1},"1":{"6":1,"7":1,"8":1},"2":{"32":7}}],["configuration",{"2":{"4":3,"6":1,"20":1,"32":5}}],["config",{"2":{"2":1,"4":1,"7":1,"32":4}}],["contributions",{"2":{"13":1,"32":1}}],["contributing",{"2":{"7":1,"21":1}}],["contributors",{"2":{"7":1}}],["contain",{"2":{"1":1}}],["code",{"2":{"1":4,"20":8,"32":5}}],["split",{"2":{"25":1}}],["speed",{"2":{"25":1}}],["specs",{"2":{"32":1}}],["specified",{"2":{"20":1}}],["specification",{"2":{"4":2,"20":2}}],["spec",{"2":{"7":2,"32":1}}],["store",{"2":{"32":2}}],["state",{"2":{"32":1}}],["static",{"2":{"32":2}}],["started",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1,"15":1}}],["start",{"2":{"4":1,"20":3,"21":2}}],["studio",{"2":{"32":1}}],["structure",{"0":{"32":1}}],["structures",{"0":{"22":1}}],["should",{"2":{"18":1}}],["sh",{"2":{"7":1}}],["shell",{"2":{"5":1,"14":1,"18":1}}],["shell$",{"2":{"4":1,"6":1,"11":1,"13":1,"15":1,"18":2}}],["sln",{"2":{"7":1}}],["sample",{"2":{"7":1,"32":1}}],["same",{"2":{"6":1}}],["save",{"2":{"7":2,"32":1}}],["size",{"0":{"7":1},"2":{"25":1}}],["simultaneously",{"2":{"6":1}}],["simply",{"2":{"5":1}}],["simple",{"2":{"4":2,"6":1}}],["snap",{"2":{"5":2}}],["schema",{"2":{"7":1}}],["sccs",{"2":{"7":1}}],["scope",{"2":{"4":1}}],["screenshots",{"2":{"32":1}}],["screens",{"2":{"32":1}}],["screen",{"2":{"4":1,"32":3}}],["script",{"0":{"3":1},"2":{"1":1,"3":2,"8":1,"19":1,"20":2,"21":1}}],["scripts",{"0":{"19":1},"1":{"20":1,"21":1},"2":{"1":4,"2":1,"3":1,"7":1,"8":1}}],["suitable",{"2":{"13":1}}],["support",{"2":{"4":1,"7":2,"25":1}}],["supported",{"2":{"3":1}}],["such",{"2":{"1":1}}],["s",{"2":{"3":1,"4":1,"32":1}}],["soon",{"2":{"25":1}}],["source",{"2":{"7":3,"32":3}}],["some",{"2":{"6":1}}],["so",{"2":{"3":1,"7":1}}],["system",{"2":{"3":1,"20":2}}],["skip",{"2":{"2":1}}],["secondscreen",{"2":{"32":1}}],["secure",{"2":{"1":1,"3":1}}],["security",{"2":{"1":1,"2":1,"3":1}}],["serve",{"2":{"21":1}}],["server",{"2":{"18":1,"21":3}}],["sent",{"2":{"3":2}}],["sending",{"2":{"3":1}}],["send",{"2":{"3":8}}],["settings",{"0":{"8":1},"2":{"6":1}}],["set",{"2":{"2":1,"3":1}}],["see",{"2":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1}}],["separately",{"2":{"20":1}}],["separate",{"2":{"1":1,"4":1}}],["src",{"2":{"1":2,"3":2,"32":1}}],["editor",{"2":{"32":1}}],["editorconfig",{"2":{"32":1}}],["errors",{"2":{"32":1}}],["errorscreen",{"2":{"32":1}}],["etc",{"2":{"32":2}}],["eslintrc",{"2":{"32":1}}],["eslintignore",{"2":{"32":1}}],["eslint",{"2":{"20":2,"28":1,"32":2}}],["entry",{"2":{"32":2}}],["entire",{"2":{"17":1,"20":1}}],["enabled",{"2":{"32":1}}],["environment",{"0":{"15":1},"2":{"15":1,"17":1,"20":3,"25":1}}],["end",{"0":{"29":1},"2":{"1":1,"25":1}}],["easily",{"2":{"11":1}}],["each",{"2":{"6":1}}],["empty",{"2":{"4":1}}],["everything",{"2":{"4":1,"18":1}}],["event",{"2":{"3":4}}],["events",{"2":{"3":5}}],["exp",{"2":{"7":1}}],["exposeinmainworld",{"2":{"3":1}}],["exclude",{"2":{"7":1}}],["excluding",{"0":{"7":1}}],["example",{"2":{"6":1,"7":2}}],["examples",{"2":{"1":1,"7":1}}],["exe",{"2":{"5":2}}],["executes",{"2":{"1":1}}],["execution",{"2":{"1":3,"32":1}}],["electronjs",{"2":{"1":1,"3":1}}],["electron",{"0":{"0":1,"24":1},"2":{"1":1,"2":2,"3":3,"4":1,"5":1,"6":1,"8":2,"20":4,"24":1,"27":2,"32":4}}],["fixtures",{"2":{"32":1}}],["fix",{"2":{"20":6}}],["filters",{"2":{"7":1}}],["files",{"0":{"7":1},"2":{"7":2,"11":1,"32":8}}],["file",{"2":{"2":1,"4":4,"7":2,"20":2,"32":8}}],["fp",{"2":{"7":1}}],["flow",{"2":{"7":1}}],["few",{"2":{"6":1}}],["funding",{"2":{"32":1}}],["function",{"2":{"17":1}}],["functions",{"2":{"3":2}}],["further",{"2":{"7":1}}],["full",{"2":{"4":1}}],["frameworks",{"0":{"27":1,"29":1,"30":1}}],["framework",{"2":{"4":2}}],["from",{"2":{"3":3,"17":1,"21":1}}],["front",{"0":{"29":1},"2":{"1":1}}],["found",{"2":{"5":1}}],["folder",{"2":{"3":1,"17":1,"18":1}}],["following",{"2":{"1":1,"2":1,"3":2,"4":2,"5":1,"6":3,"8":1,"14":1,"18":1}}],["formatting",{"2":{"32":1}}],["format",{"2":{"20":2}}],["force",{"2":{"20":1}}],["for",{"0":{"6":1,"8":1,"21":1,"24":1,"25":1},"2":{"1":4,"2":1,"3":6,"4":5,"5":4,"6":6,"8":1,"11":1,"13":1,"20":8,"21":3,"32":6}}],["help",{"0":{"28":1}}],["here",{"2":{"3":1,"4":1}}],["hosting",{"2":{"32":1}}],["hosted",{"2":{"18":1}}],["however",{"2":{"6":2}}],["how",{"0":{"0":1,"2":1}}],["hpp",{"2":{"7":1}}],["h",{"2":{"7":1}}],["html",{"2":{"7":1,"32":1}}],["htdocs",{"2":{"7":1}}],["https",{"2":{"1":1,"2":1,"3":1,"4":2,"5":1,"6":2,"13":1,"14":2,"18":2,"24":1,"25":1}}],["have",{"2":{"4":1}}],["has",{"2":{"4":1,"25":1}}],["handlers",{"2":{"32":1}}],["handle",{"2":{"3":1}}],["handled",{"2":{"1":1}}],["typescript",{"2":{"28":1,"32":2}}],["typings",{"2":{"7":1}}],["typically",{"2":{"3":1}}],["take",{"2":{"8":1}}],["target",{"2":{"7":1}}],["tlog",{"2":{"7":1}}],["txt",{"2":{"7":1}}],["time",{"2":{"7":1,"20":1}}],["t",{"2":{"7":1,"15":1}}],["terminal",{"2":{"14":1}}],["testutil",{"2":{"32":1}}],["test",{"2":{"4":8,"7":2,"20":4,"32":6}}],["tests",{"2":{"4":3,"7":1,"20":2,"32":1}}],["testing",{"0":{"4":1,"31":1},"2":{"4":5,"20":2}}],["templates",{"0":{"24":1}}],["template",{"0":{"12":1},"2":{"3":1,"4":2,"12":1,"32":1}}],["tslint",{"2":{"7":1}}],["tsconfig",{"2":{"7":1,"32":2}}],["ts",{"2":{"2":1,"3":1,"4":1,"7":3,"32":11}}],["true",{"2":{"2":2}}],["tutorial",{"2":{"1":1,"3":2}}],["through",{"2":{"6":1,"15":1,"17":1}}],["this",{"0":{"12":1,"13":1},"2":{"1":2,"2":1,"3":1,"4":2,"6":1,"7":1,"12":2,"13":2,"17":1,"20":1}}],["that",{"0":{"8":1},"2":{"1":2,"3":1,"7":1,"8":2}}],["the",{"2":{"1":13,"2":2,"3":14,"4":16,"5":5,"6":6,"7":3,"8":2,"11":2,"12":1,"13":1,"14":3,"15":2,"17":5,"18":7,"20":7,"21":3,"24":1,"25":4,"32":1}}],["tools",{"0":{"28":1}}],["todo",{"2":{"7":1}}],["to",{"0":{"0":1,"2":1,"6":1},"2":{"1":2,"2":3,"3":14,"4":2,"5":1,"6":3,"7":1,"8":1,"12":2,"13":1,"15":1,"20":3,"21":1,"32":6}}],["quot",{"2":{"1":4}}],["ignored",{"2":{"32":1}}],["ide",{"2":{"32":2}}],["i18n",{"2":{"29":1,"32":1}}],["io",{"2":{"14":1,"18":1}}],["icons",{"2":{"32":1}}],["icon",{"2":{"32":1}}],["ico",{"2":{"7":1}}],["i",{"0":{"6":1},"2":{"14":2,"18":2}}],["images",{"2":{"32":1}}],["improving",{"2":{"25":1}}],["implemented",{"2":{"1":1,"4":1}}],["immediately",{"2":{"4":1,"12":1}}],["if",{"2":{"2":1,"3":1,"6":1,"15":2,"17":1}}],["ipcs",{"2":{"32":1}}],["ipcrenderer",{"2":{"3":1}}],["ipc",{"2":{"1":2,"3":2,"32":1}}],["it",{"2":{"1":2,"3":3,"4":1,"6":3,"7":1,"12":1,"20":2}}],["inspection",{"2":{"20":4}}],["instructions",{"2":{"18":1}}],["instantly",{"2":{"12":1}}],["installing",{"2":{"5":1,"8":1}}],["installation",{"0":{"14":1,"16":1,"18":1},"2":{"5":1}}],["install",{"2":{"4":1,"7":1,"8":1,"14":1,"18":2}}],["instead",{"2":{"3":1}}],["init",{"0":{"11":1},"2":{"11":1,"17":1}}],["internal",{"2":{"7":1}}],["into",{"2":{"1":2,"25":1}}],["individual",{"2":{"6":1}}],["index",{"2":{"3":1,"32":4}}],["invoke",{"2":{"3":1}}],["information",{"2":{"1":1,"2":1,"3":1,"4":1,"5":1}}],["included",{"2":{"17":1}}],["includes",{"2":{"4":1}}],["include",{"2":{"1":1}}],["in",{"0":{"15":1},"2":{"1":3,"2":2,"3":5,"4":5,"5":1,"7":1,"14":1,"15":1,"17":1,"18":2}}],["issue",{"2":{"32":1}}],["issues",{"2":{"2":1}}],["isolated",{"2":{"1":1}}],["is",{"2":{"1":6,"3":5,"4":7,"5":1,"6":1,"7":1,"13":1,"15":1,"17":2}}],["v",{"2":{"7":1}}],["vcxproj",{"2":{"7":2}}],["vcproj",{"2":{"7":1}}],["vagrant",{"2":{"7":1}}],["variable",{"2":{"3":1}}],["very",{"2":{"4":1,"6":1}}],["versioning",{"2":{"7":1}}],["version",{"2":{"3":1,"5":1}}],["visual",{"2":{"32":1}}],["viewer",{"2":{"17":1}}],["viewed",{"2":{"17":1}}],["vitepress",{"2":{"17":1,"32":3}}],["vite",{"2":{"2":3,"15":2,"20":3,"24":1,"25":1,"27":1,"32":2}}],["via",{"2":{"1":2,"6":1,"14":3,"18":4}}],["vuetify",{"2":{"30":1}}],["vue",{"0":{"29":1},"2":{"1":1,"29":3,"32":13}}],["vutron",{"0":{"25":1},"2":{"1":1,"3":2,"4":1,"11":1,"13":2,"17":2,"25":2,"32":1}}],["vscode",{"2":{"32":1}}],["vs",{"0":{"1":1},"1":{"2":1}}],["against",{"2":{"20":2}}],["after",{"2":{"14":1,"15":1}}],["ajv",{"2":{"7":2}}],["achieved",{"2":{"25":1}}],["ac",{"2":{"7":1}}],["access",{"2":{"3":1}}],["auto",{"2":{"20":2}}],["automated",{"0":{"4":1},"2":{"4":1}}],["author",{"2":{"7":1}}],["above",{"2":{"6":1,"11":1}}],["about",{"2":{"4":1,"6":2}}],["also",{"2":{"24":1}}],["alternatively",{"2":{"6":1}}],["all",{"2":{"5":2,"6":2,"20":1}}],["at",{"2":{"6":2,"7":1,"20":1}}],["advanced",{"2":{"4":1}}],["adding",{"2":{"7":1}}],["add",{"2":{"3":1,"8":1}}],["another",{"2":{"15":1}}],["any",{"2":{"8":1}}],["an",{"2":{"3":4,"7":1}}],["and",{"0":{"16":1},"2":{"1":4,"2":1,"3":5,"4":5,"6":1,"11":1,"20":2,"25":4,"32":2}}],["article",{"2":{"5":1}}],["articles",{"2":{"1":1,"2":1,"3":1,"6":1}}],["area",{"2":{"1":1,"3":1}}],["are",{"2":{"1":1,"3":1,"18":1}}],["async",{"2":{"7":2}}],["asynchronously",{"2":{"3":1}}],["as",{"2":{"1":1,"20":3}}],["api",{"2":{"32":1}}],["apis",{"2":{"1":1}}],["appear",{"2":{"15":1}}],["app",{"0":{"27":1},"2":{"8":1,"15":1,"32":2}}],["appx",{"2":{"5":2}}],["applications",{"2":{"15":1}}],["application",{"2":{"1":1,"4":2,"15":1,"32":1}}],["a",{"0":{"2":1,"6":1},"2":{"1":4,"3":4,"4":2,"6":4,"7":1,"11":1,"12":1,"20":6,"21":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/VPLocalSearchBox.CvIEAXF_.js b/assets/chunks/VPLocalSearchBox.CvIEAXF_.js new file mode 100644 index 0000000..1605c2c --- /dev/null +++ b/assets/chunks/VPLocalSearchBox.CvIEAXF_.js @@ -0,0 +1,7 @@ +var Ot=Object.defineProperty;var Rt=(a,e,t)=>e in a?Ot(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>Rt(a,typeof e!="symbol"?e+"":e,t);import{V as et,p as ie,h as me,ah as tt,ai as Ct,aj as Mt,q as $e,ak as At,d as Lt,D as xe,al as st,am as Dt,an as zt,s as Pt,ao as jt,v as Ae,P as he,O as _e,ap as Vt,aq as $t,W as Bt,R as Wt,$ as Kt,o as H,b as Jt,j as _,a0 as Ut,k as L,ar as qt,as as Gt,at as Ht,c as Z,n as nt,e as Se,C as it,F as rt,a as fe,t as pe,au as Qt,av as at,aw as Yt,a6 as Zt,ac as Xt,ax as es,_ as ts}from"./framework.BQmytedh.js";import{u as ss,c as ns}from"./theme.DP4UGt4y.js";const is={root:()=>et(()=>import("./@localSearchIndexroot.VjN8Yo4J.js"),[]),ko:()=>et(()=>import("./@localSearchIndexko.CSoybntL.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var gt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=gt.join(","),bt=typeof Element>"u",ae=bt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Fe=!bt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Oe=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},rs=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},yt=function(e,t,s){if(Oe(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ae.call(e,Ne)&&n.unshift(e),n=n.filter(s),n},wt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Oe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,Ne);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var m=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),f=!Oe(m,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(m&&f){var b=a(m===!0?i.children:m.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},xt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},re=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rs(e))&&!xt(e)?0:e.tabIndex},as=function(e,t){var s=re(e);return s<0&&t&&!xt(e)?0:s},os=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},_t=function(e){return e.tagName==="INPUT"},ls=function(e){return _t(e)&&e.type==="hidden"},cs=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},us=function(e,t){for(var s=0;s<e.length;s++)if(e[s].checked&&e[s].form===t)return e[s]},ds=function(e){if(!e.name)return!0;var t=e.form||Fe(e),s=function(o){return t.querySelectorAll('input[type="radio"][name="'+o+'"]')},n;if(typeof window<"u"&&typeof window.CSS<"u"&&typeof window.CSS.escape=="function")n=s(window.CSS.escape(e.name));else try{n=s(e.name)}catch(i){return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s",i.message),!1}var r=us(n,e.form);return!r||r===e},hs=function(e){return _t(e)&&e.type==="radio"},fs=function(e){return hs(e)&&!ds(e)},ps=function(e){var t,s=e&&Fe(e),n=(t=s)===null||t===void 0?void 0:t.host,r=!1;if(s&&s!==e){var i,o,l;for(r=!!((i=n)!==null&&i!==void 0&&(o=i.ownerDocument)!==null&&o!==void 0&&o.contains(n)||e!=null&&(l=e.ownerDocument)!==null&&l!==void 0&&l.contains(e));!r&&n;){var c,h,m;s=Fe(n),n=(c=s)===null||c===void 0?void 0:c.host,r=!!((h=n)!==null&&h!==void 0&&(m=h.ownerDocument)!==null&&m!==void 0&&m.contains(n))}}return r},ot=function(e){var t=e.getBoundingClientRect(),s=t.width,n=t.height;return s===0&&n===0},vs=function(e,t){var s=t.displayCheck,n=t.getShadowRoot;if(getComputedStyle(e).visibility==="hidden")return!0;var r=ae.call(e,"details>summary:first-of-type"),i=r?e.parentElement:e;if(ae.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=Fe(e);if(l&&!l.shadowRoot&&n(l)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(ps(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return ot(e);return!1},ms=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s<t.children.length;s++){var n=t.children.item(s);if(n.tagName==="LEGEND")return ae.call(t,"fieldset[disabled] *")?!0:!n.contains(e)}return!0}t=t.parentElement}return!1},Re=function(e,t){return!(t.disabled||Oe(t)||ls(t)||vs(t,e)||cs(t)||ms(t))},Be=function(e,t){return!(fs(t)||re(t)<0||!Re(e,t))},gs=function(e){var t=parseInt(e.getAttribute("tabindex"),10);return!!(isNaN(t)||t>=0)},bs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=as(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(os).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=wt([e],t.includeContainer,{filter:Be.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:gs}):s=yt(e,t.includeContainer,Be.bind(null,t)),bs(s)},ws=function(e,t){t=t||{};var s;return t.getShadowRoot?s=wt([e],t.includeContainer,{filter:Re.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=yt(e,t.includeContainer,Re.bind(null,t)),s},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Ne)===!1?!1:Be(t,e)},xs=gt.concat("iframe").join(","),Le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,xs)===!1?!1:Re(t,e)};/*! +* focus-trap 7.6.0 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function _s(a,e,t){return(e=Es(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function lt(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,s)}return t}function ct(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?lt(Object(t),!0).forEach(function(s){_s(a,s,t[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):lt(Object(t)).forEach(function(s){Object.defineProperty(a,s,Object.getOwnPropertyDescriptor(t,s))})}return a}function Ss(a,e){if(typeof a!="object"||!a)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var s=t.call(a,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}function Es(a){var e=Ss(a,"string");return typeof e=="symbol"?e:e+""}var ut={activateTrap:function(e,t){if(e.length>0){var s=e[e.length-1];s!==t&&s.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&e[e.length-1].unpause()}},Ts=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Is=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},ks=function(e){return ge(e)&&!e.shiftKey},Ns=function(e){return ge(e)&&e.shiftKey},dt=function(e){return setTimeout(e,0)},ht=function(e,t){var s=-1;return e.every(function(n,r){return t(n)?(s=r,!1):!0}),s},ve=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n<t;n++)s[n-1]=arguments[n];return typeof e=="function"?e.apply(void 0,s):e},Ee=function(e){return e.target.shadowRoot&&typeof e.composedPath=="function"?e.composedPath()[0]:e.target},Fs=[],Os=function(e,t){var s=(t==null?void 0:t.document)||document,n=(t==null?void 0:t.trapStack)||Fs,r=ct({returnFocusOnDeactivate:!0,escapeDeactivates:!0,delayInitialFocus:!0,isKeyForward:ks,isKeyBackward:Ns},t),i={containers:[],containerGroups:[],tabbableGroups:[],nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1,delayInitialFocusTimer:void 0,recentNavEvent:void 0},o,l=function(d,u,g){return d&&d[u]!==void 0?d[u]:r[g||u]},c=function(d,u){var g=typeof(u==null?void 0:u.composedPath)=="function"?u.composedPath():void 0;return i.containerGroups.findIndex(function(E){var T=E.container,N=E.tabbableNodes;return T.contains(d)||(g==null?void 0:g.includes(T))||N.find(function(O){return O===d})})},h=function(d){var u=r[d];if(typeof u=="function"){for(var g=arguments.length,E=new Array(g>1?g-1:0),T=1;T<g;T++)E[T-1]=arguments[T];u=u.apply(void 0,E)}if(u===!0&&(u=void 0),!u){if(u===void 0||u===!1)return u;throw new Error("`".concat(d,"` was specified but was not a node, or did not return a node"))}var N=u;if(typeof u=="string"&&(N=s.querySelector(u),!N))throw new Error("`".concat(d,"` as selector refers to no known node"));return N},m=function(){var d=h("initialFocus");if(d===!1)return!1;if(d===void 0||!Le(d,r.tabbableOptions))if(c(s.activeElement)>=0)d=s.activeElement;else{var u=i.tabbableGroups[0],g=u&&u.firstTabbableNode;d=g||h("fallbackFocus")}if(!d)throw new Error("Your focus-trap needs to have at least one focusable element");return d},f=function(){if(i.containerGroups=i.containers.map(function(d){var u=ys(d,r.tabbableOptions),g=ws(d,r.tabbableOptions),E=u.length>0?u[0]:void 0,T=u.length>0?u[u.length-1]:void 0,N=g.find(function(v){return oe(v)}),O=g.slice().reverse().find(function(v){return oe(v)}),A=!!u.find(function(v){return re(v)>0});return{container:d,tabbableNodes:u,focusableNodes:g,posTabIndexesFound:A,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:N,lastDomTabbableNode:O,nextTabbableNode:function(p){var S=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,F=u.indexOf(p);return F<0?S?g.slice(g.indexOf(p)+1).find(function(z){return oe(z)}):g.slice(0,g.indexOf(p)).reverse().find(function(z){return oe(z)}):u[F+(S?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(d){return d.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(d){return d.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(d){var u=d.activeElement;if(u)return u.shadowRoot&&u.shadowRoot.activeElement!==null?b(u.shadowRoot):u},y=function(d){if(d!==!1&&d!==b(document)){if(!d||!d.focus){y(m());return}d.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=d,Ts(d)&&d.select()}},x=function(d){var u=h("setReturnFocus",d);return u||(u===!1?!1:d)},w=function(d){var u=d.target,g=d.event,E=d.isBackward,T=E===void 0?!1:E;u=u||Ee(g),f();var N=null;if(i.tabbableGroups.length>0){var O=c(u,g),A=O>=0?i.containerGroups[O]:void 0;if(O<0)T?N=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:N=i.tabbableGroups[0].firstTabbableNode;else if(T){var v=ht(i.tabbableGroups,function(j){var I=j.firstTabbableNode;return u===I});if(v<0&&(A.container===u||Le(u,r.tabbableOptions)&&!oe(u,r.tabbableOptions)&&!A.nextTabbableNode(u,!1))&&(v=O),v>=0){var p=v===0?i.tabbableGroups.length-1:v-1,S=i.tabbableGroups[p];N=re(u)>=0?S.lastTabbableNode:S.lastDomTabbableNode}else ge(g)||(N=A.nextTabbableNode(u,!1))}else{var F=ht(i.tabbableGroups,function(j){var I=j.lastTabbableNode;return u===I});if(F<0&&(A.container===u||Le(u,r.tabbableOptions)&&!oe(u,r.tabbableOptions)&&!A.nextTabbableNode(u))&&(F=O),F>=0){var z=F===i.tabbableGroups.length-1?0:F+1,P=i.tabbableGroups[z];N=re(u)>=0?P.firstTabbableNode:P.firstDomTabbableNode}else ge(g)||(N=A.nextTabbableNode(u))}}else N=h("fallbackFocus");return N},R=function(d){var u=Ee(d);if(!(c(u,d)>=0)){if(ve(r.clickOutsideDeactivates,d)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}ve(r.allowOutsideClick,d)||d.preventDefault()}},C=function(d){var u=Ee(d),g=c(u,d)>=0;if(g||u instanceof Document)g&&(i.mostRecentlyFocusedNode=u);else{d.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(re(i.mostRecentlyFocusedNode)>0){var N=c(i.mostRecentlyFocusedNode),O=i.containerGroups[N].tabbableNodes;if(O.length>0){var A=O.findIndex(function(v){return v===i.mostRecentlyFocusedNode});A>=0&&(r.isKeyForward(i.recentNavEvent)?A+1<O.length&&(E=O[A+1],T=!1):A-1>=0&&(E=O[A-1],T=!1))}}else i.containerGroups.some(function(v){return v.tabbableNodes.some(function(p){return re(p)>0})})||(T=!1);else T=!1;T&&(E=w({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),y(E||i.mostRecentlyFocusedNode||m())}i.recentNavEvent=void 0},J=function(d){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=d;var g=w({event:d,isBackward:u});g&&(ge(d)&&d.preventDefault(),y(g))},Q=function(d){(r.isKeyForward(d)||r.isKeyBackward(d))&&J(d,r.isKeyBackward(d))},W=function(d){Is(d)&&ve(r.escapeDeactivates,d)!==!1&&(d.preventDefault(),o.deactivate())},V=function(d){var u=Ee(d);c(u,d)>=0||ve(r.clickOutsideDeactivates,d)||ve(r.allowOutsideClick,d)||(d.preventDefault(),d.stopImmediatePropagation())},$=function(){if(i.active)return ut.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?dt(function(){y(m())}):y(m()),s.addEventListener("focusin",C,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",V,{capture:!0,passive:!1}),s.addEventListener("keydown",Q,{capture:!0,passive:!1}),s.addEventListener("keydown",W),o},be=function(){if(i.active)return s.removeEventListener("focusin",C,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",V,!0),s.removeEventListener("keydown",Q,!0),s.removeEventListener("keydown",W),o},M=function(d){var u=d.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});u&&y(m())},U=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(M):void 0,q=function(){U&&(U.disconnect(),i.active&&!i.paused&&i.containers.map(function(d){U.observe(d,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(d){if(i.active)return this;var u=l(d,"onActivate"),g=l(d,"onPostActivate"),E=l(d,"checkCanFocusTrap");E||f(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=s.activeElement,u==null||u();var T=function(){E&&f(),$(),q(),g==null||g()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(d){if(!i.active)return this;var u=ct({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},d);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,be(),i.active=!1,i.paused=!1,q(),ut.deactivateTrap(n,o);var g=l(u,"onDeactivate"),E=l(u,"onPostDeactivate"),T=l(u,"checkCanReturnFocus"),N=l(u,"returnFocus","returnFocusOnDeactivate");g==null||g();var O=function(){dt(function(){N&&y(x(i.nodeFocusedBeforeActivation)),E==null||E()})};return N&&T?(T(x(i.nodeFocusedBeforeActivation)).then(O,O),this):(O(),this)},pause:function(d){if(i.paused||!i.active)return this;var u=l(d,"onPause"),g=l(d,"onPostPause");return i.paused=!0,u==null||u(),be(),q(),g==null||g(),this},unpause:function(d){if(!i.paused||!i.active)return this;var u=l(d,"onUnpause"),g=l(d,"onPostUnpause");return i.paused=!1,u==null||u(),f(),$(),q(),g==null||g(),this},updateContainerElements:function(d){var u=[].concat(d).filter(Boolean);return i.containers=u.map(function(g){return typeof g=="string"?s.querySelector(g):g}),i.active&&f(),q(),this}},o.updateContainerElements(e),o};function Rs(a,e={}){let t;const{immediate:s,...n}=e,r=ie(!1),i=ie(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)},m=me(()=>{const f=tt(a);return(Array.isArray(f)?f:[f]).map(b=>{const y=tt(b);return typeof y=="string"?y:Ct(y)}).filter(Mt)});return $e(m,f=>{f.length&&(t=Os(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),At(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{ce.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,m=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;m();)this.iframes&&this.forEachIframe(t,f=>this.checkIframeFilter(c,h,f,o),f=>{this.createInstanceOnIframe(f).forEachNode(e,b=>l.push(b),n)}),l.push(c);l.forEach(f=>{s(f)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let Cs=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,m=e.value.substr(0,i.start),f=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=m+f,e.nodes.forEach((b,y)=>{y>=o&&(e.nodes[y].start>0&&y!==o&&(e.nodes[y].start-=h),e.nodes[y].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let m=1;m<i;m++)h+=c[m].length;l=this.wrapRangeInTextNode(l,h,h+c[i].length),n(l.previousSibling),e.lastIndex=0}}),r()})}wrapMatchesAcrossElements(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let m=1;m<i;m++)c+=l[m].length;const h=c+l[i].length;this.wrapRangeInMappedTextNode(o,c,h,m=>s(l[i],m),(m,f)=>{e.lastIndex=f,n(m)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:m}=this.checkWhitespaceRanges(o,i,r.value);m&&this.wrapRangeInMappedTextNode(r,c,h,f=>t(f,o,r.value.substring(c,h),l),f=>{s(f,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),m=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(f,b)=>this.opt.filter(b,c,s,m),f=>{m++,s++,this.opt.each(f)},()=>{m===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Ms(a){const e=new Cs(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}function ke(a,e,t,s){function n(r){return r instanceof t?r:new t(function(i){i(r)})}return new(t||(t=Promise))(function(r,i){function o(h){try{c(s.next(h))}catch(m){i(m)}}function l(h){try{c(s.throw(h))}catch(m){i(m)}}function c(h){h.done?r(h.value):n(h.value).then(o,l)}c((s=s.apply(a,[])).next())})}const As="ENTRIES",St="KEYS",Et="VALUES",D="";class De{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=le(this._path);if(le(t)===D)return{done:!1,value:this.result()};const s=e.get(le(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=le(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>le(e)).filter(e=>e!==D).join("")}value(){return le(this._path).node.get(D)}result(){switch(this._type){case Et:return this.value();case St:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const le=a=>a[a.length-1],Ls=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o<n;++o)i[o]=o;for(let o=1;o<r;++o)i[o*n]=o;return Tt(a,e,t,s,i,1,n,""),s},Tt=(a,e,t,s,n,r,i,o)=>{const l=r*i;e:for(const c of a.keys())if(c===D){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let m=0;m<c.length;++m,++h){const f=c[m],b=i*h,y=b-i;let x=n[b];const w=Math.max(0,h-t-1),R=Math.min(i-1,h+t);for(let C=w;C<R;++C){const J=f!==e[C],Q=n[y+C]+ +J,W=n[y+C+1]+1,V=n[b+C]+1,$=n[b+C+1]=Math.min(Q,W,V);$<x&&(x=$)}if(x>t)continue e}Tt(a.get(c),e,t,s,n,h,i,o+c)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Ce(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=Ue(s);for(const i of n.keys())if(i!==D&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Ds(this._tree,e)}entries(){return new De(this,As)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return Ls(this._tree,e,t)}get(e){const t=We(this._tree,e);return t!==void 0?t.get(D):void 0}has(e){const t=We(this._tree,e);return t!==void 0&&t.has(D)}keys(){return new De(this,St)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,ze(this._tree,e).set(D,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=ze(this._tree,e);return s.set(D,t(s.get(D))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=ze(this._tree,e);let n=s.get(D);return n===void 0&&s.set(D,n=t()),n}values(){return new De(this,Et)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Ce=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==D&&e.startsWith(s))return t.push([a,s]),Ce(a.get(s),e.slice(s.length),t);return t.push([a,e]),Ce(void 0,"",t)},We=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==D&&e.startsWith(t))return We(a.get(t),e.slice(t.length))},ze=(a,e)=>{const t=e.length;e:for(let s=0;a&&s<t;){for(const r of a.keys())if(r!==D&&e[s]===r[0]){const i=Math.min(t-s,r.length);let o=1;for(;o<i&&e[s+o]===r[o];)++o;const l=a.get(r);if(o===r.length)a=l;else{const c=new Map;c.set(r.slice(o),l),a.set(e.slice(s,s+o),c),a.delete(r),a=c}s+=o;continue e}const n=new Map;return a.set(e.slice(s),n),n}return a},Ds=(a,e)=>{const[t,s]=Ce(a,e);if(t!==void 0){if(t.delete(D),t.size===0)It(s);else if(t.size===1){const[n,r]=t.entries().next().value;kt(s,n,r)}}},It=a=>{if(a.length===0)return;const[e,t]=Ue(a);if(e.delete(t),e.size===0)It(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==D&&kt(a.slice(0,-1),s,n)}},kt=(a,e,t)=>{if(a.length===0)return;const[s,n]=Ue(a);s.set(n+e,t),s.delete(n)},Ue=a=>a[a.length-1],qe="or",Nt="and",zs="and_not";class ue{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Ve:e.autoVacuum;this._options=Object.assign(Object.assign(Object.assign({},je),e),{autoVacuum:t,searchOptions:Object.assign(Object.assign({},ft),e.searchOptions||{}),autoSuggestOptions:Object.assign(Object.assign({},Bs),e.autoSuggestOptions||{})}),this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Je,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:s,processTerm:n,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const l=this.addDocumentId(o);this.saveStoredFields(l,e);for(const c of r){const h=t(e,c);if(h==null)continue;const m=s(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.addFieldLength(l,f,this._documentCount-1,b);for(const y of m){const x=n(y,c);if(Array.isArray(x))for(const w of x)this.addTerm(f,l,w);else x&&this.addTerm(f,l,x)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(m=>setTimeout(m,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,fields:r,idField:i}=this._options,o=n(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const l=this._idToShortId.get(o);if(l==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const c of r){const h=n(e,c);if(h==null)continue;const m=t(h.toString(),c),f=this._fieldIds[c],b=new Set(m).size;this.removeFieldLength(l,f,this._documentCount,b);for(const y of m){const x=s(y,c);if(Array.isArray(x))for(const w of x)this.removeTerm(f,l,w);else x&&this.removeTerm(f,l,x)}}this._storedFields.delete(l),this._documentIds.delete(l),this._idToShortId.delete(o),this._fieldLength.delete(l),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Je,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}performVacuuming(e,t){return ke(this,void 0,void 0,function*(){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Ke.batchSize,r=e.batchWait||Ke.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[m]of h)this._documentIds.has(m)||(h.size<=1?l.delete(c):h.delete(m));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&(yield new Promise(c=>setTimeout(c,r))),i+=1}this._dirtCount-=s}yield null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null})}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||Ve.minDirtCount,s=s||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const s=this.executeQuery(e,t),n=[];for(const[r,{score:i,terms:o,match:l}]of s){const c=o.length||1,h={id:this._documentIds.get(r),score:i*c,terms:Object.keys(l),queryTerms:o,match:l};Object.assign(h,this._storedFields.get(r)),(t.filter==null||t.filter(h))&&n.push(h)}return e===ue.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||n.sort(vt),n}autoSuggest(e,t={}){t=Object.assign(Object.assign({},this._options.autoSuggestOptions),t);const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(vt),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static loadJSONAsync(e,t){return ke(this,void 0,void 0,function*(){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)})}static getDefault(e){if(je.hasOwnProperty(e))return Pe(je,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=Te(n),l._fieldLength=Te(r),l._storedFields=Te(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const m=new Map;for(const f of Object.keys(h)){let b=h[f];o===1&&(b=b.ds),m.set(parseInt(f,10),Te(b))}l._index.set(c,m)}return l}static loadJSAsync(e,t){return ke(this,void 0,void 0,function*(){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=yield Ie(n),l._fieldLength=yield Ie(r),l._storedFields=yield Ie(i);for(const[h,m]of l._documentIds)l._idToShortId.set(m,h);let c=0;for(const[h,m]of s){const f=new Map;for(const b of Object.keys(m)){let y=m[b];o===1&&(y=y.ds),f.set(parseInt(b,10),yield Ie(y))}++c%1e3===0&&(yield Ft(0)),l._index.set(h,f)}return l})}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new ue(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new X,c}executeQuery(e,t={}){if(e===ue.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const f=Object.assign(Object.assign(Object.assign({},t),e),{queries:void 0}),b=e.queries.map(y=>this.executeQuery(y,f));return this.combineResults(b,f.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i=Object.assign(Object.assign({tokenize:s,processTerm:n},r),t),{tokenize:o,processTerm:l}=i,m=o(e).flatMap(f=>l(f)).filter(f=>!!f).map($s(i)).map(f=>this.executeQuerySpec(f,i));return this.combineResults(m,i.combineWith)}executeQuerySpec(e,t){const s=Object.assign(Object.assign({},this._options.searchOptions),t),n=(s.fields||this._options.fields).reduce((x,w)=>Object.assign(Object.assign({},x),{[w]:Pe(s.boost,w)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}=Object.assign(Object.assign({},ft.weights),i),m=this._index.get(e.term),f=this.termResults(e.term,e.term,1,e.termBoost,m,n,r,l);let b,y;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const x=e.fuzzy===!0?.2:e.fuzzy,w=x<1?Math.min(o,Math.round(e.term.length*x)):x;w&&(y=this._index.fuzzyGet(e.term,w))}if(b)for(const[x,w]of b){const R=x.length-e.term.length;if(!R)continue;y==null||y.delete(x);const C=h*x.length/(x.length+.3*R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}if(y)for(const x of y.keys()){const[w,R]=y.get(x);if(!R)continue;const C=c*x.length/(x.length+R);this.termResults(e.term,x,C,e.termBoost,w,n,r,l,f)}return f}executeWildcardQuery(e){const t=new Map,s=Object.assign(Object.assign({},this._options.searchOptions),e);for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=qe){if(e.length===0)return new Map;const s=t.toLowerCase(),n=Ps[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const m=i[h],f=this._fieldIds[h],b=r.get(f);if(b==null)continue;let y=b.size;const x=this._avgFieldLength[f];for(const w of b.keys()){if(!this._documentIds.has(w)){this.removeTerm(f,w,t),y-=1;continue}const R=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!R)continue;const C=b.get(w),J=this._fieldLength.get(w)[f],Q=Vs(C,y,this._documentCount,J,x,l),W=s*n*m*R*Q,V=c.get(w);if(V){V.score+=W,Ws(V.terms,e);const $=Pe(V.match,t);$?$.push(h):V.match[t]=[h]}else c.set(w,{score:W,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,mt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,mt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;t<e.length;t++)this._fieldIds[e[t]]=t}addFieldLength(e,t,s,n){let r=this._fieldLength.get(e);r==null&&this._fieldLength.set(e,r=[]),r[t]=n;const o=(this._avgFieldLength[t]||0)*s+n;this._avgFieldLength[t]=o/(s+1)}removeFieldLength(e,t,s,n){if(s===1){this._avgFieldLength[t]=0;return}const r=this._avgFieldLength[t]*s-n;this._avgFieldLength[t]=r/(s-1)}saveStoredFields(e,t){const{storeFields:s,extractField:n}=this._options;if(s==null||s.length===0)return;let r=this._storedFields.get(e);r==null&&this._storedFields.set(e,r={});for(const i of s){const o=n(t,i);o!==void 0&&(r[i]=o)}}}ue.wildcard=Symbol("*");const Pe=(a,e)=>Object.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ps={[qe]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),pt(s.terms,r)}}return a},[Nt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);pt(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[zs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},js={k:1.2,b:.7,d:.5},Vs=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},$s=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},je={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Ks),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},ft={combineWith:qe,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:js},Bs={combineWith:Nt,prefix:(a,e,t)=>e===t.length-1},Ke={batchSize:1e3,batchWait:10},Je={minDirtFactor:.1,minDirtCount:20},Ve=Object.assign(Object.assign({},Ke),Je),Ws=(a,e)=>{a.includes(e)||a.push(e)},pt=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},vt=({score:a},{score:e})=>e-a,mt=()=>new Map,Te=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ie=a=>ke(void 0,void 0,void 0,function*(){const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&(yield Ft(0));return e}),Ft=a=>new Promise(e=>setTimeout(e,a)),Ks=/[\n\r\p{Z}\p{P}]+/u;class Js{constructor(e=10){Me(this,"max");Me(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Us=["aria-owns"],qs={class:"shell"},Gs=["title"],Hs={class:"search-actions before"},Qs=["title"],Ys=["aria-activedescendant","aria-controls","placeholder"],Zs={class:"search-actions"},Xs=["title"],en=["disabled","title"],tn=["id","role","aria-labelledby"],sn=["id","aria-selected"],nn=["href","aria-label","onMouseenter","onFocusin","data-index"],rn={class:"titles"},an=["innerHTML"],on={class:"title main"},ln=["innerHTML"],cn={key:0,class:"excerpt-wrapper"},un={key:0,class:"excerpt",inert:""},dn=["innerHTML"],hn={key:0,class:"no-results"},fn={class:"search-keyboard-shortcuts"},pn=["aria-label"],vn=["aria-label"],mn=["aria-label"],gn=["aria-label"],bn=Lt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var O,A;const t=e,s=xe(),n=xe(),r=xe(is),i=ss(),{activate:o}=Rs(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=st(async()=>{var v,p,S,F,z,P,j,I,K;return at(ue.loadJSON((S=await((p=(v=r.value)[l.value])==null?void 0:p.call(v)))==null?void 0:S.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((F=c.value.search)==null?void 0:F.provider)==="local"&&((P=(z=c.value.search.options)==null?void 0:z.miniSearch)==null?void 0:P.searchOptions)},...((j=c.value.search)==null?void 0:j.provider)==="local"&&((K=(I=c.value.search.options)==null?void 0:I.miniSearch)==null?void 0:K.options)}))}),f=me(()=>{var v,p;return((v=c.value.search)==null?void 0:v.provider)==="local"&&((p=c.value.search.options)==null?void 0:p.disableQueryPersistence)===!0}).value?ie(""):Dt("vitepress:local-search-filter",""),b=zt("vitepress:local-search-detailed-list",((O=c.value.search)==null?void 0:O.provider)==="local"&&((A=c.value.search.options)==null?void 0:A.detailedView)===!0),y=me(()=>{var v,p,S;return((v=c.value.search)==null?void 0:v.provider)==="local"&&(((p=c.value.search.options)==null?void 0:p.disableDetailedView)===!0||((S=c.value.search.options)==null?void 0:S.detailedView)===!1)}),x=me(()=>{var p,S,F,z,P,j,I;const v=((p=c.value.search)==null?void 0:p.options)??c.value.algolia;return((P=(z=(F=(S=v==null?void 0:v.locales)==null?void 0:S[l.value])==null?void 0:F.translations)==null?void 0:z.button)==null?void 0:P.buttonText)||((I=(j=v==null?void 0:v.translations)==null?void 0:j.button)==null?void 0:I.buttonText)||"Search"});Pt(()=>{y.value&&(b.value=!1)});const w=xe([]),R=ie(!1);$e(f,()=>{R.value=!1});const C=st(async()=>{if(n.value)return at(new Ms(n.value))},null),J=new Js(16);jt(()=>[h.value,f.value,b.value],async([v,p,S],F,z)=>{var ee,ye,Ge,He;(F==null?void 0:F[0])!==v&&J.clear();let P=!1;if(z(()=>{P=!0}),!v)return;w.value=v.search(p).slice(0,16),R.value=!0;const j=S?await Promise.all(w.value.map(B=>Q(B.id))):[];if(P)return;for(const{id:B,mod:te}of j){const se=B.slice(0,B.indexOf("#"));let Y=J.get(se);if(Y)continue;Y=new Map,J.set(se,Y);const G=te.default??te;if(G!=null&&G.render||G!=null&&G.setup){const ne=Yt(G);ne.config.warnHandler=()=>{},ne.provide(Zt,i),Object.defineProperties(ne.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Qe=document.createElement("div");ne.mount(Qe),Qe.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(de=>{var Xe;const we=(Xe=de.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ye)return;let Ze="";for(;(de=de.nextElementSibling)&&!/^h[1-6]$/i.test(de.tagName);)Ze+=de.outerHTML;Y.set(Ye,Ze)}),ne.unmount()}if(P)return}const I=new Set;if(w.value=w.value.map(B=>{const[te,se]=B.id.split("#"),Y=J.get(te),G=(Y==null?void 0:Y.get(se))??"";for(const ne in B.match)I.add(ne);return{...B,text:G}}),await he(),P)return;await new Promise(B=>{var te;(te=C.value)==null||te.unmark({done:()=>{var se;(se=C.value)==null||se.markRegExp(T(I),{done:B})}})});const K=((ee=s.value)==null?void 0:ee.querySelectorAll(".result .excerpt"))??[];for(const B of K)(ye=B.querySelector('mark[data-markjs="true"]'))==null||ye.scrollIntoView({block:"center"});(He=(Ge=n.value)==null?void 0:Ge.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function Q(v){const p=Xt(v.slice(0,v.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${v}`);return{id:v,mod:await import(p)}}catch(S){return console.error(S),{id:v,mod:{}}}}const W=ie(),V=me(()=>{var v;return((v=f.value)==null?void 0:v.length)<=0});function $(v=!0){var p,S;(p=W.value)==null||p.focus(),v&&((S=W.value)==null||S.select())}Ae(()=>{$()});function be(v){v.pointerType==="mouse"&&$()}const M=ie(-1),U=ie(!0);$e(w,v=>{M.value=v.length?0:-1,q()});function q(){he(()=>{const v=document.querySelector(".result.selected");v==null||v.scrollIntoView({block:"nearest"})})}_e("ArrowUp",v=>{v.preventDefault(),M.value--,M.value<0&&(M.value=w.value.length-1),U.value=!0,q()}),_e("ArrowDown",v=>{v.preventDefault(),M.value++,M.value>=w.value.length&&(M.value=0),U.value=!0,q()});const k=Vt();_e("Enter",v=>{if(v.isComposing||v.target instanceof HTMLButtonElement&&v.target.type!=="submit")return;const p=w.value[M.value];if(v.target instanceof HTMLInputElement&&!p){v.preventDefault();return}p&&(k.go(p.id),t("close"))}),_e("Escape",()=>{t("close")});const u=ns({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Ae(()=>{window.history.pushState(null,"",null)}),$t("popstate",v=>{v.preventDefault(),t("close")});const g=Bt(Wt?document.body:null);Ae(()=>{he(()=>{g.value=!0,he().then(()=>o())})}),Kt(()=>{g.value=!1});function E(){f.value="",he().then(()=>$(!1))}function T(v){return new RegExp([...v].sort((p,S)=>S.length-p.length).map(p=>`(${es(p)})`).join("|"),"gi")}function N(v){var F;if(!U.value)return;const p=(F=v.target)==null?void 0:F.closest(".result"),S=Number.parseInt(p==null?void 0:p.dataset.index);S>=0&&S!==M.value&&(M.value=S),U.value=!1}return(v,p)=>{var S,F,z,P,j;return H(),Jt(Qt,{to:"body"},[_("div",{ref_key:"el",ref:s,role:"button","aria-owns":(S=w.value)!=null&&S.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[_("div",{class:"backdrop",onClick:p[0]||(p[0]=I=>v.$emit("close"))}),_("div",qs,[_("form",{class:"search-bar",onPointerup:p[4]||(p[4]=I=>be(I)),onSubmit:p[5]||(p[5]=Ut(()=>{},["prevent"]))},[_("label",{title:x.value,id:"localsearch-label",for:"localsearch-input"},p[7]||(p[7]=[_("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)]),8,Gs),_("div",Hs,[_("button",{class:"back-button",title:L(u)("modal.backButtonTitle"),onClick:p[1]||(p[1]=I=>v.$emit("close"))},p[8]||(p[8]=[_("span",{class:"vpi-arrow-left local-search-icon"},null,-1)]),8,Qs)]),qt(_("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":p[2]||(p[2]=I=>Ht(f)?f.value=I:null),"aria-activedescendant":M.value>-1?"localsearch-item-"+M.value:void 0,"aria-autocomplete":"both","aria-controls":(F=w.value)!=null&&F.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:x.value,spellcheck:"false",type:"search"},null,8,Ys),[[Gt,L(f)]]),_("div",Zs,[y.value?Se("",!0):(H(),Z("button",{key:0,class:nt(["toggle-layout-button",{"detailed-list":L(b)}]),type:"button",title:L(u)("modal.displayDetails"),onClick:p[3]||(p[3]=I=>M.value>-1&&(b.value=!L(b)))},p[9]||(p[9]=[_("span",{class:"vpi-layout-list local-search-icon"},null,-1)]),10,Xs)),_("button",{class:"clear-button",type:"reset",disabled:V.value,title:L(u)("modal.resetButtonTitle"),onClick:E},p[10]||(p[10]=[_("span",{class:"vpi-delete local-search-icon"},null,-1)]),8,en)])],32),_("ul",{ref_key:"resultsEl",ref:n,id:(z=w.value)!=null&&z.length?"localsearch-list":void 0,role:(P=w.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(j=w.value)!=null&&j.length?"localsearch-label":void 0,class:"results",onMousemove:N},[(H(!0),Z(rt,null,it(w.value,(I,K)=>(H(),Z("li",{key:I.id,id:"localsearch-item-"+K,"aria-selected":M.value===K?"true":"false",role:"option"},[_("a",{href:I.id,class:nt(["result",{selected:M.value===K}]),"aria-label":[...I.titles,I.title].join(" > "),onMouseenter:ee=>!U.value&&(M.value=K),onFocusin:ee=>M.value=K,onClick:p[6]||(p[6]=ee=>v.$emit("close")),"data-index":K},[_("div",null,[_("div",rn,[p[12]||(p[12]=_("span",{class:"title-icon"},"#",-1)),(H(!0),Z(rt,null,it(I.titles,(ee,ye)=>(H(),Z("span",{key:ye,class:"title"},[_("span",{class:"text",innerHTML:ee},null,8,an),p[11]||(p[11]=_("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),_("span",on,[_("span",{class:"text",innerHTML:I.title},null,8,ln)])]),L(b)?(H(),Z("div",cn,[I.text?(H(),Z("div",un,[_("div",{class:"vp-doc",innerHTML:I.text},null,8,dn)])):Se("",!0),p[13]||(p[13]=_("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=_("div",{class:"excerpt-gradient-top"},null,-1))])):Se("",!0)])],42,nn)],8,sn))),128)),L(f)&&!w.value.length&&R.value?(H(),Z("li",hn,[fe(pe(L(u)("modal.noResultsText"))+' "',1),_("strong",null,pe(L(f)),1),p[15]||(p[15]=fe('" '))])):Se("",!0)],40,tn),_("div",fn,[_("span",null,[_("kbd",{"aria-label":L(u)("modal.footer.navigateUpKeyAriaLabel")},p[16]||(p[16]=[_("span",{class:"vpi-arrow-up navigate-icon"},null,-1)]),8,pn),_("kbd",{"aria-label":L(u)("modal.footer.navigateDownKeyAriaLabel")},p[17]||(p[17]=[_("span",{class:"vpi-arrow-down navigate-icon"},null,-1)]),8,vn),fe(" "+pe(L(u)("modal.footer.navigateText")),1)]),_("span",null,[_("kbd",{"aria-label":L(u)("modal.footer.selectKeyAriaLabel")},p[18]||(p[18]=[_("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)]),8,mn),fe(" "+pe(L(u)("modal.footer.selectText")),1)]),_("span",null,[_("kbd",{"aria-label":L(u)("modal.footer.closeKeyAriaLabel")},"esc",8,gn),fe(" "+pe(L(u)("modal.footer.closeText")),1)])])])],8,Us)])}}}),En=ts(bn,[["__scopeId","data-v-ce626c7c"]]);export{En as default}; diff --git a/assets/chunks/framework.BQmytedh.js b/assets/chunks/framework.BQmytedh.js new file mode 100644 index 0000000..4ea78d5 --- /dev/null +++ b/assets/chunks/framework.BQmytedh.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ns(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Et=[],ke=()=>{},Ko=()=>!1,en=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Fs=e=>e.startsWith("onUpdate:"),ae=Object.assign,Hs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},qo=Object.prototype.hasOwnProperty,z=(e,t)=>qo.call(e,t),W=Array.isArray,Tt=e=>In(e)==="[object Map]",ii=e=>In(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",Xe=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",oi=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),li=Object.prototype.toString,In=e=>li.call(e),Go=e=>In(e).slice(8,-1),ci=e=>In(e)==="[object Object]",$s=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ct=Ns(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Nn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Yo=/-(\w)/g,Le=Nn(e=>e.replace(Yo,(t,n)=>n?n.toUpperCase():"")),Xo=/\B([A-Z])/g,st=Nn(e=>e.replace(Xo,"-$1").toLowerCase()),Fn=Nn(e=>e.charAt(0).toUpperCase()+e.slice(1)),_n=Nn(e=>e?`on${Fn(e)}`:""),tt=(e,t)=>!Object.is(e,t),bn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},ai=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},vs=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jo=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let ar;const Hn=()=>ar||(ar=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ds(e){if(W(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=re(s)?el(s):Ds(s);if(r)for(const i in r)t[i]=r[i]}return t}else if(re(e)||ne(e))return e}const zo=/;(?![^(]*\))/g,Qo=/:([^]+)/,Zo=/\/\*[^]*?\*\//g;function el(e){const t={};return e.replace(Zo,"").split(zo).forEach(n=>{if(n){const s=n.split(Qo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function js(e){let t="";if(re(e))t=e;else if(W(e))for(let n=0;n<e.length;n++){const s=js(e[n]);s&&(t+=s+" ")}else if(ne(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const tl="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",nl=Ns(tl);function fi(e){return!!e||e===""}const ui=e=>!!(e&&e.__v_isRef===!0),sl=e=>re(e)?e:e==null?"":W(e)||ne(e)&&(e.toString===li||!q(e.toString))?ui(e)?sl(e.value):JSON.stringify(e,di,2):String(e),di=(e,t)=>ui(t)?di(e,t.value):Tt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[zn(s,i)+" =>"]=r,n),{})}:ii(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>zn(n))}:Xe(t)?zn(t):ne(t)&&!W(t)&&!ci(t)?String(t):t,zn=(e,t="")=>{var n;return Xe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class rl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0}}}function hi(){return we}function il(e,t=!1){we&&we.cleanups.push(e)}let te;const Qn=new WeakSet;class pi{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,we&&we.active&&we.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Qn.has(this)&&(Qn.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||mi(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,fr(this),yi(this);const t=te,n=Ne;te=this,Ne=!0;try{return this.fn()}finally{vi(this),te=t,Ne=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)ks(t);this.deps=this.depsTail=void 0,fr(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Qn.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){_s(this)&&this.run()}get dirty(){return _s(this)}}let gi=0,Dt,jt;function mi(e,t=!1){if(e.flags|=8,t){e.next=jt,jt=e;return}e.next=Dt,Dt=e}function Vs(){gi++}function Us(){if(--gi>0)return;if(jt){let t=jt;for(jt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Dt;){let t=Dt;for(Dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function yi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function vi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ks(s),ol(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function _s(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(_i(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function _i(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kt))return;e.globalVersion=Kt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!_s(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{yi(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,vi(e),e.flags&=-3}}function ks(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)ks(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ol(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const bi=[];function rt(){bi.push(Ne),Ne=!1}function it(){const e=bi.pop();Ne=e===void 0?!0:e}function fr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Kt=0;class ll{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class $n{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new ll(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,wi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Kt++,this.notify(t)}notify(t){Vs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Us()}}}function wi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)wi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Cn=new WeakMap,dt=Symbol(""),bs=Symbol(""),qt=Symbol("");function me(e,t,n){if(Ne&&te){let s=Cn.get(e);s||Cn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new $n),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Cn.get(e);if(!o){Kt++;return}const l=c=>{c&&c.trigger()};if(Vs(),t==="clear")o.forEach(l);else{const c=W(e),f=c&&$s(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,y)=>{(y==="length"||y===qt||!Xe(y)&&y>=a)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),f&&l(o.get(qt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(dt)),Tt(e)&&l(o.get(bs)));break;case"delete":c||(l(o.get(dt)),Tt(e)&&l(o.get(bs)));break;case"set":Tt(e)&&l(o.get(dt));break}}Us()}function cl(e,t){const n=Cn.get(e);return n&&n.get(t)}function _t(e){const t=J(e);return t===e?t:(me(t,"iterate",qt),Pe(e)?t:t.map(ye))}function Dn(e){return me(e=J(e),"iterate",qt),e}const al={__proto__:null,[Symbol.iterator](){return Zn(this,Symbol.iterator,ye)},concat(...e){return _t(this).concat(...e.map(t=>W(t)?_t(t):t))},entries(){return Zn(this,"entries",e=>(e[1]=ye(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(ye),arguments)},find(e,t){return We(this,"find",e,t,ye,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,ye,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return es(this,"includes",e)},indexOf(...e){return es(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return es(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ft(this,"pop")},push(...e){return Ft(this,"push",e)},reduce(e,...t){return ur(this,"reduce",e,t)},reduceRight(e,...t){return ur(this,"reduceRight",e,t)},shift(){return Ft(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ft(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ft(this,"unshift",e)},values(){return Zn(this,"values",ye)}};function Zn(e,t,n){const s=Dn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const fl=Array.prototype;function We(e,t,n,s,r,i){const o=Dn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==fl[t]){const h=c.apply(e,i);return l?ye(h):h}let f=n;o!==e&&(l?f=function(h,y){return n.call(this,ye(h),y,e)}:n.length>2&&(f=function(h,y){return n.call(this,h,y,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function ur(e,t,n,s){const r=Dn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ye(l),c,e)}),r[t](i,...s)}function es(e,t,n){const s=J(e);me(s,"iterate",qt);const r=s[t](...n);return(r===-1||r===!1)&&Ks(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function Ft(e,t,n=[]){rt(),Vs();const s=J(e)[t].apply(e,n);return Us(),it(),s}const ul=Ns("__proto__,__v_isRef,__isVue"),Si=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xe));function dl(e){Xe(e)||(e=String(e));const t=J(this);return me(t,"has",e),t.hasOwnProperty(e)}class xi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Sl:Ai:i?Ci:Ti).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=W(t);if(!r){let c;if(o&&(c=al[n]))return c;if(n==="hasOwnProperty")return dl}const l=Reflect.get(t,n,fe(t)?t:s);return(Xe(n)?Si.has(n):ul(n))||(r||me(t,"get",n),i)?l:fe(l)?o&&$s(n)?l:l.value:ne(l)?r?Vn(l):jn(l):l}}class Ei extends xi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=yt(i);if(!Pe(s)&&!yt(s)&&(i=J(i),s=J(s)),!W(t)&&fe(i)&&!fe(s))return c?!1:(i.value=s,!0)}const o=W(t)&&$s(n)?Number(n)<t.length:z(t,n),l=Reflect.set(t,n,s,fe(t)?t:r);return t===J(r)&&(o?tt(s,i)&&Ge(t,"set",n,s):Ge(t,"add",n,s)),l}deleteProperty(t,n){const s=z(t,n);t[n];const r=Reflect.deleteProperty(t,n);return r&&s&&Ge(t,"delete",n,void 0),r}has(t,n){const s=Reflect.has(t,n);return(!Xe(n)||!Si.has(n))&&me(t,"has",n),s}ownKeys(t){return me(t,"iterate",W(t)?"length":dt),Reflect.ownKeys(t)}}class hl extends xi{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const pl=new Ei,gl=new hl,ml=new Ei(!0);const ws=e=>e,cn=e=>Reflect.getPrototypeOf(e);function yl(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=Tt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?ws:t?Ss:ye;return!t&&me(i,"iterate",c?bs:dt),{next(){const{value:h,done:y}=f.next();return y?{value:h,done:y}:{value:l?[a(h[0]),a(h[1])]:a(h),done:y}},[Symbol.iterator](){return this}}}}function an(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function vl(e,t){const n={get(r){const i=this.__v_raw,o=J(i),l=J(r);e||(tt(r,l)&&me(o,"get",r),me(o,"get",l));const{has:c}=cn(o),f=t?ws:e?Ss:ye;if(c.call(o,r))return f(i.get(r));if(c.call(o,l))return f(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&me(J(r),"iterate",dt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=J(i),l=J(r);return e||(tt(r,l)&&me(o,"has",r),me(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=J(l),f=t?ws:e?Ss:ye;return!e&&me(c,"iterate",dt),l.forEach((a,h)=>r.call(i,f(a),f(h),o))}};return ae(n,e?{add:an("add"),set:an("set"),delete:an("delete"),clear:an("clear")}:{add(r){!t&&!Pe(r)&&!yt(r)&&(r=J(r));const i=J(this);return cn(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Pe(i)&&!yt(i)&&(i=J(i));const o=J(this),{has:l,get:c}=cn(o);let f=l.call(o,r);f||(r=J(r),f=l.call(o,r));const a=c.call(o,r);return o.set(r,i),f?tt(i,a)&&Ge(o,"set",r,i):Ge(o,"add",r,i),this},delete(r){const i=J(this),{has:o,get:l}=cn(i);let c=o.call(i,r);c||(r=J(r),c=o.call(i,r)),l&&l.call(i,r);const f=i.delete(r);return c&&Ge(i,"delete",r,void 0),f},clear(){const r=J(this),i=r.size!==0,o=r.clear();return i&&Ge(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=yl(r,e,t)}),n}function Bs(e,t){const n=vl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(z(n,r)&&r in s?n:s,r,i)}const _l={get:Bs(!1,!1)},bl={get:Bs(!1,!0)},wl={get:Bs(!0,!1)};const Ti=new WeakMap,Ci=new WeakMap,Ai=new WeakMap,Sl=new WeakMap;function xl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function El(e){return e.__v_skip||!Object.isExtensible(e)?0:xl(Go(e))}function jn(e){return yt(e)?e:Ws(e,!1,pl,_l,Ti)}function Tl(e){return Ws(e,!1,ml,bl,Ci)}function Vn(e){return Ws(e,!0,gl,wl,Ai)}function Ws(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=El(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function ht(e){return yt(e)?ht(e.__v_raw):!!(e&&e.__v_isReactive)}function yt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ks(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function wn(e){return!z(e,"__v_skip")&&Object.isExtensible(e)&&ai(e,"__v_skip",!0),e}const ye=e=>ne(e)?jn(e):e,Ss=e=>ne(e)?Vn(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function oe(e){return Ri(e,!1)}function qs(e){return Ri(e,!0)}function Ri(e,t){return fe(e)?e:new Cl(e,t)}class Cl{constructor(t,n){this.dep=new $n,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:ye(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||yt(t);t=s?t:J(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:ye(t),this.dep.trigger())}}function Oi(e){return fe(e)?e.value:e}const Al={get:(e,t,n)=>t==="__v_raw"?e:Oi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Mi(e){return ht(e)?e:new Proxy(e,Al)}class Rl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new $n,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Ol(e){return new Rl(e)}class Ml{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return cl(J(this._object),this._key)}}class Pl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ll(e,t,n){return fe(e)?e:q(e)?new Pl(e):ne(e)&&arguments.length>1?Il(e,t,n):oe(e)}function Il(e,t,n){const s=e[t];return fe(s)?s:new Ml(e,t,n)}class Nl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new $n(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return mi(this,!0),!0}get value(){const t=this.dep.track();return _i(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Fl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Nl(s,r,n)}const fn={},An=new WeakMap;let ft;function Hl(e,t=!1,n=ft){if(n){let s=An.get(n);s||An.set(n,s=[]),s.push(e)}}function $l(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=g=>r?g:Pe(g)||r===!1||r===0?Ye(g,1):Ye(g);let a,h,y,v,S=!1,_=!1;if(fe(e)?(h=()=>e.value,S=Pe(e)):ht(e)?(h=()=>f(e),S=!0):W(e)?(_=!0,S=e.some(g=>ht(g)||Pe(g)),h=()=>e.map(g=>{if(fe(g))return g.value;if(ht(g))return f(g);if(q(g))return c?c(g,2):g()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(y){rt();try{y()}finally{it()}}const g=ft;ft=a;try{return c?c(e,3,[v]):e(v)}finally{ft=g}}:h=ke,t&&r){const g=h,O=r===!0?1/0:r;h=()=>Ye(g(),O)}const K=hi(),N=()=>{a.stop(),K&&K.active&&Hs(K.effects,a)};if(i&&t){const g=t;t=(...O)=>{g(...O),N()}}let j=_?new Array(e.length).fill(fn):fn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const O=a.run();if(r||S||(_?O.some((F,$)=>tt(F,j[$])):tt(O,j))){y&&y();const F=ft;ft=a;try{const $=[O,j===fn?void 0:_&&j[0]===fn?[]:j,v];c?c(t,3,$):t(...$),j=O}finally{ft=F}}}else a.run()};return l&&l(p),a=new pi(h),a.scheduler=o?()=>o(p,!1):p,v=g=>Hl(g,!1,a),y=a.onStop=()=>{const g=An.get(a);if(g){if(c)c(g,4);else for(const O of g)O();An.delete(a)}},t?s?p(!0):j=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function Ye(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,fe(e))Ye(e.value,t,n);else if(W(e))for(let s=0;s<e.length;s++)Ye(e[s],t,n);else if(ii(e)||Tt(e))e.forEach(s=>{Ye(s,t,n)});else if(ci(e)){for(const s in e)Ye(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ye(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function tn(e,t,n,s){try{return s?e(...s):e()}catch(r){nn(r,t,n)}}function He(e,t,n,s){if(q(e)){const r=tn(e,t,n,s);return r&&oi(r)&&r.catch(i=>{nn(i,t,n)}),r}if(W(e)){const r=[];for(let i=0;i<e.length;i++)r.push(He(e[i],t,n,s));return r}}function nn(e,t,n,s=!0){const r=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=t&&t.appContext.config||Z;if(t){let l=t.parent;const c=t.proxy,f=`https://vuejs.org/error-reference/#runtime-${n}`;for(;l;){const a=l.ec;if(a){for(let h=0;h<a.length;h++)if(a[h](e,c,f)===!1)return}l=l.parent}if(i){rt(),tn(i,null,10,[e,c,f]),it();return}}Dl(e,n,r,s,o)}function Dl(e,t,n,s=!0,r=!1){if(r)throw e;console.error(e)}const Se=[];let Ve=-1;const At=[];let Qe=null,wt=0;const Pi=Promise.resolve();let Rn=null;function Un(e){const t=Rn||Pi;return e?t.then(this?e.bind(this):e):t}function jl(e){let t=Ve+1,n=Se.length;for(;t<n;){const s=t+n>>>1,r=Se[s],i=Gt(r);i<e||i===e&&r.flags&2?t=s+1:n=s}return t}function Gs(e){if(!(e.flags&1)){const t=Gt(e),n=Se[Se.length-1];!n||!(e.flags&2)&&t>=Gt(n)?Se.push(e):Se.splice(jl(t),0,e),e.flags|=1,Li()}}function Li(){Rn||(Rn=Pi.then(Ii))}function Vl(e){W(e)?At.push(...e):Qe&&e.id===-1?Qe.splice(wt+1,0,e):e.flags&1||(At.push(e),e.flags|=1),Li()}function dr(e,t,n=Ve+1){for(;n<Se.length;n++){const s=Se[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;Se.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function On(e){if(At.length){const t=[...new Set(At)].sort((n,s)=>Gt(n)-Gt(s));if(At.length=0,Qe){Qe.push(...t);return}for(Qe=t,wt=0;wt<Qe.length;wt++){const n=Qe[wt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}Qe=null,wt=0}}const Gt=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Ii(e){try{for(Ve=0;Ve<Se.length;Ve++){const t=Se[Ve];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),tn(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ve<Se.length;Ve++){const t=Se[Ve];t&&(t.flags&=-2)}Ve=-1,Se.length=0,On(),Rn=null,(Se.length||At.length)&&Ii()}}let de=null,Ni=null;function Mn(e){const t=de;return de=e,Ni=e&&e.type.__scopeId||null,t}function Ul(e,t=de,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Ar(-1);const i=Mn(t);let o;try{o=e(...r)}finally{Mn(i),s._d&&Ar(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function _f(e,t){if(de===null)return e;const n=Gn(de),s=e.dirs||(e.dirs=[]);for(let r=0;r<t.length;r++){let[i,o,l,c=Z]=t[r];i&&(q(i)&&(i={mounted:i,updated:i}),i.deep&&Ye(o),s.push({dir:i,instance:n,value:o,oldValue:void 0,arg:l,modifiers:c}))}return e}function Ue(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o<r.length;o++){const l=r[o];i&&(l.oldValue=i[o].value);let c=l.dir[s];c&&(rt(),He(c,n,8,[e.el,l,e,t]),it())}}const Fi=Symbol("_vte"),Hi=e=>e.__isTeleport,Vt=e=>e&&(e.disabled||e.disabled===""),hr=e=>e&&(e.defer||e.defer===""),pr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,gr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,xs=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},$i={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:y,o:{insert:v,querySelector:S,createText:_,createComment:K}}=f,N=Vt(t.props);let{shapeFlag:j,children:p,dynamicChildren:g}=t;if(e==null){const O=t.el=_(""),F=t.anchor=_("");v(O,n,s),v(F,n,s);const $=(R,b)=>{j&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},V=()=>{const R=t.target=xs(t.props,S),b=Di(R,t,_,v);R&&(o!=="svg"&&pr(R)?o="svg":o!=="mathml"&&gr(R)&&(o="mathml"),N||($(R,b),Sn(t,!1)))};N&&($(n,F),Sn(t,!0)),hr(t.props)?be(()=>{V(),t.el.__isMounted=!0},i):V()}else{if(hr(t.props)&&!e.el.__isMounted){be(()=>{$i.process(e,t,n,s,r,i,o,l,c,f),delete e.el.__isMounted},i);return}t.el=e.el,t.targetStart=e.targetStart;const O=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,V=Vt(e.props),R=V?n:F,b=V?O:$;if(o==="svg"||pr(F)?o="svg":(o==="mathml"||gr(F))&&(o="mathml"),g?(y(e.dynamicChildren,g,R,r,i,o,l),Qs(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)V?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):un(t,n,O,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const I=t.target=xs(t.props,S);I&&un(t,I,null,f,0)}else V&&un(t,F,$,f,1);Sn(t,N)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:y}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!Vt(y);for(let S=0;S<l.length;S++){const _=l[S];s(_,t,n,v,!!_.dynamicChildren)}}},move:un,hydrate:kl};function un(e,t,n,{o:{insert:s},m:r},i=2){i===0&&s(e.targetAnchor,t,n);const{el:o,anchor:l,shapeFlag:c,children:f,props:a}=e,h=i===2;if(h&&s(o,t,n),(!h||Vt(a))&&c&16)for(let y=0;y<f.length;y++)r(f[y],t,n,2);h&&s(l,t,n)}function kl(e,t,n,s,r,i,{o:{nextSibling:o,parentNode:l,querySelector:c,insert:f,createText:a}},h){const y=t.target=xs(t.props,c);if(y){const v=Vt(t.props),S=y._lpa||y.firstChild;if(t.shapeFlag&16)if(v)t.anchor=h(o(e),t,l(e),n,s,r,i),t.targetStart=S,t.targetAnchor=S&&o(S);else{t.anchor=o(e);let _=S;for(;_;){if(_&&_.nodeType===8){if(_.data==="teleport start anchor")t.targetStart=_;else if(_.data==="teleport anchor"){t.targetAnchor=_,y._lpa=t.targetAnchor&&o(t.targetAnchor);break}}_=o(_)}t.targetAnchor||Di(y,t,a,f),h(S&&o(S),t,y,n,s,r,i)}Sn(t,v)}return t.anchor&&o(t.anchor)}const bf=$i;function Sn(e,t){const n=e.ctx;if(n&&n.ut){let s,r;for(t?(s=e.el,r=e.anchor):(s=e.targetStart,r=e.targetAnchor);s&&s!==r;)s.nodeType===1&&s.setAttribute("data-v-owner",n.uid),s=s.nextSibling;n.ut()}}function Di(e,t,n,s){const r=t.targetStart=n(""),i=t.targetAnchor=n("");return r[Fi]=i,e&&(s(r,e),s(i,e)),i}const Ze=Symbol("_leaveCb"),dn=Symbol("_enterCb");function Bl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Lt(()=>{e.isMounted=!0}),Ki(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],ji={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Vi=e=>{const t=e.subTree;return t.component?Vi(t.component):t},Wl={name:"BaseTransition",props:ji,setup(e,{slots:t}){const n=qn(),s=Bl();return()=>{const r=t.default&&Bi(t.default(),!0);if(!r||!r.length)return;const i=Ui(r),o=J(e),{mode:l}=o;if(s.isLeaving)return ts(i);const c=mr(i);if(!c)return ts(i);let f=Es(c,o,s,n,h=>f=h);c.type!==ve&&Yt(c,f);let a=n.subTree&&mr(n.subTree);if(a&&a.type!==ve&&!ut(c,a)&&Vi(n).type!==ve){let h=Es(a,o,s,n);if(Yt(a,h),l==="out-in"&&c.type!==ve)return s.isLeaving=!0,h.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete h.afterLeave,a=void 0},ts(i);l==="in-out"&&c.type!==ve?h.delayLeave=(y,v,S)=>{const _=ki(s,a);_[String(a.key)]=a,y[Ze]=()=>{v(),y[Ze]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{S(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Ui(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ve){t=n;break}}return t}const Kl=Wl;function ki(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Es(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:y,onLeave:v,onAfterLeave:S,onLeaveCancelled:_,onBeforeAppear:K,onAppear:N,onAfterAppear:j,onAppearCancelled:p}=t,g=String(e.key),O=ki(n,e),F=(R,b)=>{R&&He(R,s,9,b)},$=(R,b)=>{const I=b[1];F(R,b),W(R)?R.every(x=>x.length<=1)&&I():R.length<=1&&I()},V={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=K||c;else return;R[Ze]&&R[Ze](!0);const I=O[g];I&&ut(e,I)&&I.el[Ze]&&I.el[Ze](),F(b,[R])},enter(R){let b=f,I=a,x=h;if(!n.isMounted)if(i)b=N||f,I=j||a,x=p||h;else return;let B=!1;const se=R[dn]=le=>{B||(B=!0,le?F(x,[R]):F(I,[R]),V.delayedLeave&&V.delayedLeave(),R[dn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const I=String(e.key);if(R[dn]&&R[dn](!0),n.isUnmounting)return b();F(y,[R]);let x=!1;const B=R[Ze]=se=>{x||(x=!0,b(),se?F(_,[R]):F(S,[R]),R[Ze]=void 0,O[I]===e&&delete O[I])};O[I]=e,v?$(v,[R,B]):B()},clone(R){const b=Es(R,t,n,s,r);return r&&r(b),b}};return V}function ts(e){if(sn(e))return e=nt(e),e.children=null,e}function mr(e){if(!sn(e))return Hi(e.type)&&e.children?Ui(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Bi(e,t=!1,n){let s=[],r=0;for(let i=0;i<e.length;i++){let o=e[i];const l=n==null?o.key:String(n)+String(o.key!=null?o.key:i);o.type===xe?(o.patchFlag&128&&r++,s=s.concat(Bi(o.children,t,l))):(t||o.type!==ve)&&s.push(l!=null?nt(o,{key:l}):o)}if(r>1)for(let i=0;i<s.length;i++)s[i].patchFlag=-2;return s}/*! #__NO_SIDE_EFFECTS__ */function Ys(e,t){return q(e)?ae({name:e.name},t,{setup:e}):e}function Xs(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Xt(e,t,n,s,r=!1){if(W(e)){e.forEach((S,_)=>Xt(S,t&&(W(t)?t[_]:t),n,s,r));return}if(pt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Xt(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Gn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,y=J(h),v=h===Z?()=>!1:S=>z(y,S);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):fe(f)&&(f.value=null)),q(c))tn(c,l,12,[o,a]);else{const S=re(c),_=fe(c);if(S||_){const K=()=>{if(e.f){const N=S?v(c)?h[c]:a[c]:c.value;r?W(N)&&Hs(N,i):W(N)?N.includes(i)||N.push(i):S?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else S?(a[c]=o,v(c)&&(h[c]=o)):_&&(c.value=o,e.k&&(a[e.k]=o))};o?(K.id=-1,be(K,n)):K()}}}let yr=!1;const bt=()=>{yr||(console.error("Hydration completed but contains mismatches."),yr=!0)},ql=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Gl=e=>e.namespaceURI.includes("MathML"),hn=e=>{if(e.nodeType===1){if(ql(e))return"svg";if(Gl(e))return"mathml"}},xt=e=>e.nodeType===8;function Yl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),On(),g._vnode=p;return}h(g.firstChild,p,null,null,null),On(),g._vnode=p},h=(p,g,O,F,$,V=!1)=>{V=V||!!g.dynamicChildren;const R=xt(p)&&p.data==="[",b=()=>_(p,g,O,F,$,R),{type:I,ref:x,shapeFlag:B,patchFlag:se}=g;let le=p.nodeType;g.el=p,se===-2&&(V=!1,g.dynamicChildren=null);let U=null;switch(I){case gt:le!==3?g.children===""?(c(g.el=r(""),o(p),p),U=p):U=b():(p.data!==g.children&&(bt(),p.data=g.children),U=i(p));break;case ve:j(p)?(U=i(p),N(g.el=p.content.firstChild,p,O)):le!==8||R?U=b():U=i(p);break;case kt:if(R&&(p=i(p),le=p.nodeType),le===1||le===3){U=p;const Y=!g.children.length;for(let D=0;D<g.staticCount;D++)Y&&(g.children+=U.nodeType===1?U.outerHTML:U.data),D===g.staticCount-1&&(g.anchor=U),U=i(U);return R?i(U):U}else b();break;case xe:R?U=S(p,g,O,F,$,V):U=b();break;default:if(B&1)(le!==1||g.type.toLowerCase()!==p.tagName.toLowerCase())&&!j(p)?U=b():U=y(p,g,O,F,$,V);else if(B&6){g.slotScopeIds=$;const Y=o(p);if(R?U=K(p):xt(p)&&p.data==="teleport start"?U=K(p,p.data,"teleport end"):U=i(p),t(g,Y,null,O,F,hn(Y),V),pt(g)&&!g.type.__asyncResolved){let D;R?(D=ce(xe),D.anchor=U?U.previousSibling:Y.lastChild):D=p.nodeType===3?_o(""):ce("div"),D.el=p,g.component.subTree=D}}else B&64?le!==8?U=b():U=g.type.hydrate(p,g,O,F,$,V,e,v):B&128&&(U=g.type.hydrate(p,g,O,F,hn(o(p)),$,V,e,h))}return x!=null&&Xt(x,null,F,g),U},y=(p,g,O,F,$,V)=>{V=V||!!g.dynamicChildren;const{type:R,props:b,patchFlag:I,shapeFlag:x,dirs:B,transition:se}=g,le=R==="input"||R==="option";if(le||I!==-1){B&&Ue(g,null,O,"created");let U=!1;if(j(p)){U=co(null,se)&&O&&O.vnode.props&&O.vnode.props.appear;const D=p.content.firstChild;U&&se.beforeEnter(D),N(D,p,O),g.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,g,p,O,F,$,V);for(;D;){pn(p,1)||bt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=g.children;D[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(pn(p,0)||bt(),p.textContent=g.children)}if(b){if(le||!V||I&48){const D=p.tagName.includes("-");for(const he in b)(le&&(he.endsWith("value")||he==="indeterminate")||en(he)&&!Ct(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,O)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,O);else if(I&4&&ht(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,O,g),B&&Ue(g,null,O,"beforeMount"),((Y=b&&b.onVnodeMounted)||B||U)&&go(()=>{Y&&Oe(Y,O,g),U&&se.enter(p),B&&Ue(g,null,O,"mounted")},F)}return p.nextSibling},v=(p,g,O,F,$,V,R)=>{R=R||!!g.dynamicChildren;const b=g.children,I=b.length;for(let x=0;x<I;x++){const B=R?b[x]:b[x]=Me(b[x]),se=B.type===gt;p?(se&&!R&&x+1<I&&Me(b[x+1]).type===gt&&(c(r(p.data.slice(B.children.length)),O,i(p)),p.data=B.children),p=h(p,B,F,$,V,R)):se&&!B.children?c(B.el=r(""),O):(pn(O,1)||bt(),n(null,B,O,null,F,$,hn(O),V))}return p},S=(p,g,O,F,$,V)=>{const{slotScopeIds:R}=g;R&&($=$?$.concat(R):R);const b=o(p),I=v(i(p),g,b,O,F,$,V);return I&&xt(I)&&I.data==="]"?i(g.anchor=I):(bt(),c(g.anchor=f("]"),b,I),I)},_=(p,g,O,F,$,V)=>{if(pn(p.parentElement,1)||bt(),g.el=null,V){const I=K(p);for(;;){const x=i(p);if(x&&x!==I)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,g,b,R,O,F,hn(b),$),O&&(O.vnode.el=g.el,ho(O,g.el)),R},K=(p,g="[",O="]")=>{let F=0;for(;p;)if(p=i(p),p&&xt(p)&&(p.data===g&&F++,p.data===O)){if(F===0)return i(p);F--}return p},N=(p,g,O)=>{const F=g.parentNode;F&&F.replaceChild(p,g);let $=O;for(;$;)$.vnode.el===g&&($.vnode.el=$.subTree.el=p),$=$.parent},j=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const vr="data-allow-mismatch",Xl={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function pn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(vr);)e=e.parentElement;const n=e&&e.getAttribute(vr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(Xl[t])}}Hn().requestIdleCallback;Hn().cancelIdleCallback;function Jl(e,t){if(xt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(xt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const pt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function wf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const y=()=>(h++,f=null,v()),v=()=>{let S;return f||(S=f=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),c)return new Promise((K,N)=>{c(_,()=>K(y()),()=>N(_),h+1)});throw _}).then(_=>S!==f&&f?f:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),a=_,_)))};return Ys({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(S,_,K){const N=i?()=>{const j=i(K,p=>Jl(S,p));j&&(_.bum||(_.bum=[])).push(j)}:K;a?N():v().then(()=>!_.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const S=ue;if(Xs(S),a)return()=>ns(a,S);const _=p=>{f=null,nn(p,S,13,!s)};if(l&&S.suspense||Mt)return v().then(p=>()=>ns(p,S)).catch(p=>(_(p),()=>s?ce(s,{error:p}):null));const K=oe(!1),N=oe(),j=oe(!!r);return r&&setTimeout(()=>{j.value=!1},r),o!=null&&setTimeout(()=>{if(!K.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);_(p),N.value=p}},o),v().then(()=>{K.value=!0,S.parent&&sn(S.parent.vnode)&&S.parent.update()}).catch(p=>{_(p),N.value=p}),()=>{if(K.value&&a)return ns(a,S);if(N.value&&s)return ce(s,{error:N.value});if(n&&!j.value)return ce(n)}}})}function ns(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ce(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const sn=e=>e.type.__isKeepAlive;function zl(e,t){Wi(e,"a",t)}function Ql(e,t){Wi(e,"da",t)}function Wi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(kn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)sn(r.parent.vnode)&&Zl(s,t,n,r),r=r.parent}}function Zl(e,t,n,s){const r=kn(t,e,s,!0);Bn(()=>{Hs(s[t],r)},n)}function kn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{rt();const l=rn(n),c=He(t,n,e,o);return l(),it(),c});return s?r.unshift(i):r.push(i),i}}const Je=e=>(t,n=ue)=>{(!Mt||e==="sp")&&kn(e,(...s)=>t(...s),n)},ec=Je("bm"),Lt=Je("m"),tc=Je("bu"),nc=Je("u"),Ki=Je("bum"),Bn=Je("um"),sc=Je("sp"),rc=Je("rtg"),ic=Je("rtc");function oc(e,t=ue){kn("ec",e,t)}const qi="components";function Sf(e,t){return Yi(qi,e,!0,t)||e}const Gi=Symbol.for("v-ndc");function xf(e){return re(e)?Yi(qi,e,!1)||e:e||Gi}function Yi(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=Wc(i,!1);if(l&&(l===t||l===Le(t)||l===Fn(Le(t))))return i}const o=_r(r[e]||i[e],t)||_r(r.appContext[e],t);return!o&&s?i:o}}function _r(e,t){return e&&(e[t]||e[Le(t)]||e[Fn(Le(t))])}function Ef(e,t,n,s){let r;const i=n,o=W(e);if(o||re(e)){const l=o&&ht(e);let c=!1;l&&(c=!Pe(e),e=Dn(e)),r=new Array(e.length);for(let f=0,a=e.length;f<a;f++)r[f]=t(c?ye(e[f]):e[f],f,void 0,i)}else if(typeof e=="number"){r=new Array(e);for(let l=0;l<e;l++)r[l]=t(l+1,l,void 0,i)}else if(ne(e))if(e[Symbol.iterator])r=Array.from(e,(l,c)=>t(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;c<f;c++){const a=l[c];r[c]=t(e[a],a,c,i)}}else r=[];return r}function Tf(e,t,n={},s,r){if(de.ce||de.parent&&pt(de.parent)&&de.parent.ce)return t!=="default"&&(n.name=t),Os(),Ms(xe,null,[ce("slot",n,s&&s())],64);let i=e[t];i&&i._c&&(i._d=!1),Os();const o=i&&Xi(i(n)),l=n.key||o&&o.key,c=Ms(xe,{key:(l&&!Xe(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Xi(e){return e.some(t=>zt(t)?!(t.type===ve||t.type===xe&&!Xi(t.children)):!0)?e:null}function Cf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:_n(s)]=e[s];return n}const Ts=e=>e?bo(e)?Gn(e):Ts(e.parent):null,Ut=ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ts(e.parent),$root:e=>Ts(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Js(e),$forceUpdate:e=>e.f||(e.f=()=>{Gs(e.update)}),$nextTick:e=>e.n||(e.n=Un.bind(e.proxy)),$watch:e=>Rc.bind(e)}),ss=(e,t)=>e!==Z&&!e.__isScriptSetup&&z(e,t),lc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ss(s,t))return o[t]=1,s[t];if(r!==Z&&z(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&z(f,t))return o[t]=3,i[t];if(n!==Z&&z(n,t))return o[t]=4,n[t];Cs&&(o[t]=0)}}const a=Ut[t];let h,y;if(a)return t==="$attrs"&&me(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&z(n,t))return o[t]=4,n[t];if(y=c.config.globalProperties,z(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ss(r,t)?(r[t]=n,!0):s!==Z&&z(s,t)?(s[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&z(e,o)||ss(t,o)||(l=i[0])&&z(l,o)||z(s,o)||z(Ut,o)||z(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Af(){return cc().slots}function cc(){const e=qn();return e.setupContext||(e.setupContext=So(e))}function br(e){return W(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Cs=!0;function ac(e){const t=Js(e),n=e.proxy,s=e.ctx;Cs=!1,t.beforeCreate&&wr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:y,beforeUpdate:v,updated:S,activated:_,deactivated:K,beforeDestroy:N,beforeUnmount:j,destroyed:p,unmounted:g,render:O,renderTracked:F,renderTriggered:$,errorCaptured:V,serverPrefetch:R,expose:b,inheritAttrs:I,components:x,directives:B,filters:se}=t;if(f&&fc(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=jn(Y))}if(Cs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):ke,on=!q(D)&&q(D.set)?D.set.bind(n):ke,ot=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>ot.value,set:De=>ot.value=De})}if(l)for(const Y in l)Ji(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{mc(D,Y[D])})}a&&wr(a,e,"c");function U(Y,D){W(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(U(ec,h),U(Lt,y),U(tc,v),U(nc,S),U(zl,_),U(Ql,K),U(oc,V),U(ic,F),U(rc,$),U(Ki,j),U(Bn,g),U(sc,R),W(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});O&&e.render===ke&&(e.render=O),I!=null&&(e.inheritAttrs=I),x&&(e.components=x),B&&(e.directives=B),R&&Xs(e)}function fc(e,t,n=ke){W(e)&&(e=As(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Ot(r.from||s,r.default,!0):i=Ot(r.from||s):i=Ot(r),fe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function wr(e,t,n){He(W(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ji(e,t,n,s){let r=s.includes(".")?fo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Fe(r,i)}else if(q(e))Fe(r,e.bind(n));else if(ne(e))if(W(e))e.forEach(i=>Ji(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Fe(r,i,e)}}function Js(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Pn(c,f,o,!0)),Pn(c,t,o)),ne(t)&&i.set(t,c),c}function Pn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Pn(e,i,n,!0),r&&r.forEach(o=>Pn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=uc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const uc={data:Sr,props:xr,emits:xr,methods:$t,computed:$t,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:$t,directives:$t,watch:hc,provide:Sr,inject:dc};function Sr(e,t){return t?e?function(){return ae(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function dc(e,t){return $t(As(e),As(t))}function As(e){if(W(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function _e(e,t){return e?[...new Set([].concat(e,t))]:t}function $t(e,t){return e?ae(Object.create(null),e,t):t}function xr(e,t){return e?W(e)&&W(t)?[...new Set([...e,...t])]:ae(Object.create(null),br(e),br(t??{})):t}function hc(e,t){if(!e)return t;if(!t)return e;const n=ae(Object.create(null),e);for(const s in t)n[s]=_e(e[s],t[s]);return n}function zi(){return{app:null,config:{isNativeTag:Ko,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let pc=0;function gc(e,t){return function(s,r=null){q(s)||(s=ae({},s)),r!=null&&!ne(r)&&(r=null);const i=zi(),o=new WeakSet,l=[];let c=!1;const f=i.app={_uid:pc++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:qc,get config(){return i.config},set config(a){},use(a,...h){return o.has(a)||(a&&q(a.install)?(o.add(a),a.install(f,...h)):q(a)&&(o.add(a),a(f,...h))),f},mixin(a){return i.mixins.includes(a)||i.mixins.push(a),f},component(a,h){return h?(i.components[a]=h,f):i.components[a]},directive(a,h){return h?(i.directives[a]=h,f):i.directives[a]},mount(a,h,y){if(!c){const v=f._ceVNode||ce(s,r);return v.appContext=i,y===!0?y="svg":y===!1&&(y=void 0),h&&t?t(v,a):e(v,a,y),c=!0,f._container=a,a.__vue_app__=f,Gn(v.component)}},onUnmount(a){l.push(a)},unmount(){c&&(He(l,f._instance,16),e(null,f._container),delete f._container.__vue_app__)},provide(a,h){return i.provides[a]=h,f},runWithContext(a){const h=Rt;Rt=f;try{return a()}finally{Rt=h}}};return f}}let Rt=null;function mc(e,t){if(ue){let n=ue.provides;const s=ue.parent&&ue.parent.provides;s===n&&(n=ue.provides=Object.create(s)),n[e]=t}}function Ot(e,t,n=!1){const s=ue||de;if(s||Rt){const r=Rt?Rt._context.provides:s?s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&q(t)?t.call(s&&s.proxy):t}}const Qi={},Zi=()=>Object.create(Qi),eo=e=>Object.getPrototypeOf(e)===Qi;function yc(e,t,n,s=!1){const r={},i=Zi();e.propsDefaults=Object.create(null),to(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Tl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function vc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h<a.length;h++){let y=a[h];if(Kn(e.emitsOptions,y))continue;const v=t[y];if(c)if(z(i,y))v!==i[y]&&(i[y]=v,f=!0);else{const S=Le(y);r[S]=Rs(c,l,S,v,e,!1)}else v!==i[y]&&(i[y]=v,f=!0)}}}else{to(e,t,r,i)&&(f=!0);let a;for(const h in l)(!t||!z(t,h)&&((a=st(h))===h||!z(t,a)))&&(c?n&&(n[h]!==void 0||n[a]!==void 0)&&(r[h]=Rs(c,l,h,void 0,e,!0)):delete r[h]);if(i!==l)for(const h in i)(!t||!z(t,h))&&(delete i[h],f=!0)}f&&Ge(e.attrs,"set","")}function to(e,t,n,s){const[r,i]=e.propsOptions;let o=!1,l;if(t)for(let c in t){if(Ct(c))continue;const f=t[c];let a;r&&z(r,a=Le(c))?!i||!i.includes(a)?n[a]=f:(l||(l={}))[a]=f:Kn(e.emitsOptions,c)||(!(c in s)||f!==s[c])&&(s[c]=f,o=!0)}if(i){const c=J(n),f=l||Z;for(let a=0;a<i.length;a++){const h=i[a];n[h]=Rs(r,c,h,f[h],e,!z(f,h))}}return o}function Rs(e,t,n,s,r,i){const o=e[n];if(o!=null){const l=z(o,"default");if(l&&s===void 0){const c=o.default;if(o.type!==Function&&!o.skipFactory&&q(c)){const{propsDefaults:f}=r;if(n in f)s=f[n];else{const a=rn(r);s=f[n]=c.call(null,t),a()}}else s=c;r.ce&&r.ce._setProp(n,s)}o[0]&&(i&&!l?s=!1:o[1]&&(s===""||s===st(n))&&(s=!0))}return s}const _c=new WeakMap;function no(e,t,n=!1){const s=n?_c:t.propsCache,r=s.get(e);if(r)return r;const i=e.props,o={},l=[];let c=!1;if(!q(e)){const a=h=>{c=!0;const[y,v]=no(h,t,!0);ae(o,y),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Et),Et;if(W(i))for(let a=0;a<i.length;a++){const h=Le(i[a]);Er(h)&&(o[h]=Z)}else if(i)for(const a in i){const h=Le(a);if(Er(h)){const y=i[a],v=o[h]=W(y)||q(y)?{type:y}:ae({},y),S=v.type;let _=!1,K=!0;if(W(S))for(let N=0;N<S.length;++N){const j=S[N],p=q(j)&&j.name;if(p==="Boolean"){_=!0;break}else p==="String"&&(K=!1)}else _=q(S)&&S.name==="Boolean";v[0]=_,v[1]=K,(_||z(v,"default"))&&l.push(h)}}const f=[o,l];return ne(e)&&s.set(e,f),f}function Er(e){return e[0]!=="$"&&!Ct(e)}const so=e=>e[0]==="_"||e==="$stable",zs=e=>W(e)?e.map(Me):[Me(e)],bc=(e,t,n)=>{if(t._n)return t;const s=Ul((...r)=>zs(t(...r)),n);return s._c=!1,s},ro=(e,t,n)=>{const s=e._ctx;for(const r in e){if(so(r))continue;const i=e[r];if(q(i))t[r]=bc(r,i,s);else if(i!=null){const o=zs(i);t[r]=()=>o}}},io=(e,t)=>{const n=zs(t);e.slots.default=()=>n},oo=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},wc=(e,t,n)=>{const s=e.slots=Zi();if(e.vnode.shapeFlag&32){const r=t._;r?(oo(s,t,n),n&&ai(s,"_",r,!0)):ro(t,s)}else t&&io(e,t)},Sc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:oo(r,t,n):(i=!t.$stable,ro(t,r)),o=t}else t&&(io(e,t),o={default:1});if(i)for(const l in r)!so(l)&&o[l]==null&&delete r[l]},be=go;function xc(e){return lo(e)}function Ec(e){return lo(e,Yl)}function lo(e,t){const n=Hn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:y,setScopeId:v=ke,insertStaticContent:S}=e,_=(u,d,m,T=null,w=null,E=null,P=void 0,M=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!ut(u,d)&&(T=ln(u),De(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:L}=d;switch(C){case gt:K(u,d,m,T);break;case ve:N(u,d,m,T);break;case kt:u==null&&j(d,m,T,P);break;case xe:x(u,d,m,T,w,E,P,M,A);break;default:L&1?O(u,d,m,T,w,E,P,M,A):L&6?B(u,d,m,T,w,E,P,M,A):(L&64||L&128)&&C.process(u,d,m,T,w,E,P,M,A,vt)}k!=null&&w&&Xt(k,u&&u.ref,E,d||u,!d)},K=(u,d,m,T)=>{if(u==null)s(d.el=l(d.children),m,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,m,T)=>{u==null?s(d.el=c(d.children||""),m,T):d.el=u.el},j=(u,d,m,T)=>{[u.el,u.anchor]=S(u.children,d,m,T,u.el,u.anchor)},p=({el:u,anchor:d},m,T)=>{let w;for(;u&&u!==d;)w=y(u),s(u,m,T),u=w;s(d,m,T)},g=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=y(u),r(u),u=m;r(d)},O=(u,d,m,T,w,E,P,M,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,m,T,w,E,P,M,A):R(u,d,w,E,P,M,A)},F=(u,d,m,T,w,E,P,M)=>{let A,C;const{props:k,shapeFlag:L,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),L&8?a(A,u.children):L&16&&V(u.children,A,null,T,w,rs(u,E),P,M),G&&Ue(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!Ct(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ue(u,null,T,"beforeMount");const X=co(w,H);X&&H.beforeEnter(A),s(A,d,m),((C=k&&k.onVnodeMounted)||X||G)&&be(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ue(u,null,T,"mounted")},w)},$=(u,d,m,T,w)=>{if(m&&v(u,m),T)for(let E=0;E<T.length;E++)v(u,T[E]);if(w){let E=w.subTree;if(d===E||po(E.type)&&(E.ssContent===d||E.ssFallback===d)){const P=w.vnode;$(u,P,P.scopeId,P.slotScopeIds,w.parent)}}},V=(u,d,m,T,w,E,P,M,A=0)=>{for(let C=A;C<u.length;C++){const k=u[C]=M?et(u[C]):Me(u[C]);_(null,k,d,m,T,w,E,P,M)}},R=(u,d,m,T,w,E,P)=>{const M=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const L=u.props||Z,H=d.props||Z;let G;if(m&<(m,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,m,d,u),k&&Ue(d,u,m,"beforeUpdate"),m&<(m,!0),(L.innerHTML&&H.innerHTML==null||L.textContent&&H.textContent==null)&&a(M,""),C?b(u.dynamicChildren,C,M,m,T,rs(d,w),E):P||D(u,d,M,null,m,T,rs(d,w),E,!1),A>0){if(A&16)I(M,L,H,m,w);else if(A&2&&L.class!==H.class&&i(M,"class",null,H.class,w),A&4&&i(M,"style",L.style,H.style,w),A&8){const X=d.dynamicProps;for(let ee=0;ee<X.length;ee++){const Q=X[ee],Ee=L[Q],pe=H[Q];(pe!==Ee||Q==="value")&&i(M,Q,Ee,pe,w,m)}}A&1&&u.children!==d.children&&a(M,d.children)}else!P&&C==null&&I(M,L,H,m,w);((G=H.onVnodeUpdated)||k)&&be(()=>{G&&Oe(G,m,d,u),k&&Ue(d,u,m,"updated")},T)},b=(u,d,m,T,w,E,P)=>{for(let M=0;M<d.length;M++){const A=u[M],C=d[M],k=A.el&&(A.type===xe||!ut(A,C)||A.shapeFlag&70)?h(A.el):m;_(A,C,k,null,T,w,E,P,!0)}},I=(u,d,m,T,w)=>{if(d!==m){if(d!==Z)for(const E in d)!Ct(E)&&!(E in m)&&i(u,E,d[E],null,w,T);for(const E in m){if(Ct(E))continue;const P=m[E],M=d[E];P!==M&&E!=="value"&&i(u,E,M,P,w,T)}"value"in m&&i(u,"value",d.value,m.value,w)}},x=(u,d,m,T,w,E,P,M,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:L,dynamicChildren:H,slotScopeIds:G}=d;G&&(M=M?M.concat(G):G),u==null?(s(C,m,T),s(k,m,T),V(d.children||[],m,k,w,E,P,M,A)):L>0&&L&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,m,w,E,P,M),(d.key!=null||w&&d===w.subTree)&&Qs(u,d,!0)):D(u,d,m,k,w,E,P,M,A)},B=(u,d,m,T,w,E,P,M,A)=>{d.slotScopeIds=M,u==null?d.shapeFlag&512?w.ctx.activate(d,m,T,P,A):se(d,m,T,w,E,P,A):le(u,d,A)},se=(u,d,m,T,w,E,P)=>{const M=u.component=Vc(u,T,w);if(sn(u)&&(M.ctx.renderer=vt),Uc(M,!1,P),M.asyncDep){if(w&&w.registerDep(M,U,P),!u.el){const A=M.subTree=ce(ve);N(null,A,d,m)}}else U(M,u,d,m,w,E,P)},le=(u,d,m)=>{const T=d.component=u.component;if(Ic(u,d,m))if(T.asyncDep&&!T.asyncResolved){Y(T,d,m);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},U=(u,d,m,T,w,E,P)=>{const M=()=>{if(u.isMounted){let{next:L,bu:H,u:G,parent:X,vnode:ee}=u;{const Te=ao(u);if(Te){L&&(L.el=ee.el,Y(u,L,P)),Te.asyncDep.then(()=>{u.isUnmounted||M()});return}}let Q=L,Ee;lt(u,!1),L?(L.el=ee.el,Y(u,L,P)):L=ee,H&&bn(H),(Ee=L.props&&L.props.onVnodeBeforeUpdate)&&Oe(Ee,X,L,ee),lt(u,!0);const pe=is(u),Ie=u.subTree;u.subTree=pe,_(Ie,pe,h(Ie.el),ln(Ie),u,w,E),L.el=pe.el,Q===null&&ho(u,pe.el),G&&be(G,w),(Ee=L.props&&L.props.onVnodeUpdated)&&be(()=>Oe(Ee,X,L,ee),w)}else{let L;const{el:H,props:G}=d,{bm:X,m:ee,parent:Q,root:Ee,type:pe}=u,Ie=pt(d);if(lt(u,!1),X&&bn(X),!Ie&&(L=G&&G.onVnodeBeforeMount)&&Oe(L,Q,d),lt(u,!0),H&&Jn){const Te=()=>{u.subTree=is(u),Jn(H,u.subTree,u,w,null)};Ie&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{Ee.ce&&Ee.ce._injectChildStyle(pe);const Te=u.subTree=is(u);_(null,Te,m,T,u,w,E),d.el=Te.el}if(ee&&be(ee,w),!Ie&&(L=G&&G.onVnodeMounted)){const Te=d;be(()=>Oe(L,Q,Te),w)}(d.shapeFlag&256||Q&&pt(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&be(u.a,w),u.isMounted=!0,d=m=T=null}};u.scope.on();const A=u.effect=new pi(M);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Gs(k),lt(u,!0),C()},Y=(u,d,m)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,vc(u,d.props,T,m),Sc(u,d.children,m),rt(),dr(u),it()},D=(u,d,m,T,w,E,P,M,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,L=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,L,m,T,w,E,P,M,A);return}else if(H&256){he(C,L,m,T,w,E,P,M,A);return}}G&8?(k&16&&It(C,w,E),L!==C&&a(m,L)):k&16?G&16?on(C,L,m,T,w,E,P,M,A):It(C,w,E,!0):(k&8&&a(m,""),G&16&&V(L,m,T,w,E,P,M,A))},he=(u,d,m,T,w,E,P,M,A)=>{u=u||Et,d=d||Et;const C=u.length,k=d.length,L=Math.min(C,k);let H;for(H=0;H<L;H++){const G=d[H]=A?et(d[H]):Me(d[H]);_(u[H],G,m,null,w,E,P,M,A)}C>k?It(u,w,E,!0,!1,L):V(d,m,T,w,E,P,M,A,L)},on=(u,d,m,T,w,E,P,M,A)=>{let C=0;const k=d.length;let L=u.length-1,H=k-1;for(;C<=L&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(ut(G,X))_(G,X,m,null,w,E,P,M,A);else break;C++}for(;C<=L&&C<=H;){const G=u[L],X=d[H]=A?et(d[H]):Me(d[H]);if(ut(G,X))_(G,X,m,null,w,E,P,M,A);else break;L--,H--}if(C>L){if(C<=H){const G=H+1,X=G<k?d[G].el:T;for(;C<=H;)_(null,d[C]=A?et(d[C]):Me(d[C]),m,X,w,E,P,M,A),C++}}else if(C>H)for(;C<=L;)De(u[C],w,E,!0),C++;else{const G=C,X=C,ee=new Map;for(C=X;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,Ee=0;const pe=H-X+1;let Ie=!1,Te=0;const Nt=new Array(pe);for(C=0;C<pe;C++)Nt[C]=0;for(C=G;C<=L;C++){const Ce=u[C];if(Ee>=pe){De(Ce,w,E,!0);continue}let je;if(Ce.key!=null)je=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Nt[Q-X]===0&&ut(Ce,d[Q])){je=Q;break}je===void 0?De(Ce,w,E,!0):(Nt[je-X]=C+1,je>=Te?Te=je:Ie=!0,_(Ce,d[je],m,null,w,E,P,M,A),Ee++)}const lr=Ie?Tc(Nt):Et;for(Q=lr.length-1,C=pe-1;C>=0;C--){const Ce=X+C,je=d[Ce],cr=Ce+1<k?d[Ce+1].el:T;Nt[C]===0?_(null,je,m,cr,w,E,P,M,A):Ie&&(Q<0||C!==lr[Q]?ot(je,m,cr,2):Q--)}}},ot=(u,d,m,T,w=null)=>{const{el:E,type:P,transition:M,children:A,shapeFlag:C}=u;if(C&6){ot(u.component.subTree,d,m,T);return}if(C&128){u.suspense.move(d,m,T);return}if(C&64){P.move(u,d,m,vt);return}if(P===xe){s(E,d,m);for(let L=0;L<A.length;L++)ot(A[L],d,m,T);s(u.anchor,d,m);return}if(P===kt){p(u,d,m);return}if(T!==2&&C&1&&M)if(T===0)M.beforeEnter(E),s(E,d,m),be(()=>M.enter(E),w);else{const{leave:L,delayLeave:H,afterLeave:G}=M,X=()=>s(E,d,m),ee=()=>{L(E,()=>{X(),G&&G()})};H?H(E,X,ee):ee()}else s(E,d,m)},De=(u,d,m,T=!1,w=!1)=>{const{type:E,props:P,ref:M,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:L,dirs:H,cacheIndex:G}=u;if(L===-2&&(w=!1),M!=null&&Xt(M,null,m,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,ee=!pt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)Wo(u.component,m,T);else{if(k&128){u.suspense.unmount(m,T);return}X&&Ue(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,m,vt,T):C&&!C.hasOnce&&(E!==xe||L>0&&L&64)?It(C,d,m,!1,!0):(E===xe&&L&384||!w&&k&16)&&It(A,d,m),T&&ir(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&be(()=>{Q&&Oe(Q,d,u),X&&Ue(u,null,d,"unmounted")},m)},ir=u=>{const{type:d,el:m,anchor:T,transition:w}=u;if(d===xe){Bo(m,T);return}if(d===kt){g(u);return}const E=()=>{r(m),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:M}=w,A=()=>P(m,E);M?M(u.el,E,A):A()}else E()},Bo=(u,d)=>{let m;for(;u!==d;)m=y(u),r(u),u=m;r(d)},Wo=(u,d,m)=>{const{bum:T,scope:w,job:E,subTree:P,um:M,m:A,a:C}=u;Tr(A),Tr(C),T&&bn(T),w.stop(),E&&(E.flags|=8,De(P,u,d,m)),M&&be(M,d),be(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},It=(u,d,m,T=!1,w=!1,E=0)=>{for(let P=E;P<u.length;P++)De(u[P],d,m,T,w)},ln=u=>{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=y(u.anchor||u.el),m=d&&d[Fi];return m?y(m):d};let Yn=!1;const or=(u,d,m)=>{u==null?d._vnode&&De(d._vnode,null,null,!0):_(d._vnode||null,u,d,null,null,null,m),d._vnode=u,Yn||(Yn=!0,dr(),On(),Yn=!1)},vt={p:_,um:De,m:ot,r:ir,mt:se,mc:V,pc:D,pbc:b,n:ln,o:e};let Xn,Jn;return t&&([Xn,Jn]=t(vt)),{render:or,hydrate:Xn,createApp:gc(or,Xn)}}function rs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function lt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function co(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Qs(e,t,n=!1){const s=e.children,r=t.children;if(W(s)&&W(r))for(let i=0;i<s.length;i++){const o=s[i];let l=r[i];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=r[i]=et(r[i]),l.el=o.el),!n&&l.patchFlag!==-2&&Qs(o,l)),l.type===gt&&(l.el=o.el)}}function Tc(e){const t=e.slice(),n=[0];let s,r,i,o,l;const c=e.length;for(s=0;s<c;s++){const f=e[s];if(f!==0){if(r=n[n.length-1],e[r]<f){t[s]=r,n.push(s);continue}for(i=0,o=n.length-1;i<o;)l=i+o>>1,e[n[l]]<f?i=l+1:o=l;f<e[n[i]]&&(i>0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function ao(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ao(t)}function Tr(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}const Cc=Symbol.for("v-scx"),Ac=()=>Ot(Cc);function Zs(e,t){return Wn(e,null,t)}function Rf(e,t){return Wn(e,null,{flush:"post"})}function Fe(e,t,n){return Wn(e,t,n)}function Wn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=ae({},n),c=t&&s||!t&&i!=="post";let f;if(Mt){if(i==="sync"){const v=Ac();f=v.__watcherHandles||(v.__watcherHandles=[])}else if(!c){const v=()=>{};return v.stop=ke,v.resume=ke,v.pause=ke,v}}const a=ue;l.call=(v,S,_)=>He(v,a,S,_);let h=!1;i==="post"?l.scheduler=v=>{be(v,a&&a.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(v,S)=>{S?v():Gs(v)}),l.augmentJob=v=>{t&&(v.flags|=4),h&&(v.flags|=2,a&&(v.id=a.uid,v.i=a))};const y=$l(e,t,l);return Mt&&(f?f.push(y):c&&y()),y}function Rc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?fo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=rn(this),l=Wn(r,i.bind(s),n);return o(),l}function fo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r<n.length&&s;r++)s=s[n[r]];return s}}const Oc=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Le(t)}Modifiers`]||e[`${st(t)}Modifiers`];function Mc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&Oc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(vs)));let l,c=s[l=_n(t)]||s[l=_n(Le(t))];!c&&i&&(c=s[l=_n(st(t))]),c&&He(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,He(f,e,6,r)}}function uo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=uo(f,t,!0);a&&(l=!0,ae(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(W(i)?i.forEach(c=>o[c]=null):ae(o,i),ne(e)&&s.set(e,o),o)}function Kn(e,t){return!e||!en(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,st(t))||z(e,t))}function is(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:y,setupState:v,ctx:S,inheritAttrs:_}=e,K=Mn(e);let N,j;try{if(n.shapeFlag&4){const g=r||s,O=g;N=Me(f.call(O,g,a,h,v,y,S)),j=l}else{const g=t;N=Me(g.length>1?g(h,{attrs:l,slots:o,emit:c}):g(h,null)),j=t.props?l:Pc(l)}}catch(g){Bt.length=0,nn(g,e,1),N=ce(ve)}let p=N;if(j&&_!==!1){const g=Object.keys(j),{shapeFlag:O}=p;g.length&&O&7&&(i&&g.some(Fs)&&(j=Lc(j,i)),p=nt(p,j,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,Mn(K),N}const Pc=e=>{let t;for(const n in e)(n==="class"||n==="style"||en(n))&&((t||(t={}))[n]=e[n]);return t},Lc=(e,t)=>{const n={};for(const s in e)(!Fs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ic(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Cr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;h<a.length;h++){const y=a[h];if(o[y]!==s[y]&&!Kn(f,y))return!0}}}else return(r||l)&&(!l||!l.$stable)?!0:s===o?!1:s?o?Cr(s,o,f):!0:!!o;return!1}function Cr(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let r=0;r<s.length;r++){const i=s[r];if(t[i]!==e[i]&&!Kn(n,i))return!0}return!1}function ho({vnode:e,parent:t},n){for(;t;){const s=t.subTree;if(s.suspense&&s.suspense.activeBranch===e&&(s.el=e.el),s===e)(e=t.vnode).el=n,t=t.parent;else break}}const po=e=>e.__isSuspense;function go(e,t){t&&t.pendingBranch?W(e)?t.effects.push(...e):t.effects.push(e):Vl(e)}const xe=Symbol.for("v-fgt"),gt=Symbol.for("v-txt"),ve=Symbol.for("v-cmt"),kt=Symbol.for("v-stc"),Bt=[];let Ae=null;function Os(e=!1){Bt.push(Ae=e?null:[])}function Nc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let Jt=1;function Ar(e,t=!1){Jt+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function mo(e){return e.dynamicChildren=Jt>0?Ae||Et:null,Nc(),Jt>0&&Ae&&Ae.push(e),e}function Of(e,t,n,s,r,i){return mo(vo(e,t,n,s,r,i,!0))}function Ms(e,t,n,s,r){return mo(ce(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function ut(e,t){return e.type===t.type&&e.key===t.key}const yo=({key:e})=>e??null,xn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||fe(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function vo(e,t=null,n=null,s=0,r=null,i=e===xe?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&yo(t),ref:t&&xn(t),scopeId:Ni,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(er(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Jt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const ce=Fc;function Fc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Gi)&&(e=ve),zt(e)){const l=nt(e,t,!0);return n&&er(l,n),Jt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(Kc(e)&&(e=e.__vccOpts),t){t=Hc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=js(l)),ne(c)&&(Ks(c)&&!W(c)&&(c=ae({},c)),t.style=Ds(c))}const o=re(e)?1:po(e)?128:Hi(e)?64:ne(e)?4:q(e)?2:0;return vo(e,t,n,s,r,o,i,!0)}function Hc(e){return e?Ks(e)||eo(e)?ae({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?$c(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&yo(f),ref:t&&t.ref?n&&i?W(i)?i.concat(xn(t)):[i,xn(t)]:xn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==xe?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function _o(e=" ",t=0){return ce(gt,null,e,t)}function Mf(e,t){const n=ce(kt,null,e);return n.staticCount=t,n}function Pf(e="",t=!1){return t?(Os(),Ms(ve,null,e)):ce(ve,null,e)}function Me(e){return e==null||typeof e=="boolean"?ce(ve):W(e)?ce(xe,null,e.slice()):zt(e)?et(e):ce(gt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function er(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(W(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),er(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!eo(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[_o(t)]):n=8);e.children=t,e.shapeFlag|=n}function $c(...e){const t={};for(let n=0;n<e.length;n++){const s=e[n];for(const r in s)if(r==="class")t.class!==s.class&&(t.class=js([t.class,s.class]));else if(r==="style")t.style=Ds([t.style,s.style]);else if(en(r)){const i=t[r],o=s[r];o&&i!==o&&!(W(i)&&i.includes(o))&&(t[r]=i?[].concat(i,o):o)}else r!==""&&(t[r]=s[r])}return t}function Oe(e,t,n,s=null){He(e,t,7,[n,s])}const Dc=zi();let jc=0;function Vc(e,t,n){const s=e.type,r=(t?t.appContext:e.appContext)||Dc,i={uid:jc++,vnode:e,type:s,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new rl(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:no(s,r),emitsOptions:uo(s,r),emit:null,emitted:null,propsDefaults:Z,inheritAttrs:s.inheritAttrs,ctx:Z,data:Z,props:Z,attrs:Z,slots:Z,refs:Z,setupState:Z,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=Mc.bind(null,i),e.ce&&e.ce(i),i}let ue=null;const qn=()=>ue||de;let Ln,Ps;{const e=Hn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Ln=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ps=t("__VUE_SSR_SETTERS__",n=>Mt=n)}const rn=e=>{const t=ue;return Ln(e),e.scope.on(),()=>{e.scope.off(),Ln(t)}},Rr=()=>{ue&&ue.scope.off(),Ln(null)};function bo(e){return e.vnode.shapeFlag&4}let Mt=!1;function Uc(e,t=!1,n=!1){t&&Ps(t);const{props:s,children:r}=e.vnode,i=bo(e);yc(e,s,i,t),wc(e,r,n);const o=i?kc(e,t):void 0;return t&&Ps(!1),o}function kc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,lc);const{setup:s}=n;if(s){rt();const r=e.setupContext=s.length>1?So(e):null,i=rn(e),o=tn(s,e,0,[e.props,r]),l=oi(o);if(it(),i(),(l||e.sp)&&!pt(e)&&Xs(e),l){if(o.then(Rr,Rr),t)return o.then(c=>{Or(e,c,t)}).catch(c=>{nn(c,e,0)});e.asyncDep=o}else Or(e,o,t)}else wo(e,t)}function Or(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Mi(t)),wo(e,n)}let Mr;function wo(e,t,n){const s=e.type;if(!e.render){if(!t&&Mr&&!s.render){const r=s.template||Js(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=ae(ae({isCustomElement:i,delimiters:l},o),c);s.render=Mr(r,f)}}e.render=s.render||ke}{const r=rn(e);rt();try{ac(e)}finally{it(),r()}}}const Bc={get(e,t){return me(e,"get",""),e[t]}};function So(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Bc),slots:e.slots,emit:e.emit,expose:t}}function Gn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Mi(wn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ut)return Ut[n](e)},has(t,n){return n in t||n in Ut}})):e.proxy}function Wc(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Kc(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Fl(e,t,Mt);function Ls(e,t,n){const s=arguments.length;return s===2?ne(t)&&!W(t)?zt(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),ce(e,t,n))}const qc="3.5.13";/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Is;const Pr=typeof window<"u"&&window.trustedTypes;if(Pr)try{Is=Pr.createPolicy("vue",{createHTML:e=>e})}catch{}const xo=Is?e=>Is.createHTML(e):e=>e,Gc="http://www.w3.org/2000/svg",Yc="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,Lr=qe&&qe.createElement("template"),Xc={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"?qe.createElementNS(Gc,e):t==="mathml"?qe.createElementNS(Yc,e):n?qe.createElement(e,{is:n}):qe.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.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{Lr.innerHTML=xo(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const l=Lr.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]}},ze="transition",Ht="animation",Qt=Symbol("_vtc"),Eo={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},Jc=ae({},ji,Eo),zc=e=>(e.displayName="Transition",e.props=Jc,e),Lf=zc((e,{slots:t})=>Ls(Kl,Qc(e),t)),ct=(e,t=[])=>{W(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ir=e=>e?W(e)?e.some(t=>t.length>1):e.length>1:!1;function Qc(e){const t={};for(const x in e)x in Eo||(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:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,S=Zc(r),_=S&&S[0],K=S&&S[1],{onBeforeEnter:N,onEnter:j,onEnterCancelled:p,onLeave:g,onLeaveCancelled:O,onBeforeAppear:F=N,onAppear:$=j,onAppearCancelled:V=p}=t,R=(x,B,se,le)=>{x._enterCancelled=le,at(x,B?a:l),at(x,B?f:o),se&&se()},b=(x,B)=>{x._isLeaving=!1,at(x,h),at(x,v),at(x,y),B&&B()},I=x=>(B,se)=>{const le=x?$:j,U=()=>R(B,x,se);ct(le,[B,U]),Nr(()=>{at(B,x?c:i),Ke(B,x?a:l),Ir(le)||Fr(B,s,_,U)})};return ae(t,{onBeforeEnter(x){ct(N,[x]),Ke(x,i),Ke(x,o)},onBeforeAppear(x){ct(F,[x]),Ke(x,c),Ke(x,f)},onEnter:I(!1),onAppear:I(!0),onLeave(x,B){x._isLeaving=!0;const se=()=>b(x,B);Ke(x,h),x._enterCancelled?(Ke(x,y),Dr()):(Dr(),Ke(x,y)),Nr(()=>{x._isLeaving&&(at(x,h),Ke(x,v),Ir(g)||Fr(x,s,K,se))}),ct(g,[x,se])},onEnterCancelled(x){R(x,!1,void 0,!0),ct(p,[x])},onAppearCancelled(x){R(x,!0,void 0,!0),ct(V,[x])},onLeaveCancelled(x){b(x),ct(O,[x])}})}function Zc(e){if(e==null)return null;if(ne(e))return[os(e.enter),os(e.leave)];{const t=os(e);return[t,t]}}function os(e){return Jo(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Qt]||(e[Qt]=new Set)).add(t)}function at(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Qt];n&&(n.delete(t),n.size||(e[Qt]=void 0))}function Nr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ea=0;function Fr(e,t,n,s){const r=e._endId=++ea,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ta(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,y),i()},y=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a<c&&h()},l+1),e.addEventListener(f,y)}function ta(e,t){const n=window.getComputedStyle(e),s=S=>(n[S]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=Hr(r,i),l=s(`${Ht}Delay`),c=s(`${Ht}Duration`),f=Hr(l,c);let a=null,h=0,y=0;t===ze?o>0&&(a=ze,h=o,y=i.length):t===Ht?f>0&&(a=Ht,h=f,y=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:Ht:null,y=a?a===ze?i.length:c.length:0);const v=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:y,hasTransform:v}}function Hr(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,s)=>$r(n)+$r(e[s])))}function $r(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Dr(){return document.body.offsetHeight}function na(e,t,n){const s=e[Qt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const jr=Symbol("_vod"),sa=Symbol("_vsh"),ra=Symbol(""),ia=/(^|;)\s*display\s*:/;function oa(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&En(s,l,"")}else for(const o in t)n[o]==null&&En(s,o,"");for(const o in n)o==="display"&&(i=!0),En(s,o,n[o])}else if(r){if(t!==n){const o=s[ra];o&&(n+=";"+o),s.cssText=n,i=ia.test(n)}}else t&&e.removeAttribute("style");jr in e&&(e[jr]=i?s.display:"",e[sa]&&(s.display="none"))}const Vr=/\s*!important$/;function En(e,t,n){if(W(n))n.forEach(s=>En(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=la(e,t);Vr.test(n)?e.setProperty(st(s),n.replace(Vr,""),"important"):e[s]=n}}const Ur=["Webkit","Moz","ms"],ls={};function la(e,t){const n=ls[t];if(n)return n;let s=Le(t);if(s!=="filter"&&s in e)return ls[t]=s;s=Fn(s);for(let r=0;r<Ur.length;r++){const i=Ur[r]+s;if(i in e)return ls[t]=i}return t}const kr="http://www.w3.org/1999/xlink";function Br(e,t,n,s,r,i=nl(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(kr,t.slice(6,t.length)):e.setAttributeNS(kr,t,n):n==null||i&&!fi(n)?e.removeAttribute(t):e.setAttribute(t,i?"":Xe(n)?String(n):n)}function Wr(e,t,n,s,r){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?xo(n):n);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const l=i==="OPTION"?e.getAttribute("value")||"":e.value,c=n==null?e.type==="checkbox"?"on":"":String(n);(l!==c||!("_value"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=fi(n):n==null&&l==="string"?(n="",o=!0):l==="number"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(r||t)}function St(e,t,n,s){e.addEventListener(t,n,s)}function ca(e,t,n,s){e.removeEventListener(t,n,s)}const Kr=Symbol("_vei");function aa(e,t,n,s,r=null){const i=e[Kr]||(e[Kr]={}),o=i[t];if(s&&o)o.value=s;else{const[l,c]=fa(t);if(s){const f=i[t]=ha(s,r);St(e,l,f,c)}else o&&(ca(e,l,o,c),i[t]=void 0)}}const qr=/(?:Once|Passive|Capture)$/;function fa(e){let t;if(qr.test(e)){t={};let s;for(;s=e.match(qr);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):st(e.slice(2)),t]}let cs=0;const ua=Promise.resolve(),da=()=>cs||(ua.then(()=>cs=0),cs=Date.now());function ha(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;He(pa(s,n.value),t,5,[s])};return n.value=e,n.attached=da(),n}function pa(e,t){if(W(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 Gr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ga=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?na(e,s,o):t==="style"?oa(e,n,s):en(t)?Fs(t)||aa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ma(e,t,s,o))?(Wr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Br(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?Wr(e,Le(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Br(e,t,s,o))};function ma(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Gr(t)&&q(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 Gr(t)&&re(n)?!1:t in e}const Yr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return W(t)?n=>bn(t,n):t};function ya(e){e.target.composing=!0}function Xr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const as=Symbol("_assign"),If={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[as]=Yr(r);const i=s||r.props&&r.props.type==="number";St(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=vs(l)),e[as](l)}),n&&St(e,"change",()=>{e.value=e.value.trim()}),t||(St(e,"compositionstart",ya),St(e,"compositionend",Xr),St(e,"change",Xr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[as]=Yr(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?vs(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},va=["ctrl","shift","alt","meta"],_a={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)=>va.some(n=>e[`${n}Key`]&&!t.includes(n))},Nf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o<t.length;o++){const l=_a[t[o]];if(l&&l(r,t))return}return e(r,...i)})},ba={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Ff=(e,t)=>{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=st(r.key);if(t.some(o=>o===i||ba[o]===i))return e(r)})},To=ae({patchProp:ga},Xc);let Wt,Jr=!1;function wa(){return Wt||(Wt=xc(To))}function Sa(){return Wt=Jr?Wt:Ec(To),Jr=!0,Wt}const Hf=(...e)=>{const t=wa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ao(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Co(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},$f=(...e)=>{const t=Sa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ao(s);if(r)return n(r,!0,Co(r))},t};function Co(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ao(e){return re(e)?document.querySelector(e):e}const Df=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},xa=window.__VP_SITE_DATA__;function tr(e){return hi()?(il(e),!0):!1}function Be(e){return typeof e=="function"?e():Oi(e)}const Ro=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const jf=e=>e!=null,Ea=Object.prototype.toString,Ta=e=>Ea.call(e)==="[object Object]",Zt=()=>{},zr=Ca();function Ca(){var e,t;return Ro&&((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 Aa(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 Oo=e=>e();function Ra(e,t={}){let n,s,r=Zt;const i=l=>{clearTimeout(l),r(),r=Zt};return l=>{const c=Be(e),f=Be(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Oa(e=Oo){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Vn(t),pause:n,resume:s,eventFilter:r}}function Ma(e){return qn()}function Mo(...e){if(e.length!==1)return Ll(...e);const t=e[0];return typeof t=="function"?Vn(Ol(()=>({get:t,set:Zt}))):oe(t)}function Po(e,t,n={}){const{eventFilter:s=Oo,...r}=n;return Fe(e,Aa(s,t),r)}function Pa(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Oa(s);return{stop:Po(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function nr(e,t=!0,n){Ma()?Lt(e,n):t?e():Un(e)}function Vf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Po(e,t,{...i,eventFilter:Ra(s,{maxWait:r})})}function Uf(e,t,n){let s;fe(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Zt}=s,c=oe(!r),f=o?qs(t):oe(t);let a=0;return Zs(async h=>{if(!c.value)return;a++;const y=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const S=await e(_=>{h(()=>{i&&(i.value=!1),v||_()})});y===a&&(f.value=S)}catch(S){l(S)}finally{i&&y===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const $e=Ro?window:void 0;function Lo(e){var t;const n=Be(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Pt(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=$e):[t,n,s,r]=e,!t)return Zt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,y,v)=>(a.addEventListener(h,y,v),()=>a.removeEventListener(h,y,v)),c=Fe(()=>[Lo(t),Be(r)],([a,h])=>{if(o(),!a)return;const y=Ta(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(S=>l(a,v,S,y))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return tr(f),f}function La(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function kf(...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=$e,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=La(t);return Pt(r,i,a=>{a.repeat&&Be(l)||c(a)&&n(a)},o)}function Ia(){const e=oe(!1),t=qn();return t&&Lt(()=>{e.value=!0},t),e}function Na(e){const t=Ia();return ie(()=>(t.value,!!e()))}function Io(e,t={}){const{window:n=$e}=t,s=Na(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=Zs(()=>{s.value&&(l(),r=n.matchMedia(Be(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return tr(()=>{c(),l(),r=void 0}),i}const gn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},mn="__vueuse_ssr_handlers__",Fa=Ha();function Ha(){return mn in gn||(gn[mn]=gn[mn]||{}),gn[mn]}function No(e,t){return Fa[e]||t}function sr(e){return Io("(prefers-color-scheme: dark)",e)}function $a(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 Da={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()}},Qr="vueuse-storage";function rr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=$e,eventFilter:y,onError:v=b=>{console.error(b)},initOnMounted:S}=s,_=(a?qs:oe)(typeof t=="function"?t():t);if(!n)try{n=No("getDefaultStorage",()=>{var b;return(b=$e)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return _;const K=Be(t),N=$a(K),j=(r=s.serializer)!=null?r:Da[N],{pause:p,resume:g}=Pa(_,()=>F(_.value),{flush:i,deep:o,eventFilter:y});h&&l&&nr(()=>{n instanceof Storage?Pt(h,"storage",V):Pt(h,Qr,R),S&&V()}),S||V();function O(b,I){if(h){const x={key:e,oldValue:b,newValue:I,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(Qr,{detail:x}))}}function F(b){try{const I=n.getItem(e);if(b==null)O(I,null),n.removeItem(e);else{const x=j.write(b);I!==x&&(n.setItem(e,x),O(I,x))}}catch(I){v(I)}}function $(b){const I=b?b.newValue:n.getItem(e);if(I==null)return c&&K!=null&&n.setItem(e,j.write(K)),K;if(!b&&f){const x=j.read(I);return typeof f=="function"?f(x,K):N==="object"&&!Array.isArray(x)?{...K,...x}:x}else return typeof I!="string"?I:j.read(I)}function V(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){_.value=K;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==j.write(_.value)&&(_.value=$(b))}catch(I){v(I)}finally{b?Un(g):g()}}}}function R(b){V(b.detail)}return _}const ja="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Va(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=$e,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},y=sr({window:r}),v=ie(()=>y.value?"dark":"light"),S=c||(o==null?Mo(s):rr(o,s,i,{window:r,listenToStorageChanges:l})),_=ie(()=>S.value==="auto"?v.value:S.value),K=No("updateHTMLAttrs",(g,O,F)=>{const $=typeof g=="string"?r==null?void 0:r.document.querySelector(g):Lo(g);if(!$)return;const V=new Set,R=new Set;let b=null;if(O==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(B=>(B||"").split(/\s/g)).filter(Boolean).forEach(B=>{x.includes(B)?V.add(B):R.add(B)})}else b={key:O,value:F};if(V.size===0&&R.size===0&&b===null)return;let I;a&&(I=r.document.createElement("style"),I.appendChild(document.createTextNode(ja)),r.document.head.appendChild(I));for(const x of V)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(I).opacity,document.head.removeChild(I))});function N(g){var O;K(t,n,(O=h[g])!=null?O:g)}function j(g){e.onChanged?e.onChanged(g,N):N(g)}Fe(_,j,{flush:"post",immediate:!0}),nr(()=>j(_.value));const p=ie({get(){return f?S.value:_.value},set(g){S.value=g}});try{return Object.assign(p,{store:S,system:v,state:_})}catch{return p}}function Ua(e={}){const{valueDark:t="dark",valueLight:n="",window:s=$e}=e,r=Va({...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=ie(()=>r.system?r.system.value:sr({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function fs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Bf(e,t,n={}){const{window:s=$e}=n;return rr(e,t,s==null?void 0:s.localStorage,n)}function Fo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth<e.scrollWidth||t.overflowY==="auto"&&e.clientHeight<e.scrollHeight)return!0;{const n=e.parentNode;return!n||n.tagName==="BODY"?!1:Fo(n)}}function ka(e){const t=e||window.event,n=t.target;return Fo(n)?!1:t.touches.length>1?!0:(t.preventDefault&&t.preventDefault(),!1)}const us=new WeakMap;function Wf(e,t=!1){const n=oe(t);let s=null,r="";Fe(Mo(e),l=>{const c=fs(Be(l));if(c){const f=c;if(us.get(f)||us.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=fs(Be(e));!l||n.value||(zr&&(s=Pt(l,"touchmove",c=>{ka(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=fs(Be(e));!l||!n.value||(zr&&(s==null||s()),l.style.overflow=r,us.delete(l),n.value=!1)};return tr(o),ie({get(){return n.value},set(l){l?i():o()}})}function Kf(e,t,n={}){const{window:s=$e}=n;return rr(e,t,s==null?void 0:s.sessionStorage,n)}function qf(e={}){const{window:t=$e,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Pt(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function Gf(e={}){const{window:t=$e,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),nr(f),Pt("resize",f,{passive:!0}),r){const a=Io("(orientation: portrait)");Fe(a,()=>f())}return{width:l,height:c}}const ds={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var hs={};const Ho=/^(?:[a-z]+:|\/\/)/i,Ba="vitepress-theme-appearance",Wa=/#.*$/,Ka=/[?#].*$/,qa=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",$o={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ga(e,t,n=!1){if(t===void 0)return!1;if(e=Zr(`/${e}`),n)return new RegExp(t).test(e);if(Zr(t)!==e)return!1;const s=t.match(Wa);return s?(ge?location.hash:"")===s[0]:!0}function Zr(e){return decodeURI(e).replace(Ka,"").replace(qa,"$1")}function Ya(e){return Ho.test(e)}function Xa(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ya(n)&&Ga(t,`/${n}/`,!0))||"root"}function Ja(e,t){var s,r,i,o,l,c,f;const n=Xa(e,t);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:jo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Do(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=za(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function za(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Qa(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 jo(e,t){return[...e.filter(n=>!Qa(t,n)),...t]}const Za=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ef=/^[a-z]:/i;function ei(e){const t=ef.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Za,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ps=new Set;function tf(e){if(ps.size===0){const n=typeof process=="object"&&(hs==null?void 0:hs.VITE_EXTRA_EXTENSIONS)||(ds==null?void 0:ds.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=>ps.add(s))}const t=e.split(".").pop();return t==null||!ps.has(t.toLowerCase())}function Yf(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const nf=Symbol(),mt=qs(xa);function Xf(e){const t=ie(()=>Ja(mt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n==="force-auto"?sr():n?Ua({storageKey:Ba,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Fe(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Do(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function sf(){const e=Ot(nf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function rf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function ti(e){return Ho.test(e)||!e.startsWith("/")?e:rf(mt.value.base,e)}function of(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/";t=ei(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=`./${ei(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Tn=[];function Jf(e){Tn.push(e),Bn(()=>{Tn=Tn.filter(t=>t!==e)})}function lf(){let e=mt.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=ni(e,n);else if(Array.isArray(e))for(const s of e){const r=ni(s,n);if(r){t=r;break}}return t}function ni(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const cf=Symbol(),Vo="http://a.com",af=()=>({path:"/",component:null,data:$o});function zf(e,t){const n=jn(af()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=gs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==gs(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 y,v;if(await((y=s.onBeforePageLoad)==null?void 0:y.call(s,l))===!1)return;const a=new URL(l,Vo),h=i=a.pathname;try{let S=await e(h);if(!S)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:K}=S;if(!_)throw new Error(`Invalid route component: ${_}`);await((v=s.onAfterPageLoad)==null?void 0:v.call(s,l)),n.path=ge?h:ti(h),n.component=wn(_),n.data=wn(K),ge&&Un(()=>{let N=mt.value.base+K.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!mt.value.cleanUrls&&!N.endsWith("/")&&(N+=".html"),N!==a.pathname&&(a.pathname=N,l=N+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let j=null;try{j=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(j){si(j,a.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 _=await fetch(mt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:ti(h),n.component=t?wn(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...$o,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:y,hash:v,search:S}=new URL(f,c.baseURI),_=new URL(location.href);h===_.origin&&tf(y)&&(l.preventDefault(),y===_.pathname&&S===_.search?(v!==_.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:_.href,newURL:a}))),v?si(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(gs(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 ff(){const e=Ot(cf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Uo(){return ff().route}function si(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-lf()+i;requestAnimationFrame(r)}}function gs(e){const t=new URL(e,Vo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),mt.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=()=>Tn.forEach(e=>e()),Qf=Ys({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Uo(),{frontmatter:n,site:s}=sf();return Fe(n,yn,{deep:!0,flush:"post"}),()=>Ls(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ls(t.component,{onVnodeMounted:yn,onVnodeUpdated:yn,onVnodeUnmounted:yn}):"404 Page Not Found"])}}),uf="modulepreload",df=function(e){return"/"+e},ri={},Zf=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=df(c),c in ri)return;ri[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":uf,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((y,v)=>{h.addEventListener("load",y),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},eu=Ys({setup(e,{slots:t}){const n=oe(!1);return Lt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function tu(){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 nu(){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(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),hf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function hf(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 su(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=ms(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(ms);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.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)};Zs(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Do(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):ms(["meta",{name:"description",content:a}]),r(jo(o.head,gf(c)))})}function ms([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==null&&(s.async=!1),s}function pf(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function gf(e){return e.filter(t=>!pf(t))}const ys=new Set,ko=()=>document.createElement("link"),mf=e=>{const t=ko();t.rel="prefetch",t.href=e,document.head.appendChild(t)},yf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let vn;const vf=ge&&(vn=ko())&&vn.relList&&vn.relList.supports&&vn.relList.supports("prefetch")?mf:yf;function ru(){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(!ys.has(c)){ys.add(c);const f=of(c);f&&vf(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):ys.add(l))})})};Lt(s);const r=Uo();Fe(()=>r.path,s),Bn(()=>{n&&n.disconnect()})}export{Ki as $,lf as A,Sf as B,Ef as C,qs as D,Jf as E,xe as F,ce as G,xf as H,Ho as I,Uo as J,$c as K,Ot as L,Gf as M,Ds as N,kf as O,Un as P,qf as Q,ge as R,Vn as S,Lf as T,wf as U,Zf as V,Wf as W,mc as X,Ff as Y,Cf as Z,Df as _,_o as a,Nf as a0,Af as a1,Mf as a2,su as a3,cf as a4,Xf as a5,nf as a6,Qf as a7,eu as a8,mt as a9,$f as aa,zf as ab,of as ac,ru as ad,nu as ae,tu as af,Ls as ag,Be as ah,Lo as ai,jf as aj,tr as ak,Uf as al,Kf as am,Bf as an,Vf as ao,ff as ap,Pt as aq,_f as ar,If as as,fe as at,bf as au,wn as av,Hf as aw,Yf as ax,Ms as b,Of as c,Ys as d,Pf as e,tf as f,ti as g,ie as h,Ya as i,vo as j,Oi as k,Ga as l,Io as m,js as n,Os as o,oe as p,Fe as q,Tf as r,Zs as s,sl as t,sf as u,Lt as v,Ul as w,Bn as x,Rf as y,nc as z}; diff --git a/assets/chunks/metadata.135fb67b.js b/assets/chunks/metadata.135fb67b.js new file mode 100644 index 0000000..8ecef0b --- /dev/null +++ b/assets/chunks/metadata.135fb67b.js @@ -0,0 +1 @@ +window.__VP_HASH_MAP__=JSON.parse("{\"electron-how-to_index.md\":\"BQblRTY7\",\"electron-how-to_main-and-renderer-process.md\":\"_5EL1wFs\",\"electron-how-to_preload-script.md\":\"CXrQRQkD\",\"index.md\":\"BqaXRsgO\",\"installation-and-build_automated-testing.md\":\"KBa3PU08\",\"installation-and-build_build-configuration.md\":\"_mhC4QgM\",\"installation-and-build_getting-started.md\":\"DmEPR_tc\",\"installation-and-build_index.md\":\"CImU_M8a\",\"installation-and-build_install-local-documentation.md\":\"BrGVdLMr\",\"installation-and-build_npm-scripts.md\":\"DwhCPQIy\",\"ko_electron-how-to_index.md\":\"CU1DhAda\",\"ko_electron-how-to_main-and-renderer-process.md\":\"Drbzcm48\",\"ko_electron-how-to_preload-script.md\":\"B3GyliGv\",\"ko_index.md\":\"CXjtXkdk\",\"ko_installation-and-build_automated-testing.md\":\"CrcelI20\",\"ko_installation-and-build_build-configuration.md\":\"TZXV-NIp\",\"ko_installation-and-build_getting-started.md\":\"CoiEGCgU\",\"ko_installation-and-build_index.md\":\"1z_mEwvg\",\"ko_installation-and-build_install-local-documentation.md\":\"CjN3yQfZ\",\"ko_installation-and-build_npm-scripts.md\":\"KCQJXSWc\",\"ko_other-projects.md\":\"B1Y_QtMF\",\"ko_project-structures_index.md\":\"CwEz-WEU\",\"ko_project-structures_pre-configured-components.md\":\"yZdtw8Fy\",\"ko_project-structures_project-structure.md\":\"4xmi4ZSM\",\"other-projects.md\":\"BSByacBO\",\"project-structures_index.md\":\"4YzXULKH\",\"project-structures_pre-configured-components.md\":\"TxyxC52n\",\"project-structures_project-structure.md\":\"MUQdxPCX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vutron\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":{\"src\":\"/icon.png\",\"width\":24,\"height\":24},\"editLink\":{\"pattern\":\"https://github.com/jooy2/vutron/edit/master/docs/src/:path\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/jooy2/vutron\"}],\"search\":{\"provider\":\"local\",\"options\":{\"locales\":{\"root\":{\"translations\":{\"button\":{\"buttonText\":\"Search\",\"buttonAriaLabel\":\"Search\"},\"modal\":{\"displayDetails\":\"Display detailed list\",\"resetButtonTitle\":\"Reset search\",\"backButtonTitle\":\"Close search\",\"noResultsText\":\"No results for\",\"footer\":{\"selectText\":\"to select\",\"selectKeyAriaLabel\":\"enter\",\"navigateText\":\"to navigate\",\"navigateUpKeyAriaLabel\":\"up arrow\",\"navigateDownKeyAriaLabel\":\"down arrow\",\"closeText\":\"to close\",\"closeKeyAriaLabel\":\"escape\"}}}},\"ko\":{\"translations\":{\"button\":{\"buttonText\":\"검색\",\"buttonAriaLabel\":\"검색\"},\"modal\":{\"displayDetails\":\"상세 목록 표시\",\"resetButtonTitle\":\"검색 초기화\",\"backButtonTitle\":\"검색 닫기\",\"noResultsText\":\"결과를 찾을 수 없음\",\"footer\":{\"selectText\":\"선택\",\"selectKeyAriaLabel\":\"선택하기\",\"navigateText\":\"탐색\",\"navigateUpKeyAriaLabel\":\"위로\",\"navigateDownKeyAriaLabel\":\"아래로\",\"closeText\":\"닫기\",\"closeKeyAriaLabel\":\"esc\"}}}}}}},\"sidebar\":{\"/\":{\"base\":\"/\",\"items\":[{\"text\":\"Installation And Build\",\"items\":[{\"text\":\"Getting Started\",\"link\":\"installation-and-build/getting-started\"},{\"text\":\"Build Configurations\",\"link\":\"installation-and-build/build-configuration\"},{\"text\":\"NPM Scripts\",\"link\":\"installation-and-build/npm-scripts\"},{\"text\":\"Automated Testing\",\"link\":\"installation-and-build/automated-testing\"},{\"text\":\"Manage Local Documentation\",\"link\":\"installation-and-build/install-local-documentation\"}],\"collapsed\":false},{\"text\":\"Project Structures\",\"items\":[{\"text\":\"Project Structure\",\"link\":\"project-structures/project-structure\"},{\"text\":\"Pre Configured Components\",\"link\":\"project-structures/pre-configured-components\"}],\"collapsed\":false},{\"text\":\"Electron How To\",\"items\":[{\"text\":\"Main Vs Renderer Process\",\"link\":\"electron-how-to/main-and-renderer-process\"},{\"text\":\"Preload Script\",\"link\":\"electron-how-to/preload-script\"}],\"collapsed\":false},{\"text\":\"Other Projects\",\"link\":\"other-projects\"}]},\"/ko/\":{\"base\":\"/ko/\",\"items\":[{\"text\":\"설치 그리고 빌드\",\"items\":[{\"text\":\"시작하기\",\"link\":\"installation-and-build/getting-started\"},{\"text\":\"빌드 구성\",\"link\":\"installation-and-build/build-configuration\"},{\"text\":\"NPM Scripts\",\"link\":\"installation-and-build/npm-scripts\"},{\"text\":\"자동화 테스트\",\"link\":\"installation-and-build/automated-testing\"},{\"text\":\"로컬 문서 관리\",\"link\":\"installation-and-build/install-local-documentation\"}],\"collapsed\":false},{\"text\":\"프로젝트 구조\",\"items\":[{\"text\":\"프로젝트 구조\",\"link\":\"project-structures/project-structure\"},{\"text\":\"사전 구성된 구성 요소\",\"link\":\"project-structures/pre-configured-components\"}],\"collapsed\":false},{\"text\":\"Electron 개요\",\"items\":[{\"text\":\"메인과 렌더러 프로세스\",\"link\":\"electron-how-to/main-and-renderer-process\"},{\"text\":\"프리로드 스크립트\",\"link\":\"electron-how-to/preload-script\"}],\"collapsed\":false},{\"text\":\"기타 프로젝트\",\"link\":\"other-projects\"}]}}},\"locales\":{\"root\":{\"lang\":\"en-US\",\"label\":\"English\",\"description\":\"Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort.\",\"themeConfig\":{\"editLink\":{\"text\":\"Edit this page\",\"pattern\":\"https://github.com/jooy2/vutron/edit/master/docs/src/:path\"},\"docFooter\":{\"prev\":\"Previous page\",\"next\":\"Next page\"},\"outline\":{\"label\":\"On this page\"},\"lastUpdated\":{\"text\":\"Last updated\"},\"langMenuLabel\":\"Change language\",\"returnToTopLabel\":\"Return to top\",\"sidebarMenuLabel\":\"Menu\",\"darkModeSwitchLabel\":\"Appearance\",\"lightModeSwitchTitle\":\"Switch to light theme\",\"darkModeSwitchTitle\":\"Switch to dark theme\",\"nav\":[{\"text\":\"Getting Started\",\"link\":\"/installation-and-build/getting-started\"}]}},\"ko\":{\"lang\":\"ko-KR\",\"label\":\"한국어\",\"description\":\"Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다.\",\"themeConfig\":{\"editLink\":{\"text\":\"이 페이지 편집 제안\",\"pattern\":\"https://github.com/jooy2/vutron/edit/master/docs/src/:path\"},\"docFooter\":{\"prev\":\"이전\",\"next\":\"다음\"},\"outline\":{\"label\":\"이 페이지 콘텐츠\"},\"lastUpdated\":{\"text\":\"업데이트 일자\"},\"langMenuLabel\":\"언어 변경\",\"returnToTopLabel\":\"맨 위로\",\"sidebarMenuLabel\":\"사이드바 메뉴\",\"darkModeSwitchLabel\":\"다크 모드\",\"lightModeSwitchTitle\":\"라이트 모드로 변경\",\"darkModeSwitchTitle\":\"다크 모드로 변경\",\"nav\":[{\"text\":\"시작하기\",\"link\":\"/ko/installation-and-build/getting-started\"}]}}},\"scrollOffset\":134,\"cleanUrls\":true}"); \ No newline at end of file diff --git a/assets/chunks/theme.DP4UGt4y.js b/assets/chunks/theme.DP4UGt4y.js new file mode 100644 index 0000000..49013cd --- /dev/null +++ b/assets/chunks/theme.DP4UGt4y.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CvIEAXF_.js","assets/chunks/framework.BQmytedh.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c as u,r as c,n as M,a as z,t as I,b as k,w as p,e as h,T as ue,_ as g,u as He,i as Be,f as Ee,g as de,h as y,j as d,k as r,l as K,m as ae,p as T,q as D,s as Y,v as j,x as ve,y as pe,z as Fe,A as De,B as W,F as w,C as H,D as $e,E as Q,G as _,H as E,I as ye,J as Z,K as U,L as x,M as Oe,N as Pe,O as re,P as Le,Q as Ve,R as ee,S as Ge,U as Ue,V as je,W as Se,X as Te,Y as ze,Z as Ke,$ as We,a0 as qe,a1 as Re}from"./framework.BQmytedh.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:M(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[z(I(e.text),1)])],2))}}),Xe={key:0,class:"VPBackdrop"},Ye=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:p(()=>[e.show?(a(),u("div",Xe)):h("",!0)]),_:1}))}}),Qe=g(Ye,[["__scopeId","data-v-c79a1216"]]),L=He;function Ze(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ie(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(Be(s)||s.startsWith("#")||!n.startsWith("http")||!Ee(e))return s;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${o}`);return de(l)}function R({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:o,theme:n,hash:i}=L(),l=y(()=>{var v,$;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([v,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(v==="root"?"/":`/${v}/`),n.value.i18nRouting!==!1&&s,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(s,e,t,o){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},ot={class:"quote"},st={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(s){const{theme:e}=L(),{currentLang:t}=R();return(o,n)=>{var i,l,f,v,$;return a(),u("div",et,[d("p",tt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,I(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",ot,I(((f=r(e).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",st,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((v=r(e).notFound)==null?void 0:v.linkLabel)??"go to home"},I((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=g(rt,[["__scopeId","data-v-d6be1790"]]);function Ne(s,e){if(Array.isArray(s))return J(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),o=t?s[t]:[];return Array.isArray(o)?J(o):J(o.items,o.base)}function lt(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 ct(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 le(s,e){return Array.isArray(e)?e.some(t=>le(s,t)):K(s,e.link)?!0:e.items?le(s,e.items):!1}function J(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=J(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=L(),o=ae("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?Ne(C,S):[]}),l=T(i.value);D(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(l.value=i.value)});const f=y(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),v=y(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=y(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),V=y(()=>f.value&&o.value),b=y(()=>f.value?lt(l.value):[]);function P(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:f,hasAside:$,leftAside:v,isSidebarEnabled:V,open:P,close:N,toggle:A}}function ut(s,e){let t;Y(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),ve(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function dt(s){const{page:e,hash:t}=L(),o=T(!1),n=y(()=>s.value.collapsed!=null),i=y(()=>!!s.value.link),l=T(!1),f=()=>{l.value=K(e.value.relativePath,s.value.link)};D([e,s,t],f),j(f);const v=y(()=>l.value?!0:s.value.items?le(e.value.relativePath,s.value.items):!1),$=y(()=>!!(s.value.items&&s.value.items.length));Y(()=>{o.value=!!(n.value&&s.value.collapsed)}),pe(()=>{(l.value||v.value)&&(o.value=!1)});function V(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:v,hasChildren:$,toggle:V}}function vt(){const{hasSidebar:s}=O(),e=ae("(min-width: 960px)"),t=ae("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const ce=[];function Me(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function he(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:pt(t),link:"#"+t.id,level:o}});return ft(e,s)}function pt(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 ft(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;return _t(s,o,n)}function ht(s,e){const{isAsideEnabled:t}=vt(),o=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",o)}),Fe(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",o)});function i(){if(!t.value)return;const f=window.scrollY,v=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(f+v-$)<1,b=ce.map(({element:N,link:A})=>({link:A,top:mt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!b.length){l(null);return}if(f<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:N,top:A}of b){if(A>f+De()+4)break;P=N}l(P)}function l(f){n&&n.classList.remove("active"),f==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const v=n;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function mt(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function _t(s,e,t){ce.length=0;const o=[],n=[];return s.forEach(i=>{const l={...i,children:[]};let f=n[n.length-1];for(;f&&f.level>=l.level;)n.pop(),f=n[n.length-1];if(l.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level<e||(ce.push({element:l.element,link:l.link}),f?f.children.push(l):o.push(l),n.push(l))}),o}const kt=["href","title"],bt=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=W("VPDocOutlineItem",!0);return a(),u("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(w,null,H(t.headers,({children:i,link:l,title:f})=>(a(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:f},I(f),9,kt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ie=g(bt,[["__scopeId","data-v-b933a997"]]),gt={class:"content"},$t={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},yt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=L(),o=$e([]);Q(()=>{o.value=he(e.value.outline??t.value.outline)});const n=T(),i=T();return ht(n,i),(l,f)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n},[d("div",gt,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",$t,I(r(Me)(r(t))),1),_(Ie,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Pt=g(yt,[["__scopeId","data-v-a5bbad30"]]),Lt={class:"VPDocAsideCarbonAds"},Vt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),u("div",Lt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),St={class:"VPDocAside"},Tt=m({__name:"VPDocAside",setup(s){const{theme:e}=L();return(t,o)=>(a(),u("div",St,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Pt),c(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=d("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(Vt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Nt=g(Tt,[["__scopeId","data-v-3f215769"]]);function Mt(){const{theme:s,page:e}=L();return y(()=>{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 It(){const{page:s,theme:e,frontmatter:t}=L();return y(()=>{var $,V,b,P,N,A,C,S;const o=Ne(e.value.sidebar,s.value.relativePath),n=ct(o),i=wt(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>K(s.value.relativePath,B.link)),f=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:f?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=i[l-1])==null?void 0:N.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[l+1])==null?void 0:S.link)}}})}function wt(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=y(()=>e.tag??(e.href?"a":"span")),o=y(()=>e.href&&ye.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:M(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ct=["datetime"],Ht=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:o}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return j(()=>{Y(()=>{var f,v,$;l.value=new Intl.DateTimeFormat((v=(f=e.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&v.forceLocale?o.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(f,v)=>{var $;return a(),u("p",At,[z(I((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},I(l.value),9,Ct)])}}}),Bt=g(Ht,[["__scopeId","data-v-e98dd255"]]),Et={key:0,class:"VPDocFooter"},Ft={key:0,class:"edit-info"},Dt={key:0,class:"edit-link"},Ot={key:1,class:"last-updated"},Gt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ut={class:"pager"},jt=["innerHTML"],zt=["innerHTML"],Kt={class:"pager"},Wt=["innerHTML"],qt=["innerHTML"],Rt=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=L(),n=Mt(),i=It(),l=y(()=>e.value.editLink&&o.value.editLink!==!1),f=y(()=>t.value.lastUpdated),v=y(()=>l.value||f.value||i.value.prev||i.value.next);return($,V)=>{var b,P,N,A;return v.value?(a(),u("footer",Et,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(a(),u("div",Ft,[l.value?(a(),u("div",Dt,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:p(()=>[V[0]||(V[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+I(r(n).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(a(),u("div",Ot,[_(Bt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Gt,[V[1]||(V[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",Ut,[(N=r(i).prev)!=null&&N.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:p(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,jt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,zt)]}),_:1},8,["href"])):h("",!0)]),d("div",Kt,[(A=r(i).next)!=null&&A.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:p(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,Wt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,qt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Jt=g(Rt,[["__scopeId","data-v-e257564d"]]),Xt={class:"container"},Yt={class:"aside-container"},Qt={class:"aside-content"},Zt={class:"content"},xt={class:"content-container"},en={class:"main"},tn=m({__name:"VPDoc",setup(s){const{theme:e}=L(),t=Z(),{hasSidebar:o,hasAside:n,leftAside:i}=O(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,v)=>{const $=W("Content");return a(),u("div",{class:M(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[c(f.$slots,"doc-top",{},void 0,!0),d("div",Xt,[r(n)?(a(),u("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[v[0]||(v[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Yt,[d("div",Qt,[_(Nt,null,{"aside-top":p(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",Zt,[d("div",xt,[c(f.$slots,"doc-before",{},void 0,!0),d("main",en,[_($,{class:M(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Jt,null,{"doc-footer-before":p(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(f.$slots,"doc-after",{},void 0,!0)])])]),c(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),nn=g(tn,[["__scopeId","data-v-39a288b8"]]),on=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=y(()=>e.href&&ye.test(e.href)),o=y(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(o.value),{class:M(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:p(()=>[z(I(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),sn=g(on,[["__scopeId","data-v-fa7799d5"]]),an=["src","alt"],rn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=W("VPImage",!0);return e.image?(a(),u(w,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,an)):(a(),u(w,{key:1},[_(o,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),X=g(rn,[["__scopeId","data-v-8426fc1a"]]),ln={class:"container"},cn={class:"main"},un={key:0,class:"name"},dn=["innerHTML"],vn=["innerHTML"],pn=["innerHTML"],fn={key:0,class:"actions"},hn={key:0,class:"image"},mn={class:"image-container"},_n=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=x("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[d("div",ln,[d("div",cn,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",un,[d("span",{innerHTML:t.name,class:"clip"},null,8,dn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,vn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,pn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",fn,[(a(!0),u(w,null,H(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[_(sn,{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))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",hn,[d("div",mn,[o[0]||(o[0]=d("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),kn=g(_n,[["__scopeId","data-v-303bb580"]]),bn=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).hero?(a(),k(kn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":p(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),gn={class:"box"},$n={key:0,class:"icon"},yn=["innerHTML"],Pn=["innerHTML"],Ln=["innerHTML"],Vn={key:4,class:"link-text"},Sn={class:"link-text-value"},Tn=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:p(()=>[d("article",gn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",$n,[_(X,{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(X,{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(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,yn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Pn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Ln)):h("",!0),e.linkText?(a(),u("div",Vn,[d("p",Sn,[z(I(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Nn=g(Tn,[["__scopeId","data-v-a3976bdc"]]),Mn={key:0,class:"VPFeatures"},In={class:"container"},wn={class:"items"},An=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=y(()=>{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(),u("div",Mn,[d("div",In,[d("div",wn,[(a(!0),u(w,null,H(o.features,i=>(a(),u("div",{key:i.title,class:M(["item",[t.value]])},[_(Nn,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Cn=g(An,[["__scopeId","data-v-a6181336"]]),Hn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=L();return(t,o)=>r(e).features?(a(),k(Cn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),Bn=m({__name:"VPHomeContent",setup(s){const{width:e}=Oe({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Pe(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),En=g(Bn,[["__scopeId","data-v-8e2d4988"]]),Fn={class:"VPHome"},Dn=m({__name:"VPHome",setup(s){const{frontmatter:e}=L();return(t,o)=>{const n=W("Content");return a(),u("div",Fn,[c(t.$slots,"home-hero-before",{},void 0,!0),_(bn,null,{"home-hero-info-before":p(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[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),_(Hn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(En,{key:0},{default:p(()=>[_(n)]),_:1})):(a(),k(n,{key:1}))])}}}),On=g(Dn,[["__scopeId","data-v-686f80a6"]]),Gn={},Un={class:"VPPage"};function jn(s,e){const t=W("Content");return a(),u("div",Un,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const zn=g(Gn,[["render",jn]]),Kn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>(a(),u("div",{class:M(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":p(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":p(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(nn,{key:4},{"doc-top":p(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Wn=g(Kn,[["__scopeId","data-v-1428d186"]]),qn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Xn=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(o)}])},[d("div",qn,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Yn=g(Xn,[["__scopeId","data-v-e315a0ad"]]);function Qn(){const{theme:s,frontmatter:e}=L(),t=$e([]),o=y(()=>t.value.length>0);return Q(()=>{t.value=he(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const Zn={class:"menu-text"},xn={class:"header"},eo={class:"outline"},to=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=L(),o=T(!1),n=T(0),i=T(),l=T();function f(b){var P;(P=i.value)!=null&&P.contains(b.target)||(o.value=!1)}D(o,b=>{if(b){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),re("Escape",()=>{o.value=!1}),Q(()=>{o.value=!1});function v(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Le(()=>{o.value=!1}))}function V(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Pe({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:v,class:M({open:o.value})},[d("span",Zn,I(r(Me)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)),_(ue,{name:"flyout"},{default:p(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:V},I(r(t).returnToTopLabel||"Return to top"),1)]),d("div",eo,[_(Ie,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),no=g(to,[["__scopeId","data-v-17a5e62e"]]),oo={class:"container"},so=["aria-expanded"],ao={class:"menu-text"},ro=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=L(),{hasSidebar:o}=O(),{headers:n}=Qn(),{y:i}=Ve(),l=T(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Q(()=>{n.value=he(t.value.outline??e.value.outline)});const f=y(()=>n.value.length===0),v=y(()=>f.value&&!o.value),$=y(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:f.value,fixed:v.value}));return(V,b)=>r(t).layout!=="home"&&(!v.value||r(i)>=l.value)?(a(),u("div",{key:0,class:M($.value)},[d("div",oo,[r(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",ao,I(r(e).sidebarMenuLabel||"Menu"),1)],8,so)):h("",!0),_(no,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),io=g(ro,[["__scopeId","data-v-a6f0e41e"]]);function lo(){const s=T(!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 i=Z();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const co={},uo={class:"VPSwitch",type:"button",role:"switch"},vo={class:"check"},po={key:0,class:"icon"};function fo(s,e){return a(),u("button",uo,[d("span",vo,[s.$slots.default?(a(),u("span",po,[c(s.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ho=g(co,[["render",fo],["__scopeId","data-v-1d5665e3"]]),mo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=L(),o=x("toggle-appearance",()=>{e.value=!e.value}),n=T("");return pe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(ho,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:p(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),me=g(mo,[["__scopeId","data-v-5337faa4"]]),_o={key:0,class:"VPNavBarAppearance"},ko=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=L();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",_o,[_(me)])):h("",!0)}}),bo=g(ko,[["__scopeId","data-v-6c893767"]]),_e=T();let we=!1,se=0;function go(s){const e=T(!1);if(ee){!we&&$o(),se++;const t=D(_e,o=>{var n,i,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});ve(()=>{t(),se--,se||yo()})}return Ge(e)}function $o(){document.addEventListener("focusin",Ae),we=!0,_e.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ae)}function Ae(){_e.value=document.activeElement}const Po={class:"VPMenuLink"},Lo=["innerHTML"],Vo=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),u("div",Po,[_(F,{class:M({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:p(()=>[d("span",{innerHTML:t.item.text},null,8,Lo)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=g(Vo,[["__scopeId","data-v-35975db6"]]),So={class:"VPMenuGroup"},To={key:0,class:"title"},No=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",So,[e.text?(a(),u("p",To,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),u(w,null,["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):h("",!0)],64))),256))]))}}),Mo=g(No,[["__scopeId","data-v-69e747b5"]]),Io={class:"VPMenu"},wo={key:0,class:"items"},Ao=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",Io,[e.items?(a(),u("div",wo,[(a(!0),u(w,null,H(e.items,o=>(a(),u(w,{key:JSON.stringify(o)},["link"in o?(a(),k(te,{key:0,item:o},null,8,["item"])):"component"in o?(a(),k(E(o.component),U({key:1,ref_for:!0},o.props),null,16)):(a(),k(Mo,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Co=g(Ao,[["__scopeId","data-v-b98bc113"]]),Ho=["aria-expanded","aria-label"],Bo={key:0,class:"text"},Eo=["innerHTML"],Fo={key:1,class:"vpi-more-horizontal icon"},Do={class:"menu"},Oo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=T(!1),t=T();go({el:t,onBlur:o});function o(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",Bo,[n.icon?(a(),u("span",{key:0,class:M([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Eo)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Fo))],8,Ho),d("div",Do,[_(Co,{items:n.items},{default:p(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=g(Oo,[["__scopeId","data-v-cf11d7a2"]]),Go=["href","aria-label","innerHTML"],Uo=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=T();j(async()=>{var i;await Le();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=y(()=>typeof e.icon=="object"?e.icon.svg:`<span class="vpi-social-${e.icon}"></span>`);return(n,i)=>(a(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Go))}}),jo=g(Uo,[["__scopeId","data-v-bd121fe5"]]),zo={class:"VPSocialLinks"},Ko=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",zo,[(a(!0),u(w,null,H(e.links,({link:o,icon:n,ariaLabel:i})=>(a(),k(jo,{key:o,icon:n,link:o,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=g(Ko,[["__scopeId","data-v-7bc22406"]]),Wo={key:0,class:"group translations"},qo={class:"trans-title"},Ro={key:1,class:"group"},Jo={class:"item appearance"},Xo={class:"label"},Yo={class:"appearance-action"},Qo={key:2,class:"group"},Zo={class:"item social-links"},xo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=L(),{localeLinks:o,currentLang:n}=R({correspondingLink:!0}),i=y(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,f)=>i.value?(a(),k(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[r(o).length&&r(n).label?(a(),u("div",Wo,[d("p",qo,I(r(n).label),1),(a(!0),u(w,null,H(r(o),v=>(a(),k(te,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ro,[d("div",Jo,[d("p",Xo,I(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Yo,[_(me)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Qo,[d("div",Zo,[_(be,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),es=g(xo,[["__scopeId","data-v-bb2aa2f0"]]),ts=["aria-expanded"],ns=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,ts))}}),os=g(ns,[["__scopeId","data-v-e5dd9c1c"]]),ss=["innerHTML"],as=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=L();return(t,o)=>(a(),k(F,{class:M({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:p(()=>[d("span",{innerHTML:t.item.text},null,8,ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),rs=g(as,[["__scopeId","data-v-e56f3d57"]]),is=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=L(),o=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(o),n=y(()=>o(e.item));return(i,l)=>(a(),k(ke,{class:M({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ls={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},cs=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",ls,[o[0]||(o[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(rs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(is,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),us=g(cs,[["__scopeId","data-v-dc692963"]]);function ds(s){const{localeIndex:e,theme:t}=L();function o(n){var A,C,S;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,f=l&&typeof l=="object",v=f&&((S=(C=l.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,$=f&&l.translations||null;let V=v,b=$,P=s;const N=i.pop();for(const B of i){let G=null;const q=P==null?void 0:P[B];q&&(G=P=q);const ne=b==null?void 0:b[B];ne&&(G=b=ne);const oe=V==null?void 0:V[B];oe&&(G=V=oe),q||(P=G),ne||(b=G),oe||(V=G)}return(V==null?void 0:V[N])??(b==null?void 0:b[N])??(P==null?void 0:P[N])??""}return o}const vs=["aria-label"],ps={class:"DocSearch-Button-Container"},fs={class:"DocSearch-Button-Placeholder"},ge=m({__name:"VPNavBarSearchButton",setup(s){const t=ds({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",ps,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",fs,I(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vs))}}),hs={class:"VPNavBarSearch"},ms={id:"local-search"},_s={key:1,id:"docsearch"},ks=m({__name:"VPNavBarSearch",setup(s){const e=Ue(()=>je(()=>import("./VPLocalSearchBox.CvIEAXF_.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:o}=L(),n=T(!1),i=T(!1);j(()=>{});function l(){n.value||(n.value=!0,setTimeout(f,16))}function f(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function v(b){const P=b.target,N=P.tagName;return P.isContentEditable||N==="INPUT"||N==="SELECT"||N==="TEXTAREA"}const $=T(!1);re("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),$.value=!0)}),re("/",b=>{v(b)||(b.preventDefault(),$.value=!0)});const V="local";return(b,P)=>{var N;return a(),u("div",hs,[r(V)==="local"?(a(),u(w,{key:0},[$.value?(a(),k(r(e),{key:0,onClose:P[0]||(P[0]=A=>$.value=!1)})):h("",!0),d("div",ms,[_(ge,{onClick:P[1]||(P[1]=A=>$.value=!0)})])],64)):r(V)==="algolia"?(a(),u(w,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((N=r(o).search)==null?void 0:N.options)??r(o).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",_s,[_(ge,{onClick:l})]))],64)):h("",!0)])}}}),bs=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),gs=g(bs,[["__scopeId","data-v-0394ad82"]]),$s=["href","rel","target"],ys=["innerHTML"],Ps={key:2},Ls=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=L(),{hasSidebar:o}=O(),{currentLang:n}=R(),i=y(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),f=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,$)=>(a(),u("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(o)}])},[d("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:l.value,target:f.value},[c(v.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,ys)):r(t).siteTitle===void 0?(a(),u("span",Ps,I(r(e).title),1)):h("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,$s)],2))}}),Vs=g(Ls,[["__scopeId","data-v-1168a8e4"]]),Ss={class:"items"},Ts={class:"title"},Ns=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=L(),{localeLinks:t,currentLang:o}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(o).label?(a(),k(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:p(()=>[d("div",Ss,[d("p",Ts,I(r(o).label),1),(a(!0),u(w,null,H(r(t),l=>(a(),k(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Ms=g(Ns,[["__scopeId","data-v-88af2de4"]]),Is={class:"wrapper"},ws={class:"container"},As={class:"title"},Cs={class:"content"},Hs={class:"content-body"},Bs=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=Ve(),{hasSidebar:o}=O(),{frontmatter:n}=L(),i=T({});return pe(()=>{i.value={"has-sidebar":o.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,f)=>(a(),u("div",{class:M(["VPNavBar",i.value])},[d("div",Is,[d("div",ws,[d("div",As,[_(Vs,null,{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Cs,[d("div",Hs,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ks,{class:"search"}),_(us,{class:"menu"}),_(Ms,{class:"translations"}),_(bo,{class:"appearance"}),_(gs,{class:"social-links"}),_(es,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),_(os,{class:"hamburger",active:l.isScreenOpen,onClick:f[0]||(f[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Es=g(Bs,[["__scopeId","data-v-6aa21345"]]),Fs={key:0,class:"VPNavScreenAppearance"},Ds={class:"text"},Os=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=L();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Fs,[d("p",Ds,I(r(t).darkModeSwitchLabel||"Appearance"),1),_(me)])):h("",!0)}}),Gs=g(Os,[["__scopeId","data-v-b44890b2"]]),Us=["innerHTML"],js=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:p(()=>[d("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zs=g(js,[["__scopeId","data-v-df37e6dd"]]),Ks=["innerHTML"],Ws=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=x("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:p(()=>[d("span",{innerHTML:t.item.text},null,8,Ks)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ce=g(Ws,[["__scopeId","data-v-3e9c20e4"]]),qs={class:"VPNavScreenMenuGroupSection"},Rs={key:0,class:"title"},Js=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",qs,[e.text?(a(),u("p",Rs,I(e.text),1)):h("",!0),(a(!0),u(w,null,H(e.items,o=>(a(),k(Ce,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Xs=g(Js,[["__scopeId","data-v-8133b170"]]),Ys=["aria-controls","aria-expanded"],Qs=["innerHTML"],Zs=["id"],xs={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=T(!1),o=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qs),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Ys),d("div",{id:o.value,class:"items"},[(a(!0),u(w,null,H(i.items,f=>(a(),u(w,{key:JSON.stringify(f)},["link"in f?(a(),u("div",xs,[_(Ce,{item:f},null,8,["item"])])):"component"in f?(a(),u("div",ea,[(a(),k(E(f.component),U({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(a(),u("div",ta,[_(Xs,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Zs)],2))}}),oa=g(na,[["__scopeId","data-v-b9ab8c58"]]),sa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=L();return(t,o)=>r(e).nav?(a(),u("nav",sa,[(a(!0),u(w,null,H(r(e).nav,n=>(a(),u(w,{key:JSON.stringify(n)},["link"in n?(a(),k(zs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(oa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=L();return(t,o)=>r(e).socialLinks?(a(),k(be,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),o=T(!1);function n(){o.value=!o.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:M(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+I(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),u(w,null,H(r(e),f=>(a(),u("li",{key:f.link,class:"item"},[_(F,{class:"link",href:f.link},{default:p(()=>[z(I(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ca=g(la,[["__scopeId","data-v-858fe1a4"]]),ua={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=T(null),t=Se(ee?document.body:null);return(o,n)=>(a(),k(ue,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:p(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ua,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ca,{class:"translations"}),_(Gs,{class:"appearance"}),_(ra,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),va=g(da,[["__scopeId","data-v-f2779853"]]),pa={key:0,class:"VPNav"},fa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=lo(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return Te("close-screen",t),Y(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,f)=>i.value?(a(),u("header",pa,[_(Es,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":p(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(va,{open:r(e)},{"nav-screen-content-before":p(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=g(fa,[["__scopeId","data-v-ae24b3ad"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:f,toggle:v}=dt(y(()=>e.item)),$=y(()=>f.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>f.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),N=y(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&v()}function C(){e.item.link&&v()}return(S,B)=>{const G=W("VPSidebarItem",!0);return a(),k(E($.value),{class:M(["VPSidebarItem",N.value])},{default:p(()=>[S.item.text?(a(),u("div",U({key:0,class:"item",role:P.value},Ke(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),S.item.link?(a(),k(F,{key:0,tag:V.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:p(()=>[(a(),k(E(b.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(b.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ze(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),S.item.items&&S.item.items.length?(a(),u("div",_a,[S.depth<5?(a(!0),u(w,{key:0},H(S.item.items,q=>(a(),k(G,{key:q.text,item:q,depth:S.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=g(ka,[["__scopeId","data-v-b7550ba0"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=T(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),We(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,n)=>(a(!0),u(w,null,H(o.items,i=>(a(),u("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=g(ga,[["__scopeId","data-v-c40bc020"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=T(null),i=Se(ee?document.body:null);D([o,n],()=>{var f;o.open?(i.value=!0,(f=n.value)==null||f.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return D(e,()=>{l.value+=1},{deep:!0}),(f,v)=>r(t)?(a(),u("aside",{key:0,class:M(["VPSidebar",{open:f.open}]),ref_key:"navEl",ref:n,onClick:v[0]||(v[0]=qe(()=>{},["stop"]))},[v[2]||(v[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[v[1]||(v[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(f.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),c(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=g(Pa,[["__scopeId","data-v-319d5ca6"]]),Va=m({__name:"VPSkipLink",setup(s){const e=Z(),t=T();D(()=>e.path,()=>t.value.focus());function o({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(w,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))}}),Sa=g(Va,[["__scopeId","data-v-0f60ec36"]]),Ta=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=Z();D(()=>n.path,o),ut(e,o);const{frontmatter:i}=L(),l=Re(),f=y(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",f),(v,$)=>{const V=W("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:M(["Layout",r(i).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":p(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(io,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":p(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Wn,null,{"page-top":p(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":p(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":p(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":p(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":p(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":p(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Yn),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(V,{key:1}))}}}),Na=g(Ta,[["__scopeId","data-v-5d98c3a5"]]),Ia={Layout:Na,enhanceApp:({app:s})=>{s.component("Badge",Je)}};export{ds as c,Ia as t,L as u}; diff --git a/assets/electron-how-to_index.md.BQblRTY7.js b/assets/electron-how-to_index.md.BQblRTY7.js new file mode 100644 index 0000000..a12a841 --- /dev/null +++ b/assets/electron-how-to_index.md.BQblRTY7.js @@ -0,0 +1 @@ +import{_ as o,c as a,j as t,a as r,o as n}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Electron How-to","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/index.md","filePath":"en/electron-how-to/index.md","lastUpdated":1725497265000}'),c={name:"electron-how-to/index.md"};function l(s,e,d,i,p,h){return n(),a("div",null,e[0]||(e[0]=[t("h1",{id:"electron-how-to",tabindex:"-1"},[r("Electron How-to "),t("a",{class:"header-anchor",href:"#electron-how-to","aria-label":'Permalink to "Electron How-to"'},"")],-1)]))}const x=o(c,[["render",l]]);export{f as __pageData,x as default}; diff --git a/assets/electron-how-to_index.md.BQblRTY7.lean.js b/assets/electron-how-to_index.md.BQblRTY7.lean.js new file mode 100644 index 0000000..a12a841 --- /dev/null +++ b/assets/electron-how-to_index.md.BQblRTY7.lean.js @@ -0,0 +1 @@ +import{_ as o,c as a,j as t,a as r,o as n}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Electron How-to","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/index.md","filePath":"en/electron-how-to/index.md","lastUpdated":1725497265000}'),c={name:"electron-how-to/index.md"};function l(s,e,d,i,p,h){return n(),a("div",null,e[0]||(e[0]=[t("h1",{id:"electron-how-to",tabindex:"-1"},[r("Electron How-to "),t("a",{class:"header-anchor",href:"#electron-how-to","aria-label":'Permalink to "Electron How-to"'},"")],-1)]))}const x=o(c,[["render",l]]);export{f as __pageData,x as default}; diff --git a/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.js b/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.js new file mode 100644 index 0000000..90df1b8 --- /dev/null +++ b/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.js @@ -0,0 +1,3 @@ +import{_ as r,c as s,a2 as o,o as t}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Main vs Renderer Process","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/main-and-renderer-process.md","filePath":"en/electron-how-to/main-and-renderer-process.md","lastUpdated":1725496835000}'),n={name:"electron-how-to/main-and-renderer-process.md"};function a(i,e,d,c,p,l){return t(),s("div",null,e[0]||(e[0]=[o(`<h1 id="main-vs-renderer-process" tabindex="-1">Main vs Renderer Process <a class="header-anchor" href="#main-vs-renderer-process" aria-label="Permalink to "Main vs Renderer Process""></a></h1><p>A <strong>Vutron</strong> application is divided into code into a Main process and a Renderer process.</p><p><strong>"Main"</strong> is the code of <code>src/main</code> and is mainly the process code handled by Electron. <strong>"Renderer"</strong> is the code of <code>src/renderer</code>, mainly for front-end rendering process like Vue.</p><p>In general, <strong>Node.js</strong> scripts cannot be run in the renderer process. Examples include modules that contain APIs used by Node.js, or native modules of <strong>Node.js</strong> such as <code>path</code> or <code>net</code>, <code>os</code> or <code>crypto</code>.</p><p>Preload scripts are run before the renderer is loaded. It creates a bridge to the main process to keep the execution of Node.js scripts in the renderer area separate and isolated for security reasons.</p><p>For secure script execution, it is recommended that the main process executes the Node scripts, and the renderer receives the execution results via messaging. This can be implemented via <strong>IPC communication</strong>.</p><p>For more information on this, see the following articles: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="how-to-run-node-js-on-a-renderer" tabindex="-1">How to run Node.js on a renderer? <a class="header-anchor" href="#how-to-run-node-js-on-a-renderer" aria-label="Permalink to "How to run Node.js on a renderer?""></a></h3><p>If you want to skip the security issues and use Node.js scripts in your renderer, you need to set <code>nodeIntegration</code> to <code>true</code> in your <code>vite.config.ts</code> file.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>For more information on this, see the following articles: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p>`,11)]))}const g=r(n,[["render",a]]);export{u as __pageData,g as default}; diff --git a/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.lean.js b/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.lean.js new file mode 100644 index 0000000..90df1b8 --- /dev/null +++ b/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.lean.js @@ -0,0 +1,3 @@ +import{_ as r,c as s,a2 as o,o as t}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Main vs Renderer Process","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/main-and-renderer-process.md","filePath":"en/electron-how-to/main-and-renderer-process.md","lastUpdated":1725496835000}'),n={name:"electron-how-to/main-and-renderer-process.md"};function a(i,e,d,c,p,l){return t(),s("div",null,e[0]||(e[0]=[o(`<h1 id="main-vs-renderer-process" tabindex="-1">Main vs Renderer Process <a class="header-anchor" href="#main-vs-renderer-process" aria-label="Permalink to "Main vs Renderer Process""></a></h1><p>A <strong>Vutron</strong> application is divided into code into a Main process and a Renderer process.</p><p><strong>"Main"</strong> is the code of <code>src/main</code> and is mainly the process code handled by Electron. <strong>"Renderer"</strong> is the code of <code>src/renderer</code>, mainly for front-end rendering process like Vue.</p><p>In general, <strong>Node.js</strong> scripts cannot be run in the renderer process. Examples include modules that contain APIs used by Node.js, or native modules of <strong>Node.js</strong> such as <code>path</code> or <code>net</code>, <code>os</code> or <code>crypto</code>.</p><p>Preload scripts are run before the renderer is loaded. It creates a bridge to the main process to keep the execution of Node.js scripts in the renderer area separate and isolated for security reasons.</p><p>For secure script execution, it is recommended that the main process executes the Node scripts, and the renderer receives the execution results via messaging. This can be implemented via <strong>IPC communication</strong>.</p><p>For more information on this, see the following articles: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="how-to-run-node-js-on-a-renderer" tabindex="-1">How to run Node.js on a renderer? <a class="header-anchor" href="#how-to-run-node-js-on-a-renderer" aria-label="Permalink to "How to run Node.js on a renderer?""></a></h3><p>If you want to skip the security issues and use Node.js scripts in your renderer, you need to set <code>nodeIntegration</code> to <code>true</code> in your <code>vite.config.ts</code> file.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>For more information on this, see the following articles: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p>`,11)]))}const g=r(n,[["render",a]]);export{u as __pageData,g as default}; diff --git a/assets/electron-how-to_preload-script.md.CXrQRQkD.js b/assets/electron-how-to_preload-script.md.CXrQRQkD.js new file mode 100644 index 0000000..be8a7ac --- /dev/null +++ b/assets/electron-how-to_preload-script.md.CXrQRQkD.js @@ -0,0 +1 @@ +import{_ as o,c as t,a2 as n,o as r}from"./chunks/framework.BQmytedh.js";const h=JSON.parse('{"title":"Preload Script","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/preload-script.md","filePath":"en/electron-how-to/preload-script.md","lastUpdated":1725496835000}'),a={name:"electron-how-to/preload-script.md"};function i(d,e,c,l,s,p){return r(),t("div",null,e[0]||(e[0]=[n('<h1 id="preload-script" tabindex="-1">Preload Script <a class="header-anchor" href="#preload-script" aria-label="Permalink to "Preload Script""></a></h1><p>The preload script in Electron.js is a secure area designed for communication between the main and renderer processes. It is typically used for <strong><a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC communication</a></strong>.</p><p>For more information, see the following articles <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>For compatibility and security with the latest version of Electron, we do not recommend using the old <code>electron/remote</code> module. If you want to utilize system events or Node scripts, it is recommended to do so in the main process, not the renderer.</p><p>Vutron's preload script is located in the <code>src/preload</code> folder. To create a new IPC communication channel, add the channel name to the following variable to whitelist it for communication.</p><ul><li><code>mainAvailChannels</code>: Send an event from main to renderer. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: Send an event from renderer to main. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>When sending events from renderer to main, you access the <code>window.mainApi</code> object instead of <code>ipcRenderer.send</code>. The <code>mainApi</code> is the name you set in your Vutron template and can be changed.</p><p>Here are the supported functions for mainApi:</p><ul><li><code>send</code>: Send an event to main.</li><li><code>on</code>: A listener to receive events sent by main.</li><li><code>once</code>: A listener to receive events sent by main. (Handle only one call)</li><li><code>off</code>: Remove an event listener</li><li><code>invoke</code>: Functions that can send events to main and receive data asynchronously.</li></ul><p>To change and modify this, you need to modify <code>exposeInMainWorld</code> in <code>src/preload/index.ts</code>.</p>',10)]))}const u=o(a,[["render",i]]);export{h as __pageData,u as default}; diff --git a/assets/electron-how-to_preload-script.md.CXrQRQkD.lean.js b/assets/electron-how-to_preload-script.md.CXrQRQkD.lean.js new file mode 100644 index 0000000..be8a7ac --- /dev/null +++ b/assets/electron-how-to_preload-script.md.CXrQRQkD.lean.js @@ -0,0 +1 @@ +import{_ as o,c as t,a2 as n,o as r}from"./chunks/framework.BQmytedh.js";const h=JSON.parse('{"title":"Preload Script","description":"","frontmatter":{},"headers":[],"relativePath":"electron-how-to/preload-script.md","filePath":"en/electron-how-to/preload-script.md","lastUpdated":1725496835000}'),a={name:"electron-how-to/preload-script.md"};function i(d,e,c,l,s,p){return r(),t("div",null,e[0]||(e[0]=[n('<h1 id="preload-script" tabindex="-1">Preload Script <a class="header-anchor" href="#preload-script" aria-label="Permalink to "Preload Script""></a></h1><p>The preload script in Electron.js is a secure area designed for communication between the main and renderer processes. It is typically used for <strong><a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC communication</a></strong>.</p><p>For more information, see the following articles <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>For compatibility and security with the latest version of Electron, we do not recommend using the old <code>electron/remote</code> module. If you want to utilize system events or Node scripts, it is recommended to do so in the main process, not the renderer.</p><p>Vutron's preload script is located in the <code>src/preload</code> folder. To create a new IPC communication channel, add the channel name to the following variable to whitelist it for communication.</p><ul><li><code>mainAvailChannels</code>: Send an event from main to renderer. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: Send an event from renderer to main. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>When sending events from renderer to main, you access the <code>window.mainApi</code> object instead of <code>ipcRenderer.send</code>. The <code>mainApi</code> is the name you set in your Vutron template and can be changed.</p><p>Here are the supported functions for mainApi:</p><ul><li><code>send</code>: Send an event to main.</li><li><code>on</code>: A listener to receive events sent by main.</li><li><code>once</code>: A listener to receive events sent by main. (Handle only one call)</li><li><code>off</code>: Remove an event listener</li><li><code>invoke</code>: Functions that can send events to main and receive data asynchronously.</li></ul><p>To change and modify this, you need to modify <code>exposeInMainWorld</code> in <code>src/preload/index.ts</code>.</p>',10)]))}const u=o(a,[["render",i]]);export{h as __pageData,u as default}; diff --git a/assets/index.md.BqaXRsgO.js b/assets/index.md.BqaXRsgO.js new file mode 100644 index 0000000..2aff759 --- /dev/null +++ b/assets/index.md.BqaXRsgO.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Vutron","titleTemplate":"Quick Start Templates for Vite + Vue 3 + Electron","description":"","frontmatter":{"layout":"home","title":"Vutron","titleTemplate":"Quick Start Templates for Vite + Vue 3 + Electron","hero":{"name":"Vutron","text":"Quick Start Templates for Vite + Vue 3 + Electron","tagline":"<strong>Vutron</strong> is a preconfigured template for developing `Electron` cross-platform desktop apps. It uses `Vue 3` and allows you to build a fast development environment with little effort.","actions":[{"theme":"brand","text":"Getting Started","link":"/installation-and-build/getting-started"},{"theme":"alt","text":"GitHub","link":"https://github.com/jooy2/vutron"}],"image":{"src":"/icon.png","alt":"Vue"}},"features":[{"icon":"<svg width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 48 48\\" fill=\\"none\\" xmlns=\\"http://www.w3.org/2000/svg\\"><path d=\\"M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z\\" fill=\\"url(#paint0_linear_1287_1214)\\"/><path d=\\"M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z\\" fill=\\"white\\"/><path d=\\"M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z\\" fill=\\"url(#paint1_linear_1287_1214)\\"/><path d=\\"M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z\\" fill=\\"url(#paint2_linear_1287_1214)\\"/><defs><linearGradient id=\\"paint0_linear_1287_1214\\" x1=\\"6.48163\\" y1=\\"1.9759\\" x2=\\"39.05\\" y2=\\"48.2064\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#49C7FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD36FF\\"/></linearGradient><linearGradient id=\\"paint1_linear_1287_1214\\" x1=\\"11.8848\\" y1=\\"16.4266\\" x2=\\"26.7246\\" y2=\\"31.4177\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#41D1FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD34FE\\"/></linearGradient><linearGradient id=\\"paint2_linear_1287_1214\\" x1=\\"21.8138\\" y1=\\"13.7046\\" x2=\\"26.2464\\" y2=\\"28.8069\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#FFEA83\\"/><stop offset=\\"0.0833333\\" stop-color=\\"#FFDD35\\"/><stop offset=\\"1\\" stop-color=\\"#FFA800\\"/></linearGradient></defs></svg>","title":"Powerful web application development templates","details":"Vutron supports cross-platform, multi-language, layouts and theme, and style frameworks."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 80 80\\" width=\\"160px\\" height=\\"160px\\"><path fill=\\"#424e5c\\" d=\\"M4.5 6.5H75.5V73.5H4.5z\\"/><path fill=\\"#afc5d8\\" d=\\"M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z\\"/><path fill=\\"#afc5d8\\" d=\\"M4 6H76V18H4z\\"/><path fill=\\"#bae0bd\\" d=\\"M25.6 43H54.400000000000006V45H25.6z\\" transform=\\"rotate(-69.666 39.998 43.999)\\"/><path fill=\\"#bae0bd\\" d=\\"M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z\\"/></svg>","title":"Rapid development through hot-reload","details":"Reduce initial project setup time with maximum feature support for developers."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 32 32\\" width=\\"64px\\" height=\\"64px\\"><circle cx=\\"16\\" cy=\\"17\\" r=\\"5\\" fill=\\"#ed0049\\"/><path fill=\\"#ed0049\\" d=\\"M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z\\"/><path fill=\\"#0f518c\\" d=\\"M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z\\"/><path fill=\\"#0f518c\\" d=\\"M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z\\"/><g><path fill=\\"#0f518c\\" d=\\"M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z\\"/></g></svg>","title":"Reliable maintenance support","details":"There are many real-world use cases, and we have fast technical support."}]},"headers":[],"relativePath":"index.md","filePath":"en/index.md","lastUpdated":1725496835000}'),a={name:"index.md"};function i(o,r,n,s,p,d){return l(),e("div")}const h=t(a,[["render",i]]);export{f as __pageData,h as default}; diff --git a/assets/index.md.BqaXRsgO.lean.js b/assets/index.md.BqaXRsgO.lean.js new file mode 100644 index 0000000..2aff759 --- /dev/null +++ b/assets/index.md.BqaXRsgO.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Vutron","titleTemplate":"Quick Start Templates for Vite + Vue 3 + Electron","description":"","frontmatter":{"layout":"home","title":"Vutron","titleTemplate":"Quick Start Templates for Vite + Vue 3 + Electron","hero":{"name":"Vutron","text":"Quick Start Templates for Vite + Vue 3 + Electron","tagline":"<strong>Vutron</strong> is a preconfigured template for developing `Electron` cross-platform desktop apps. It uses `Vue 3` and allows you to build a fast development environment with little effort.","actions":[{"theme":"brand","text":"Getting Started","link":"/installation-and-build/getting-started"},{"theme":"alt","text":"GitHub","link":"https://github.com/jooy2/vutron"}],"image":{"src":"/icon.png","alt":"Vue"}},"features":[{"icon":"<svg width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 48 48\\" fill=\\"none\\" xmlns=\\"http://www.w3.org/2000/svg\\"><path d=\\"M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z\\" fill=\\"url(#paint0_linear_1287_1214)\\"/><path d=\\"M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z\\" fill=\\"white\\"/><path d=\\"M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z\\" fill=\\"url(#paint1_linear_1287_1214)\\"/><path d=\\"M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z\\" fill=\\"url(#paint2_linear_1287_1214)\\"/><defs><linearGradient id=\\"paint0_linear_1287_1214\\" x1=\\"6.48163\\" y1=\\"1.9759\\" x2=\\"39.05\\" y2=\\"48.2064\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#49C7FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD36FF\\"/></linearGradient><linearGradient id=\\"paint1_linear_1287_1214\\" x1=\\"11.8848\\" y1=\\"16.4266\\" x2=\\"26.7246\\" y2=\\"31.4177\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#41D1FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD34FE\\"/></linearGradient><linearGradient id=\\"paint2_linear_1287_1214\\" x1=\\"21.8138\\" y1=\\"13.7046\\" x2=\\"26.2464\\" y2=\\"28.8069\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#FFEA83\\"/><stop offset=\\"0.0833333\\" stop-color=\\"#FFDD35\\"/><stop offset=\\"1\\" stop-color=\\"#FFA800\\"/></linearGradient></defs></svg>","title":"Powerful web application development templates","details":"Vutron supports cross-platform, multi-language, layouts and theme, and style frameworks."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 80 80\\" width=\\"160px\\" height=\\"160px\\"><path fill=\\"#424e5c\\" d=\\"M4.5 6.5H75.5V73.5H4.5z\\"/><path fill=\\"#afc5d8\\" d=\\"M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z\\"/><path fill=\\"#afc5d8\\" d=\\"M4 6H76V18H4z\\"/><path fill=\\"#bae0bd\\" d=\\"M25.6 43H54.400000000000006V45H25.6z\\" transform=\\"rotate(-69.666 39.998 43.999)\\"/><path fill=\\"#bae0bd\\" d=\\"M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z\\"/></svg>","title":"Rapid development through hot-reload","details":"Reduce initial project setup time with maximum feature support for developers."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 32 32\\" width=\\"64px\\" height=\\"64px\\"><circle cx=\\"16\\" cy=\\"17\\" r=\\"5\\" fill=\\"#ed0049\\"/><path fill=\\"#ed0049\\" d=\\"M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z\\"/><path fill=\\"#0f518c\\" d=\\"M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z\\"/><path fill=\\"#0f518c\\" d=\\"M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z\\"/><g><path fill=\\"#0f518c\\" d=\\"M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z\\"/></g></svg>","title":"Reliable maintenance support","details":"There are many real-world use cases, and we have fast technical support."}]},"headers":[],"relativePath":"index.md","filePath":"en/index.md","lastUpdated":1725496835000}'),a={name:"index.md"};function i(o,r,n,s,p,d){return l(),e("div")}const h=t(a,[["render",i]]);export{f as __pageData,h as default}; diff --git a/assets/installation-and-build_automated-testing.md.KBa3PU08.js b/assets/installation-and-build_automated-testing.md.KBa3PU08.js new file mode 100644 index 0000000..affe558 --- /dev/null +++ b/assets/installation-and-build_automated-testing.md.KBa3PU08.js @@ -0,0 +1 @@ +import{_ as e,c as a,a2 as i,o as s}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"Automated Testing","description":"","frontmatter":{"order":4},"headers":[],"relativePath":"installation-and-build/automated-testing.md","filePath":"en/installation-and-build/automated-testing.md","lastUpdated":1725496835000}'),n={name:"installation-and-build/automated-testing.md"};function o(r,t,l,d,p,h){return s(),a("div",null,t[0]||(t[0]=[i('<h1 id="automated-testing" tabindex="-1">Automated Testing <a class="header-anchor" href="#automated-testing" aria-label="Permalink to "Automated Testing""></a></h1><p><strong>Vutron</strong> includes automated testing. The testing framework uses Microsoft's <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong>.</p><p><strong>Playwright</strong> is optimized for web application testing and has full support for the <strong>Electron</strong> framework. It is simple to install, requires no configuration to start testing immediately, and is cross-platform. You can learn more about <strong>Playwright</strong> here: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>Only very simple launch and behavioral tests for the template main screen have been implemented in this template. Advanced testing will depend on the scope of your application.</p><p>Currently, the test specification file is located in the <code>tests</code> directory and the test results file is located in <code>tests/results</code>. (The built-in test specification file does not generate a separate results file.)</p><p>The Playwright configuration is <code>playwright.config.ts</code> in the project root, see the following documentation for more information on this: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>Once everything is configured, you can run a test with the following command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>Before running the test, empty the build directory (<code>dist</code>) and compile the package for the test.</p>',9)]))}const u=e(n,[["render",o]]);export{g as __pageData,u as default}; diff --git a/assets/installation-and-build_automated-testing.md.KBa3PU08.lean.js b/assets/installation-and-build_automated-testing.md.KBa3PU08.lean.js new file mode 100644 index 0000000..affe558 --- /dev/null +++ b/assets/installation-and-build_automated-testing.md.KBa3PU08.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,a2 as i,o as s}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"Automated Testing","description":"","frontmatter":{"order":4},"headers":[],"relativePath":"installation-and-build/automated-testing.md","filePath":"en/installation-and-build/automated-testing.md","lastUpdated":1725496835000}'),n={name:"installation-and-build/automated-testing.md"};function o(r,t,l,d,p,h){return s(),a("div",null,t[0]||(t[0]=[i('<h1 id="automated-testing" tabindex="-1">Automated Testing <a class="header-anchor" href="#automated-testing" aria-label="Permalink to "Automated Testing""></a></h1><p><strong>Vutron</strong> includes automated testing. The testing framework uses Microsoft's <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong>.</p><p><strong>Playwright</strong> is optimized for web application testing and has full support for the <strong>Electron</strong> framework. It is simple to install, requires no configuration to start testing immediately, and is cross-platform. You can learn more about <strong>Playwright</strong> here: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>Only very simple launch and behavioral tests for the template main screen have been implemented in this template. Advanced testing will depend on the scope of your application.</p><p>Currently, the test specification file is located in the <code>tests</code> directory and the test results file is located in <code>tests/results</code>. (The built-in test specification file does not generate a separate results file.)</p><p>The Playwright configuration is <code>playwright.config.ts</code> in the project root, see the following documentation for more information on this: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>Once everything is configured, you can run a test with the following command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>Before running the test, empty the build directory (<code>dist</code>) and compile the package for the test.</p>',9)]))}const u=e(n,[["render",o]]);export{g as __pageData,u as default}; diff --git a/assets/installation-and-build_build-configuration.md._mhC4QgM.js b/assets/installation-and-build_build-configuration.md._mhC4QgM.js new file mode 100644 index 0000000..aeb3d48 --- /dev/null +++ b/assets/installation-and-build_build-configuration.md._mhC4QgM.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Build Configurations","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"installation-and-build/build-configuration.md","filePath":"en/installation-and-build/build-configuration.md","lastUpdated":1725496835000}'),l={name:"installation-and-build/build-configuration.md"};function t(p,s,o,d,h,r){return n(),a("div",null,s[0]||(s[0]=[e(`<h1 id="build-configurations" tabindex="-1">Build Configurations <a class="header-anchor" href="#build-configurations" aria-label="Permalink to "Build Configurations""></a></h1><p>Once the module installation is complete, you can simply build the platform package with the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>The built packages can be found in <code>release/{version}</code> location.</p><p>For more information, please refer to the following article: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="what-do-i-need-to-do-for-a-multi-platform-build" tabindex="-1">What do I need to do for a multi-platform build? <a class="header-anchor" href="#what-do-i-need-to-do-for-a-multi-platform-build" aria-label="Permalink to "What do I need to do for a multi-platform build?""></a></h2><p>To create a package for each OS, you must build it on the same OS. For example, a package for macOS must be built on a macOS machine.</p><p>However, you can build packages for Windows, macOS, and Linux all at once on one OS. However, this might require some preparation.</p><p><strong>macOS</strong> is recommended if you want to build multiple platforms simultaneously on one platform. Because it can be configured with just a few very simple settings.</p><p>You can perform multi-platform builds at once with the following command. Alternatively, you can just do it for the OS you want via the individual build commands above.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p><code>Multipass</code> configuration may be required for Linux builds. Learn more about <code>Multipass</code> through the following link: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>To learn more about multiplatform builds, see the following articles: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="reduce-bundle-size-by-excluding-development-files" tabindex="-1">Reduce bundle size by excluding development files <a class="header-anchor" href="#reduce-bundle-size-by-excluding-development-files" aria-label="Permalink to "Reduce bundle size by excluding development files""></a></h2><p>You can exclude files you don't need at build time by adding a file pattern to the files property of <code>buildAssets/builder/config.ts</code>. This will save bundle capacity.</p><p>Below is an unnecessary <code>node_modules</code> file pattern that can further save bundles. Depending on the project, using the rules below may cause problems, so please review it before using.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="build-settings-for-projects-that-use-native-node-modules" tabindex="-1">Build settings for projects that use Native Node modules <a class="header-anchor" href="#build-settings-for-projects-that-use-native-node-modules" aria-label="Permalink to "Build settings for projects that use Native Node modules""></a></h2><p>For projects that use the <strong>Native Node Module</strong>, add the following script to your <code>package.json</code>: When installing dependencies, <code>electron-builder</code> will take care of any modules that require rebuilding.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,20)]))}const c=i(l,[["render",t]]);export{u as __pageData,c as default}; diff --git a/assets/installation-and-build_build-configuration.md._mhC4QgM.lean.js b/assets/installation-and-build_build-configuration.md._mhC4QgM.lean.js new file mode 100644 index 0000000..aeb3d48 --- /dev/null +++ b/assets/installation-and-build_build-configuration.md._mhC4QgM.lean.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Build Configurations","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"installation-and-build/build-configuration.md","filePath":"en/installation-and-build/build-configuration.md","lastUpdated":1725496835000}'),l={name:"installation-and-build/build-configuration.md"};function t(p,s,o,d,h,r){return n(),a("div",null,s[0]||(s[0]=[e(`<h1 id="build-configurations" tabindex="-1">Build Configurations <a class="header-anchor" href="#build-configurations" aria-label="Permalink to "Build Configurations""></a></h1><p>Once the module installation is complete, you can simply build the platform package with the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>The built packages can be found in <code>release/{version}</code> location.</p><p>For more information, please refer to the following article: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="what-do-i-need-to-do-for-a-multi-platform-build" tabindex="-1">What do I need to do for a multi-platform build? <a class="header-anchor" href="#what-do-i-need-to-do-for-a-multi-platform-build" aria-label="Permalink to "What do I need to do for a multi-platform build?""></a></h2><p>To create a package for each OS, you must build it on the same OS. For example, a package for macOS must be built on a macOS machine.</p><p>However, you can build packages for Windows, macOS, and Linux all at once on one OS. However, this might require some preparation.</p><p><strong>macOS</strong> is recommended if you want to build multiple platforms simultaneously on one platform. Because it can be configured with just a few very simple settings.</p><p>You can perform multi-platform builds at once with the following command. Alternatively, you can just do it for the OS you want via the individual build commands above.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p><code>Multipass</code> configuration may be required for Linux builds. Learn more about <code>Multipass</code> through the following link: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>To learn more about multiplatform builds, see the following articles: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="reduce-bundle-size-by-excluding-development-files" tabindex="-1">Reduce bundle size by excluding development files <a class="header-anchor" href="#reduce-bundle-size-by-excluding-development-files" aria-label="Permalink to "Reduce bundle size by excluding development files""></a></h2><p>You can exclude files you don't need at build time by adding a file pattern to the files property of <code>buildAssets/builder/config.ts</code>. This will save bundle capacity.</p><p>Below is an unnecessary <code>node_modules</code> file pattern that can further save bundles. Depending on the project, using the rules below may cause problems, so please review it before using.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="build-settings-for-projects-that-use-native-node-modules" tabindex="-1">Build settings for projects that use Native Node modules <a class="header-anchor" href="#build-settings-for-projects-that-use-native-node-modules" aria-label="Permalink to "Build settings for projects that use Native Node modules""></a></h2><p>For projects that use the <strong>Native Node Module</strong>, add the following script to your <code>package.json</code>: When installing dependencies, <code>electron-builder</code> will take care of any modules that require rebuilding.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,20)]))}const c=i(l,[["render",t]]);export{u as __pageData,c as default}; diff --git a/assets/installation-and-build_getting-started.md.DmEPR_tc.js b/assets/installation-and-build_getting-started.md.DmEPR_tc.js new file mode 100644 index 0000000..664e958 --- /dev/null +++ b/assets/installation-and-build_getting-started.md.DmEPR_tc.js @@ -0,0 +1,8 @@ +import{_ as t,c as i,a2 as a,o as s}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"installation-and-build/getting-started.md","filePath":"en/installation-and-build/getting-started.md","lastUpdated":1725496835000}'),n={name:"installation-and-build/getting-started.md"};function l(o,e,h,p,r,d){return s(),i("div",null,e[0]||(e[0]=[a(`<h1 id="getting-started" tabindex="-1">Getting Started <a class="header-anchor" href="#getting-started" aria-label="Permalink to "Getting Started""></a></h1><h2 id="clone-project" tabindex="-1">Clone project <a class="header-anchor" href="#clone-project" aria-label="Permalink to "Clone project""></a></h2><h3 id="method-1-npm-init-recommend" tabindex="-1">Method 1: <code>npm init</code> (Recommend) <a class="header-anchor" href="#method-1-npm-init-recommend" aria-label="Permalink to "Method 1: \`npm init\` (Recommend)""></a></h3><p>You can easily clone a repository with just the npm command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>The above method will not create unnecessary documentation and <code>.github</code> related files for your project.</p><h3 id="method-2-use-this-template" tabindex="-1">Method 2: Use this template <a class="header-anchor" href="#method-2-use-this-template" aria-label="Permalink to "Method 2: Use this template""></a></h3><p>Click <strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">Use this template</a></strong> to instantly create your own project.</p><p>This method creates a repository on GitHub immediately, but you will need to clone the project locally before you can use it.</p><h3 id="method-3-clone-this-repository" tabindex="-1">Method 3: Clone this repository <a class="header-anchor" href="#method-3-clone-this-repository" aria-label="Permalink to "Method 3: Clone this repository""></a></h3><p>Clone this repo using below command. This method is suitable for direct contributions to the Vutron repository.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>After cloning the project, run the following command in the terminal:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="run-in-development-environment" tabindex="-1">Run in development environment <a class="header-anchor" href="#run-in-development-environment" aria-label="Permalink to "Run in development environment""></a></h2><p>Applications in the development environment run through <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong>.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>If your application doesn't appear after running command line commands, you may need to review if the default port is being used by another app.</p><p>Vite uses port <code>5173</code> by default.</p>`,20)]))}const g=t(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/installation-and-build_getting-started.md.DmEPR_tc.lean.js b/assets/installation-and-build_getting-started.md.DmEPR_tc.lean.js new file mode 100644 index 0000000..664e958 --- /dev/null +++ b/assets/installation-and-build_getting-started.md.DmEPR_tc.lean.js @@ -0,0 +1,8 @@ +import{_ as t,c as i,a2 as a,o as s}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"installation-and-build/getting-started.md","filePath":"en/installation-and-build/getting-started.md","lastUpdated":1725496835000}'),n={name:"installation-and-build/getting-started.md"};function l(o,e,h,p,r,d){return s(),i("div",null,e[0]||(e[0]=[a(`<h1 id="getting-started" tabindex="-1">Getting Started <a class="header-anchor" href="#getting-started" aria-label="Permalink to "Getting Started""></a></h1><h2 id="clone-project" tabindex="-1">Clone project <a class="header-anchor" href="#clone-project" aria-label="Permalink to "Clone project""></a></h2><h3 id="method-1-npm-init-recommend" tabindex="-1">Method 1: <code>npm init</code> (Recommend) <a class="header-anchor" href="#method-1-npm-init-recommend" aria-label="Permalink to "Method 1: \`npm init\` (Recommend)""></a></h3><p>You can easily clone a repository with just the npm command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>The above method will not create unnecessary documentation and <code>.github</code> related files for your project.</p><h3 id="method-2-use-this-template" tabindex="-1">Method 2: Use this template <a class="header-anchor" href="#method-2-use-this-template" aria-label="Permalink to "Method 2: Use this template""></a></h3><p>Click <strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">Use this template</a></strong> to instantly create your own project.</p><p>This method creates a repository on GitHub immediately, but you will need to clone the project locally before you can use it.</p><h3 id="method-3-clone-this-repository" tabindex="-1">Method 3: Clone this repository <a class="header-anchor" href="#method-3-clone-this-repository" aria-label="Permalink to "Method 3: Clone this repository""></a></h3><p>Clone this repo using below command. This method is suitable for direct contributions to the Vutron repository.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>After cloning the project, run the following command in the terminal:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="run-in-development-environment" tabindex="-1">Run in development environment <a class="header-anchor" href="#run-in-development-environment" aria-label="Permalink to "Run in development environment""></a></h2><p>Applications in the development environment run through <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong>.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>If your application doesn't appear after running command line commands, you may need to review if the default port is being used by another app.</p><p>Vite uses port <code>5173</code> by default.</p>`,20)]))}const g=t(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/installation-and-build_index.md.CImU_M8a.js b/assets/installation-and-build_index.md.CImU_M8a.js new file mode 100644 index 0000000..d5812b3 --- /dev/null +++ b/assets/installation-and-build_index.md.CImU_M8a.js @@ -0,0 +1 @@ +import{_ as t,c as e,j as n,a as i,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Installation and Build","description":"","frontmatter":{},"headers":[],"relativePath":"installation-and-build/index.md","filePath":"en/installation-and-build/index.md","lastUpdated":1725497265000}'),d={name:"installation-and-build/index.md"};function s(o,a,r,c,u,p){return l(),e("div",null,a[0]||(a[0]=[n("h1",{id:"installation-and-build",tabindex:"-1"},[i("Installation and Build "),n("a",{class:"header-anchor",href:"#installation-and-build","aria-label":'Permalink to "Installation and Build"'},"")],-1)]))}const x=t(d,[["render",s]]);export{f as __pageData,x as default}; diff --git a/assets/installation-and-build_index.md.CImU_M8a.lean.js b/assets/installation-and-build_index.md.CImU_M8a.lean.js new file mode 100644 index 0000000..d5812b3 --- /dev/null +++ b/assets/installation-and-build_index.md.CImU_M8a.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,j as n,a as i,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Installation and Build","description":"","frontmatter":{},"headers":[],"relativePath":"installation-and-build/index.md","filePath":"en/installation-and-build/index.md","lastUpdated":1725497265000}'),d={name:"installation-and-build/index.md"};function s(o,a,r,c,u,p){return l(),e("div",null,a[0]||(a[0]=[n("h1",{id:"installation-and-build",tabindex:"-1"},[i("Installation and Build "),n("a",{class:"header-anchor",href:"#installation-and-build","aria-label":'Permalink to "Installation and Build"'},"")],-1)]))}const x=t(d,[["render",s]]);export{f as __pageData,x as default}; diff --git a/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.js b/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.js new file mode 100644 index 0000000..b210029 --- /dev/null +++ b/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.js @@ -0,0 +1,8 @@ +import{_ as s,c as i,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Manage Local Documentation","description":"","frontmatter":{"order":5},"headers":[],"relativePath":"installation-and-build/install-local-documentation.md","filePath":"en/installation-and-build/install-local-documentation.md","lastUpdated":1725496835000}'),t={name:"installation-and-build/install-local-documentation.md"};function l(o,a,p,h,d,c){return e(),i("div",null,a[0]||(a[0]=[n(`<h1 id="manage-local-documentation" tabindex="-1">Manage Local Documentation <a class="header-anchor" href="#manage-local-documentation" aria-label="Permalink to "Manage Local Documentation""></a></h1><p>Documents from <code>Vutron</code> can be viewed in the local environment through the <code>VitePress</code> viewer.</p><p>This function works only when the entire project is cloned. If you created the project with <code>npm init vutron</code>, the <code>docs</code> folder is not included.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>Everything in the instructions below should be done in the <code>docs</code> folder.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>Install the relevant packages using the following commands:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>You can run the local server where the documents are hosted via the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div>`,10)]))}const u=s(t,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.lean.js b/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.lean.js new file mode 100644 index 0000000..b210029 --- /dev/null +++ b/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.lean.js @@ -0,0 +1,8 @@ +import{_ as s,c as i,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Manage Local Documentation","description":"","frontmatter":{"order":5},"headers":[],"relativePath":"installation-and-build/install-local-documentation.md","filePath":"en/installation-and-build/install-local-documentation.md","lastUpdated":1725496835000}'),t={name:"installation-and-build/install-local-documentation.md"};function l(o,a,p,h,d,c){return e(),i("div",null,a[0]||(a[0]=[n(`<h1 id="manage-local-documentation" tabindex="-1">Manage Local Documentation <a class="header-anchor" href="#manage-local-documentation" aria-label="Permalink to "Manage Local Documentation""></a></h1><p>Documents from <code>Vutron</code> can be viewed in the local environment through the <code>VitePress</code> viewer.</p><p>This function works only when the entire project is cloned. If you created the project with <code>npm init vutron</code>, the <code>docs</code> folder is not included.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>Everything in the instructions below should be done in the <code>docs</code> folder.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>Install the relevant packages using the following commands:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>You can run the local server where the documents are hosted via the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div>`,10)]))}const u=s(t,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/installation-and-build_npm-scripts.md.DwhCPQIy.js b/assets/installation-and-build_npm-scripts.md.DwhCPQIy.js new file mode 100644 index 0000000..ef4fdf7 --- /dev/null +++ b/assets/installation-and-build_npm-scripts.md.DwhCPQIy.js @@ -0,0 +1 @@ +import{_ as e,c as d,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"NPM Scripts","description":"","frontmatter":{"title":"NPM Scripts","order":3},"headers":[],"relativePath":"installation-and-build/npm-scripts.md","filePath":"en/installation-and-build/npm-scripts.md","lastUpdated":1725496835000}'),i={name:"installation-and-build/npm-scripts.md"};function a(c,t,n,s,l,u){return r(),d("div",null,t[0]||(t[0]=[o('<h1 id="npm-scripts" tabindex="-1">Npm Scripts <a class="header-anchor" href="#npm-scripts" aria-label="Permalink to "Npm Scripts""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="general" tabindex="-1">General <a class="header-anchor" href="#general" aria-label="Permalink to "General""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="for-documentation" tabindex="-1">For Documentation <a class="header-anchor" href="#for-documentation" aria-label="Permalink to "For Documentation""></a></h2><p>Used only for contributing to project documentation. Must be run from the <code>docs</code> directory location.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table>',7)]))}const f=e(i,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/installation-and-build_npm-scripts.md.DwhCPQIy.lean.js b/assets/installation-and-build_npm-scripts.md.DwhCPQIy.lean.js new file mode 100644 index 0000000..ef4fdf7 --- /dev/null +++ b/assets/installation-and-build_npm-scripts.md.DwhCPQIy.lean.js @@ -0,0 +1 @@ +import{_ as e,c as d,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"NPM Scripts","description":"","frontmatter":{"title":"NPM Scripts","order":3},"headers":[],"relativePath":"installation-and-build/npm-scripts.md","filePath":"en/installation-and-build/npm-scripts.md","lastUpdated":1725496835000}'),i={name:"installation-and-build/npm-scripts.md"};function a(c,t,n,s,l,u){return r(),d("div",null,t[0]||(t[0]=[o('<h1 id="npm-scripts" tabindex="-1">Npm Scripts <a class="header-anchor" href="#npm-scripts" aria-label="Permalink to "Npm Scripts""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="general" tabindex="-1">General <a class="header-anchor" href="#general" aria-label="Permalink to "General""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="for-documentation" tabindex="-1">For Documentation <a class="header-anchor" href="#for-documentation" aria-label="Permalink to "For Documentation""></a></h2><p>Used only for contributing to project documentation. Must be run from the <code>docs</code> directory location.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table>',7)]))}const f=e(i,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 0000000..b6b603d Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 0000000..def40a4 Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 0000000..e070c3d Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 0000000..a3c16ca Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 0000000..2210a89 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 0000000..790d62d Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 0000000..1eec077 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 0000000..2cfe615 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 0000000..e3886dd Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 0000000..36d6748 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 0000000..2bed1e8 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 0000000..9a8d1e2 Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 0000000..07d3c53 Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 0000000..57bdc22 Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/ko_electron-how-to_index.md.CU1DhAda.js b/assets/ko_electron-how-to_index.md.CU1DhAda.js new file mode 100644 index 0000000..5be0e25 --- /dev/null +++ b/assets/ko_electron-how-to_index.md.CU1DhAda.js @@ -0,0 +1 @@ +import{_ as o,c as a,j as t,a as r,o as n}from"./chunks/framework.BQmytedh.js";const h=JSON.parse('{"title":"Electron 개요","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/index.md","filePath":"ko/electron-how-to/index.md","lastUpdated":1725497265000}'),c={name:"ko/electron-how-to/index.md"};function l(s,e,d,i,p,m){return n(),a("div",null,e[0]||(e[0]=[t("h1",{id:"electron-개요",tabindex:"-1"},[r("Electron 개요 "),t("a",{class:"header-anchor",href:"#electron-개요","aria-label":'Permalink to "Electron 개요"'},"")],-1)]))}const x=o(c,[["render",l]]);export{h as __pageData,x as default}; diff --git a/assets/ko_electron-how-to_index.md.CU1DhAda.lean.js b/assets/ko_electron-how-to_index.md.CU1DhAda.lean.js new file mode 100644 index 0000000..5be0e25 --- /dev/null +++ b/assets/ko_electron-how-to_index.md.CU1DhAda.lean.js @@ -0,0 +1 @@ +import{_ as o,c as a,j as t,a as r,o as n}from"./chunks/framework.BQmytedh.js";const h=JSON.parse('{"title":"Electron 개요","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/index.md","filePath":"ko/electron-how-to/index.md","lastUpdated":1725497265000}'),c={name:"ko/electron-how-to/index.md"};function l(s,e,d,i,p,m){return n(),a("div",null,e[0]||(e[0]=[t("h1",{id:"electron-개요",tabindex:"-1"},[r("Electron 개요 "),t("a",{class:"header-anchor",href:"#electron-개요","aria-label":'Permalink to "Electron 개요"'},"")],-1)]))}const x=o(c,[["render",l]]);export{h as __pageData,x as default}; diff --git a/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.js b/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.js new file mode 100644 index 0000000..8acdf5e --- /dev/null +++ b/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.js @@ -0,0 +1,3 @@ +import{_ as t,c as s,a2 as r,o}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"메인과 렌더러 프로세스","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/main-and-renderer-process.md","filePath":"ko/electron-how-to/main-and-renderer-process.md","lastUpdated":1725496835000}'),a={name:"ko/electron-how-to/main-and-renderer-process.md"};function n(i,e,d,c,p,l){return o(),s("div",null,e[0]||(e[0]=[r(`<h1 id="메인과-렌더러-프로세스" tabindex="-1">메인과 렌더러 프로세스 <a class="header-anchor" href="#메인과-렌더러-프로세스" aria-label="Permalink to "메인과 렌더러 프로세스""></a></h1><p><strong>Vutron</strong> 애플리케이션은 메인(Main) 프로세스와 렌더러(Renderer) 프로세스로 코드가 나뉩니다.</p><p><strong>Main</strong>은 <code>src/main</code>의 코드로 주로 Electron이 처리하는 프로세스 코드입니다. <strong>렌더러</strong>는 <code>src/renderer</code>의 코드로 주로 Vue와 같은 프론트엔드 렌더링 프로세스를 위한 코드입니다.</p><p>일반적으로 <strong>Node.js</strong> 스크립트는 렌더러 프로세스에서 실행할 수 없습니다. 예를 들어 Node.js에서 사용하는 API를 포함하는 모듈이나 <code>path</code> 또는 <code>net</code>, <code>os</code> 또는 <code>crypto</code>와 같은 <strong>Node.js</strong>의 네이티브 모듈이 있습니다.</p><p>사전 로드 스크립트는 렌더러가 로드되기 전에 실행됩니다. 이는 보안상의 이유로 렌더러 영역에서 Node.js 스크립트의 실행을 분리하고 격리하기 위해 메인 프로세스에 대한 브릿지를 생성합니다.</p><p>안전한 스크립트 실행을 위해 메인 프로세스에서 노드 스크립트를 실행하고 렌더러는 메시징을 통해 실행 결과를 수신하는 것이 좋습니다. 이는 <strong>IPC 통신</strong>을 통해 구현할 수 있습니다.</p><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="렌더러에서-node-js를-실행하는-방법은-무엇인가요" tabindex="-1">렌더러에서 Node.js를 실행하는 방법은 무엇인가요? <a class="header-anchor" href="#렌더러에서-node-js를-실행하는-방법은-무엇인가요" aria-label="Permalink to "렌더러에서 Node.js를 실행하는 방법은 무엇인가요?""></a></h3><p>보안 문제를 건너뛰고 렌더러에서 Node.js 스크립트를 사용하려면 <code>vite.config.ts</code> 파일에서 <code>nodeIntegration</code>을 <code>true</code>로 설정해야 합니다.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p>`,11)]))}const k=t(a,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.lean.js b/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.lean.js new file mode 100644 index 0000000..8acdf5e --- /dev/null +++ b/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.lean.js @@ -0,0 +1,3 @@ +import{_ as t,c as s,a2 as r,o}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"메인과 렌더러 프로세스","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/main-and-renderer-process.md","filePath":"ko/electron-how-to/main-and-renderer-process.md","lastUpdated":1725496835000}'),a={name:"ko/electron-how-to/main-and-renderer-process.md"};function n(i,e,d,c,p,l){return o(),s("div",null,e[0]||(e[0]=[r(`<h1 id="메인과-렌더러-프로세스" tabindex="-1">메인과 렌더러 프로세스 <a class="header-anchor" href="#메인과-렌더러-프로세스" aria-label="Permalink to "메인과 렌더러 프로세스""></a></h1><p><strong>Vutron</strong> 애플리케이션은 메인(Main) 프로세스와 렌더러(Renderer) 프로세스로 코드가 나뉩니다.</p><p><strong>Main</strong>은 <code>src/main</code>의 코드로 주로 Electron이 처리하는 프로세스 코드입니다. <strong>렌더러</strong>는 <code>src/renderer</code>의 코드로 주로 Vue와 같은 프론트엔드 렌더링 프로세스를 위한 코드입니다.</p><p>일반적으로 <strong>Node.js</strong> 스크립트는 렌더러 프로세스에서 실행할 수 없습니다. 예를 들어 Node.js에서 사용하는 API를 포함하는 모듈이나 <code>path</code> 또는 <code>net</code>, <code>os</code> 또는 <code>crypto</code>와 같은 <strong>Node.js</strong>의 네이티브 모듈이 있습니다.</p><p>사전 로드 스크립트는 렌더러가 로드되기 전에 실행됩니다. 이는 보안상의 이유로 렌더러 영역에서 Node.js 스크립트의 실행을 분리하고 격리하기 위해 메인 프로세스에 대한 브릿지를 생성합니다.</p><p>안전한 스크립트 실행을 위해 메인 프로세스에서 노드 스크립트를 실행하고 렌더러는 메시징을 통해 실행 결과를 수신하는 것이 좋습니다. 이는 <strong>IPC 통신</strong>을 통해 구현할 수 있습니다.</p><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="렌더러에서-node-js를-실행하는-방법은-무엇인가요" tabindex="-1">렌더러에서 Node.js를 실행하는 방법은 무엇인가요? <a class="header-anchor" href="#렌더러에서-node-js를-실행하는-방법은-무엇인가요" aria-label="Permalink to "렌더러에서 Node.js를 실행하는 방법은 무엇인가요?""></a></h3><p>보안 문제를 건너뛰고 렌더러에서 Node.js 스크립트를 사용하려면 <code>vite.config.ts</code> 파일에서 <code>nodeIntegration</code>을 <code>true</code>로 설정해야 합니다.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p>`,11)]))}const k=t(a,[["render",n]]);export{g as __pageData,k as default}; diff --git a/assets/ko_electron-how-to_preload-script.md.B3GyliGv.js b/assets/ko_electron-how-to_preload-script.md.B3GyliGv.js new file mode 100644 index 0000000..4d21a9a --- /dev/null +++ b/assets/ko_electron-how-to_preload-script.md.B3GyliGv.js @@ -0,0 +1 @@ +import{_ as o,c as t,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"프리로드 스크립트","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/preload-script.md","filePath":"ko/electron-how-to/preload-script.md","lastUpdated":1725496835000}'),c={name:"ko/electron-how-to/preload-script.md"};function d(l,e,n,i,p,s){return a(),t("div",null,e[0]||(e[0]=[r('<h1 id="프리로드-스크립트" tabindex="-1">프리로드 스크립트 <a class="header-anchor" href="#프리로드-스크립트" aria-label="Permalink to "프리로드 스크립트""></a></h1><p>Electron.js의 프리로드 스크립트는 메인 프로세스와 렌더러 프로세스 간의 통신을 위해 설계된 보안 영역입니다. 일반적으로 **<a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC 통신</a>**에 사용됩니다.</p><p>자세한 내용은 다음 문서를 참고하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>최신 버전의 Electron과의 호환성 및 보안을 위해 이전 버전의 <code>electron/remote</code> 모듈은 사용하지 않는 것이 좋습니다. 시스템 이벤트나 노드 스크립트를 활용하려면 렌더러가 아닌 메인 프로세스에서 사용하는 것이 좋습니다.</p><p>Vutron의 프리로드 스크립트는 <code>src/preload</code> 폴더에 있습니다. 새 IPC 통신 채널을 생성하려면 다음 변수에 채널 이름을 추가하여 통신을 허용하도록 화이트리스트에 추가합니다.</p><ul><li><code>mainAvailChannels</code>: 메인에서 렌더러로 이벤트를 전송합니다. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: 렌더러에서 메인으로 이벤트를 전송합니다. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>렌더러에서 메인으로 이벤트를 전송할 때는 <code>ipcRenderer.send</code> 대신 <code>window.mainApi</code> 객체에 액세스합니다. <code>mainApi</code>는 Vutron 템플릿에서 설정한 이름이며 변경할 수 있습니다.</p><p>다음은 mainApi에서 지원되는 함수입니다:</p><ul><li><code>send</code>: 메인으로 이벤트를 보냅니다.</li><li><code>on</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다.</li><li><code>once</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다. (하나의 호출만 처리)</li><li><code>off</code>: 이벤트 리스너를 제거합니다.</li><li><code>invoke</code>: 메인에 이벤트를 보내고 비동기적으로 데이터를 수신할 수 있는 함수입니다.</li></ul><p>이를 변경하고 수정하려면 <code>src/preload/index.ts</code>에서 <code>exposeInMainWorld</code>를 수정해야 합니다.</p>',10)]))}const u=o(c,[["render",d]]);export{m as __pageData,u as default}; diff --git a/assets/ko_electron-how-to_preload-script.md.B3GyliGv.lean.js b/assets/ko_electron-how-to_preload-script.md.B3GyliGv.lean.js new file mode 100644 index 0000000..4d21a9a --- /dev/null +++ b/assets/ko_electron-how-to_preload-script.md.B3GyliGv.lean.js @@ -0,0 +1 @@ +import{_ as o,c as t,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"프리로드 스크립트","description":"","frontmatter":{},"headers":[],"relativePath":"ko/electron-how-to/preload-script.md","filePath":"ko/electron-how-to/preload-script.md","lastUpdated":1725496835000}'),c={name:"ko/electron-how-to/preload-script.md"};function d(l,e,n,i,p,s){return a(),t("div",null,e[0]||(e[0]=[r('<h1 id="프리로드-스크립트" tabindex="-1">프리로드 스크립트 <a class="header-anchor" href="#프리로드-스크립트" aria-label="Permalink to "프리로드 스크립트""></a></h1><p>Electron.js의 프리로드 스크립트는 메인 프로세스와 렌더러 프로세스 간의 통신을 위해 설계된 보안 영역입니다. 일반적으로 **<a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC 통신</a>**에 사용됩니다.</p><p>자세한 내용은 다음 문서를 참고하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>최신 버전의 Electron과의 호환성 및 보안을 위해 이전 버전의 <code>electron/remote</code> 모듈은 사용하지 않는 것이 좋습니다. 시스템 이벤트나 노드 스크립트를 활용하려면 렌더러가 아닌 메인 프로세스에서 사용하는 것이 좋습니다.</p><p>Vutron의 프리로드 스크립트는 <code>src/preload</code> 폴더에 있습니다. 새 IPC 통신 채널을 생성하려면 다음 변수에 채널 이름을 추가하여 통신을 허용하도록 화이트리스트에 추가합니다.</p><ul><li><code>mainAvailChannels</code>: 메인에서 렌더러로 이벤트를 전송합니다. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: 렌더러에서 메인으로 이벤트를 전송합니다. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>렌더러에서 메인으로 이벤트를 전송할 때는 <code>ipcRenderer.send</code> 대신 <code>window.mainApi</code> 객체에 액세스합니다. <code>mainApi</code>는 Vutron 템플릿에서 설정한 이름이며 변경할 수 있습니다.</p><p>다음은 mainApi에서 지원되는 함수입니다:</p><ul><li><code>send</code>: 메인으로 이벤트를 보냅니다.</li><li><code>on</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다.</li><li><code>once</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다. (하나의 호출만 처리)</li><li><code>off</code>: 이벤트 리스너를 제거합니다.</li><li><code>invoke</code>: 메인에 이벤트를 보내고 비동기적으로 데이터를 수신할 수 있는 함수입니다.</li></ul><p>이를 변경하고 수정하려면 <code>src/preload/index.ts</code>에서 <code>exposeInMainWorld</code>를 수정해야 합니다.</p>',10)]))}const u=o(c,[["render",d]]);export{m as __pageData,u as default}; diff --git a/assets/ko_index.md.CXjtXkdk.js b/assets/ko_index.md.CXjtXkdk.js new file mode 100644 index 0000000..e4f0ac0 --- /dev/null +++ b/assets/ko_index.md.CXjtXkdk.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Vutron","titleTemplate":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","description":"","frontmatter":{"layout":"home","title":"Vutron","titleTemplate":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","hero":{"name":"Vutron","text":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","tagline":"<strong>Vutron</strong>은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다.","actions":[{"theme":"brand","text":"시작하기","link":"/ko/installation-and-build/getting-started"},{"theme":"alt","text":"GitHub","link":"https://github.com/jooy2/vutron"}],"image":{"src":"/icon.png","alt":"Vue"}},"features":[{"icon":"<svg width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 48 48\\" fill=\\"none\\" xmlns=\\"http://www.w3.org/2000/svg\\"><path d=\\"M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z\\" fill=\\"url(#paint0_linear_1287_1214)\\"/><path d=\\"M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z\\" fill=\\"white\\"/><path d=\\"M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z\\" fill=\\"url(#paint1_linear_1287_1214)\\"/><path d=\\"M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z\\" fill=\\"url(#paint2_linear_1287_1214)\\"/><defs><linearGradient id=\\"paint0_linear_1287_1214\\" x1=\\"6.48163\\" y1=\\"1.9759\\" x2=\\"39.05\\" y2=\\"48.2064\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#49C7FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD36FF\\"/></linearGradient><linearGradient id=\\"paint1_linear_1287_1214\\" x1=\\"11.8848\\" y1=\\"16.4266\\" x2=\\"26.7246\\" y2=\\"31.4177\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#41D1FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD34FE\\"/></linearGradient><linearGradient id=\\"paint2_linear_1287_1214\\" x1=\\"21.8138\\" y1=\\"13.7046\\" x2=\\"26.2464\\" y2=\\"28.8069\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#FFEA83\\"/><stop offset=\\"0.0833333\\" stop-color=\\"#FFDD35\\"/><stop offset=\\"1\\" stop-color=\\"#FFA800\\"/></linearGradient></defs></svg>","title":"강력한 웹 애플리케이션 개발 템플릿","details":"Vutron은 크로스 플랫폼, 다국어, 레이아웃 및 테마, 스타일 프레임워크를 지원합니다."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 80 80\\" width=\\"160px\\" height=\\"160px\\"><path fill=\\"#424e5c\\" d=\\"M4.5 6.5H75.5V73.5H4.5z\\"/><path fill=\\"#afc5d8\\" d=\\"M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z\\"/><path fill=\\"#afc5d8\\" d=\\"M4 6H76V18H4z\\"/><path fill=\\"#bae0bd\\" d=\\"M25.6 43H54.400000000000006V45H25.6z\\" transform=\\"rotate(-69.666 39.998 43.999)\\"/><path fill=\\"#bae0bd\\" d=\\"M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z\\"/></svg>","title":"핫 리로드를 통한 빠른 개발","details":"개발자를 위한 최대 기능 지원으로 초기 프로젝트 설정 시간을 단축하세요."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 32 32\\" width=\\"64px\\" height=\\"64px\\"><circle cx=\\"16\\" cy=\\"17\\" r=\\"5\\" fill=\\"#ed0049\\"/><path fill=\\"#ed0049\\" d=\\"M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z\\"/><path fill=\\"#0f518c\\" d=\\"M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z\\"/><path fill=\\"#0f518c\\" d=\\"M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z\\"/><g><path fill=\\"#0f518c\\" d=\\"M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z\\"/></g></svg>","title":"안정적인 유지 관리 지원","details":"실제 사용 사례도 많고 기술 지원도 신속하게 제공합니다."}]},"headers":[],"relativePath":"ko/index.md","filePath":"ko/index.md","lastUpdated":1725496835000}'),i={name:"ko/index.md"};function a(o,n,r,s,c,d){return l(),e("div")}const h=t(i,[["render",a]]);export{f as __pageData,h as default}; diff --git a/assets/ko_index.md.CXjtXkdk.lean.js b/assets/ko_index.md.CXjtXkdk.lean.js new file mode 100644 index 0000000..e4f0ac0 --- /dev/null +++ b/assets/ko_index.md.CXjtXkdk.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as l}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Vutron","titleTemplate":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","description":"","frontmatter":{"layout":"home","title":"Vutron","titleTemplate":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","hero":{"name":"Vutron","text":"Vite + Vue 3 + Electron용 빠른 시작 템플릿","tagline":"<strong>Vutron</strong>은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다.","actions":[{"theme":"brand","text":"시작하기","link":"/ko/installation-and-build/getting-started"},{"theme":"alt","text":"GitHub","link":"https://github.com/jooy2/vutron"}],"image":{"src":"/icon.png","alt":"Vue"}},"features":[{"icon":"<svg width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 48 48\\" fill=\\"none\\" xmlns=\\"http://www.w3.org/2000/svg\\"><path d=\\"M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z\\" fill=\\"url(#paint0_linear_1287_1214)\\"/><path d=\\"M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z\\" fill=\\"white\\"/><path d=\\"M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z\\" fill=\\"url(#paint1_linear_1287_1214)\\"/><path d=\\"M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z\\" fill=\\"url(#paint2_linear_1287_1214)\\"/><defs><linearGradient id=\\"paint0_linear_1287_1214\\" x1=\\"6.48163\\" y1=\\"1.9759\\" x2=\\"39.05\\" y2=\\"48.2064\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#49C7FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD36FF\\"/></linearGradient><linearGradient id=\\"paint1_linear_1287_1214\\" x1=\\"11.8848\\" y1=\\"16.4266\\" x2=\\"26.7246\\" y2=\\"31.4177\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#41D1FF\\"/><stop offset=\\"1\\" stop-color=\\"#BD34FE\\"/></linearGradient><linearGradient id=\\"paint2_linear_1287_1214\\" x1=\\"21.8138\\" y1=\\"13.7046\\" x2=\\"26.2464\\" y2=\\"28.8069\\" gradientUnits=\\"userSpaceOnUse\\"><stop stop-color=\\"#FFEA83\\"/><stop offset=\\"0.0833333\\" stop-color=\\"#FFDD35\\"/><stop offset=\\"1\\" stop-color=\\"#FFA800\\"/></linearGradient></defs></svg>","title":"강력한 웹 애플리케이션 개발 템플릿","details":"Vutron은 크로스 플랫폼, 다국어, 레이아웃 및 테마, 스타일 프레임워크를 지원합니다."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 80 80\\" width=\\"160px\\" height=\\"160px\\"><path fill=\\"#424e5c\\" d=\\"M4.5 6.5H75.5V73.5H4.5z\\"/><path fill=\\"#afc5d8\\" d=\\"M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z\\"/><path fill=\\"#afc5d8\\" d=\\"M4 6H76V18H4z\\"/><path fill=\\"#bae0bd\\" d=\\"M25.6 43H54.400000000000006V45H25.6z\\" transform=\\"rotate(-69.666 39.998 43.999)\\"/><path fill=\\"#bae0bd\\" d=\\"M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z\\"/></svg>","title":"핫 리로드를 통한 빠른 개발","details":"개발자를 위한 최대 기능 지원으로 초기 프로젝트 설정 시간을 단축하세요."},{"icon":"<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 32 32\\" width=\\"64px\\" height=\\"64px\\"><circle cx=\\"16\\" cy=\\"17\\" r=\\"5\\" fill=\\"#ed0049\\"/><path fill=\\"#ed0049\\" d=\\"M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z\\"/><path fill=\\"#0f518c\\" d=\\"M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z\\"/><path fill=\\"#0f518c\\" d=\\"M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z\\"/><path fill=\\"#0f518c\\" d=\\"M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z\\"/><g><path fill=\\"#0f518c\\" d=\\"M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z\\"/></g></svg>","title":"안정적인 유지 관리 지원","details":"실제 사용 사례도 많고 기술 지원도 신속하게 제공합니다."}]},"headers":[],"relativePath":"ko/index.md","filePath":"ko/index.md","lastUpdated":1725496835000}'),i={name:"ko/index.md"};function a(o,n,r,s,c,d){return l(),e("div")}const h=t(i,[["render",a]]);export{f as __pageData,h as default}; diff --git a/assets/ko_installation-and-build_automated-testing.md.CrcelI20.js b/assets/ko_installation-and-build_automated-testing.md.CrcelI20.js new file mode 100644 index 0000000..70b18bd --- /dev/null +++ b/assets/ko_installation-and-build_automated-testing.md.CrcelI20.js @@ -0,0 +1 @@ +import{_ as a,c as e,a2 as s,o as r}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"자동화 테스트","description":"","frontmatter":{"order":4},"headers":[],"relativePath":"ko/installation-and-build/automated-testing.md","filePath":"ko/installation-and-build/automated-testing.md","lastUpdated":1725496835000}'),i={name:"ko/installation-and-build/automated-testing.md"};function o(n,t,l,p,d,h){return r(),e("div",null,t[0]||(t[0]=[s('<h1 id="자동화-테스트" tabindex="-1">자동화 테스트 <a class="header-anchor" href="#자동화-테스트" aria-label="Permalink to "자동화 테스트""></a></h1><p><strong>Vutron</strong>에는 자동화된 테스트가 포함되어 있습니다. 테스트 프레임워크는 Microsoft의 <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong> 모듈을 사용합니다.</p><p><strong>Playwright</strong>는 웹 애플리케이션 테스트에 최적화되어 있으며 <strong>Electron</strong> 프레임워크를 완벽하게 지원합니다. 설치가 간단하고, 별도의 설정 없이 바로 테스트를 시작할 수 있으며, 크로스 플랫폼을 지원합니다. 여기에서 <strong>Playwright</strong>에 대해 자세히 알아보세요: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>이 템플릿에는 템플릿 메인 화면에 대한 매우 간단한 실행 및 동작 테스트만 구현되어 있습니다. 고급 테스트는 애플리케이션의 범위에 따라 달라집니다.</p><p>현재 테스트 사양 파일은 <code>tests</code> 디렉터리에, 테스트 결과 파일은 <code>tests/results</code>에 있습니다. (기본 제공 테스트 사양 파일은 별도의 결과 파일을 생성하지 않습니다.)</p><p>Playwright 설정은 프로젝트 루트에 있는 <code>playwright.config.ts</code>이며, 이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>모든 구성이 완료되면 다음 명령어로 테스트를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>테스트를 실행하기 전에 빌드 디렉터리(<code>dist</code>)를 비우고 테스트용 패키지를 컴파일합니다.</p>',9)]))}const u=a(i,[["render",o]]);export{g as __pageData,u as default}; diff --git a/assets/ko_installation-and-build_automated-testing.md.CrcelI20.lean.js b/assets/ko_installation-and-build_automated-testing.md.CrcelI20.lean.js new file mode 100644 index 0000000..70b18bd --- /dev/null +++ b/assets/ko_installation-and-build_automated-testing.md.CrcelI20.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,a2 as s,o as r}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"자동화 테스트","description":"","frontmatter":{"order":4},"headers":[],"relativePath":"ko/installation-and-build/automated-testing.md","filePath":"ko/installation-and-build/automated-testing.md","lastUpdated":1725496835000}'),i={name:"ko/installation-and-build/automated-testing.md"};function o(n,t,l,p,d,h){return r(),e("div",null,t[0]||(t[0]=[s('<h1 id="자동화-테스트" tabindex="-1">자동화 테스트 <a class="header-anchor" href="#자동화-테스트" aria-label="Permalink to "자동화 테스트""></a></h1><p><strong>Vutron</strong>에는 자동화된 테스트가 포함되어 있습니다. 테스트 프레임워크는 Microsoft의 <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong> 모듈을 사용합니다.</p><p><strong>Playwright</strong>는 웹 애플리케이션 테스트에 최적화되어 있으며 <strong>Electron</strong> 프레임워크를 완벽하게 지원합니다. 설치가 간단하고, 별도의 설정 없이 바로 테스트를 시작할 수 있으며, 크로스 플랫폼을 지원합니다. 여기에서 <strong>Playwright</strong>에 대해 자세히 알아보세요: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>이 템플릿에는 템플릿 메인 화면에 대한 매우 간단한 실행 및 동작 테스트만 구현되어 있습니다. 고급 테스트는 애플리케이션의 범위에 따라 달라집니다.</p><p>현재 테스트 사양 파일은 <code>tests</code> 디렉터리에, 테스트 결과 파일은 <code>tests/results</code>에 있습니다. (기본 제공 테스트 사양 파일은 별도의 결과 파일을 생성하지 않습니다.)</p><p>Playwright 설정은 프로젝트 루트에 있는 <code>playwright.config.ts</code>이며, 이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>모든 구성이 완료되면 다음 명령어로 테스트를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>테스트를 실행하기 전에 빌드 디렉터리(<code>dist</code>)를 비우고 테스트용 패키지를 컴파일합니다.</p>',9)]))}const u=a(i,[["render",o]]);export{g as __pageData,u as default}; diff --git a/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.js b/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.js new file mode 100644 index 0000000..6cb2515 --- /dev/null +++ b/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"빌드 구성","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"ko/installation-and-build/build-configuration.md","filePath":"ko/installation-and-build/build-configuration.md","lastUpdated":1725496835000}'),l={name:"ko/installation-and-build/build-configuration.md"};function t(p,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`<h1 id="빌드-구성" tabindex="-1">빌드 구성 <a class="header-anchor" href="#빌드-구성" aria-label="Permalink to "빌드 구성""></a></h1><p>모듈 설치가 완료되면 아래 명령어를 사용하여 플랫폼 패키지를 간단하게 빌드할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>빌드된 패키지는 <code>release/{version}</code> 위치에서 찾을 수 있습니다.</p><p>자세한 내용은 다음 문서를 참조하세요: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" tabindex="-1">멀티플랫폼 빌드를 하려면 어떻게 해야 하나요? <a class="header-anchor" href="#멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" aria-label="Permalink to "멀티플랫폼 빌드를 하려면 어떻게 해야 하나요?""></a></h2><p>각 OS에 대한 패키지를 만들려면 동일한 OS에서 빌드해야 합니다. 예를 들어 macOS용 패키지는 macOS 컴퓨터에서 빌드해야 합니다.</p><p>하지만 하나의 OS에서 Windows, macOS, Linux용 패키지를 한 번에 빌드할 수 있습니다. 하지만 이를 위해서는 약간의 준비가 필요할 수 있습니다.</p><p>하나의 플랫폼에서 여러 플랫폼을 동시에 구축하려는 경우 <strong>macOS</strong>를 권장합니다. 몇 가지 간단한 설정만으로 구성할 수 있기 때문입니다.</p><p>다음 명령어를 사용하여 한 번에 여러 플랫폼 빌드를 수행할 수 있습니다. 또는 위의 개별 빌드 명령어를 통해 원하는 OS에 대해서만 빌드를 수행할 수도 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>Linux 빌드에는 <code>multipass</code> 구성이 필요할 수 있습니다. 다음 링크를 통해 <code>multipass</code>에 대해 자세히 알아보세요: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>멀티플랫폼 빌드에 대해 자세히 알아보려면 다음 문서를 참조하세요: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="개발-파일을-제외하여-번들-크기-줄이기" tabindex="-1">개발 파일을 제외하여 번들 크기 줄이기 <a class="header-anchor" href="#개발-파일을-제외하여-번들-크기-줄이기" aria-label="Permalink to "개발 파일을 제외하여 번들 크기 줄이기""></a></h2><p>빌드 시점에 필요하지 않은 파일은 <code>buildAssets/builder/config.ts</code>의 파일 속성에 파일 패턴을 추가하여 제외할 수 있습니다. 이렇게 하면 번들 용량을 절약할 수 있습니다.</p><p>아래는 불필요한 <code>node_modules</code> 파일 패턴으로 번들을 추가로 절약할 수 있는 예시입니다. 프로젝트에 따라 아래 규칙을 사용하면 문제가 발생할 수 있으므로 사용 전에 검토하시기 바랍니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" tabindex="-1">네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정 <a class="header-anchor" href="#네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" aria-label="Permalink to "네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정""></a></h2><p><strong>네이티브 노드 모듈</strong>을 사용하는 프로젝트의 경우, <code>package.json</code>에 다음 스크립트를 추가하세요: 종속성을 설치할 때 <code>electron-builder</code>가 리빌드가 필요한 모듈을 처리합니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,20)]))}const u=i(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.lean.js b/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.lean.js new file mode 100644 index 0000000..6cb2515 --- /dev/null +++ b/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.lean.js @@ -0,0 +1,34 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"빌드 구성","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"ko/installation-and-build/build-configuration.md","filePath":"ko/installation-and-build/build-configuration.md","lastUpdated":1725496835000}'),l={name:"ko/installation-and-build/build-configuration.md"};function t(p,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`<h1 id="빌드-구성" tabindex="-1">빌드 구성 <a class="header-anchor" href="#빌드-구성" aria-label="Permalink to "빌드 구성""></a></h1><p>모듈 설치가 완료되면 아래 명령어를 사용하여 플랫폼 패키지를 간단하게 빌드할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>빌드된 패키지는 <code>release/{version}</code> 위치에서 찾을 수 있습니다.</p><p>자세한 내용은 다음 문서를 참조하세요: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" tabindex="-1">멀티플랫폼 빌드를 하려면 어떻게 해야 하나요? <a class="header-anchor" href="#멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" aria-label="Permalink to "멀티플랫폼 빌드를 하려면 어떻게 해야 하나요?""></a></h2><p>각 OS에 대한 패키지를 만들려면 동일한 OS에서 빌드해야 합니다. 예를 들어 macOS용 패키지는 macOS 컴퓨터에서 빌드해야 합니다.</p><p>하지만 하나의 OS에서 Windows, macOS, Linux용 패키지를 한 번에 빌드할 수 있습니다. 하지만 이를 위해서는 약간의 준비가 필요할 수 있습니다.</p><p>하나의 플랫폼에서 여러 플랫폼을 동시에 구축하려는 경우 <strong>macOS</strong>를 권장합니다. 몇 가지 간단한 설정만으로 구성할 수 있기 때문입니다.</p><p>다음 명령어를 사용하여 한 번에 여러 플랫폼 빌드를 수행할 수 있습니다. 또는 위의 개별 빌드 명령어를 통해 원하는 OS에 대해서만 빌드를 수행할 수도 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>Linux 빌드에는 <code>multipass</code> 구성이 필요할 수 있습니다. 다음 링크를 통해 <code>multipass</code>에 대해 자세히 알아보세요: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>멀티플랫폼 빌드에 대해 자세히 알아보려면 다음 문서를 참조하세요: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="개발-파일을-제외하여-번들-크기-줄이기" tabindex="-1">개발 파일을 제외하여 번들 크기 줄이기 <a class="header-anchor" href="#개발-파일을-제외하여-번들-크기-줄이기" aria-label="Permalink to "개발 파일을 제외하여 번들 크기 줄이기""></a></h2><p>빌드 시점에 필요하지 않은 파일은 <code>buildAssets/builder/config.ts</code>의 파일 속성에 파일 패턴을 추가하여 제외할 수 있습니다. 이렇게 하면 번들 용량을 절약할 수 있습니다.</p><p>아래는 불필요한 <code>node_modules</code> 파일 패턴으로 번들을 추가로 절약할 수 있는 예시입니다. 프로젝트에 따라 아래 규칙을 사용하면 문제가 발생할 수 있으므로 사용 전에 검토하시기 바랍니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" tabindex="-1">네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정 <a class="header-anchor" href="#네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" aria-label="Permalink to "네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정""></a></h2><p><strong>네이티브 노드 모듈</strong>을 사용하는 프로젝트의 경우, <code>package.json</code>에 다음 스크립트를 추가하세요: 종속성을 설치할 때 <code>electron-builder</code>가 리빌드가 필요한 모듈을 처리합니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div>`,20)]))}const u=i(l,[["render",t]]);export{c as __pageData,u as default}; diff --git a/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.js b/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.js new file mode 100644 index 0000000..617f3c4 --- /dev/null +++ b/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.js @@ -0,0 +1,8 @@ +import{_ as a,c as i,a2 as t,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"시작하기","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"ko/installation-and-build/getting-started.md","filePath":"ko/installation-and-build/getting-started.md","lastUpdated":1725496835000}'),e={name:"ko/installation-and-build/getting-started.md"};function l(h,s,p,r,d,k){return n(),i("div",null,s[0]||(s[0]=[t(`<h1 id="시작하기" tabindex="-1">시작하기 <a class="header-anchor" href="#시작하기" aria-label="Permalink to "시작하기""></a></h1><h2 id="프로젝트-복제하기" tabindex="-1">프로젝트 복제하기 <a class="header-anchor" href="#프로젝트-복제하기" aria-label="Permalink to "프로젝트 복제하기""></a></h2><h3 id="방법-1-npm-init-권장" tabindex="-1">방법 1: <code>npm init</code> (권장) <a class="header-anchor" href="#방법-1-npm-init-권장" aria-label="Permalink to "방법 1: \`npm init\` (권장)""></a></h3><p>npm 명령만으로 리포지토리를 쉽게 복제할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>위의 방법은 프로젝트에 불필요한 문서와 '.github' 관련 파일을 만들지 않습니다.</p><h3 id="방법-2-템플릿-사용" tabindex="-1">방법 2: 템플릿 사용 <a class="header-anchor" href="#방법-2-템플릿-사용" aria-label="Permalink to "방법 2: 템플릿 사용""></a></h3><p><strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">이 템플릿 사용</a></strong> 버튼을 클릭하면 나만의 프로젝트를 즉시 만들 수 있습니다.</p><p>이 방법을 사용하면 GitHub에 리포지토리가 즉시 생성되지만 프로젝트를 로컬에 복제해야 사용할 수 있습니다.</p><h3 id="방법-3-리포지토리-복제" tabindex="-1">방법 3: 리포지토리 복제 <a class="header-anchor" href="#방법-3-리포지토리-복제" aria-label="Permalink to "방법 3: 리포지토리 복제""></a></h3><p>아래 명령어를 사용하여 이 리포지토리를 복제합니다. 이 방법은 Vutron 리포지토리에 직접 기여하는 경우에 적합합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="설치하기" tabindex="-1">설치하기 <a class="header-anchor" href="#설치하기" aria-label="Permalink to "설치하기""></a></h2><p>프로젝트를 복제한 후 터미널에서 다음 명령을 실행합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="개발-환경에서-실행" tabindex="-1">개발 환경에서 실행 <a class="header-anchor" href="#개발-환경에서-실행" aria-label="Permalink to "개발 환경에서 실행""></a></h2><p>개발 환경의 애플리케이션은 <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong> 환경에서 실행됩니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>명령줄 명령을 실행한 후에도 애플리케이션이 나타나지 않는다면 다른 앱에서 기본 포트를 사용하고 있는지 확인해야 할 수 있습니다.</p><p>Vite는 기본적으로 포트 <code>5173</code>을 사용합니다.</p>`,20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.lean.js b/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.lean.js new file mode 100644 index 0000000..617f3c4 --- /dev/null +++ b/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.lean.js @@ -0,0 +1,8 @@ +import{_ as a,c as i,a2 as t,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"시작하기","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"ko/installation-and-build/getting-started.md","filePath":"ko/installation-and-build/getting-started.md","lastUpdated":1725496835000}'),e={name:"ko/installation-and-build/getting-started.md"};function l(h,s,p,r,d,k){return n(),i("div",null,s[0]||(s[0]=[t(`<h1 id="시작하기" tabindex="-1">시작하기 <a class="header-anchor" href="#시작하기" aria-label="Permalink to "시작하기""></a></h1><h2 id="프로젝트-복제하기" tabindex="-1">프로젝트 복제하기 <a class="header-anchor" href="#프로젝트-복제하기" aria-label="Permalink to "프로젝트 복제하기""></a></h2><h3 id="방법-1-npm-init-권장" tabindex="-1">방법 1: <code>npm init</code> (권장) <a class="header-anchor" href="#방법-1-npm-init-권장" aria-label="Permalink to "방법 1: \`npm init\` (권장)""></a></h3><p>npm 명령만으로 리포지토리를 쉽게 복제할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>위의 방법은 프로젝트에 불필요한 문서와 '.github' 관련 파일을 만들지 않습니다.</p><h3 id="방법-2-템플릿-사용" tabindex="-1">방법 2: 템플릿 사용 <a class="header-anchor" href="#방법-2-템플릿-사용" aria-label="Permalink to "방법 2: 템플릿 사용""></a></h3><p><strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">이 템플릿 사용</a></strong> 버튼을 클릭하면 나만의 프로젝트를 즉시 만들 수 있습니다.</p><p>이 방법을 사용하면 GitHub에 리포지토리가 즉시 생성되지만 프로젝트를 로컬에 복제해야 사용할 수 있습니다.</p><h3 id="방법-3-리포지토리-복제" tabindex="-1">방법 3: 리포지토리 복제 <a class="header-anchor" href="#방법-3-리포지토리-복제" aria-label="Permalink to "방법 3: 리포지토리 복제""></a></h3><p>아래 명령어를 사용하여 이 리포지토리를 복제합니다. 이 방법은 Vutron 리포지토리에 직접 기여하는 경우에 적합합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="설치하기" tabindex="-1">설치하기 <a class="header-anchor" href="#설치하기" aria-label="Permalink to "설치하기""></a></h2><p>프로젝트를 복제한 후 터미널에서 다음 명령을 실행합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="개발-환경에서-실행" tabindex="-1">개발 환경에서 실행 <a class="header-anchor" href="#개발-환경에서-실행" aria-label="Permalink to "개발 환경에서 실행""></a></h2><p>개발 환경의 애플리케이션은 <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong> 환경에서 실행됩니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>명령줄 명령을 실행한 후에도 애플리케이션이 나타나지 않는다면 다른 앱에서 기본 포트를 사용하고 있는지 확인해야 할 수 있습니다.</p><p>Vite는 기본적으로 포트 <code>5173</code>을 사용합니다.</p>`,20)]))}const g=a(e,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/ko_installation-and-build_index.md.1z_mEwvg.js b/assets/ko_installation-and-build_index.md.1z_mEwvg.js new file mode 100644 index 0000000..fbc26ce --- /dev/null +++ b/assets/ko_installation-and-build_index.md.1z_mEwvg.js @@ -0,0 +1 @@ +import{_ as t,c as n,j as e,a as d,o as i}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"설치 그리고 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"ko/installation-and-build/index.md","filePath":"ko/installation-and-build/index.md","lastUpdated":1725497265000}'),o={name:"ko/installation-and-build/index.md"};function r(s,a,l,c,p,m){return i(),n("div",null,a[0]||(a[0]=[e("h1",{id:"설치-그리고-빌드",tabindex:"-1"},[d("설치 그리고 빌드 "),e("a",{class:"header-anchor",href:"#설치-그리고-빌드","aria-label":'Permalink to "설치 그리고 빌드"'},"")],-1)]))}const _=t(o,[["render",r]]);export{x as __pageData,_ as default}; diff --git a/assets/ko_installation-and-build_index.md.1z_mEwvg.lean.js b/assets/ko_installation-and-build_index.md.1z_mEwvg.lean.js new file mode 100644 index 0000000..fbc26ce --- /dev/null +++ b/assets/ko_installation-and-build_index.md.1z_mEwvg.lean.js @@ -0,0 +1 @@ +import{_ as t,c as n,j as e,a as d,o as i}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"설치 그리고 빌드","description":"","frontmatter":{},"headers":[],"relativePath":"ko/installation-and-build/index.md","filePath":"ko/installation-and-build/index.md","lastUpdated":1725497265000}'),o={name:"ko/installation-and-build/index.md"};function r(s,a,l,c,p,m){return i(),n("div",null,a[0]||(a[0]=[e("h1",{id:"설치-그리고-빌드",tabindex:"-1"},[d("설치 그리고 빌드 "),e("a",{class:"header-anchor",href:"#설치-그리고-빌드","aria-label":'Permalink to "설치 그리고 빌드"'},"")],-1)]))}const _=t(o,[["render",r]]);export{x as __pageData,_ as default}; diff --git a/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.js b/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.js new file mode 100644 index 0000000..977e4ba --- /dev/null +++ b/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.js @@ -0,0 +1,8 @@ +import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.BQmytedh.js";const r=JSON.parse('{"title":"로컬 문서 관리","description":"","frontmatter":{"order":5},"headers":[],"relativePath":"ko/installation-and-build/install-local-documentation.md","filePath":"ko/installation-and-build/install-local-documentation.md","lastUpdated":1725496835000}'),l={name:"ko/installation-and-build/install-local-documentation.md"};function e(p,s,h,d,o,c){return t(),i("div",null,s[0]||(s[0]=[n(`<h1 id="로컬-문서-관리" tabindex="-1">로컬 문서 관리 <a class="header-anchor" href="#로컬-문서-관리" aria-label="Permalink to "로컬 문서 관리""></a></h1><p><code>Vutron</code>의 문서는 <code>VitePress</code> 뷰어를 통해 로컬 환경에서 볼 수 있습니다.</p><p>이 함수는 전체 프로젝트가 복제된 경우에만 작동합니다. <code>npm init vutron</code>으로 프로젝트를 생성한 경우 <code>docs</code> 폴더는 포함되지 않습니다.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>아래 지침의 모든 작업은 <code>docs</code> 폴더에서 수행해야 합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>다음 명령을 사용하여 관련 패키지를 설치합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>아래 명령을 통해 문서가 호스팅되는 로컬 서버를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div>`,10)]))}const F=a(l,[["render",e]]);export{r as __pageData,F as default}; diff --git a/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.lean.js b/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.lean.js new file mode 100644 index 0000000..977e4ba --- /dev/null +++ b/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.lean.js @@ -0,0 +1,8 @@ +import{_ as a,c as i,a2 as n,o as t}from"./chunks/framework.BQmytedh.js";const r=JSON.parse('{"title":"로컬 문서 관리","description":"","frontmatter":{"order":5},"headers":[],"relativePath":"ko/installation-and-build/install-local-documentation.md","filePath":"ko/installation-and-build/install-local-documentation.md","lastUpdated":1725496835000}'),l={name:"ko/installation-and-build/install-local-documentation.md"};function e(p,s,h,d,o,c){return t(),i("div",null,s[0]||(s[0]=[n(`<h1 id="로컬-문서-관리" tabindex="-1">로컬 문서 관리 <a class="header-anchor" href="#로컬-문서-관리" aria-label="Permalink to "로컬 문서 관리""></a></h1><p><code>Vutron</code>의 문서는 <code>VitePress</code> 뷰어를 통해 로컬 환경에서 볼 수 있습니다.</p><p>이 함수는 전체 프로젝트가 복제된 경우에만 작동합니다. <code>npm init vutron</code>으로 프로젝트를 생성한 경우 <code>docs</code> 폴더는 포함되지 않습니다.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>아래 지침의 모든 작업은 <code>docs</code> 폴더에서 수행해야 합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>다음 명령을 사용하여 관련 패키지를 설치합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>아래 명령을 통해 문서가 호스팅되는 로컬 서버를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div>`,10)]))}const F=a(l,[["render",e]]);export{r as __pageData,F as default}; diff --git a/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.js b/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.js new file mode 100644 index 0000000..f7688c6 --- /dev/null +++ b/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.js @@ -0,0 +1 @@ +import{_ as e,c as d,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"NPM Scripts","description":"","frontmatter":{"title":"NPM Scripts","order":3},"headers":[],"relativePath":"ko/installation-and-build/npm-scripts.md","filePath":"ko/installation-and-build/npm-scripts.md","lastUpdated":1725496835000}'),i={name:"ko/installation-and-build/npm-scripts.md"};function a(c,t,n,l,s,u){return r(),d("div",null,t[0]||(t[0]=[o('<h1 id="npm-스크립트" tabindex="-1">Npm 스크립트 <a class="header-anchor" href="#npm-스크립트" aria-label="Permalink to "Npm 스크립트""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="일반" tabindex="-1">일반 <a class="header-anchor" href="#일반" aria-label="Permalink to "일반""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="문서용" tabindex="-1">문서용 <a class="header-anchor" href="#문서용" aria-label="Permalink to "문서용""></a></h2><p>프로젝트 문서에 기여하는 경우에만 사용됩니다. <code>docs</code> 디렉토리 위치에서 실행해야 합니다.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table>',7)]))}const h=e(i,[["render",a]]);export{m as __pageData,h as default}; diff --git a/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.lean.js b/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.lean.js new file mode 100644 index 0000000..f7688c6 --- /dev/null +++ b/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.lean.js @@ -0,0 +1 @@ +import{_ as e,c as d,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"NPM Scripts","description":"","frontmatter":{"title":"NPM Scripts","order":3},"headers":[],"relativePath":"ko/installation-and-build/npm-scripts.md","filePath":"ko/installation-and-build/npm-scripts.md","lastUpdated":1725496835000}'),i={name:"ko/installation-and-build/npm-scripts.md"};function a(c,t,n,l,s,u){return r(),d("div",null,t[0]||(t[0]=[o('<h1 id="npm-스크립트" tabindex="-1">Npm 스크립트 <a class="header-anchor" href="#npm-스크립트" aria-label="Permalink to "Npm 스크립트""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="일반" tabindex="-1">일반 <a class="header-anchor" href="#일반" aria-label="Permalink to "일반""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="문서용" tabindex="-1">문서용 <a class="header-anchor" href="#문서용" aria-label="Permalink to "문서용""></a></h2><p>프로젝트 문서에 기여하는 경우에만 사용됩니다. <code>docs</code> 디렉토리 위치에서 실행해야 합니다.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table>',7)]))}const h=e(i,[["render",a]]);export{m as __pageData,h as default}; diff --git a/assets/ko_other-projects.md.B1Y_QtMF.js b/assets/ko_other-projects.md.B1Y_QtMF.js new file mode 100644 index 0000000..07660c3 --- /dev/null +++ b/assets/ko_other-projects.md.B1Y_QtMF.js @@ -0,0 +1 @@ +import{_ as t,c as r,a2 as a,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"기타 프로젝트","description":"","frontmatter":{},"headers":[],"relativePath":"ko/other-projects.md","filePath":"ko/other-projects.md","lastUpdated":1725497265000}'),c={name:"ko/other-projects.md"};function n(p,e,s,l,h,i){return o(),r("div",null,e[0]||(e[0]=[a('<h1 id="기타-프로젝트" tabindex="-1">기타 프로젝트 <a class="header-anchor" href="#기타-프로젝트" aria-label="Permalink to "기타 프로젝트""></a></h1><h2 id="react로-만든-electron-템플릿을-찾고-계신가요" tabindex="-1">React로 만든 Electron 템플릿을 찾고 계신가요? <a class="header-anchor" href="#react로-만든-electron-템플릿을-찾고-계신가요" aria-label="Permalink to "React로 만든 Electron 템플릿을 찾고 계신가요?""></a></h2><p>Vite + React + Material-UI + Electron으로 구성된 'Retron' 프로젝트도 확인해 보세요.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" tabindex="-1">(사용 중단) Webpack 5 컴파일러로 <code>Vutron</code>을 찾고 계신가요? <a class="header-anchor" href="#사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" aria-label="Permalink to "(사용 중단) Webpack 5 컴파일러로 `Vutron`을 찾고 계신가요?""></a></h2><p>Vite 컴파일러를 사용하여 프로젝트 및 번들 크기를 줄이고 개발 환경과 빌드 속도를 개선한다는 목표를 달성했습니다.</p><p>Webpack 5 컴파일러를 사용하는 기존 <strong>Vutron</strong>은 아래 리포지토리로 분리되었으며 곧 지원이 종료될 예정입니다.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p>',8)]))}const b=t(c,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/ko_other-projects.md.B1Y_QtMF.lean.js b/assets/ko_other-projects.md.B1Y_QtMF.lean.js new file mode 100644 index 0000000..07660c3 --- /dev/null +++ b/assets/ko_other-projects.md.B1Y_QtMF.lean.js @@ -0,0 +1 @@ +import{_ as t,c as r,a2 as a,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"기타 프로젝트","description":"","frontmatter":{},"headers":[],"relativePath":"ko/other-projects.md","filePath":"ko/other-projects.md","lastUpdated":1725497265000}'),c={name:"ko/other-projects.md"};function n(p,e,s,l,h,i){return o(),r("div",null,e[0]||(e[0]=[a('<h1 id="기타-프로젝트" tabindex="-1">기타 프로젝트 <a class="header-anchor" href="#기타-프로젝트" aria-label="Permalink to "기타 프로젝트""></a></h1><h2 id="react로-만든-electron-템플릿을-찾고-계신가요" tabindex="-1">React로 만든 Electron 템플릿을 찾고 계신가요? <a class="header-anchor" href="#react로-만든-electron-템플릿을-찾고-계신가요" aria-label="Permalink to "React로 만든 Electron 템플릿을 찾고 계신가요?""></a></h2><p>Vite + React + Material-UI + Electron으로 구성된 'Retron' 프로젝트도 확인해 보세요.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" tabindex="-1">(사용 중단) Webpack 5 컴파일러로 <code>Vutron</code>을 찾고 계신가요? <a class="header-anchor" href="#사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" aria-label="Permalink to "(사용 중단) Webpack 5 컴파일러로 `Vutron`을 찾고 계신가요?""></a></h2><p>Vite 컴파일러를 사용하여 프로젝트 및 번들 크기를 줄이고 개발 환경과 빌드 속도를 개선한다는 목표를 달성했습니다.</p><p>Webpack 5 컴파일러를 사용하는 기존 <strong>Vutron</strong>은 아래 리포지토리로 분리되었으며 곧 지원이 종료될 예정입니다.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p>',8)]))}const b=t(c,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/ko_project-structures_index.md.CwEz-WEU.js b/assets/ko_project-structures_index.md.CwEz-WEU.js new file mode 100644 index 0000000..2adc3e2 --- /dev/null +++ b/assets/ko_project-structures_index.md.CwEz-WEU.js @@ -0,0 +1 @@ +import{_ as a,c as r,j as t,a as s,o}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"ko/project-structures/index.md","filePath":"ko/project-structures/index.md","lastUpdated":1725497265000}'),n={name:"ko/project-structures/index.md"};function c(d,e,i,p,l,u){return o(),r("div",null,e[0]||(e[0]=[t("h1",{id:"프로젝트-구조",tabindex:"-1"},[s("프로젝트 구조 "),t("a",{class:"header-anchor",href:"#프로젝트-구조","aria-label":'Permalink to "프로젝트 구조"'},"")],-1)]))}const x=a(n,[["render",c]]);export{f as __pageData,x as default}; diff --git a/assets/ko_project-structures_index.md.CwEz-WEU.lean.js b/assets/ko_project-structures_index.md.CwEz-WEU.lean.js new file mode 100644 index 0000000..2adc3e2 --- /dev/null +++ b/assets/ko_project-structures_index.md.CwEz-WEU.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,j as t,a as s,o}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{},"headers":[],"relativePath":"ko/project-structures/index.md","filePath":"ko/project-structures/index.md","lastUpdated":1725497265000}'),n={name:"ko/project-structures/index.md"};function c(d,e,i,p,l,u){return o(),r("div",null,e[0]||(e[0]=[t("h1",{id:"프로젝트-구조",tabindex:"-1"},[s("프로젝트 구조 "),t("a",{class:"header-anchor",href:"#프로젝트-구조","aria-label":'Permalink to "프로젝트 구조"'},"")],-1)]))}const x=a(n,[["render",c]]);export{f as __pageData,x as default}; diff --git a/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.js b/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.js new file mode 100644 index 0000000..3ff183a --- /dev/null +++ b/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.js @@ -0,0 +1 @@ +import{_ as r,c as a,a2 as t,o as l}from"./chunks/framework.BQmytedh.js";const p=JSON.parse('{"title":"사전 구성된 구성 요소","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"ko/project-structures/pre-configured-components.md","filePath":"ko/project-structures/pre-configured-components.md","lastUpdated":1725496835000}'),o={name:"ko/project-structures/pre-configured-components.md"};function i(n,e,s,h,u,c){return l(),a("div",null,e[0]||(e[0]=[t('<h1 id="사전-구성된-구성-요소" tabindex="-1">사전 구성된 구성 요소 <a class="header-anchor" href="#사전-구성된-구성-요소" aria-label="Permalink to "사전 구성된 구성 요소""></a></h1><h2 id="웹-앱-프레임워크" tabindex="-1">웹 앱 프레임워크 <a class="header-anchor" href="#웹-앱-프레임워크" aria-label="Permalink to "웹 앱 프레임워크""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="개발-도움말-도구" tabindex="-1">개발 도움말 도구 <a class="header-anchor" href="#개발-도움말-도구" aria-label="Permalink to "개발 도움말 도구""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="프론트엔드-프레임워크-vue" tabindex="-1">프론트엔드 프레임워크 (Vue) <a class="header-anchor" href="#프론트엔드-프레임워크-vue" aria-label="Permalink to "프론트엔드 프레임워크 (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="디자인-프레임워크" tabindex="-1">디자인 프레임워크 <a class="header-anchor" href="#디자인-프레임워크" aria-label="Permalink to "디자인 프레임워크""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="테스트" tabindex="-1">테스트 <a class="header-anchor" href="#테스트" aria-label="Permalink to "테스트""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul>',11)]))}const d=r(o,[["render",i]]);export{p as __pageData,d as default}; diff --git a/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.lean.js b/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.lean.js new file mode 100644 index 0000000..3ff183a --- /dev/null +++ b/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.lean.js @@ -0,0 +1 @@ +import{_ as r,c as a,a2 as t,o as l}from"./chunks/framework.BQmytedh.js";const p=JSON.parse('{"title":"사전 구성된 구성 요소","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"ko/project-structures/pre-configured-components.md","filePath":"ko/project-structures/pre-configured-components.md","lastUpdated":1725496835000}'),o={name:"ko/project-structures/pre-configured-components.md"};function i(n,e,s,h,u,c){return l(),a("div",null,e[0]||(e[0]=[t('<h1 id="사전-구성된-구성-요소" tabindex="-1">사전 구성된 구성 요소 <a class="header-anchor" href="#사전-구성된-구성-요소" aria-label="Permalink to "사전 구성된 구성 요소""></a></h1><h2 id="웹-앱-프레임워크" tabindex="-1">웹 앱 프레임워크 <a class="header-anchor" href="#웹-앱-프레임워크" aria-label="Permalink to "웹 앱 프레임워크""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="개발-도움말-도구" tabindex="-1">개발 도움말 도구 <a class="header-anchor" href="#개발-도움말-도구" aria-label="Permalink to "개발 도움말 도구""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="프론트엔드-프레임워크-vue" tabindex="-1">프론트엔드 프레임워크 (Vue) <a class="header-anchor" href="#프론트엔드-프레임워크-vue" aria-label="Permalink to "프론트엔드 프레임워크 (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="디자인-프레임워크" tabindex="-1">디자인 프레임워크 <a class="header-anchor" href="#디자인-프레임워크" aria-label="Permalink to "디자인 프레임워크""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="테스트" tabindex="-1">테스트 <a class="header-anchor" href="#테스트" aria-label="Permalink to "테스트""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul>',11)]))}const d=r(o,[["render",i]]);export{p as __pageData,d as default}; diff --git a/assets/ko_project-structures_project-structure.md.4xmi4ZSM.js b/assets/ko_project-structures_project-structure.md.4xmi4ZSM.js new file mode 100644 index 0000000..bb0e38b --- /dev/null +++ b/assets/ko_project-structures_project-structure.md.4xmi4ZSM.js @@ -0,0 +1,65 @@ +import{_ as n,c as a,a2 as p,o as e}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"ko/project-structures/project-structure.md","filePath":"ko/project-structures/project-structure.md","lastUpdated":1725496835000}'),l={name:"ko/project-structures/project-structure.md"};function i(t,s,c,r,o,u){return e(),a("div",null,s[0]||(s[0]=[p(`<h1 id="프로젝트-구조" tabindex="-1">프로젝트 구조 <a class="header-anchor" href="#프로젝트-구조" aria-label="Permalink to "프로젝트 구조""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub 파일들 (Vutron 프로젝트 기여에만 사용)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - README.md 등에 사용되는 GitHub 리소스</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub 워크플로우 정의</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Visual Studio Code IDE에서 사용하는 일반적인 프로젝트 구성 파일</span></span> +<span class="line"><span>├─ buildAssets/ - Electron 빌드에 사용되는 패키지 리소스(아이콘, 로고 등) 파일</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - \`electron-builder\` 동적 구성 파일</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - 패키지 빌드에 사용되는 출력 디렉토리</span></span> +<span class="line"><span>├─ docs/ - 프로젝트 문서(선택적으로 활성화)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - 문서 호스팅에 사용되는 VitePress 구성 파일</span></span> +<span class="line"><span>│ └─ public/ - VitePress 문서 페이지의 루트 리소스 디렉토리</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - 메인(Electron) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ utils/ - 메인 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - 메인 글로벌 정의</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - 메인 글로벌 메뉴 정의</span></span> +<span class="line"><span>│ │ └─ index.ts - 메인 프로세스 진입점</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - 메인 프로세스 IPC 핸들러 정의</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - 메인 프로세스 메인 윈도우 프로세스</span></span> +<span class="line"><span>│ ├─ preload/ - 프리로드 (Electron-Vue 커뮤니케이션 브릿지) 프로세스</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - 렌더러 (Vue) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue 컴포넌트 콜렉션</span></span> +<span class="line"><span>│ │ │ └─ layout/ - 레이아웃 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n 언어 리소스 파일</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue 플러그인 정의</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue 정적 리소스</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue 라우팅 정의</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue 화면 컴포넌트</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - 렌더링 프로세스 및 라우팅 오류 발생 시 표시되는 화면</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - 샘플 화면</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia 스토어 (글로벌 상태 관리) 정의</span></span> +<span class="line"><span>│ │ ├─ utils/ - 렌더러 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue 앱 루트 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ index.html - Electron 렌더러 프로세스에 의해 로드된 루트 정적 인덱스</span></span> +<span class="line"><span>│ └─ └─ main.ts - 렌더러 프로세스 엔트리 포인트Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - 애플리케이션 테스트 구성</span></span> +<span class="line"><span>│ ├─ results/ - PlayWright 테스트 결과 파일 및 스크린샷 저장 위치</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright 테스트 사양 파일</span></span> +<span class="line"><span>│ ├─ fixtures.ts - 공통 실행 API 테스트</span></span> +<span class="line"><span>│ └─ testUtil.ts - 테스트 유틸리티</span></span> +<span class="line"><span>├─ .editorconfig - IDE용 에디터 권장 구성 파일</span></span> +<span class="line"><span>├─ .eslintignore - ESLint에서 무시할 파일 목록</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint 규칙 구성</span></span> +<span class="line"><span>├─ .gitignore - Git에 업로드하지 않을 파일 목록</span></span> +<span class="line"><span>├─ .prettierignore - Prettier 파일 서식을 비활성화할 파일 목록</span></span> +<span class="line"><span>├─ .prettierrc - Prettier 규칙 설정</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - GitHub에서만 사용되는 파일</span></span> +<span class="line"><span>├─ LICENSE - 프로젝트 라이선스 파일</span></span> +<span class="line"><span>├─ package.json - Node.js 패키지 구성</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright 테스트 규칙 구성</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript 설정</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript 설정</span></span> +<span class="line"><span>├─ vite.config.mts - Vite 컴파일러 빌드 설정</span></span> +<span class="line"><span>└─ README.md - GitHub에서만 사용되는 파일</span></span></code></pre></div>`,2)]))}const m=n(l,[["render",i]]);export{g as __pageData,m as default}; diff --git a/assets/ko_project-structures_project-structure.md.4xmi4ZSM.lean.js b/assets/ko_project-structures_project-structure.md.4xmi4ZSM.lean.js new file mode 100644 index 0000000..bb0e38b --- /dev/null +++ b/assets/ko_project-structures_project-structure.md.4xmi4ZSM.lean.js @@ -0,0 +1,65 @@ +import{_ as n,c as a,a2 as p,o as e}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"프로젝트 구조","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"ko/project-structures/project-structure.md","filePath":"ko/project-structures/project-structure.md","lastUpdated":1725496835000}'),l={name:"ko/project-structures/project-structure.md"};function i(t,s,c,r,o,u){return e(),a("div",null,s[0]||(s[0]=[p(`<h1 id="프로젝트-구조" tabindex="-1">프로젝트 구조 <a class="header-anchor" href="#프로젝트-구조" aria-label="Permalink to "프로젝트 구조""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub 파일들 (Vutron 프로젝트 기여에만 사용)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - README.md 등에 사용되는 GitHub 리소스</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub 워크플로우 정의</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Visual Studio Code IDE에서 사용하는 일반적인 프로젝트 구성 파일</span></span> +<span class="line"><span>├─ buildAssets/ - Electron 빌드에 사용되는 패키지 리소스(아이콘, 로고 등) 파일</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - \`electron-builder\` 동적 구성 파일</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - 패키지 빌드에 사용되는 출력 디렉토리</span></span> +<span class="line"><span>├─ docs/ - 프로젝트 문서(선택적으로 활성화)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - 문서 호스팅에 사용되는 VitePress 구성 파일</span></span> +<span class="line"><span>│ └─ public/ - VitePress 문서 페이지의 루트 리소스 디렉토리</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - 메인(Electron) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ utils/ - 메인 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - 메인 글로벌 정의</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - 메인 글로벌 메뉴 정의</span></span> +<span class="line"><span>│ │ └─ index.ts - 메인 프로세스 진입점</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - 메인 프로세스 IPC 핸들러 정의</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - 메인 프로세스 메인 윈도우 프로세스</span></span> +<span class="line"><span>│ ├─ preload/ - 프리로드 (Electron-Vue 커뮤니케이션 브릿지) 프로세스</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - 렌더러 (Vue) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue 컴포넌트 콜렉션</span></span> +<span class="line"><span>│ │ │ └─ layout/ - 레이아웃 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n 언어 리소스 파일</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue 플러그인 정의</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue 정적 리소스</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue 라우팅 정의</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue 화면 컴포넌트</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - 렌더링 프로세스 및 라우팅 오류 발생 시 표시되는 화면</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - 샘플 화면</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia 스토어 (글로벌 상태 관리) 정의</span></span> +<span class="line"><span>│ │ ├─ utils/ - 렌더러 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue 앱 루트 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ index.html - Electron 렌더러 프로세스에 의해 로드된 루트 정적 인덱스</span></span> +<span class="line"><span>│ └─ └─ main.ts - 렌더러 프로세스 엔트리 포인트Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - 애플리케이션 테스트 구성</span></span> +<span class="line"><span>│ ├─ results/ - PlayWright 테스트 결과 파일 및 스크린샷 저장 위치</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright 테스트 사양 파일</span></span> +<span class="line"><span>│ ├─ fixtures.ts - 공통 실행 API 테스트</span></span> +<span class="line"><span>│ └─ testUtil.ts - 테스트 유틸리티</span></span> +<span class="line"><span>├─ .editorconfig - IDE용 에디터 권장 구성 파일</span></span> +<span class="line"><span>├─ .eslintignore - ESLint에서 무시할 파일 목록</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint 규칙 구성</span></span> +<span class="line"><span>├─ .gitignore - Git에 업로드하지 않을 파일 목록</span></span> +<span class="line"><span>├─ .prettierignore - Prettier 파일 서식을 비활성화할 파일 목록</span></span> +<span class="line"><span>├─ .prettierrc - Prettier 규칙 설정</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - GitHub에서만 사용되는 파일</span></span> +<span class="line"><span>├─ LICENSE - 프로젝트 라이선스 파일</span></span> +<span class="line"><span>├─ package.json - Node.js 패키지 구성</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright 테스트 규칙 구성</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript 설정</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript 설정</span></span> +<span class="line"><span>├─ vite.config.mts - Vite 컴파일러 빌드 설정</span></span> +<span class="line"><span>└─ README.md - GitHub에서만 사용되는 파일</span></span></code></pre></div>`,2)]))}const m=n(l,[["render",i]]);export{g as __pageData,m as default}; diff --git a/assets/other-projects.md.BSByacBO.js b/assets/other-projects.md.BSByacBO.js new file mode 100644 index 0000000..56b4b0f --- /dev/null +++ b/assets/other-projects.md.BSByacBO.js @@ -0,0 +1 @@ +import{_ as t,c as o,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"Other Projects","description":"","frontmatter":{},"headers":[],"relativePath":"other-projects.md","filePath":"en/other-projects.md","lastUpdated":1725496835000}'),n={name:"other-projects.md"};function c(i,e,p,s,l,h){return a(),o("div",null,e[0]||(e[0]=[r('<h1 id="other-projects" tabindex="-1">Other Projects <a class="header-anchor" href="#other-projects" aria-label="Permalink to "Other Projects""></a></h1><h2 id="looking-for-electron-templates-made-with-react" tabindex="-1">Looking for Electron templates made with React? <a class="header-anchor" href="#looking-for-electron-templates-made-with-react" aria-label="Permalink to "Looking for Electron templates made with React?""></a></h2><p>Also check out the <code>Retron</code> project, which consists of Vite + React + Material-UI + Electron.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="deprecated-looking-for-vutron-with-webpack-5-compiler" tabindex="-1">(Deprecated) Looking for <code>Vutron</code> with Webpack 5 compiler? <a class="header-anchor" href="#deprecated-looking-for-vutron-with-webpack-5-compiler" aria-label="Permalink to "(Deprecated) Looking for `Vutron` with Webpack 5 compiler?""></a></h2><p>By using the Vite compiler, we achieved our goals of reducing project and bundle size, and improving development environment and build speed.</p><p>The old <strong>Vutron</strong> using the Webpack 5 compiler has been split into the repositories below and will end support soon.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p>',8)]))}const u=t(n,[["render",c]]);export{m as __pageData,u as default}; diff --git a/assets/other-projects.md.BSByacBO.lean.js b/assets/other-projects.md.BSByacBO.lean.js new file mode 100644 index 0000000..56b4b0f --- /dev/null +++ b/assets/other-projects.md.BSByacBO.lean.js @@ -0,0 +1 @@ +import{_ as t,c as o,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"Other Projects","description":"","frontmatter":{},"headers":[],"relativePath":"other-projects.md","filePath":"en/other-projects.md","lastUpdated":1725496835000}'),n={name:"other-projects.md"};function c(i,e,p,s,l,h){return a(),o("div",null,e[0]||(e[0]=[r('<h1 id="other-projects" tabindex="-1">Other Projects <a class="header-anchor" href="#other-projects" aria-label="Permalink to "Other Projects""></a></h1><h2 id="looking-for-electron-templates-made-with-react" tabindex="-1">Looking for Electron templates made with React? <a class="header-anchor" href="#looking-for-electron-templates-made-with-react" aria-label="Permalink to "Looking for Electron templates made with React?""></a></h2><p>Also check out the <code>Retron</code> project, which consists of Vite + React + Material-UI + Electron.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="deprecated-looking-for-vutron-with-webpack-5-compiler" tabindex="-1">(Deprecated) Looking for <code>Vutron</code> with Webpack 5 compiler? <a class="header-anchor" href="#deprecated-looking-for-vutron-with-webpack-5-compiler" aria-label="Permalink to "(Deprecated) Looking for `Vutron` with Webpack 5 compiler?""></a></h2><p>By using the Vite compiler, we achieved our goals of reducing project and bundle size, and improving development environment and build speed.</p><p>The old <strong>Vutron</strong> using the Webpack 5 compiler has been split into the repositories below and will end support soon.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p>',8)]))}const u=t(n,[["render",c]]);export{m as __pageData,u as default}; diff --git a/assets/project-structures_index.md.4YzXULKH.js b/assets/project-structures_index.md.4YzXULKH.js new file mode 100644 index 0000000..08de934 --- /dev/null +++ b/assets/project-structures_index.md.4YzXULKH.js @@ -0,0 +1 @@ +import{_ as r,c as a,j as t,a as s,o as c}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Project Structures","description":"","frontmatter":{},"headers":[],"relativePath":"project-structures/index.md","filePath":"en/project-structures/index.md","lastUpdated":1725497265000}'),o={name:"project-structures/index.md"};function n(d,e,u,i,p,l){return c(),a("div",null,e[0]||(e[0]=[t("h1",{id:"project-structures",tabindex:"-1"},[s("Project Structures "),t("a",{class:"header-anchor",href:"#project-structures","aria-label":'Permalink to "Project Structures"'},"")],-1)]))}const j=r(o,[["render",n]]);export{f as __pageData,j as default}; diff --git a/assets/project-structures_index.md.4YzXULKH.lean.js b/assets/project-structures_index.md.4YzXULKH.lean.js new file mode 100644 index 0000000..08de934 --- /dev/null +++ b/assets/project-structures_index.md.4YzXULKH.lean.js @@ -0,0 +1 @@ +import{_ as r,c as a,j as t,a as s,o as c}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Project Structures","description":"","frontmatter":{},"headers":[],"relativePath":"project-structures/index.md","filePath":"en/project-structures/index.md","lastUpdated":1725497265000}'),o={name:"project-structures/index.md"};function n(d,e,u,i,p,l){return c(),a("div",null,e[0]||(e[0]=[t("h1",{id:"project-structures",tabindex:"-1"},[s("Project Structures "),t("a",{class:"header-anchor",href:"#project-structures","aria-label":'Permalink to "Project Structures"'},"")],-1)]))}const j=r(o,[["render",n]]);export{f as __pageData,j as default}; diff --git a/assets/project-structures_pre-configured-components.md.TxyxC52n.js b/assets/project-structures_pre-configured-components.md.TxyxC52n.js new file mode 100644 index 0000000..484a95e --- /dev/null +++ b/assets/project-structures_pre-configured-components.md.TxyxC52n.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o}from"./chunks/framework.BQmytedh.js";const d=JSON.parse('{"title":"Pre-configured Components","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"project-structures/pre-configured-components.md","filePath":"en/project-structures/pre-configured-components.md","lastUpdated":1725496835000}'),n={name:"project-structures/pre-configured-components.md"};function l(i,e,s,p,f,h){return o(),t("div",null,e[0]||(e[0]=[a('<h1 id="pre-configured-components" tabindex="-1">Pre-configured Components <a class="header-anchor" href="#pre-configured-components" aria-label="Permalink to "Pre-configured Components""></a></h1><h2 id="web-app-frameworks" tabindex="-1">Web app frameworks <a class="header-anchor" href="#web-app-frameworks" aria-label="Permalink to "Web app frameworks""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="development-help-tools" tabindex="-1">Development help tools <a class="header-anchor" href="#development-help-tools" aria-label="Permalink to "Development help tools""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="front-end-frameworks-vue" tabindex="-1">Front-end frameworks (Vue) <a class="header-anchor" href="#front-end-frameworks-vue" aria-label="Permalink to "Front-end frameworks (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="design-frameworks" tabindex="-1">Design frameworks <a class="header-anchor" href="#design-frameworks" aria-label="Permalink to "Design frameworks""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to "Testing""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul>',11)]))}const c=r(n,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/project-structures_pre-configured-components.md.TxyxC52n.lean.js b/assets/project-structures_pre-configured-components.md.TxyxC52n.lean.js new file mode 100644 index 0000000..484a95e --- /dev/null +++ b/assets/project-structures_pre-configured-components.md.TxyxC52n.lean.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o}from"./chunks/framework.BQmytedh.js";const d=JSON.parse('{"title":"Pre-configured Components","description":"","frontmatter":{"order":2},"headers":[],"relativePath":"project-structures/pre-configured-components.md","filePath":"en/project-structures/pre-configured-components.md","lastUpdated":1725496835000}'),n={name:"project-structures/pre-configured-components.md"};function l(i,e,s,p,f,h){return o(),t("div",null,e[0]||(e[0]=[a('<h1 id="pre-configured-components" tabindex="-1">Pre-configured Components <a class="header-anchor" href="#pre-configured-components" aria-label="Permalink to "Pre-configured Components""></a></h1><h2 id="web-app-frameworks" tabindex="-1">Web app frameworks <a class="header-anchor" href="#web-app-frameworks" aria-label="Permalink to "Web app frameworks""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="development-help-tools" tabindex="-1">Development help tools <a class="header-anchor" href="#development-help-tools" aria-label="Permalink to "Development help tools""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="front-end-frameworks-vue" tabindex="-1">Front-end frameworks (Vue) <a class="header-anchor" href="#front-end-frameworks-vue" aria-label="Permalink to "Front-end frameworks (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="design-frameworks" tabindex="-1">Design frameworks <a class="header-anchor" href="#design-frameworks" aria-label="Permalink to "Design frameworks""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to "Testing""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul>',11)]))}const c=r(n,[["render",l]]);export{d as __pageData,c as default}; diff --git a/assets/project-structures_project-structure.md.MUQdxPCX.js b/assets/project-structures_project-structure.md.MUQdxPCX.js new file mode 100644 index 0000000..a77cfc1 --- /dev/null +++ b/assets/project-structures_project-structure.md.MUQdxPCX.js @@ -0,0 +1,65 @@ +import{_ as n,c as a,a2 as e,o as p}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Project Structure","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"project-structures/project-structure.md","filePath":"en/project-structures/project-structure.md","lastUpdated":1725496835000}'),i={name:"project-structures/project-structure.md"};function t(l,s,o,c,r,u){return p(),a("div",null,s[0]||(s[0]=[e(`<h1 id="project-structure" tabindex="-1">Project Structure <a class="header-anchor" href="#project-structure" aria-label="Permalink to "Project Structure""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub files (only used for Vutron GitHub project contributions)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - GitHub resources used for README.md, etc.</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub workflows definition</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Common project configuration files used by Visual Studio Code IDE</span></span> +<span class="line"><span>├─ buildAssets/ - Package resource (icon, logo, etc.) file used for Electron build</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - \`electron-builder\` dynamic configuration file</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - Output directory used to build the package</span></span> +<span class="line"><span>├─ docs/ - Project documents (optionally enabled)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - VitePress configuration file used for document hosting</span></span> +<span class="line"><span>│ └─ public/ - Root resource directory for VitePress documentation pages</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - Main (Electron) process source code</span></span> +<span class="line"><span>│ │ ├─ utils/ - Main process utilities</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - Main global definition</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - Main global menu definition</span></span> +<span class="line"><span>│ │ └─ index.ts - Main process entry point</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - Main process ipc handlers definition</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - Main process main window processing</span></span> +<span class="line"><span>│ ├─ preload/ - Preload (Electron-Vue communication bridge) process source code</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - Renderer (Vue) process source code</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue components collection</span></span> +<span class="line"><span>│ │ │ └─ layout/ - Layout components</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n language resource file</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue plugin definition</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue static resources</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue routing definition</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue screen component</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - Screen displayed when renderer process and routing errors occur</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - Sample screen</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia store (Global state management) definition</span></span> +<span class="line"><span>│ │ ├─ utils/ - Renderer process utilities</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue app's root component</span></span> +<span class="line"><span>│ │ ├─ index.html - Root static index loaded by Electron renderer process</span></span> +<span class="line"><span>│ └─ └─ main.ts - Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - Application test configuration</span></span> +<span class="line"><span>│ ├─ results/ - Where to save PlayWright test result files and screenshots</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright test spec file</span></span> +<span class="line"><span>│ ├─ fixtures.ts - Test common execution API</span></span> +<span class="line"><span>│ └─ testUtil.ts - Test utilities</span></span> +<span class="line"><span>├─ .editorconfig - Editor recommended configuration file for IDE</span></span> +<span class="line"><span>├─ .eslintignore - List of files to be ignored by ESLint</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint rule configurations</span></span> +<span class="line"><span>├─ .gitignore - List of files to not upload to Git</span></span> +<span class="line"><span>├─ .prettierignore - List of files to disable Prettier file formatting</span></span> +<span class="line"><span>├─ .prettierrc - Prettier rule configurations</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - Files used only on GitHub</span></span> +<span class="line"><span>├─ LICENSE - Project license file</span></span> +<span class="line"><span>├─ package.json - Node.js package configurations</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright test rules configurations</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript configurations</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript configurations</span></span> +<span class="line"><span>├─ vite.config.mts - Vite compiler build configurations</span></span> +<span class="line"><span>└─ README.md - Files used only on GitHub</span></span></code></pre></div>`,2)]))}const g=n(i,[["render",t]]);export{f as __pageData,g as default}; diff --git a/assets/project-structures_project-structure.md.MUQdxPCX.lean.js b/assets/project-structures_project-structure.md.MUQdxPCX.lean.js new file mode 100644 index 0000000..a77cfc1 --- /dev/null +++ b/assets/project-structures_project-structure.md.MUQdxPCX.lean.js @@ -0,0 +1,65 @@ +import{_ as n,c as a,a2 as e,o as p}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Project Structure","description":"","frontmatter":{"order":1},"headers":[],"relativePath":"project-structures/project-structure.md","filePath":"en/project-structures/project-structure.md","lastUpdated":1725496835000}'),i={name:"project-structures/project-structure.md"};function t(l,s,o,c,r,u){return p(),a("div",null,s[0]||(s[0]=[e(`<h1 id="project-structure" tabindex="-1">Project Structure <a class="header-anchor" href="#project-structure" aria-label="Permalink to "Project Structure""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub files (only used for Vutron GitHub project contributions)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - GitHub resources used for README.md, etc.</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub workflows definition</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Common project configuration files used by Visual Studio Code IDE</span></span> +<span class="line"><span>├─ buildAssets/ - Package resource (icon, logo, etc.) file used for Electron build</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - \`electron-builder\` dynamic configuration file</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - Output directory used to build the package</span></span> +<span class="line"><span>├─ docs/ - Project documents (optionally enabled)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - VitePress configuration file used for document hosting</span></span> +<span class="line"><span>│ └─ public/ - Root resource directory for VitePress documentation pages</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - Main (Electron) process source code</span></span> +<span class="line"><span>│ │ ├─ utils/ - Main process utilities</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - Main global definition</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - Main global menu definition</span></span> +<span class="line"><span>│ │ └─ index.ts - Main process entry point</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - Main process ipc handlers definition</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - Main process main window processing</span></span> +<span class="line"><span>│ ├─ preload/ - Preload (Electron-Vue communication bridge) process source code</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - Renderer (Vue) process source code</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue components collection</span></span> +<span class="line"><span>│ │ │ └─ layout/ - Layout components</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n language resource file</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue plugin definition</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue static resources</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue routing definition</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue screen component</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - Screen displayed when renderer process and routing errors occur</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - Sample screen</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia store (Global state management) definition</span></span> +<span class="line"><span>│ │ ├─ utils/ - Renderer process utilities</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue app's root component</span></span> +<span class="line"><span>│ │ ├─ index.html - Root static index loaded by Electron renderer process</span></span> +<span class="line"><span>│ └─ └─ main.ts - Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - Application test configuration</span></span> +<span class="line"><span>│ ├─ results/ - Where to save PlayWright test result files and screenshots</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright test spec file</span></span> +<span class="line"><span>│ ├─ fixtures.ts - Test common execution API</span></span> +<span class="line"><span>│ └─ testUtil.ts - Test utilities</span></span> +<span class="line"><span>├─ .editorconfig - Editor recommended configuration file for IDE</span></span> +<span class="line"><span>├─ .eslintignore - List of files to be ignored by ESLint</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint rule configurations</span></span> +<span class="line"><span>├─ .gitignore - List of files to not upload to Git</span></span> +<span class="line"><span>├─ .prettierignore - List of files to disable Prettier file formatting</span></span> +<span class="line"><span>├─ .prettierrc - Prettier rule configurations</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - Files used only on GitHub</span></span> +<span class="line"><span>├─ LICENSE - Project license file</span></span> +<span class="line"><span>├─ package.json - Node.js package configurations</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright test rules configurations</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript configurations</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript configurations</span></span> +<span class="line"><span>├─ vite.config.mts - Vite compiler build configurations</span></span> +<span class="line"><span>└─ README.md - Files used only on GitHub</span></span></code></pre></div>`,2)]))}const g=n(i,[["render",t]]);export{f as __pageData,g as default}; diff --git a/assets/style.DZkoH-Yi.css b/assets/style.DZkoH-Yi.css new file mode 100644 index 0000000..3e67e51 --- /dev/null +++ b/assets/style.DZkoH-Yi.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa7799d5]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa7799d5]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-fa7799d5]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-fa7799d5]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa7799d5]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-fa7799d5]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-fa7799d5]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa7799d5]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-fa7799d5]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-35975db6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-cf11d7a2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-cf11d7a2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-cf11d7a2]{margin-right:0;font-size:16px}.text-icon[data-v-cf11d7a2]{margin-left:4px;font-size:14px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-bd121fe5]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>svg,.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-1168a8e4]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-df37e6dd]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b7550ba0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b7550ba0]{padding-bottom:10px}.item[data-v-b7550ba0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b7550ba0]{cursor:pointer}.indicator[data-v-b7550ba0]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b7550ba0]{background-color:var(--vp-c-brand-1)}.link[data-v-b7550ba0]{display:flex;align-items:center;flex-grow:1}.text[data-v-b7550ba0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b7550ba0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b7550ba0],.VPSidebarItem.level-2 .text[data-v-b7550ba0],.VPSidebarItem.level-3 .text[data-v-b7550ba0],.VPSidebarItem.level-4 .text[data-v-b7550ba0],.VPSidebarItem.level-5 .text[data-v-b7550ba0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b7550ba0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.caret[data-v-b7550ba0]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b7550ba0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b7550ba0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b7550ba0]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b7550ba0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b7550ba0],.VPSidebarItem.level-2 .items[data-v-b7550ba0],.VPSidebarItem.level-3 .items[data-v-b7550ba0],.VPSidebarItem.level-4 .items[data-v-b7550ba0],.VPSidebarItem.level-5 .items[data-v-b7550ba0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b7550ba0]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPLocalSearchBox[data-v-ce626c7c]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-ce626c7c]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-ce626c7c]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-ce626c7c]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-ce626c7c]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-ce626c7c]{padding:0 8px}}.search-bar[data-v-ce626c7c]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-ce626c7c]{display:block;font-size:18px}.navigate-icon[data-v-ce626c7c]{display:block;font-size:14px}.search-icon[data-v-ce626c7c]{margin:8px}@media (max-width: 767px){.search-icon[data-v-ce626c7c]{display:none}}.search-input[data-v-ce626c7c]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-ce626c7c]{padding:6px 4px}}.search-actions[data-v-ce626c7c]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-ce626c7c]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-ce626c7c]{display:none}}.search-actions button[data-v-ce626c7c]{padding:8px}.search-actions button[data-v-ce626c7c]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-ce626c7c]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-ce626c7c]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-ce626c7c]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-ce626c7c]{display:none}}.search-keyboard-shortcuts kbd[data-v-ce626c7c]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-ce626c7c]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-ce626c7c]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-ce626c7c]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-ce626c7c]{margin:8px}}.titles[data-v-ce626c7c]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-ce626c7c]{display:flex;align-items:center;gap:4px}.title.main[data-v-ce626c7c]{font-weight:500}.title-icon[data-v-ce626c7c]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-ce626c7c]{opacity:.5}.result.selected[data-v-ce626c7c]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-ce626c7c]{position:relative}.excerpt[data-v-ce626c7c]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-ce626c7c]{opacity:1}.excerpt[data-v-ce626c7c] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-ce626c7c] mark,.excerpt[data-v-ce626c7c] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-ce626c7c] .vp-code-group .tabs{display:none}.excerpt[data-v-ce626c7c] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-ce626c7c]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-ce626c7c]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-ce626c7c],.result.selected .title-icon[data-v-ce626c7c]{color:var(--vp-c-brand-1)!important}.no-results[data-v-ce626c7c]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-ce626c7c]{flex:none} diff --git a/electron-how-to/index.html b/electron-how-to/index.html new file mode 100644 index 0000000..baf7bfa --- /dev/null +++ b/electron-how-to/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Electron How-to | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/electron-how-to_index.md.BQblRTY7.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _electron-how-to_" data-v-39a288b8><div><h1 id="electron-how-to" tabindex="-1">Electron How-to <a class="header-anchor" href="#electron-how-to" aria-label="Permalink to "Electron How-to""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/electron-how-to/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Getting Started</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/electron-how-to/main-and-renderer-process.html b/electron-how-to/main-and-renderer-process.html new file mode 100644 index 0000000..c513a2d --- /dev/null +++ b/electron-how-to/main-and-renderer-process.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Main vs Renderer Process | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/electron-how-to_main-and-renderer-process.md._5EL1wFs.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/main-and-renderer-process" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/main-and-renderer-process" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _electron-how-to_main-and-renderer-process" data-v-39a288b8><div><h1 id="main-vs-renderer-process" tabindex="-1">Main vs Renderer Process <a class="header-anchor" href="#main-vs-renderer-process" aria-label="Permalink to "Main vs Renderer Process""></a></h1><p>A <strong>Vutron</strong> application is divided into code into a Main process and a Renderer process.</p><p><strong>"Main"</strong> is the code of <code>src/main</code> and is mainly the process code handled by Electron. <strong>"Renderer"</strong> is the code of <code>src/renderer</code>, mainly for front-end rendering process like Vue.</p><p>In general, <strong>Node.js</strong> scripts cannot be run in the renderer process. Examples include modules that contain APIs used by Node.js, or native modules of <strong>Node.js</strong> such as <code>path</code> or <code>net</code>, <code>os</code> or <code>crypto</code>.</p><p>Preload scripts are run before the renderer is loaded. It creates a bridge to the main process to keep the execution of Node.js scripts in the renderer area separate and isolated for security reasons.</p><p>For secure script execution, it is recommended that the main process executes the Node scripts, and the renderer receives the execution results via messaging. This can be implemented via <strong>IPC communication</strong>.</p><p>For more information on this, see the following articles: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="how-to-run-node-js-on-a-renderer" tabindex="-1">How to run Node.js on a renderer? <a class="header-anchor" href="#how-to-run-node-js-on-a-renderer" aria-label="Permalink to "How to run Node.js on a renderer?""></a></h3><p>If you want to skip the security issues and use Node.js scripts in your renderer, you need to set <code>nodeIntegration</code> to <code>true</code> in your <code>vite.config.ts</code> file.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>For more information on this, see the following articles: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/electron-how-to/main-and-renderer-process.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/project-structures/pre-configured-components" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Pre Configured Components</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/electron-how-to/preload-script" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Preload Script</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/electron-how-to/preload-script.html b/electron-how-to/preload-script.html new file mode 100644 index 0000000..dd312bd --- /dev/null +++ b/electron-how-to/preload-script.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Preload Script | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/electron-how-to_preload-script.md.CXrQRQkD.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/preload-script" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/electron-how-to/preload-script" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _electron-how-to_preload-script" data-v-39a288b8><div><h1 id="preload-script" tabindex="-1">Preload Script <a class="header-anchor" href="#preload-script" aria-label="Permalink to "Preload Script""></a></h1><p>The preload script in Electron.js is a secure area designed for communication between the main and renderer processes. It is typically used for <strong><a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC communication</a></strong>.</p><p>For more information, see the following articles <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>For compatibility and security with the latest version of Electron, we do not recommend using the old <code>electron/remote</code> module. If you want to utilize system events or Node scripts, it is recommended to do so in the main process, not the renderer.</p><p>Vutron's preload script is located in the <code>src/preload</code> folder. To create a new IPC communication channel, add the channel name to the following variable to whitelist it for communication.</p><ul><li><code>mainAvailChannels</code>: Send an event from main to renderer. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: Send an event from renderer to main. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>When sending events from renderer to main, you access the <code>window.mainApi</code> object instead of <code>ipcRenderer.send</code>. The <code>mainApi</code> is the name you set in your Vutron template and can be changed.</p><p>Here are the supported functions for mainApi:</p><ul><li><code>send</code>: Send an event to main.</li><li><code>on</code>: A listener to receive events sent by main.</li><li><code>once</code>: A listener to receive events sent by main. (Handle only one call)</li><li><code>off</code>: Remove an event listener</li><li><code>invoke</code>: Functions that can send events to main and receive data asynchronously.</li></ul><p>To change and modify this, you need to modify <code>exposeInMainWorld</code> in <code>src/preload/index.ts</code>.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/electron-how-to/preload-script.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/electron-how-to/main-and-renderer-process" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Main Vs Renderer Process</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/other-projects" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Other Projects</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..768f9f0 Binary files /dev/null and b/favicon.ico differ diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 0000000..a93189f --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"electron-how-to_index.md":"BQblRTY7","electron-how-to_main-and-renderer-process.md":"_5EL1wFs","electron-how-to_preload-script.md":"CXrQRQkD","index.md":"BqaXRsgO","installation-and-build_automated-testing.md":"KBa3PU08","installation-and-build_build-configuration.md":"_mhC4QgM","installation-and-build_getting-started.md":"DmEPR_tc","installation-and-build_index.md":"CImU_M8a","installation-and-build_install-local-documentation.md":"BrGVdLMr","installation-and-build_npm-scripts.md":"DwhCPQIy","ko_electron-how-to_index.md":"CU1DhAda","ko_electron-how-to_main-and-renderer-process.md":"Drbzcm48","ko_electron-how-to_preload-script.md":"B3GyliGv","ko_index.md":"CXjtXkdk","ko_installation-and-build_automated-testing.md":"CrcelI20","ko_installation-and-build_build-configuration.md":"TZXV-NIp","ko_installation-and-build_getting-started.md":"CoiEGCgU","ko_installation-and-build_index.md":"1z_mEwvg","ko_installation-and-build_install-local-documentation.md":"CjN3yQfZ","ko_installation-and-build_npm-scripts.md":"KCQJXSWc","ko_other-projects.md":"B1Y_QtMF","ko_project-structures_index.md":"CwEz-WEU","ko_project-structures_pre-configured-components.md":"yZdtw8Fy","ko_project-structures_project-structure.md":"4xmi4ZSM","other-projects.md":"BSByacBO","project-structures_index.md":"4YzXULKH","project-structures_pre-configured-components.md":"TxyxC52n","project-structures_project-structure.md":"MUQdxPCX"} diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..703a967 Binary files /dev/null and b/icon.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..66184f8 --- /dev/null +++ b/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Vutron | Quick Start Templates for Vite + Vue 3 + Electron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/index.md.BqaXRsgO.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><!----><!----><div class="VPContent is-home" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPHome" data-v-1428d186 data-v-686f80a6><!--[--><!--]--><div class="VPHero has-image VPHomeHero" data-v-686f80a6 data-v-303bb580><div class="container" data-v-303bb580><div class="main" data-v-303bb580><!--[--><!--]--><!--[--><h1 class="name" data-v-303bb580><span class="clip" data-v-303bb580>Vutron</span></h1><p class="text" data-v-303bb580>Quick Start Templates for Vite + Vue 3 + Electron</p><p class="tagline" data-v-303bb580><strong>Vutron</strong> is a preconfigured template for developing `Electron` cross-platform desktop apps. It uses `Vue 3` and allows you to build a fast development environment with little effort.</p><!--]--><!--[--><!--]--><div class="actions" data-v-303bb580><!--[--><div class="action" data-v-303bb580><a class="VPButton medium brand" href="/installation-and-build/getting-started" data-v-303bb580 data-v-fa7799d5>Getting Started</a></div><div class="action" data-v-303bb580><a class="VPButton medium alt" href="https://github.com/jooy2/vutron" target="_blank" rel="noreferrer" data-v-303bb580 data-v-fa7799d5>GitHub</a></div><!--]--></div><!--[--><!--]--></div><div class="image" data-v-303bb580><div class="image-container" data-v-303bb580><div class="image-bg" data-v-303bb580></div><!--[--><!--[--><img class="VPImage image-src" src="/icon.png" alt="Vue" data-v-8426fc1a><!--]--><!--]--></div></div></div></div><!--[--><!--]--><!--[--><!--]--><div class="VPFeatures VPHomeFeatures" data-v-686f80a6 data-v-a6181336><div class="container" data-v-a6181336><div class="items" data-v-a6181336><!--[--><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z" fill="url(#paint0_linear_1287_1214)"/><path d="M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z" fill="white"/><path d="M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z" fill="url(#paint1_linear_1287_1214)"/><path d="M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z" fill="url(#paint2_linear_1287_1214)"/><defs><linearGradient id="paint0_linear_1287_1214" x1="6.48163" y1="1.9759" x2="39.05" y2="48.2064" gradientUnits="userSpaceOnUse"><stop stop-color="#49C7FF"/><stop offset="1" stop-color="#BD36FF"/></linearGradient><linearGradient id="paint1_linear_1287_1214" x1="11.8848" y1="16.4266" x2="26.7246" y2="31.4177" gradientUnits="userSpaceOnUse"><stop stop-color="#41D1FF"/><stop offset="1" stop-color="#BD34FE"/></linearGradient><linearGradient id="paint2_linear_1287_1214" x1="21.8138" y1="13.7046" x2="26.2464" y2="28.8069" gradientUnits="userSpaceOnUse"><stop stop-color="#FFEA83"/><stop offset="0.0833333" stop-color="#FFDD35"/><stop offset="1" stop-color="#FFA800"/></linearGradient></defs></svg></div><h2 class="title" data-v-a3976bdc>Powerful web application development templates</h2><p class="details" data-v-a3976bdc>Vutron supports cross-platform, multi-language, layouts and theme, and style frameworks.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="160px" height="160px"><path fill="#424e5c" d="M4.5 6.5H75.5V73.5H4.5z"/><path fill="#afc5d8" d="M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z"/><path fill="#afc5d8" d="M4 6H76V18H4z"/><path fill="#bae0bd" d="M25.6 43H54.400000000000006V45H25.6z" transform="rotate(-69.666 39.998 43.999)"/><path fill="#bae0bd" d="M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z"/></svg></div><h2 class="title" data-v-a3976bdc>Rapid development through hot-reload</h2><p class="details" data-v-a3976bdc>Reduce initial project setup time with maximum feature support for developers.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="64px" height="64px"><circle cx="16" cy="17" r="5" fill="#ed0049"/><path fill="#ed0049" d="M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z"/><path fill="#0f518c" d="M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z"/><path fill="#0f518c" d="M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z"/><path fill="#0f518c" d="M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z"/><path fill="#0f518c" d="M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z"/><g><path fill="#0f518c" d="M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z"/></g></svg></div><h2 class="title" data-v-a3976bdc>Reliable maintenance support</h2><p class="details" data-v-a3976bdc>There are many real-world use cases, and we have fast technical support.</p><!----></article><!--]--></div></div><!--]--></div></div></div><!--[--><!--]--><div class="vp-doc container" style="" data-v-686f80a6 data-v-8e2d4988><!--[--><div style="position:relative;" data-v-686f80a6><div></div></div><!--]--></div></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/automated-testing.html b/installation-and-build/automated-testing.html new file mode 100644 index 0000000..efd292d --- /dev/null +++ b/installation-and-build/automated-testing.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Automated Testing | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_automated-testing.md.KBa3PU08.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/automated-testing" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/automated-testing" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_automated-testing" data-v-39a288b8><div><h1 id="automated-testing" tabindex="-1">Automated Testing <a class="header-anchor" href="#automated-testing" aria-label="Permalink to "Automated Testing""></a></h1><p><strong>Vutron</strong> includes automated testing. The testing framework uses Microsoft's <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong>.</p><p><strong>Playwright</strong> is optimized for web application testing and has full support for the <strong>Electron</strong> framework. It is simple to install, requires no configuration to start testing immediately, and is cross-platform. You can learn more about <strong>Playwright</strong> here: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>Only very simple launch and behavioral tests for the template main screen have been implemented in this template. Advanced testing will depend on the scope of your application.</p><p>Currently, the test specification file is located in the <code>tests</code> directory and the test results file is located in <code>tests/results</code>. (The built-in test specification file does not generate a separate results file.)</p><p>The Playwright configuration is <code>playwright.config.ts</code> in the project root, see the following documentation for more information on this: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>Once everything is configured, you can run a test with the following command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>Before running the test, empty the build directory (<code>dist</code>) and compile the package for the test.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/automated-testing.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/installation-and-build/npm-scripts" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>NPM Scripts</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/install-local-documentation" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Manage Local Documentation</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/build-configuration.html b/installation-and-build/build-configuration.html new file mode 100644 index 0000000..8a8cf24 --- /dev/null +++ b/installation-and-build/build-configuration.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Build Configurations | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_build-configuration.md._mhC4QgM.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/build-configuration" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/build-configuration" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_build-configuration" data-v-39a288b8><div><h1 id="build-configurations" tabindex="-1">Build Configurations <a class="header-anchor" href="#build-configurations" aria-label="Permalink to "Build Configurations""></a></h1><p>Once the module installation is complete, you can simply build the platform package with the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>The built packages can be found in <code>release/{version}</code> location.</p><p>For more information, please refer to the following article: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="what-do-i-need-to-do-for-a-multi-platform-build" tabindex="-1">What do I need to do for a multi-platform build? <a class="header-anchor" href="#what-do-i-need-to-do-for-a-multi-platform-build" aria-label="Permalink to "What do I need to do for a multi-platform build?""></a></h2><p>To create a package for each OS, you must build it on the same OS. For example, a package for macOS must be built on a macOS machine.</p><p>However, you can build packages for Windows, macOS, and Linux all at once on one OS. However, this might require some preparation.</p><p><strong>macOS</strong> is recommended if you want to build multiple platforms simultaneously on one platform. Because it can be configured with just a few very simple settings.</p><p>You can perform multi-platform builds at once with the following command. Alternatively, you can just do it for the OS you want via the individual build commands above.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p><code>Multipass</code> configuration may be required for Linux builds. Learn more about <code>Multipass</code> through the following link: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>To learn more about multiplatform builds, see the following articles: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="reduce-bundle-size-by-excluding-development-files" tabindex="-1">Reduce bundle size by excluding development files <a class="header-anchor" href="#reduce-bundle-size-by-excluding-development-files" aria-label="Permalink to "Reduce bundle size by excluding development files""></a></h2><p>You can exclude files you don't need at build time by adding a file pattern to the files property of <code>buildAssets/builder/config.ts</code>. This will save bundle capacity.</p><p>Below is an unnecessary <code>node_modules</code> file pattern that can further save bundles. Depending on the project, using the rules below may cause problems, so please review it before using.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="build-settings-for-projects-that-use-native-node-modules" tabindex="-1">Build settings for projects that use Native Node modules <a class="header-anchor" href="#build-settings-for-projects-that-use-native-node-modules" aria-label="Permalink to "Build settings for projects that use Native Node modules""></a></h2><p>For projects that use the <strong>Native Node Module</strong>, add the following script to your <code>package.json</code>: When installing dependencies, <code>electron-builder</code> will take care of any modules that require rebuilding.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/build-configuration.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Getting Started</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/npm-scripts" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>NPM Scripts</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/getting-started.html b/installation-and-build/getting-started.html new file mode 100644 index 0000000..f8cb76c --- /dev/null +++ b/installation-and-build/getting-started.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Getting Started | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_getting-started.md.DmEPR_tc.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/getting-started" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/getting-started" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_getting-started" data-v-39a288b8><div><h1 id="getting-started" tabindex="-1">Getting Started <a class="header-anchor" href="#getting-started" aria-label="Permalink to "Getting Started""></a></h1><h2 id="clone-project" tabindex="-1">Clone project <a class="header-anchor" href="#clone-project" aria-label="Permalink to "Clone project""></a></h2><h3 id="method-1-npm-init-recommend" tabindex="-1">Method 1: <code>npm init</code> (Recommend) <a class="header-anchor" href="#method-1-npm-init-recommend" aria-label="Permalink to "Method 1: `npm init` (Recommend)""></a></h3><p>You can easily clone a repository with just the npm command.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>The above method will not create unnecessary documentation and <code>.github</code> related files for your project.</p><h3 id="method-2-use-this-template" tabindex="-1">Method 2: Use this template <a class="header-anchor" href="#method-2-use-this-template" aria-label="Permalink to "Method 2: Use this template""></a></h3><p>Click <strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">Use this template</a></strong> to instantly create your own project.</p><p>This method creates a repository on GitHub immediately, but you will need to clone the project locally before you can use it.</p><h3 id="method-3-clone-this-repository" tabindex="-1">Method 3: Clone this repository <a class="header-anchor" href="#method-3-clone-this-repository" aria-label="Permalink to "Method 3: Clone this repository""></a></h3><p>Clone this repo using below command. This method is suitable for direct contributions to the Vutron repository.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>After cloning the project, run the following command in the terminal:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="run-in-development-environment" tabindex="-1">Run in development environment <a class="header-anchor" href="#run-in-development-environment" aria-label="Permalink to "Run in development environment""></a></h2><p>Applications in the development environment run through <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong>.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>If your application doesn't appear after running command line commands, you may need to review if the default port is being used by another app.</p><p>Vite uses port <code>5173</code> by default.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/getting-started.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/build-configuration" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Build Configurations</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/index.html b/installation-and-build/index.html new file mode 100644 index 0000000..b6ce61e --- /dev/null +++ b/installation-and-build/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Installation and Build | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_index.md.CImU_M8a.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_" data-v-39a288b8><div><h1 id="installation-and-build" tabindex="-1">Installation and Build <a class="header-anchor" href="#installation-and-build" aria-label="Permalink to "Installation and Build""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Getting Started</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/install-local-documentation.html b/installation-and-build/install-local-documentation.html new file mode 100644 index 0000000..5b76c73 --- /dev/null +++ b/installation-and-build/install-local-documentation.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Manage Local Documentation | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_install-local-documentation.md.BrGVdLMr.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/install-local-documentation" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/install-local-documentation" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_install-local-documentation" data-v-39a288b8><div><h1 id="manage-local-documentation" tabindex="-1">Manage Local Documentation <a class="header-anchor" href="#manage-local-documentation" aria-label="Permalink to "Manage Local Documentation""></a></h1><p>Documents from <code>Vutron</code> can be viewed in the local environment through the <code>VitePress</code> viewer.</p><p>This function works only when the entire project is cloned. If you created the project with <code>npm init vutron</code>, the <code>docs</code> folder is not included.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>Everything in the instructions below should be done in the <code>docs</code> folder.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>Install the relevant packages using the following commands:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>You can run the local server where the documents are hosted via the command below.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/install-local-documentation.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/installation-and-build/automated-testing" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Automated Testing</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/project-structures/project-structure" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Project Structure</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/installation-and-build/npm-scripts.html b/installation-and-build/npm-scripts.html new file mode 100644 index 0000000..959e648 --- /dev/null +++ b/installation-and-build/npm-scripts.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>NPM Scripts | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/installation-and-build_npm-scripts.md.DwhCPQIy.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/npm-scripts" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/installation-and-build/npm-scripts" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _installation-and-build_npm-scripts" data-v-39a288b8><div><h1 id="npm-scripts" tabindex="-1">Npm Scripts <a class="header-anchor" href="#npm-scripts" aria-label="Permalink to "Npm Scripts""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="general" tabindex="-1">General <a class="header-anchor" href="#general" aria-label="Permalink to "General""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="for-documentation" tabindex="-1">For Documentation <a class="header-anchor" href="#for-documentation" aria-label="Permalink to "For Documentation""></a></h2><p>Used only for contributing to project documentation. Must be run from the <code>docs</code> directory location.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/installation-and-build/npm-scripts.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/installation-and-build/build-configuration" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Build Configurations</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/automated-testing" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Automated Testing</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/electron-how-to/index.html b/ko/electron-how-to/index.html new file mode 100644 index 0000000..8dbefac --- /dev/null +++ b/ko/electron-how-to/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Electron 개요 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_electron-how-to_index.md.CU1DhAda.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/electron-how-to/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/electron-how-to/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_electron-how-to_" data-v-39a288b8><div><h1 id="electron-개요" tabindex="-1">Electron 개요 <a class="header-anchor" href="#electron-개요" aria-label="Permalink to "Electron 개요""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/electron-how-to/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>시작하기</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/electron-how-to/main-and-renderer-process.html b/ko/electron-how-to/main-and-renderer-process.html new file mode 100644 index 0000000..ae49d06 --- /dev/null +++ b/ko/electron-how-to/main-and-renderer-process.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>메인과 렌더러 프로세스 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_electron-how-to_main-and-renderer-process.md.Drbzcm48.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/electron-how-to/main-and-renderer-process" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/electron-how-to/main-and-renderer-process" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_electron-how-to_main-and-renderer-process" data-v-39a288b8><div><h1 id="메인과-렌더러-프로세스" tabindex="-1">메인과 렌더러 프로세스 <a class="header-anchor" href="#메인과-렌더러-프로세스" aria-label="Permalink to "메인과 렌더러 프로세스""></a></h1><p><strong>Vutron</strong> 애플리케이션은 메인(Main) 프로세스와 렌더러(Renderer) 프로세스로 코드가 나뉩니다.</p><p><strong>Main</strong>은 <code>src/main</code>의 코드로 주로 Electron이 처리하는 프로세스 코드입니다. <strong>렌더러</strong>는 <code>src/renderer</code>의 코드로 주로 Vue와 같은 프론트엔드 렌더링 프로세스를 위한 코드입니다.</p><p>일반적으로 <strong>Node.js</strong> 스크립트는 렌더러 프로세스에서 실행할 수 없습니다. 예를 들어 Node.js에서 사용하는 API를 포함하는 모듈이나 <code>path</code> 또는 <code>net</code>, <code>os</code> 또는 <code>crypto</code>와 같은 <strong>Node.js</strong>의 네이티브 모듈이 있습니다.</p><p>사전 로드 스크립트는 렌더러가 로드되기 전에 실행됩니다. 이는 보안상의 이유로 렌더러 영역에서 Node.js 스크립트의 실행을 분리하고 격리하기 위해 메인 프로세스에 대한 브릿지를 생성합니다.</p><p>안전한 스크립트 실행을 위해 메인 프로세스에서 노드 스크립트를 실행하고 렌더러는 메시징을 통해 실행 결과를 수신하는 것이 좋습니다. 이는 <strong>IPC 통신</strong>을 통해 구현할 수 있습니다.</p><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/ipc</a></p><h3 id="렌더러에서-node-js를-실행하는-방법은-무엇인가요" tabindex="-1">렌더러에서 Node.js를 실행하는 방법은 무엇인가요? <a class="header-anchor" href="#렌더러에서-node-js를-실행하는-방법은-무엇인가요" aria-label="Permalink to "렌더러에서 Node.js를 실행하는 방법은 무엇인가요?""></a></h3><p>보안 문제를 건너뛰고 렌더러에서 Node.js 스크립트를 사용하려면 <code>vite.config.ts</code> 파일에서 <code>nodeIntegration</code>을 <code>true</code>로 설정해야 합니다.</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">rendererPlugin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nodeIntegration: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><p>이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://github.com/electron-vite/vite-plugin-electron-renderer" target="_blank" rel="noreferrer">https://github.com/electron-vite/vite-plugin-electron-renderer</a></p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/electron-how-to/main-and-renderer-process.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/project-structures/pre-configured-components" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>사전 구성된 구성 요소</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/electron-how-to/preload-script" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>프리로드 스크립트</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/electron-how-to/preload-script.html b/ko/electron-how-to/preload-script.html new file mode 100644 index 0000000..21aa961 --- /dev/null +++ b/ko/electron-how-to/preload-script.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>프리로드 스크립트 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_electron-how-to_preload-script.md.B3GyliGv.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/electron-how-to/preload-script" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/electron-how-to/preload-script" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_electron-how-to_preload-script" data-v-39a288b8><div><h1 id="프리로드-스크립트" tabindex="-1">프리로드 스크립트 <a class="header-anchor" href="#프리로드-스크립트" aria-label="Permalink to "프리로드 스크립트""></a></h1><p>Electron.js의 프리로드 스크립트는 메인 프로세스와 렌더러 프로세스 간의 통신을 위해 설계된 보안 영역입니다. 일반적으로 **<a href="https://www.electronjs.org/docs/latest/tutorial/ipc" target="_blank" rel="noreferrer">IPC 통신</a>**에 사용됩니다.</p><p>자세한 내용은 다음 문서를 참고하세요: <a href="https://www.electronjs.org/docs/latest/tutorial/tutorial-preload" target="_blank" rel="noreferrer">https://www.electronjs.org/docs/latest/tutorial/tutorial-preload</a></p><p>최신 버전의 Electron과의 호환성 및 보안을 위해 이전 버전의 <code>electron/remote</code> 모듈은 사용하지 않는 것이 좋습니다. 시스템 이벤트나 노드 스크립트를 활용하려면 렌더러가 아닌 메인 프로세스에서 사용하는 것이 좋습니다.</p><p>Vutron의 프리로드 스크립트는 <code>src/preload</code> 폴더에 있습니다. 새 IPC 통신 채널을 생성하려면 다음 변수에 채널 이름을 추가하여 통신을 허용하도록 화이트리스트에 추가합니다.</p><ul><li><code>mainAvailChannels</code>: 메인에서 렌더러로 이벤트를 전송합니다. (<code>window.mainApi.send('channelName')</code>)</li><li><code>rendererAvailChannels</code>: 렌더러에서 메인으로 이벤트를 전송합니다. (<code>mainWindow.webContents.send('channelName')</code>)</li></ul><p>렌더러에서 메인으로 이벤트를 전송할 때는 <code>ipcRenderer.send</code> 대신 <code>window.mainApi</code> 객체에 액세스합니다. <code>mainApi</code>는 Vutron 템플릿에서 설정한 이름이며 변경할 수 있습니다.</p><p>다음은 mainApi에서 지원되는 함수입니다:</p><ul><li><code>send</code>: 메인으로 이벤트를 보냅니다.</li><li><code>on</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다.</li><li><code>once</code>: 메인에서 보낸 이벤트를 수신할 리스너입니다. (하나의 호출만 처리)</li><li><code>off</code>: 이벤트 리스너를 제거합니다.</li><li><code>invoke</code>: 메인에 이벤트를 보내고 비동기적으로 데이터를 수신할 수 있는 함수입니다.</li></ul><p>이를 변경하고 수정하려면 <code>src/preload/index.ts</code>에서 <code>exposeInMainWorld</code>를 수정해야 합니다.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/electron-how-to/preload-script.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/electron-how-to/main-and-renderer-process" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>메인과 렌더러 프로세스</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/other-projects" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>기타 프로젝트</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/index.html b/ko/index.html new file mode 100644 index 0000000..ac0244c --- /dev/null +++ b/ko/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Vutron | Vite + Vue 3 + Electron용 빠른 시작 템플릿</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_index.md.CXjtXkdk.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><!----><!----><div class="VPContent is-home" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPHome" data-v-1428d186 data-v-686f80a6><!--[--><!--]--><div class="VPHero has-image VPHomeHero" data-v-686f80a6 data-v-303bb580><div class="container" data-v-303bb580><div class="main" data-v-303bb580><!--[--><!--]--><!--[--><h1 class="name" data-v-303bb580><span class="clip" data-v-303bb580>Vutron</span></h1><p class="text" data-v-303bb580>Vite + Vue 3 + Electron용 빠른 시작 템플릿</p><p class="tagline" data-v-303bb580><strong>Vutron</strong>은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다.</p><!--]--><!--[--><!--]--><div class="actions" data-v-303bb580><!--[--><div class="action" data-v-303bb580><a class="VPButton medium brand" href="/ko/installation-and-build/getting-started" data-v-303bb580 data-v-fa7799d5>시작하기</a></div><div class="action" data-v-303bb580><a class="VPButton medium alt" href="https://github.com/jooy2/vutron" target="_blank" rel="noreferrer" data-v-303bb580 data-v-fa7799d5>GitHub</a></div><!--]--></div><!--[--><!--]--></div><div class="image" data-v-303bb580><div class="image-container" data-v-303bb580><div class="image-bg" data-v-303bb580></div><!--[--><!--[--><img class="VPImage image-src" src="/icon.png" alt="Vue" data-v-8426fc1a><!--]--><!--]--></div></div></div></div><!--[--><!--]--><!--[--><!--]--><div class="VPFeatures VPHomeFeatures" data-v-686f80a6 data-v-a6181336><div class="container" data-v-a6181336><div class="items" data-v-a6181336><!--[--><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.03628 7.87818C4.75336 5.83955 6.15592 3.95466 8.16899 3.66815L33.6838 0.0367403C35.6969 -0.24977 37.5581 1.1706 37.841 3.20923L42.9637 40.1218C43.2466 42.1604 41.8441 44.0453 39.831 44.3319L14.3162 47.9633C12.3031 48.2498 10.4419 46.8294 10.159 44.7908L5.03628 7.87818Z" fill="url(#paint0_linear_1287_1214)"/><path d="M6.85877 7.6188C6.71731 6.59948 7.41859 5.65703 8.42512 5.51378L33.9399 1.88237C34.9465 1.73911 35.8771 2.4493 36.0186 3.46861L41.1412 40.3812C41.2827 41.4005 40.5814 42.343 39.5749 42.4862L14.0601 46.1176C13.0535 46.2609 12.1229 45.5507 11.9814 44.5314L6.85877 7.6188Z" fill="white"/><path d="M33.1857 14.9195L25.8505 34.1576C25.6991 34.5547 25.1763 34.63 24.9177 34.2919L12.3343 17.8339C12.0526 17.4655 12.3217 16.9339 12.7806 16.9524L22.9053 17.3607C22.9698 17.3633 23.0344 17.3541 23.0956 17.3337L32.5088 14.1992C32.9431 14.0546 33.3503 14.4878 33.1857 14.9195Z" fill="url(#paint1_linear_1287_1214)"/><path d="M27.0251 12.5756L19.9352 15.0427C19.8187 15.0832 19.7444 15.1986 19.7546 15.3231L20.3916 23.063C20.4066 23.2453 20.5904 23.3628 20.7588 23.2977L22.7226 22.5392C22.9064 22.4682 23.1021 22.6138 23.0905 22.8128L22.9102 25.8903C22.8982 26.0974 23.1093 26.2436 23.295 26.1567L24.4948 25.5953C24.6808 25.5084 24.892 25.6549 24.8795 25.8624L24.5855 30.6979C24.5671 31.0004 24.9759 31.1067 25.1013 30.8321L25.185 30.6487L29.4298 17.8014C29.5008 17.5863 29.2968 17.3809 29.0847 17.454L27.0519 18.1547C26.8609 18.2205 26.6675 18.0586 26.6954 17.8561L27.3823 12.8739C27.4103 12.6712 27.2163 12.5091 27.0251 12.5756Z" fill="url(#paint2_linear_1287_1214)"/><defs><linearGradient id="paint0_linear_1287_1214" x1="6.48163" y1="1.9759" x2="39.05" y2="48.2064" gradientUnits="userSpaceOnUse"><stop stop-color="#49C7FF"/><stop offset="1" stop-color="#BD36FF"/></linearGradient><linearGradient id="paint1_linear_1287_1214" x1="11.8848" y1="16.4266" x2="26.7246" y2="31.4177" gradientUnits="userSpaceOnUse"><stop stop-color="#41D1FF"/><stop offset="1" stop-color="#BD34FE"/></linearGradient><linearGradient id="paint2_linear_1287_1214" x1="21.8138" y1="13.7046" x2="26.2464" y2="28.8069" gradientUnits="userSpaceOnUse"><stop stop-color="#FFEA83"/><stop offset="0.0833333" stop-color="#FFDD35"/><stop offset="1" stop-color="#FFA800"/></linearGradient></defs></svg></div><h2 class="title" data-v-a3976bdc>강력한 웹 애플리케이션 개발 템플릿</h2><p class="details" data-v-a3976bdc>Vutron은 크로스 플랫폼, 다국어, 레이아웃 및 테마, 스타일 프레임워크를 지원합니다.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="160px" height="160px"><path fill="#424e5c" d="M4.5 6.5H75.5V73.5H4.5z"/><path fill="#afc5d8" d="M75,7v66H5V7H75 M76,6H4v68h72V6L76,6z"/><path fill="#afc5d8" d="M4 6H76V18H4z"/><path fill="#bae0bd" d="M25.6 43H54.400000000000006V45H25.6z" transform="rotate(-69.666 39.998 43.999)"/><path fill="#bae0bd" d="M27.9 54.4L16 44 27.9 33.6 29.2 35.1 19 44 29.2 52.9zM52.2 54.5L50.9 53 61 44.1 50.9 35.1 52.2 33.6 64 44.1z"/></svg></div><h2 class="title" data-v-a3976bdc>핫 리로드를 통한 빠른 개발</h2><p class="details" data-v-a3976bdc>개발자를 위한 최대 기능 지원으로 초기 프로젝트 설정 시간을 단축하세요.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-a6181336><div class="VPLink no-icon VPFeature" data-v-a6181336 data-v-a3976bdc><!--[--><article class="box" data-v-a3976bdc><div class="icon" data-v-a3976bdc><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="64px" height="64px"><circle cx="16" cy="17" r="5" fill="#ed0049"/><path fill="#ed0049" d="M23,31H9v0c0-3.866,3.134-7,7-7h0C19.866,24,23,27.134,23,31L23,31z"/><path fill="#0f518c" d="M19,4c0-1.657-1.343-3-3-3s-3,1.343-3,3c0,0.885,0.391,1.672,1,2.222V10h4V6.222 C18.609,5.672,19,4.885,19,4z"/><path fill="#0f518c" d="M7.061,8.318c-1.171-1.171-3.071-1.171-4.243,0s-1.171,3.071,0,4.243 c0.626,0.626,1.459,0.906,2.278,0.864l2.672,2.672l2.828-2.828l-2.672-2.672C7.967,9.777,7.686,8.944,7.061,8.318z"/><path fill="#0f518c" d="M24.879,8.318c1.171-1.171,3.071-1.171,4.243,0s1.171,3.071,0,4.243 c-0.626,0.626-1.459,0.906-2.278,0.864l-2.672,2.672l-2.828-2.828l2.672-2.672C23.972,9.777,24.253,8.944,24.879,8.318z"/><path fill="#0f518c" d="M24.879,27.218c1.171,1.171,3.071,1.171,4.243,0c1.171-1.171,1.171-3.071,0-4.243 c-0.626-0.626-1.459-0.906-2.278-0.864l-2.672-2.672l-2.828,2.828l2.672,2.672C23.972,25.759,24.253,26.592,24.879,27.218z"/><g><path fill="#0f518c" d="M7.061,27.218c-1.171,1.171-3.071,1.171-4.243,0c-1.171-1.171-1.171-3.071,0-4.243 c0.626-0.626,1.459-0.906,2.278-0.864l2.672-2.672l2.828,2.828L7.925,24.94C7.967,25.759,7.686,26.592,7.061,27.218z"/></g></svg></div><h2 class="title" data-v-a3976bdc>안정적인 유지 관리 지원</h2><p class="details" data-v-a3976bdc>실제 사용 사례도 많고 기술 지원도 신속하게 제공합니다.</p><!----></article><!--]--></div></div><!--]--></div></div></div><!--[--><!--]--><div class="vp-doc container" style="" data-v-686f80a6 data-v-8e2d4988><!--[--><div style="position:relative;" data-v-686f80a6><div></div></div><!--]--></div></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/automated-testing.html b/ko/installation-and-build/automated-testing.html new file mode 100644 index 0000000..3d8fd76 --- /dev/null +++ b/ko/installation-and-build/automated-testing.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>자동화 테스트 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_automated-testing.md.CrcelI20.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/automated-testing" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/automated-testing" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_automated-testing" data-v-39a288b8><div><h1 id="자동화-테스트" tabindex="-1">자동화 테스트 <a class="header-anchor" href="#자동화-테스트" aria-label="Permalink to "자동화 테스트""></a></h1><p><strong>Vutron</strong>에는 자동화된 테스트가 포함되어 있습니다. 테스트 프레임워크는 Microsoft의 <strong><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></strong> 모듈을 사용합니다.</p><p><strong>Playwright</strong>는 웹 애플리케이션 테스트에 최적화되어 있으며 <strong>Electron</strong> 프레임워크를 완벽하게 지원합니다. 설치가 간단하고, 별도의 설정 없이 바로 테스트를 시작할 수 있으며, 크로스 플랫폼을 지원합니다. 여기에서 <strong>Playwright</strong>에 대해 자세히 알아보세요: <a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer">https://github.com/microsoft/playwright</a></p><p>이 템플릿에는 템플릿 메인 화면에 대한 매우 간단한 실행 및 동작 테스트만 구현되어 있습니다. 고급 테스트는 애플리케이션의 범위에 따라 달라집니다.</p><p>현재 테스트 사양 파일은 <code>tests</code> 디렉터리에, 테스트 결과 파일은 <code>tests/results</code>에 있습니다. (기본 제공 테스트 사양 파일은 별도의 결과 파일을 생성하지 않습니다.)</p><p>Playwright 설정은 프로젝트 루트에 있는 <code>playwright.config.ts</code>이며, 이에 대한 자세한 내용은 다음 문서를 참조하세요: <a href="https://playwright.dev/docs/test-configuration" target="_blank" rel="noreferrer">https://playwright.dev/docs/test-configuration</a></p><p>모든 구성이 완료되면 다음 명령어로 테스트를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span></span></code></pre></div><p>테스트를 실행하기 전에 빌드 디렉터리(<code>dist</code>)를 비우고 테스트용 패키지를 컴파일합니다.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/automated-testing.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/installation-and-build/npm-scripts" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>NPM Scripts</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/install-local-documentation" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>로컬 문서 관리</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/build-configuration.html b/ko/installation-and-build/build-configuration.html new file mode 100644 index 0000000..64f934f --- /dev/null +++ b/ko/installation-and-build/build-configuration.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>빌드 구성 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_build-configuration.md.TZXV-NIp.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/build-configuration" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/build-configuration" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_build-configuration" data-v-39a288b8><div><h1 id="빌드-구성" tabindex="-1">빌드 구성 <a class="header-anchor" href="#빌드-구성" aria-label="Permalink to "빌드 구성""></a></h1><p>모듈 설치가 완료되면 아래 명령어를 사용하여 플랫폼 패키지를 간단하게 빌드할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Windows (.exe, .appx)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:win</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For macOS (.dmg)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:mac</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># For Linux (.rpm, .deb, .snap)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:linux</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># All platform (.exe, .appx, .dmg, .rpm, .deb, .snap) - see below description</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>빌드된 패키지는 <code>release/{version}</code> 위치에서 찾을 수 있습니다.</p><p>자세한 내용은 다음 문서를 참조하세요: <a href="https://webpack.electron.build/dependency-management#installing-native-node-modules" target="_blank" rel="noreferrer">https://webpack.electron.build/dependency-management#installing-native-node-modules</a></p><h2 id="멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" tabindex="-1">멀티플랫폼 빌드를 하려면 어떻게 해야 하나요? <a class="header-anchor" href="#멀티플랫폼-빌드를-하려면-어떻게-해야-하나요" aria-label="Permalink to "멀티플랫폼 빌드를 하려면 어떻게 해야 하나요?""></a></h2><p>각 OS에 대한 패키지를 만들려면 동일한 OS에서 빌드해야 합니다. 예를 들어 macOS용 패키지는 macOS 컴퓨터에서 빌드해야 합니다.</p><p>하지만 하나의 OS에서 Windows, macOS, Linux용 패키지를 한 번에 빌드할 수 있습니다. 하지만 이를 위해서는 약간의 준비가 필요할 수 있습니다.</p><p>하나의 플랫폼에서 여러 플랫폼을 동시에 구축하려는 경우 <strong>macOS</strong>를 권장합니다. 몇 가지 간단한 설정만으로 구성할 수 있기 때문입니다.</p><p>다음 명령어를 사용하여 한 번에 여러 플랫폼 빌드를 수행할 수 있습니다. 또는 위의 개별 빌드 명령어를 통해 원하는 OS에 대해서만 빌드를 수행할 수도 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build:all</span></span></code></pre></div><p>Linux 빌드에는 <code>multipass</code> 구성이 필요할 수 있습니다. 다음 링크를 통해 <code>multipass</code>에 대해 자세히 알아보세요: <a href="https://multipass.run" target="_blank" rel="noreferrer">https://multipass.run</a></p><p>멀티플랫폼 빌드에 대해 자세히 알아보려면 다음 문서를 참조하세요: <a href="https://electron.build/multi-platform-build" target="_blank" rel="noreferrer">https://electron.build/multi-platform-build</a></p><h2 id="개발-파일을-제외하여-번들-크기-줄이기" tabindex="-1">개발 파일을 제외하여 번들 크기 줄이기 <a class="header-anchor" href="#개발-파일을-제외하여-번들-크기-줄이기" aria-label="Permalink to "개발 파일을 제외하여 번들 크기 줄이기""></a></h2><p>빌드 시점에 필요하지 않은 파일은 <code>buildAssets/builder/config.ts</code>의 파일 속성에 파일 패턴을 추가하여 제외할 수 있습니다. 이렇게 하면 번들 용량을 절약할 수 있습니다.</p><p>아래는 불필요한 <code>node_modules</code> 파일 패턴으로 번들을 추가로 절약할 수 있는 예시입니다. 프로젝트에 따라 아래 규칙을 사용하면 문제가 발생할 수 있으므로 사용 전에 검토하시기 바랍니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/.*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/**/node-v*-x64{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/bluebird/js/browser{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/lodash/fp{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/!(dist|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/async/internal{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/dist{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/ajv/scripts{,/**/*}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/!(lib|package.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/source-map-support/browser-source-map-support.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> +<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "!**/node_modules/json-schema/!(package.json|lib)"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div><h2 id="네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" tabindex="-1">네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정 <a class="header-anchor" href="#네이티브-노드-모듈을-사용하는-프로젝트의-빌드-설정" aria-label="Permalink to "네이티브 노드 모듈을 사용하는 프로젝트의 빌드 설정""></a></h2><p><strong>네이티브 노드 모듈</strong>을 사용하는 프로젝트의 경우, <code>package.json</code>에 다음 스크립트를 추가하세요: 종속성을 설치할 때 <code>electron-builder</code>가 리빌드가 필요한 모듈을 처리합니다.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> +<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "postinstall"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"electron-builder install-app-deps"</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> +<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/build-configuration.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>시작하기</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/npm-scripts" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>NPM Scripts</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/getting-started.html b/ko/installation-and-build/getting-started.html new file mode 100644 index 0000000..3e7673c --- /dev/null +++ b/ko/installation-and-build/getting-started.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>시작하기 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_getting-started.md.CoiEGCgU.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/getting-started" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/getting-started" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_getting-started" data-v-39a288b8><div><h1 id="시작하기" tabindex="-1">시작하기 <a class="header-anchor" href="#시작하기" aria-label="Permalink to "시작하기""></a></h1><h2 id="프로젝트-복제하기" tabindex="-1">프로젝트 복제하기 <a class="header-anchor" href="#프로젝트-복제하기" aria-label="Permalink to "프로젝트 복제하기""></a></h2><h3 id="방법-1-npm-init-권장" tabindex="-1">방법 1: <code>npm init</code> (권장) <a class="header-anchor" href="#방법-1-npm-init-권장" aria-label="Permalink to "방법 1: `npm init` (권장)""></a></h3><p>npm 명령만으로 리포지토리를 쉽게 복제할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vutron</span></span></code></pre></div><p>위의 방법은 프로젝트에 불필요한 문서와 '.github' 관련 파일을 만들지 않습니다.</p><h3 id="방법-2-템플릿-사용" tabindex="-1">방법 2: 템플릿 사용 <a class="header-anchor" href="#방법-2-템플릿-사용" aria-label="Permalink to "방법 2: 템플릿 사용""></a></h3><p><strong><a href="https://github.com/jooy2/vutron/generate" target="_blank" rel="noreferrer">이 템플릿 사용</a></strong> 버튼을 클릭하면 나만의 프로젝트를 즉시 만들 수 있습니다.</p><p>이 방법을 사용하면 GitHub에 리포지토리가 즉시 생성되지만 프로젝트를 로컬에 복제해야 사용할 수 있습니다.</p><h3 id="방법-3-리포지토리-복제" tabindex="-1">방법 3: 리포지토리 복제 <a class="header-anchor" href="#방법-3-리포지토리-복제" aria-label="Permalink to "방법 3: 리포지토리 복제""></a></h3><p>아래 명령어를 사용하여 이 리포지토리를 복제합니다. 이 방법은 Vutron 리포지토리에 직접 기여하는 경우에 적합합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/jooy2/vutron</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">PROJECT_NAM</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">E</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span></span></code></pre></div><h2 id="설치하기" tabindex="-1">설치하기 <a class="header-anchor" href="#설치하기" aria-label="Permalink to "설치하기""></a></h2><p>프로젝트를 복제한 후 터미널에서 다음 명령을 실행합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><h2 id="개발-환경에서-실행" tabindex="-1">개발 환경에서 실행 <a class="header-anchor" href="#개발-환경에서-실행" aria-label="Permalink to "개발 환경에서 실행""></a></h2><p>개발 환경의 애플리케이션은 <strong><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></strong> 환경에서 실행됩니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div><p>명령줄 명령을 실행한 후에도 애플리케이션이 나타나지 않는다면 다른 앱에서 기본 포트를 사용하고 있는지 확인해야 할 수 있습니다.</p><p>Vite는 기본적으로 포트 <code>5173</code>을 사용합니다.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/getting-started.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/build-configuration" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>빌드 구성</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/index.html b/ko/installation-and-build/index.html new file mode 100644 index 0000000..5b076e8 --- /dev/null +++ b/ko/installation-and-build/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>설치 그리고 빌드 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_index.md.1z_mEwvg.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_" data-v-39a288b8><div><h1 id="설치-그리고-빌드" tabindex="-1">설치 그리고 빌드 <a class="header-anchor" href="#설치-그리고-빌드" aria-label="Permalink to "설치 그리고 빌드""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>시작하기</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/install-local-documentation.html b/ko/installation-and-build/install-local-documentation.html new file mode 100644 index 0000000..ece3480 --- /dev/null +++ b/ko/installation-and-build/install-local-documentation.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>로컬 문서 관리 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_install-local-documentation.md.CjN3yQfZ.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/install-local-documentation" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/install-local-documentation" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_install-local-documentation" data-v-39a288b8><div><h1 id="로컬-문서-관리" tabindex="-1">로컬 문서 관리 <a class="header-anchor" href="#로컬-문서-관리" aria-label="Permalink to "로컬 문서 관리""></a></h1><p><code>Vutron</code>의 문서는 <code>VitePress</code> 뷰어를 통해 로컬 환경에서 볼 수 있습니다.</p><p>이 함수는 전체 프로젝트가 복제된 경우에만 작동합니다. <code>npm init vutron</code>으로 프로젝트를 생성한 경우 <code>docs</code> 폴더는 포함되지 않습니다.</p><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to "Installation""></a></h2><p>아래 지침의 모든 작업은 <code>docs</code> 폴더에서 수행해야 합니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docs</span></span></code></pre></div><p>다음 명령을 사용하여 관련 패키지를 설치합니다:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via npm</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via yarn (https://yarnpkg.com)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yarn</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span> +<span class="line"></span> +<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># via pnpm (https://pnpm.io)</span></span> +<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> i</span></span></code></pre></div><p>아래 명령을 통해 문서가 호스팅되는 로컬 서버를 실행할 수 있습니다.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/install-local-documentation.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/installation-and-build/automated-testing" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>자동화 테스트</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/project-structures/project-structure" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>프로젝트 구조</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/installation-and-build/npm-scripts.html b/ko/installation-and-build/npm-scripts.html new file mode 100644 index 0000000..8e9bb59 --- /dev/null +++ b/ko/installation-and-build/npm-scripts.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>NPM Scripts | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_installation-and-build_npm-scripts.md.KCQJXSWc.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/installation-and-build/npm-scripts" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/installation-and-build/npm-scripts" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_installation-and-build_npm-scripts" data-v-39a288b8><div><h1 id="npm-스크립트" tabindex="-1">Npm 스크립트 <a class="header-anchor" href="#npm-스크립트" aria-label="Permalink to "Npm 스크립트""></a></h1><blockquote><p>$ npm run %SCRIPT_NAME%</p></blockquote><h2 id="일반" tabindex="-1">일반 <a class="header-anchor" href="#일반" aria-label="Permalink to "일반""></a></h2><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start Electron as a development environment</td></tr><tr><td><code>dev:debug</code></td><td>Start Electron as a development environment (with vite debug)</td></tr><tr><td><code>dev:debug:force</code></td><td>Start Electron as a development environment (with vite debug + clean vite cache)</td></tr><tr><td><code>build:pre</code></td><td>Commands commonly run at build time. This script does not need to be run separately.</td></tr><tr><td><code>build</code></td><td>Build the package for the current operating system.</td></tr><tr><td><code>build:all</code></td><td>Build a specified package for the entire operating system (Requires cross-platform build configuration)</td></tr><tr><td><code>build:dir</code></td><td><code>electron-builder</code> directory build</td></tr><tr><td><code>build:mac</code></td><td>Build preconfigured packages for macOS</td></tr><tr><td><code>build:linux</code></td><td>Build preconfigured packages for Linux</td></tr><tr><td><code>build:win</code></td><td>Build preconfigured packages for Windows</td></tr><tr><td><code>lint</code></td><td>ESLint code inspection. It does not modify the code.</td></tr><tr><td><code>lint:fix</code></td><td>ESLint code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>format</code></td><td>Prettier code inspection. It does not modify the code.</td></tr><tr><td><code>format:fix</code></td><td>Prettier code inspection. Use auto-fix to fix your code.</td></tr><tr><td><code>test</code></td><td>Build a package for testing and run tests against the test specification file.</td></tr><tr><td><code>test:linux</code></td><td>Build a package for testing and run tests against the test specification file. (for linux ci only)</td></tr></tbody></table><h2 id="문서용" tabindex="-1">문서용 <a class="header-anchor" href="#문서용" aria-label="Permalink to "문서용""></a></h2><p>프로젝트 문서에 기여하는 경우에만 사용됩니다. <code>docs</code> 디렉토리 위치에서 실행해야 합니다.</p><table tabindex="0"><thead><tr><th>Script Name</th><th>Description</th></tr></thead><tbody><tr><td><code>dev</code></td><td>Start the local document server. (For development)</td></tr><tr><td><code>build</code></td><td>Build a local document server. Used only for GitHub page builders.</td></tr><tr><td><code>serve</code></td><td>Start the local document server.</td></tr></tbody></table></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/installation-and-build/npm-scripts.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/installation-and-build/build-configuration" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>빌드 구성</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/automated-testing" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>자동화 테스트</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/other-projects.html b/ko/other-projects.html new file mode 100644 index 0000000..2553497 --- /dev/null +++ b/ko/other-projects.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>기타 프로젝트 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_other-projects.md.B1Y_QtMF.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/other-projects" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/other-projects" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_other-projects" data-v-39a288b8><div><h1 id="기타-프로젝트" tabindex="-1">기타 프로젝트 <a class="header-anchor" href="#기타-프로젝트" aria-label="Permalink to "기타 프로젝트""></a></h1><h2 id="react로-만든-electron-템플릿을-찾고-계신가요" tabindex="-1">React로 만든 Electron 템플릿을 찾고 계신가요? <a class="header-anchor" href="#react로-만든-electron-템플릿을-찾고-계신가요" aria-label="Permalink to "React로 만든 Electron 템플릿을 찾고 계신가요?""></a></h2><p>Vite + React + Material-UI + Electron으로 구성된 'Retron' 프로젝트도 확인해 보세요.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" tabindex="-1">(사용 중단) Webpack 5 컴파일러로 <code>Vutron</code>을 찾고 계신가요? <a class="header-anchor" href="#사용-중단-webpack-5-컴파일러로-vutron을-찾고-계신가요" aria-label="Permalink to "(사용 중단) Webpack 5 컴파일러로 `Vutron`을 찾고 계신가요?""></a></h2><p>Vite 컴파일러를 사용하여 프로젝트 및 번들 크기를 줄이고 개발 환경과 빌드 속도를 개선한다는 목표를 달성했습니다.</p><p>Webpack 5 컴파일러를 사용하는 기존 <strong>Vutron</strong>은 아래 리포지토리로 분리되었으며 곧 지원이 종료될 예정입니다.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/other-projects.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/electron-how-to/preload-script" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>프리로드 스크립트</span><!--]--></a></div><div class="pager" data-v-e257564d><!----></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/project-structures/index.html b/ko/project-structures/index.html new file mode 100644 index 0000000..5408171 --- /dev/null +++ b/ko/project-structures/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>프로젝트 구조 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_project-structures_index.md.CwEz-WEU.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/project-structures/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/project-structures/" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_project-structures_" data-v-39a288b8><div><h1 id="프로젝트-구조" tabindex="-1">프로젝트 구조 <a class="header-anchor" href="#프로젝트-구조" aria-label="Permalink to "프로젝트 구조""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/project-structures/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>시작하기</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/project-structures/pre-configured-components.html b/ko/project-structures/pre-configured-components.html new file mode 100644 index 0000000..36d470c --- /dev/null +++ b/ko/project-structures/pre-configured-components.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>사전 구성된 구성 요소 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_project-structures_pre-configured-components.md.yZdtw8Fy.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/project-structures/pre-configured-components" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/project-structures/pre-configured-components" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_project-structures_pre-configured-components" data-v-39a288b8><div><h1 id="사전-구성된-구성-요소" tabindex="-1">사전 구성된 구성 요소 <a class="header-anchor" href="#사전-구성된-구성-요소" aria-label="Permalink to "사전 구성된 구성 요소""></a></h1><h2 id="웹-앱-프레임워크" tabindex="-1">웹 앱 프레임워크 <a class="header-anchor" href="#웹-앱-프레임워크" aria-label="Permalink to "웹 앱 프레임워크""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="개발-도움말-도구" tabindex="-1">개발 도움말 도구 <a class="header-anchor" href="#개발-도움말-도구" aria-label="Permalink to "개발 도움말 도구""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="프론트엔드-프레임워크-vue" tabindex="-1">프론트엔드 프레임워크 (Vue) <a class="header-anchor" href="#프론트엔드-프레임워크-vue" aria-label="Permalink to "프론트엔드 프레임워크 (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="디자인-프레임워크" tabindex="-1">디자인 프레임워크 <a class="header-anchor" href="#디자인-프레임워크" aria-label="Permalink to "디자인 프레임워크""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="테스트" tabindex="-1">테스트 <a class="header-anchor" href="#테스트" aria-label="Permalink to "테스트""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/project-structures/pre-configured-components.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/project-structures/project-structure" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>프로젝트 구조</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/electron-how-to/main-and-renderer-process" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>메인과 렌더러 프로세스</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/ko/project-structures/project-structure.html b/ko/project-structures/project-structure.html new file mode 100644 index 0000000..1495588 --- /dev/null +++ b/ko/project-structures/project-structure.html @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<html lang="ko-KR" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>프로젝트 구조 | Vutron</title> + <meta name="description" content="Vutron은 Electron 크로스 플랫폼 데스크톱 앱 개발을 위해 미리 구성된 템플릿입니다. Vue 3을 사용하며 적은 노력으로 빠른 개발 환경을 구축할 수 있습니다."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/ko_project-structures_project-structure.md.4xmi4ZSM.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/ko/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="검색"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">검색</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/ko/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>시작하기</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="언어 변경" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>한국어</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/project-structures/project-structure" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>한국어</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/project-structures/project-structure" data-v-35975db6><!--[--><span data-v-35975db6>English</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>다크 모드</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>사이드바 메뉴</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>맨 위로</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>설치 그리고 빌드</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>시작하기</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>빌드 구성</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>자동화 테스트</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>로컬 문서 관리</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>프로젝트 구조</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프로젝트 구조</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>사전 구성된 구성 요소</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron 개요</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>메인과 렌더러 프로세스</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>프리로드 스크립트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/ko/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>기타 프로젝트</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>이 페이지 콘텐츠</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _ko_project-structures_project-structure" data-v-39a288b8><div><h1 id="프로젝트-구조" tabindex="-1">프로젝트 구조 <a class="header-anchor" href="#프로젝트-구조" aria-label="Permalink to "프로젝트 구조""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub 파일들 (Vutron 프로젝트 기여에만 사용)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - README.md 등에 사용되는 GitHub 리소스</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub 워크플로우 정의</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Visual Studio Code IDE에서 사용하는 일반적인 프로젝트 구성 파일</span></span> +<span class="line"><span>├─ buildAssets/ - Electron 빌드에 사용되는 패키지 리소스(아이콘, 로고 등) 파일</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - `electron-builder` 동적 구성 파일</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - 패키지 빌드에 사용되는 출력 디렉토리</span></span> +<span class="line"><span>├─ docs/ - 프로젝트 문서(선택적으로 활성화)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - 문서 호스팅에 사용되는 VitePress 구성 파일</span></span> +<span class="line"><span>│ └─ public/ - VitePress 문서 페이지의 루트 리소스 디렉토리</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - 메인(Electron) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ utils/ - 메인 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - 메인 글로벌 정의</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - 메인 글로벌 메뉴 정의</span></span> +<span class="line"><span>│ │ └─ index.ts - 메인 프로세스 진입점</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - 메인 프로세스 IPC 핸들러 정의</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - 메인 프로세스 메인 윈도우 프로세스</span></span> +<span class="line"><span>│ ├─ preload/ - 프리로드 (Electron-Vue 커뮤니케이션 브릿지) 프로세스</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - 렌더러 (Vue) 프로세스 소스 코드</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue 컴포넌트 콜렉션</span></span> +<span class="line"><span>│ │ │ └─ layout/ - 레이아웃 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n 언어 리소스 파일</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue 플러그인 정의</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue 정적 리소스</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue 라우팅 정의</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue 화면 컴포넌트</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - 렌더링 프로세스 및 라우팅 오류 발생 시 표시되는 화면</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - 샘플 화면</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia 스토어 (글로벌 상태 관리) 정의</span></span> +<span class="line"><span>│ │ ├─ utils/ - 렌더러 프로세스 유틸리티</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue 앱 루트 컴포넌트</span></span> +<span class="line"><span>│ │ ├─ index.html - Electron 렌더러 프로세스에 의해 로드된 루트 정적 인덱스</span></span> +<span class="line"><span>│ └─ └─ main.ts - 렌더러 프로세스 엔트리 포인트Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - 애플리케이션 테스트 구성</span></span> +<span class="line"><span>│ ├─ results/ - PlayWright 테스트 결과 파일 및 스크린샷 저장 위치</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright 테스트 사양 파일</span></span> +<span class="line"><span>│ ├─ fixtures.ts - 공통 실행 API 테스트</span></span> +<span class="line"><span>│ └─ testUtil.ts - 테스트 유틸리티</span></span> +<span class="line"><span>├─ .editorconfig - IDE용 에디터 권장 구성 파일</span></span> +<span class="line"><span>├─ .eslintignore - ESLint에서 무시할 파일 목록</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint 규칙 구성</span></span> +<span class="line"><span>├─ .gitignore - Git에 업로드하지 않을 파일 목록</span></span> +<span class="line"><span>├─ .prettierignore - Prettier 파일 서식을 비활성화할 파일 목록</span></span> +<span class="line"><span>├─ .prettierrc - Prettier 규칙 설정</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - GitHub에서만 사용되는 파일</span></span> +<span class="line"><span>├─ LICENSE - 프로젝트 라이선스 파일</span></span> +<span class="line"><span>├─ package.json - Node.js 패키지 구성</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright 테스트 규칙 구성</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript 설정</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript 설정</span></span> +<span class="line"><span>├─ vite.config.mts - Vite 컴파일러 빌드 설정</span></span> +<span class="line"><span>└─ README.md - GitHub에서만 사용되는 파일</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/ko/project-structures/project-structure.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> 이 페이지 편집 제안<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>업데이트 일자: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/ko/installation-and-build/install-local-documentation" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>이전</span><span class="title" data-v-e257564d>로컬 문서 관리</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/ko/project-structures/pre-configured-components" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>다음</span><span class="title" data-v-e257564d>사전 구성된 구성 요소</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/other-projects.html b/other-projects.html new file mode 100644 index 0000000..dd41945 --- /dev/null +++ b/other-projects.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Other Projects | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/other-projects.md.BSByacBO.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/other-projects" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/other-projects" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _other-projects" data-v-39a288b8><div><h1 id="other-projects" tabindex="-1">Other Projects <a class="header-anchor" href="#other-projects" aria-label="Permalink to "Other Projects""></a></h1><h2 id="looking-for-electron-templates-made-with-react" tabindex="-1">Looking for Electron templates made with React? <a class="header-anchor" href="#looking-for-electron-templates-made-with-react" aria-label="Permalink to "Looking for Electron templates made with React?""></a></h2><p>Also check out the <code>Retron</code> project, which consists of Vite + React + Material-UI + Electron.</p><p><a href="https://github.com/jooy2/retron" target="_blank" rel="noreferrer">https://github.com/jooy2/retron</a></p><h2 id="deprecated-looking-for-vutron-with-webpack-5-compiler" tabindex="-1">(Deprecated) Looking for <code>Vutron</code> with Webpack 5 compiler? <a class="header-anchor" href="#deprecated-looking-for-vutron-with-webpack-5-compiler" aria-label="Permalink to "(Deprecated) Looking for `Vutron` with Webpack 5 compiler?""></a></h2><p>By using the Vite compiler, we achieved our goals of reducing project and bundle size, and improving development environment and build speed.</p><p>The old <strong>Vutron</strong> using the Webpack 5 compiler has been split into the repositories below and will end support soon.</p><p><a href="https://github.com/jooy2/vutron-webpack" target="_blank" rel="noreferrer">https://github.com/jooy2/vutron-webpack</a></p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/other-projects.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/electron-how-to/preload-script" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Preload Script</span><!--]--></a></div><div class="pager" data-v-e257564d><!----></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/project-structures/index.html b/project-structures/index.html new file mode 100644 index 0000000..2f5040d --- /dev/null +++ b/project-structures/index.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Project Structures | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/project-structures_index.md.4YzXULKH.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _project-structures_" data-v-39a288b8><div><h1 id="project-structures" tabindex="-1">Project Structures <a class="header-anchor" href="#project-structures" aria-label="Permalink to "Project Structures""></a></h1></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/project-structures/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:47:45.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/installation-and-build/getting-started" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Getting Started</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/project-structures/pre-configured-components.html b/project-structures/pre-configured-components.html new file mode 100644 index 0000000..c3df68e --- /dev/null +++ b/project-structures/pre-configured-components.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Pre-configured Components | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/project-structures_pre-configured-components.md.TxyxC52n.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/pre-configured-components" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/pre-configured-components" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _project-structures_pre-configured-components" data-v-39a288b8><div><h1 id="pre-configured-components" tabindex="-1">Pre-configured Components <a class="header-anchor" href="#pre-configured-components" aria-label="Permalink to "Pre-configured Components""></a></h1><h2 id="web-app-frameworks" tabindex="-1">Web app frameworks <a class="header-anchor" href="#web-app-frameworks" aria-label="Permalink to "Web app frameworks""></a></h2><ul><li><a href="https://vitejs.dev" target="_blank" rel="noreferrer">Vite</a></li><li><a href="https://www.electronjs.org" target="_blank" rel="noreferrer">Electron</a></li><li><a href="https://www.electron.build" target="_blank" rel="noreferrer">Electron Builder</a></li></ul><h2 id="development-help-tools" tabindex="-1">Development help tools <a class="header-anchor" href="#development-help-tools" aria-label="Permalink to "Development help tools""></a></h2><ul><li><a href="https://www.typescriptlang.org" target="_blank" rel="noreferrer">TypeScript</a></li><li><a href="https://eslint.org" target="_blank" rel="noreferrer">ESLint</a></li><li><a href="https://prettier.io" target="_blank" rel="noreferrer">Prettier</a></li></ul><h2 id="front-end-frameworks-vue" tabindex="-1">Front-end frameworks (Vue) <a class="header-anchor" href="#front-end-frameworks-vue" aria-label="Permalink to "Front-end frameworks (Vue)""></a></h2><ul><li><a href="https://vuejs.org" target="_blank" rel="noreferrer">Vue</a></li><li><a href="https://kazupon.github.io/vue-i18n" target="_blank" rel="noreferrer">Vue-i18n</a></li><li><a href="https://router.vuejs.org" target="_blank" rel="noreferrer">Vue-router</a></li><li><a href="https://pinia.vuejs.org" target="_blank" rel="noreferrer">Pinia</a></li></ul><h2 id="design-frameworks" tabindex="-1">Design frameworks <a class="header-anchor" href="#design-frameworks" aria-label="Permalink to "Design frameworks""></a></h2><ul><li><a href="https://vuetifyjs.com" target="_blank" rel="noreferrer">Vuetify</a></li></ul><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to "Testing""></a></h2><ul><li><a href="https://playwright.dev" target="_blank" rel="noreferrer">Playwright</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/project-structures/pre-configured-components.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/project-structures/project-structure" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Project Structure</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/electron-how-to/main-and-renderer-process" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Main Vs Renderer Process</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/project-structures/project-structure.html b/project-structures/project-structure.html new file mode 100644 index 0000000..ff8da75 --- /dev/null +++ b/project-structures/project-structure.html @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<html lang="en-US" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Project Structure | Vutron</title> + <meta name="description" content="Vutron is a preconfigured template for developing Electron cross-platform desktop apps. It uses Vue 3 and allows you to build a fast development environment with little effort."> + <meta name="generator" content="VitePress v1.5.0"> + <link rel="preload stylesheet" href="/assets/style.DZkoH-Yi.css" as="style"> + <link rel="preload stylesheet" href="/vp-icons.css" as="style"> + <script type="module" src="/assets/chunks/metadata.135fb67b.js"></script> + <script type="module" src="/assets/app.Dgw6wb0Y.js"></script> + <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> + <link rel="modulepreload" href="/assets/chunks/theme.DP4UGt4y.js"> + <link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js"> + <link rel="modulepreload" href="/assets/project-structures_project-structure.md.MUQdxPCX.lean.js"> + <link rel="icon" href="/logo.png"> + <link rel="shortcut icon" href="/favicon.ico"> + <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> + <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script> + </head> + <body> + <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icon.png" width="24" height="24" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vutron</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/installation-and-build/getting-started" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Getting Started</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aa21345 data-v-88af2de4 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><span class="vpi-languages option-icon" data-v-cf11d7a2></span><!----><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="items" data-v-88af2de4><p class="title" data-v-88af2de4>English</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/project-structure" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><div class="group translations" data-v-bb2aa2f0><p class="trans-title" data-v-bb2aa2f0>English</p><!--[--><div class="VPMenuLink" data-v-bb2aa2f0 data-v-35975db6><a class="VPLink link" href="/ko/project-structures/project-structure" data-v-35975db6><!--[--><span data-v-35975db6>한국어</span><!--]--></a></div><!--]--></div><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/jooy2/vutron" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-17a5e62e><button data-v-17a5e62e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Installation And Build</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/getting-started" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/build-configuration" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Build Configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/npm-scripts" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>NPM Scripts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/automated-testing" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Automated Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/installation-and-build/install-local-documentation" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Manage Local Documentation</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible has-active" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Project Structures</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/project-structure" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Project Structure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/project-structures/pre-configured-components" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Pre Configured Components</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" data-v-c40bc020 data-v-b7550ba0><div class="item" role="button" tabindex="0" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><h2 class="text" data-v-b7550ba0>Electron How To</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b7550ba0><span class="vpi-chevron-right caret-icon" data-v-b7550ba0></span></div></div><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/main-and-renderer-process" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Main Vs Renderer Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/electron-how-to/preload-script" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Preload Script</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b7550ba0><!----><div class="items" data-v-b7550ba0><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b7550ba0 data-v-b7550ba0><div class="item" data-v-b7550ba0><div class="indicator" data-v-b7550ba0></div><a class="VPLink link link" href="/other-projects" data-v-b7550ba0><!--[--><p class="text" data-v-b7550ba0>Other Projects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _project-structures_project-structure" data-v-39a288b8><div><h1 id="project-structure" tabindex="-1">Project Structure <a class="header-anchor" href="#project-structure" aria-label="Permalink to "Project Structure""></a></h1><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span> +<span class="line"><span>├─ .github - GitHub files (only used for Vutron GitHub project contributions)</span></span> +<span class="line"><span>│ └─ ISSUE_TEMPLATE/</span></span> +<span class="line"><span>│ └─ resources/ - GitHub resources used for README.md, etc.</span></span> +<span class="line"><span>│ └─ workflows/ - GitHub workflows definition</span></span> +<span class="line"><span>│ └─ dependabot.yml</span></span> +<span class="line"><span>│ └─ FUNDING.yml</span></span> +<span class="line"><span>├─ .vscode - Common project configuration files used by Visual Studio Code IDE</span></span> +<span class="line"><span>├─ buildAssets/ - Package resource (icon, logo, etc.) file used for Electron build</span></span> +<span class="line"><span>│ └─ builder/</span></span> +<span class="line"><span>│ │ │ └─ config.ts - `electron-builder` dynamic configuration file</span></span> +<span class="line"><span>│ └─ icons/</span></span> +<span class="line"><span>├─ dist/ - Output directory used to build the package</span></span> +<span class="line"><span>├─ docs/ - Project documents (optionally enabled)</span></span> +<span class="line"><span>│ └─ .vitepress/</span></span> +<span class="line"><span>│ │ │ └─ config.mts - VitePress configuration file used for document hosting</span></span> +<span class="line"><span>│ └─ public/ - Root resource directory for VitePress documentation pages</span></span> +<span class="line"><span>├─ node_modules/</span></span> +<span class="line"><span>├─ src/</span></span> +<span class="line"><span>│ ├─ main/ - Main (Electron) process source code</span></span> +<span class="line"><span>│ │ ├─ utils/ - Main process utilities</span></span> +<span class="line"><span>│ │ │ └─ Constants.ts - Main global definition</span></span> +<span class="line"><span>│ │ │ └─ Menus.ts - Main global menu definition</span></span> +<span class="line"><span>│ │ └─ index.ts - Main process entry point</span></span> +<span class="line"><span>│ │ └─ IPCs.ts - Main process ipc handlers definition</span></span> +<span class="line"><span>│ │ └─ MainRunner.ts - Main process main window processing</span></span> +<span class="line"><span>│ ├─ preload/ - Preload (Electron-Vue communication bridge) process source code</span></span> +<span class="line"><span>│ │ └─ index.ts</span></span> +<span class="line"><span>│ ├─ renderer/ - Renderer (Vue) process source code</span></span> +<span class="line"><span>│ │ ├─ components/ - Vue components collection</span></span> +<span class="line"><span>│ │ │ └─ layout/ - Layout components</span></span> +<span class="line"><span>│ │ ├─ locales/ - Vue i18n language resource file</span></span> +<span class="line"><span>│ │ ├─ plugins/ - Vue plugin definition</span></span> +<span class="line"><span>│ │ ├─ public/ - Vue static resources</span></span> +<span class="line"><span>│ │ │ └─ images/</span></span> +<span class="line"><span>│ │ ├─ router/ - Vue routing definition</span></span> +<span class="line"><span>│ │ ├─ screens/ - Vue screen component</span></span> +<span class="line"><span>│ │ │ └─ ErrorScreen.vue - Screen displayed when renderer process and routing errors occur</span></span> +<span class="line"><span>│ │ │ └─ MainScreen.vue</span></span> +<span class="line"><span>│ │ │ └─ SecondScreen.vue - Sample screen</span></span> +<span class="line"><span>│ │ ├─ store/ - Pinia store (Global state management) definition</span></span> +<span class="line"><span>│ │ ├─ utils/ - Renderer process utilities</span></span> +<span class="line"><span>│ │ ├─ App.vue - Vue app's root component</span></span> +<span class="line"><span>│ │ ├─ index.html - Root static index loaded by Electron renderer process</span></span> +<span class="line"><span>│ └─ └─ main.ts - Renderer process entry point</span></span> +<span class="line"><span>├─ tests/ - Application test configuration</span></span> +<span class="line"><span>│ ├─ results/ - Where to save PlayWright test result files and screenshots</span></span> +<span class="line"><span>│ ├─ specs/ - PlayWright test spec file</span></span> +<span class="line"><span>│ ├─ fixtures.ts - Test common execution API</span></span> +<span class="line"><span>│ └─ testUtil.ts - Test utilities</span></span> +<span class="line"><span>├─ .editorconfig - Editor recommended configuration file for IDE</span></span> +<span class="line"><span>├─ .eslintignore - List of files to be ignored by ESLint</span></span> +<span class="line"><span>├─ .eslintrc.json - ESLint rule configurations</span></span> +<span class="line"><span>├─ .gitignore - List of files to not upload to Git</span></span> +<span class="line"><span>├─ .prettierignore - List of files to disable Prettier file formatting</span></span> +<span class="line"><span>├─ .prettierrc - Prettier rule configurations</span></span> +<span class="line"><span>├─ CODE_OF_CONDUCT.md - Files used only on GitHub</span></span> +<span class="line"><span>├─ LICENSE - Project license file</span></span> +<span class="line"><span>├─ package.json - Node.js package configurations</span></span> +<span class="line"><span>├─ package-lock.json</span></span> +<span class="line"><span>├─ playwright.config.ts - Playwright test rules configurations</span></span> +<span class="line"><span>├─ tsconfig.json - TypeScript configurations</span></span> +<span class="line"><span>├─ tsconfig.node.json - TypeScript configurations</span></span> +<span class="line"><span>├─ vite.config.mts - Vite compiler build configurations</span></span> +<span class="line"><span>└─ README.md - Files used only on GitHub</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/jooy2/vutron/edit/master/docs/src/en/project-structures/project-structure.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2024-09-05T00:40:35.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/installation-and-build/install-local-documentation" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Manage Local Documentation</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/project-structures/pre-configured-components" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Pre Configured Components</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> + + + </body> +</html> \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..f2bc8fd --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://vutron.cdget.com/electron-how-to/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/"/></url><url><loc>https://vutron.cdget.com/ko/electron-how-to/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/"/></url><url><loc>https://vutron.cdget.com/electron-how-to/main-and-renderer-process</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/main-and-renderer-process"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/main-and-renderer-process"/></url><url><loc>https://vutron.cdget.com/ko/electron-how-to/main-and-renderer-process</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/main-and-renderer-process"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/main-and-renderer-process"/></url><url><loc>https://vutron.cdget.com/electron-how-to/preload-script</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/preload-script"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/preload-script"/></url><url><loc>https://vutron.cdget.com/ko/electron-how-to/preload-script</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/electron-how-to/preload-script"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/electron-how-to/preload-script"/></url><url><loc>https://vutron.cdget.com/</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/"/></url><url><loc>https://vutron.cdget.com/ko/</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/"/></url><url><loc>https://vutron.cdget.com/installation-and-build/automated-testing</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/automated-testing"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/automated-testing"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/automated-testing</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/automated-testing"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/automated-testing"/></url><url><loc>https://vutron.cdget.com/installation-and-build/build-configuration</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/build-configuration"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/build-configuration"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/build-configuration</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/build-configuration"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/build-configuration"/></url><url><loc>https://vutron.cdget.com/installation-and-build/getting-started</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/getting-started"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/getting-started"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/getting-started</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/getting-started"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/getting-started"/></url><url><loc>https://vutron.cdget.com/installation-and-build/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/"/></url><url><loc>https://vutron.cdget.com/installation-and-build/install-local-documentation</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/install-local-documentation"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/install-local-documentation"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/install-local-documentation</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/install-local-documentation"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/install-local-documentation"/></url><url><loc>https://vutron.cdget.com/installation-and-build/npm-scripts</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/npm-scripts"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/npm-scripts"/></url><url><loc>https://vutron.cdget.com/ko/installation-and-build/npm-scripts</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/installation-and-build/npm-scripts"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/installation-and-build/npm-scripts"/></url><url><loc>https://vutron.cdget.com/other-projects</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/other-projects"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/other-projects"/></url><url><loc>https://vutron.cdget.com/ko/other-projects</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/other-projects"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/other-projects"/></url><url><loc>https://vutron.cdget.com/project-structures/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/"/></url><url><loc>https://vutron.cdget.com/ko/project-structures/</loc><lastmod>2024-09-05T00:47:45.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/"/></url><url><loc>https://vutron.cdget.com/project-structures/pre-configured-components</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/pre-configured-components"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/pre-configured-components"/></url><url><loc>https://vutron.cdget.com/ko/project-structures/pre-configured-components</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/pre-configured-components"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/pre-configured-components"/></url><url><loc>https://vutron.cdget.com/project-structures/project-structure</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/project-structure"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/project-structure"/></url><url><loc>https://vutron.cdget.com/ko/project-structures/project-structure</loc><lastmod>2024-09-05T00:40:35.000Z</lastmod><xhtml:link rel="alternate" hreflang="en-US" href="https://vutron.cdget.com/project-structures/project-structure"/><xhtml:link rel="alternate" hreflang="ko-KR" href="https://vutron.cdget.com/ko/project-structures/project-structure"/></url></urlset> \ No newline at end of file diff --git a/vp-icons.css b/vp-icons.css new file mode 100644 index 0000000..ddc5bd8 --- /dev/null +++ b/vp-icons.css @@ -0,0 +1 @@ +.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file