diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..1486558
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,66 @@
+# Sample workflow for building and deploying a VitePress site to GitHub Pages
+#
+name: Deploy rubick site to Pages
+
+on:
+ # Runs on pushes targeting the `main` branch. Change this to `master` if you're
+ # using the `master` branch as the default branch.
+ push:
+ branches: [master]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: pages
+ cancel-in-progress: false
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # Not needed if lastUpdated is not enabled
+ # - uses: pnpm/action-setup@v2 # Uncomment this if you're using pnpm
+ # - uses: oven-sh/setup-bun@v1 # Uncomment this if you're using Bun
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ cache: npm # or pnpm / yarn
+ - name: Setup Pages
+ uses: actions/configure-pages@v3
+ - name: Install dependencies
+ run: npm ci # or pnpm install / yarn install / bun install
+ - name: Build with VitePress
+ run: |
+ npm run docs:build # or pnpm docs:build / yarn docs:build / bun run docs:build
+ touch docs/.vitepress/dist/.nojekyll
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v2
+ with:
+ path: docs/.vitepress/dist
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ needs: build
+ runs-on: ubuntu-latest
+ name: Deploy
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v2
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..26aead2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/build
+.vitepress/dist
+.vitepress/cache
+
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.vitepress/config.mjs b/.vitepress/config.mjs
new file mode 100644
index 0000000..e9064cd
--- /dev/null
+++ b/.vitepress/config.mjs
@@ -0,0 +1,50 @@
+import { defineConfig } from 'vitepress'
+
+// https://vitepress.dev/reference/site-config
+export default defineConfig({
+ base: '/docs/',
+ title: "rubick 文档",
+ description: "rubick 官方文档",
+ head: [
+ ['link', { rel: 'icon', type: 'image/svg+xml', href: 'https://picx.zhimg.com/80/v2-3d6a948772386c47f311a3d64d9fe70a_720w.png' }],
+ ['link', { rel: 'icon', type: 'image/png', href: 'https://picx.zhimg.com/80/v2-3d6a948772386c47f311a3d64d9fe70a_720w.png' }],
+ ],
+ themeConfig: {
+ logo: { src: 'https://picx.zhimg.com/80/v2-3d6a948772386c47f311a3d64d9fe70a_720w.png', width: 24, height: 24 },
+
+ // https://vitepress.dev/reference/default-theme-config
+ nav: [
+ { text: '官网', link: 'https://rubick.vip' },
+ { text: '使用说明', link: '/guide/index.md' }
+ ],
+
+ sidebar: [
+ {
+ text: '指南',
+ items: [
+ { text: '介绍', link: '/guide/index.md' },
+ { text: '操作指南', link: '/guide/usage.md' },
+ { text: '赞助', link: '/sponsor/index.md' },
+ ]
+ },
+ {
+ text: '开发者文档',
+ items: [
+ { text: '插件开发', link: '/dev/index.md' },
+ { text: '插件 API', link: '/dev/api.md' },
+ { text: '主程序开发', link: '/dev/dev.md' }
+ ]
+ },
+ {
+ text: 'rubick 源码介绍篇',
+ items: [
+ { text: '源码介绍', link: '/core/index.md' },
+ ]
+ },
+ ],
+
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
+ ]
+ }
+})
diff --git a/api-examples.md b/api-examples.md
new file mode 100644
index 0000000..6bd8bb5
--- /dev/null
+++ b/api-examples.md
@@ -0,0 +1,49 @@
+---
+outline: deep
+---
+
+# Runtime API Examples
+
+This page demonstrates usage of some of the runtime APIs provided by VitePress.
+
+The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
+
+```md
+
+
+## Results
+
+### Theme Data
+
{{ theme }}
+
+### Page Data
+{{ page }}
+
+### Page Frontmatter
+{{ frontmatter }}
+```
+
+
+
+## Results
+
+### Theme Data
+{{ theme }}
+
+### Page Data
+{{ page }}
+
+### Page Frontmatter
+{{ frontmatter }}
+
+## More
+
+Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).
diff --git a/core/index.md b/core/index.md
new file mode 100644
index 0000000..2e320dd
--- /dev/null
+++ b/core/index.md
@@ -0,0 +1,3 @@
+# 源码介绍
+
+> WIP
\ No newline at end of file
diff --git a/dev/api.md b/dev/api.md
new file mode 100644
index 0000000..666a584
--- /dev/null
+++ b/dev/api.md
@@ -0,0 +1,263 @@
+# 插件 API
+rubick 支持的全部 API 见:https://github.com/rubickCenter/rubick/blob/master/public/preload.js
+下面列举部分重要 API 的使用方法和说明。
+## 事件
+### onPluginReady(callback)、onPluginEnter(callback)
+
+* `callback` Function
+
+`callback` 内会返回一个 `object` 对象,来描述进入当前插件的环境信息:
+
+* `code` String
+
+> plugin.json 配置的 feature.code
+
+* `type` String
+
+> plugin.json 配置的 feature.cmd.type,可以为 "text"、"img"、 "files"、 "regex"、 "over"、"window"
+
+* payload String | Object | Array
+
+> feature.cmd.type 对应匹配的数据
+
+当插件装载成功,rubick 将会主动调用这个方法, 所有的 `api` 都应该在 `onPluginReady` 之后进行调用。
+
+#### 示例
+
+```js
+rubick.onPluginReady(({ code, type, payload }) => {
+ console.log('插件装配完成,已准备好')
+})
+/*
+type 为 "files" 时, payload 值示例
+[
+ {
+ "isFile": true,
+ "isDirectory": false,
+ "name": "demo.js",
+ "path": "C:\\demo.js"
+ }
+]
+
+type 为 "img" 时, payload 值示例
+data:image/png;base64,...
+
+type 为 "text"、"regex"、 "over" 时, payload 值为进入插件时的主输入框文本
+*/
+```
+
+### onPluginOut(callback)
+
+* `callback` Function
+
+每当插件从前台进入到后台时,rubick 将会主动调用这个方法。
+
+## 窗口交互
+
+### hideMainWindow()
+
+隐藏主窗口
+
+### showMainWindow()
+
+显示主窗口
+
+### setExpendHeight(height)
+
+执行该方法将会修改插件窗口的高度。
+
+* `height` Integer
+* 返回 `Boolean`
+
+#### 示例
+
+```js
+rubick.setExpendHeight(100)
+```
+
+### setSubInput(onChange, placeholder)
+
+设置插件输入框监听,当进入插件后,用户搜索会触发`onChange` 函数
+
+* `onChange` Function
+ * `Object`
+ * `text` String
+
+> 子输入框文本修改时触发
+
+* `placeholder` String (可选)
+
+> 子输入框占位符
+
+* `isFocus` Boolean (可选)
+
+> 子输入框是否获得焦点,默认 true
+
+`返回 Boolean`
+
+#### 示例
+
+```js
+rubick.setSubInput(({ text }) => {
+ console.log(text)
+}, '搜索')
+```
+
+### setSubInputValue(value)
+
+直接对子输入框的值进行设置。
+
+* `value` String
+* `返回` Boolean
+
+#### 示例
+
+```js
+rubick.setSubInputValue('rubick')
+```
+
+## 系统
+### showNotification(body)
+显示系统通知
+
+* `body` String
+```js
+rubick.showNotification('Hi, rubick')
+```
+
+### shellOpenPath(fullPath)
+打开给定路径的文件
+
+* `fullPath` String
+
+```js
+rubick.shellOpenPath('/path/file')
+```
+
+### shellOpenExternal(url)
+浏览器打开URL
+
+* `url` String
+
+```js
+rubick.shellOpenExternal('https://www.baidu.com')
+```
+
+### getPath(name)
+electron 内置 getPath 能力,详见 [electron API](https://www.electronjs.org/docs/latest/api/app#appgetpathname)
+
+```js
+console.log(rubick.getPath('cache'));
+```
+
+## 本地数据库
+
+`rubick db` 是基于开源的 [pouchdb](https://github.com/pouchdb/pouchdb) 封装的
+
+### rubick.db.put(doc)
+
+* `doc` Object
+* `返回` Object
+
+#### 示例
+
+```js
+// 创建请求
+rubick.db.put({
+ _id: "demo",
+ data: "demo"
+})
+// 返回 {id: "demo", ok: true, rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"}
+
+// 更新请求
+rubick.db.put({
+ _id: "demo",
+ data: "demo",
+ _rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"
+})
+```
+
+_id 代表这个文档在数据库中唯一值,如果值不存在,则会创建一个新的文档,如果值已经存在,则会进行更新。你可能已经注意到,返回对象中包含一个 rev
+属性,这是代表此文档的版本,每次对文档进行更新时,都要带上最新的版本号,否则更新将失败,版本化的意义在于解决同步时数据冲突。
+
+另外需要注意,每次更新时都要传入完整的文档数据,无法对单个字段进行更新。
+
+### rubick.db.get(id)
+
+执行该方法将会根据文档 ID 获取数据
+
+* `id` String
+* `返回` Object
+
+```js
+rubick.db.get("demo")
+// 返回 {_id: "demo", _rev: "3-9836c5c68af5aef618e17d615882942a", data: "demo"}
+```
+
+### rubick.db.remove(doc)
+
+* `doc` String | Object
+* `返回` Object 执行该方法将会删除数据库文档,可以传入文档对象或文档 id 进行操作。
+
+```js
+rubick.db.remove("demo")
+// 返回 {id: "demo", ok: true, rev: "2-effe5dbc23dffc180d8411b23f3108fb"}
+```
+
+### rubick.db.bulkDocs(docs)
+
+* `docs` Array
+* `返回` Array 执行该方法将会批量更新数据库文档,传入需要更改的文档对象合并成数组进行批量更新。
+
+```js
+rubick.db.bulkDocs([{
+ _id: "demo1",
+ data: "demo",
+ _rev: "1-c8817a74e292eda4cba1a45924853af6"
+}, {
+ _id: "demo2",
+ data: "demo",
+ _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7"
+}])
+/* 返回
+[{
+id: "demo1", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
+}, {
+id: "demo2", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
+}]
+*/
+```
+
+### rubick.db.allDocs(key)
+
+* `key` String | Array
+* `返回` Array 执行该方法将会获取所有数据库文档,如果传入字符串,则会返回以字符串开头的文档,也可以传入指定 ID 的数组,不传入则为获取所有文档。
+
+```js
+// 获取所有文档
+rubick.db.allDocs()
+
+// 传入字符串,则返回id以 demo 开头的文档
+rubick.db.allDocs("demo")
+/* 返回
+[{
+_id: "demo/123", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
+}, {
+_id: "demo/124", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+}, {
+_id: "demo/125", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+}]
+*/
+// 根据id数组请求
+rubick.db.allDocs([
+ "demo1",
+ "demo2"
+])
+/* 返回
+[{
+_id: "demo1", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
+}, {
+_id: "demo2", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+}]
+*/
+```
diff --git a/dev/dev.md b/dev/dev.md
new file mode 100644
index 0000000..916b859
--- /dev/null
+++ b/dev/dev.md
@@ -0,0 +1,97 @@
+# 主程序开发
+rubick 主程序的部分功能依赖一些原生 `C++` 扩展。如果你需要开发 `rubick` 主程序,那么你需要确认以下环境:
+
+1. 本地已经有 node 环境:`node版本 > v14`
+2. 本地已安装 node-gyp 环境
+
+关于如何安装 node 环境和 node-gy 环境,可以参考这篇文章:[安装NodeJS环境及node-gyp环境](https://www.psvmc.cn/article/2021-01-17-node-gyp.html)
+### rubick 目录介绍
+```shell
+.
+├── feature # 插件市场插件
+│ ├── README.md
+│ ├── babel.config.js
+│ ├── package-lock.json
+│ ├── package.json
+│ ├── public
+│ ├── src
+│ ├── tsconfig.json
+│ └── vue.config.js
+├── public # rubick __static 目录
+│ ├── favicon.ico
+│ ├── feature
+│ ├── icons
+│ ├── index.html
+│ ├── preload.js
+│ └── tpl
+├── src # rubick 核心源码
+│ ├── common # 一些通用的函数
+│ ├── core # 一些核心的能力,比如 app search
+│ ├── main # 主进程
+│ └── renderer # 渲染进程
+├── tpl # rubick 模板插件
+│ ├── README.md
+│ ├── babel.config.js
+│ ├── package-lock.json
+│ ├── package.json
+│ ├── public
+│ ├── src
+│ ├── tsconfig.json
+│ └── vue.config.js
+├── LICENSE # MIT 协议
+├── README.md # 英文文档
+├── README.zh-CN.md # 中文文档
+├── babel.config.js
+├── deploy-doc.sh # rubick doc 发布脚本
+├── tsconfig.json
+├── package-lock.json
+├── package.json
+└── vue.config.js
+```
+
+### 启动
+#### 1. 安装依赖
+`rubick` 启动主要涉及到3个目录:
+1. 根目录:`rubick` 核心进程
+2. feature:`rubick` 内置的插件市场插件
+3. tpl: `rubick` 内置的模板插件
+```shell
+$ npm i
+$ cd feature && npm i
+$ cd tpl && npm i
+```
+
+#### 2. 启动核心进程
+
+```shell
+$ npm run electron:serve
+```
+
+#### 3. 启动插件中心
+
+```shell
+$ cd feature && npm run serve
+```
+
+#### 4. 启动模板插件
+
+```shell
+$ cd tpl && npm run serve
+```
+
+### 编译
+```shell
+$ cd feature && npm run build
+$ cd tpl && npm run build
+$ npm run electron:build
+```
+
+### PR
+
+1. Create an issue about the features, such as new components.
+2. Fork the repo to your own account.
+3. Clone your fork.
+4. Create a new branch base on dev, if you want to add new component, the branch name should be formatted as component-[Component Name]. (e.g. component-steps) And the commit info should be formatted as [Component Name]: Info about commit.
+5. Make sure that running npm run prepublish outputs the correct files.
+6. Rebase before creating a PR to keep commit history clear. (Merge request to branch dev)
+7. Provide some description about your PR.
diff --git a/dev/index.md b/dev/index.md
new file mode 100644
index 0000000..e972832
--- /dev/null
+++ b/dev/index.md
@@ -0,0 +1,177 @@
+# 插件开发
+`rubick` 插件分为 `UI插件` 和 `系统插件` 2类。下面分别介绍这 2 类插件的区别和作用。
+1. UI 插件 :都会有 UI 界面,用于和用户交互,且需要通过关键词搜索选择进行使用,比如 `斗图` 插件,有界面展示,且需要再搜索框内搜索关键词选择后进行呼起才能使用。
+2. 系统插件:可能不会有 UI 界面,在 `rubick` 启动的时候,会注册执行系统插件。比如`超级面板` 插件,安装完成后,即可在 `rubick` 运行时随时使用,不需要任何关键词和匹配。
+## 开发 UI 插件
+### 1. 安装插件 CI 工具
+```shell
+$ npm install -g rubick-plugin-cli
+```
+
+### 2. 快速创建项目
+```shell
+$ rubick create
+```
+
+然后一路确认到底
+
+### 3. 文件说明
+#### public/package.json
+用于指定插件最基础的配置,一个最基础的配置信息如下:
+```json
+{
+ "name": "rubick-ui-plugin-demo",
+ "pluginName": "插件demo",
+ "description": "rubick ui 插件demo",
+ "author": "muwoo",
+ "main": "index.html",
+ "logo": "https://www.img/demo.png",
+ "version": "0.0.1",
+ "preload":"preload.js",
+ "homePage": "https://gitee.com/rubick-center/rubick-ui-plugin-demo/raw/master/README.md",
+ "pluginType": "ui",
+ "features": [
+ {
+ "code": "index",
+ "explain": "测试插件",
+ "cmds":[
+ "demo",
+ "测试"
+ ]
+ }
+ ]
+}
+```
+核心字段说明:
+
+* name: 插件 `npm` 包名称,
+* pluginName: 插件显示名称,用于展示给使用者
+* description: 插件描述,描述这个插件的作用
+* author: 插件作者
+* main: 入口文件,一般为 `index.html`
+* logo: 尺寸建议 200 * 200, 插件的 logo, 需要是 http/https 在线地址,不支持本地logo
+* version: 插件的版本
+* preload: 预加载脚本
+* homePage: 插件 readme raw 地址
+* pluginType: 插件类型,枚举:ui, system. 当前选 ui
+* features: 插件核心功能列表
+* features.code: 插件某个功能的识别码,可用于区分不同的功能
+* features.explain: 插件某个功能的解释
+* features.cmds: 输入框内搜索该 cmd 进入插件
+
+#### public/index.html
+插件的入口文件,用于展示插件的样式,一个最基础的 `html` 结构可以是这样:
+```html
+
+
+
+ hello Rubick
+
+
+
+
+```
+
+#### public/preload.js
+细心的同学可能已经注意到上面的 `index.html` 使用了一个全局函数 `showNotification` 那么这个函数是在哪里定义的呢?
+答案就是在 `preload.js` 里面。`preload.js` 可以为页面提供全局函数
+```js
+window.showNotification = function () {
+ rubick.showNotification('HI, rubick')
+}
+```
+rubick 更多支持 API 能力参考:[rubick 全局API](https://github.com/rubickCenter/rubick/blob/master/public/preload.js)
+
+### 测试写好的插件
+由于 `rubick` 插件是基于 `npm` 的管理方式,所以开发者调试插件,也是基于 `npm` 的软连接的方式进行调试。
+首先需要再插件 `package.json` 目录下执行:
+```shell
+$ npm link
+```
+然后将插件通过插件市场的 `开发者` 菜单进行安装,填写插件的目录即可,如果插件需要调试,可以通过右上角 ... 来打开开发者工具进行调试,页面变更直接刷新即可:
+
+![](https://pic1.zhimg.com/80/v2-c23888c450d18b9b6acc3e2c51578ce0_720w.png)
+
+本小节所有代码:[rubick-plugin-demo](https://gitee.com/rubick-center/rubick-plugin-demo)
+
+## 开发系统插件
+
+一个最基础插件的目录是这样的:
+```
+rubick-system-plugin-demo
+ |-- package.json
+ |-- index.js
+```
+### 文件说明
+#### package.json
+用于指定插件最基础的配置,一个最基础的配置信息如下:
+```json
+{
+ "name": "rubick-system-plugin-demo",
+ "pluginName": "rubick 系统插件demo",
+ "version": "0.0.0",
+ "description": "rubick 系统插件demo",
+ "entry": "index.js",
+ "logo": "https://xxxx/upload/202112/08/5bac90649c5343cabb63930b131cf8e6.png",
+ "pluginType": "system",
+ "author": "muwoo",
+ "homepage": ""
+}
+```
+核心字段说明:
+
+* name: 插件 `npm` 包名称,
+* pluginName: 插件显示名称,用于展示给使用者
+* description: 插件描述,描述这个插件的作用
+* author: 插件作者
+* entry: 入口文件,一般为 `index.js`
+* logo: 尺寸建议 200 * 200, 插件的 logo, 需要是 http/https 在线地址,不支持本地logo
+* version: 插件的版本
+* homePage: 插件 readme raw 地址
+* pluginType: 插件类型,枚举:ui, system. 当前选 system
+
+#### index.js
+插件的入口文件,用于 rubick 主进程进行加载执行:
+```js
+module.exports = () => {
+ return {
+ onReady(ctx) {
+ const { Notification } = ctx;
+ new Notification({
+ title: "测试系统插件",
+ body: "这是一个系统插件,在rubick运行时,立即被加载"
+ }).show()
+ }
+ }
+}
+```
+`index.js` 需要返回一个包含 `onReady` 生命周期的函数,该函数接受 `ctx` 对象作为参数,我们可以通过 `ctx` 使用 `electron` 主进程所有能力。
+同时也为 `ctx` 上扩展挂在了 `mainWindow` 对象。
+
+#### 调试插件
+由于 `rubick` 插件是基于 `npm` 的管理方式,所以开发者调试插件,也是基于 `npm` 的软连接的方式进行调试。
+首先需要再插件 `package.json` 目录下执行:
+```shell
+$ npm link
+```
+然后将插件通过插件市场的 `开发者` 菜单进行安装,填写插件的路径即可。由于插件依赖于主进程启动执行,所以安装完成后需要重启 rubick 后才能生效。
+
+::: danger
+系统插件目前无法直接通过 `devtools` 进行调试,后面会进行优化
+:::
+
+## 发布插件
+
+这里介绍完了如何开发插件,最后非常欢迎为 `rubick` 贡献开源插件,发布插件也非常简单,首先需要把自己的插件发布到 `npm` 仓库:
+
+```shell
+$ npm publish
+```
+
+然后再给 [rubick-database/plugins/total-plugins.json](https://gitcode.net/rubickcenter/rubick-database/-/blob/master/plugins/total-plugins.json) 仓库提个 `pull request`, 把你的 `package.json` 信息加入 `json` 文件内,等我们 merge 了您的提交,插件将会自动上架。
+
+
diff --git a/guide/index.md b/guide/index.md
new file mode 100644
index 0000000..ce93968
--- /dev/null
+++ b/guide/index.md
@@ -0,0 +1,66 @@
+# rubick 介绍
+## 什么是 rubick
+> 可能大多数人都有困惑:工作时电脑需要用到大量的辅助功能,比如:截图钉图、取色、剪贴板、划词翻译...
+> 这些辅助功能可能都是一个个单一的软件,
+> 为了使用这些功能,我们又不得不下载一大堆软件。
+> 而且这些软件可能还带很多广告、有的还收费...
+
+`rubick` 则是一款纯绿色、效率、开源的桌面端工具箱软件,支持插件化的方式来安装工作所需要的任何插件。
+
+`rubick` 的插件管理体系是基于 [npm](https://www.npmjs.com/) 体系构建的,插件的安装、卸载方式就和安装 `npm`
+包一样简单。真正做到用完即走。
+
+## 下载 rubick
+[rubick 下载安装地址](https://github.com/rubickCenter/rubick/releases)
+
+* macos intel 选择 `x64.dmg` 文件;
+* macos M1 选择 `arm.dmg` 文件;
+* windows 选择 `.exe` 文件;
+* Debian/Ubuntu选择`.deb`;
+
+安装完成后启动 `rubick` 后,按 `Alt/Option + R` 即可看到主程序:
+
+![](https://picx.zhimg.com/80/v2-b6d5bae1257bf2339790b0e0bea5990b_720w.png)
+
+## rubick 的改版历程
+如果你听说过 [uTools](https://u.tools/) ,那你可能会问:这和 `uTools` 有啥区别呢?看着很像啊!
+的确,`rubick` 的开发初衷就是参考 `uTools` 做的。
+
+事情的起因是这样的,出于安全方面的考虑有一些仅适用于公司内部的插件不能发布到插件市场,所以不能接入 `uTools`。
+但 `uTools` 式的便捷、用完即走的极简操作体验深深吸引着我。在搜寻解决方案无果,同时也发现其他的小伙伴也有同样的诉求,所以我动手做了,然后把它开源了。
+
+刚开始开源的时候,整体的交互和设计大量参考了 `uTools` 主要原因是我是一个独立开发者,没有专门的搞过 `UI` 交互设计这块,
+但当我发布 `rubick 1.0` 版本到社区时,收到了大量的质疑,说我是抄袭 `uTools` 的,当时真的是一把辛酸泪。虽说 `UI` 布局上是参考了 `uTools`
+可是代码确实我一行一行码出来的 😭。我只是想为大家提供一种社区解决方案而已~
+
+**无奈,我下定决心,有朝一日一定要和 `uTools` 在 `UI` 上做差异化!**
+
+为了这个心结,前不久,我外包了一个设计师,需要 `¥4000` 块钱来设计改版 `rubick`。
+可是作为开源项目,实在是囊中羞涩~,于是我在 `rubick` 交流群里面发起了一个众筹项目:
+
+
+
+本以为会石沉大海,但令我感到意外的是不到 1h 就筹够了 2000+ 的金额。 **这里再次致谢所有参与众筹的小伙伴们!**
+
+为了不辜负小伙伴们的期待,在国庆节前,设计师终于给到我新版的交互设计稿。
+那个国庆节我自己在家加班加点,终于赶在节后,我们发布了 `rubick v4` 版本,对整体的交互和设计做了大量改动。:tada: :tada:
+
+## 和商业软件 uTools 的一些区别
+* rubick 所有的插件是基于 `npm` 的管理方式,插件发布、安装更加简单、安全。`uTools` 则是需要走他们自己的发布审批流,需要收到打 `upx` 包
+* rubick 支持 0 成本一键内网部署,而 `uTools` 私有化部署则需要付费。
+* rubick 数据多端同步是基于 `webdav` 做的,所有数据都存储到用户自己的网盘中,没有中间人!!更加安全,而 `uTools` 是他们自己的服务器。
+* rubick 支持系统插件,这对于`todoList`、` `超级面板`、`超级剪贴板`、`取色器` 等插件来说体验是最好的`。`uTools` 不支持。
+* rubick 支持自定义主题、欢迎语、头像... `uTools` 需付费会员。
+* rubick 所有插件都是开源免费、`uTools` 部分热门插件需要二次收费
+* rubick 所有代码全部开源,可以轻松二开!
+
+## 附录
+
+所有参与众筹着的名单:
+
+https://www.yuque.com/muwoo/ifugfw/gb1zbpme8zdr65wn#P0Ph
+
+
+
+
+
diff --git a/guide/usage.md b/guide/usage.md
new file mode 100644
index 0000000..e92470c
--- /dev/null
+++ b/guide/usage.md
@@ -0,0 +1,72 @@
+# 操作指南
+`rubick` 核心架构设计图:
+
+![](https://picx.zhimg.com/80/v2-c966ebf0dbcf90bebf9f3f827faa7547_720w.png)
+## 主程序介绍(Alt+R 呼起)
+`rubick` 是一款插件化的工具箱,可以把 `rubick` 类比成微信;插件就是微信小程序。`rubick` 就是一个运行插件的容器,插件由三方开发者开发维护,不属于 `rubick` 主程序部分。
+
+* 左侧是输入框,输入内容后可以自动匹配对应插件或者系统应用 app,点击图片可以打开功能菜单-插件市场
+* 右侧 ... 是菜单项,有2个功能项
+ 1. 固定/取消固定主窗口
+ 2. 切换语言
+
+![](https://pic1.zhimg.com/80/v2-359c03a47d128e72a01a51e1d824741e_720w.png)
+
+## 插件市场
+`插件市场` 是用于存放所有插件的一个入口页面,用户可以在插件市场中挑选和安装对应的插件,可以通过点击主程序左侧 `logo` 进入插件市场。
+
+![](https://picx.zhimg.com/80/v2-46ba5fdbd0f8abfc945526548f27399d_720w.png)
+
+寻找自己需要的插件,点击安装的 `icon` 即可下载安装插件。安装完插件后,搜索插件关键词即可使用插件。
+
+![](https://pic1.zhimg.com/80/v2-5906bba20fe0a67f9e7a5a8c11341305_720w.gif)
+
+## 超级面板
+在介绍超级面板之前,先来了解一下系统插件的安装方式:系统插件安装方式和普通插件安装方式一样,在插件市场选择 `系统` 分类,寻找适合自己的系统插件安装即可。
+
+::: warning
+系统插件安装完成后,需要重启 rubick 后才能生效
+:::
+
+超级面板是 `rubick` 的系统插件。安装完成后,重启一下 `rubick` 后,可以通过 `Ctrl + W` 的方式呼起插件:
+### 选中文本
+
+
+
+### 选中文件
+
+
+
+
+## 多端数据同步
+在使用插件的过程中,可能会产生各种各样的数据。这些数据如果需要多个设备间进行同步,则可以使用该功能。
+
+在 `rubick` 内搜索`偏好设置` 进入 `账户和设置` -> `多端数据同步`;即可对 `rubick` 插件使用数据进行 `导出` 和 `导入`。
+
+![](https://pic1.zhimg.com/80/v2-ff85793741e4dff82a729d3eb3d41551_720w.png)
+
+
+## 内网部署
+::: tip
+如果把插件发布到公网 `npm` 如果不符合您的公司安全要求,`rubick` 支持内网私有源和私有插件库,如果您需要内网部署使用,可以自行配置以下规则。
+:::
+
+`rubick` 依赖 `npm` 仓库做插件管理,依赖 `gitcode` 做插件数据存储,所以如果要进行内网部署,主要需要替换这2个设置。详细设置:
+`插件市场 -> 设置 -> 内网部署设置`
+
+![image.png](https://picx.zhimg.com/80/v2-ac74e3391646dd983746e3d4596a7b5e_720w.png)
+
+#### 1. 替换 npm 源
+插件发布到私有 `npm` 源即可。
+
+#### 2. 替换 `gitcode` 源为内网 `gitlab`: database url
+
+* clone 下载 rubick 插件库:[https://gitcode.net/rubickcenter/rubick-database](https://gitcode.net/rubickcenter/rubick-database)
+* 提交仓库到私有 `gitlab` 库。
+
+替换格式:`https://gitlab.xxx.com/api/v4/projects/{projectId}/repository/files/` 。因为接口为 `gitlab openAPI`,所以需要填写仓库 `access_token`
+
+## 更多功能
+如果您还需要更多功能,欢迎来这里给我们提建议:[issues](https://github.com/rubickCenter/rubick/issues) 。
+有价值的想法我们会加入到后期的开发当中。同时也欢迎一起加入共建。
+
diff --git a/index.md b/index.md
new file mode 100644
index 0000000..661a526
--- /dev/null
+++ b/index.md
@@ -0,0 +1,34 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: "Rubick"
+ text: "开源、免费效率工具"
+ tagline: 更轻便、更简洁、更安全的插件化桌面端工具箱
+ actions:
+ - theme: brand
+ text: 了解 Rubick
+ link: /guide/index.md
+ - theme: alt
+ text: 功能介绍
+ link: /guide/usage.md
+ image:
+ src: https://picx.zhimg.com/80/v2-6a6024ea4e0b0962583f1f0ecdee1f83_720w.png
+ alt: Rubick
+
+features:
+- icon: 🪶
+ title: 更加轻量
+ details: rubick 仅仅包含插件运行所需要的API,将原本需要内置到系统的插件提炼出系统插件,本身不内置任何插件。
+- icon: ⛑
+ title: 更加安全
+ details: 支持基于 webdav 的多端数据同步,支持内网部署。rubick 从不获取任何用户数据,插件使用更加安全。
+- icon: 🚀
+ title: 更加便捷
+ details: rubick 插件全部托管在 npm 仓库,rubick 插件的安装、使用、删除就是 npm 包的安装、使用、删除
+- icon: ☁️
+ title: 更加自由
+ details: rubick 代码完全开源,你可以基于 rubick 开源代码二次定制化开发自己需要的能力。
+---
+
diff --git a/markdown-examples.md b/markdown-examples.md
new file mode 100644
index 0000000..8e55eb8
--- /dev/null
+++ b/markdown-examples.md
@@ -0,0 +1,85 @@
+# Markdown Extension Examples
+
+This page demonstrates some of the built-in markdown extensions provided by VitePress.
+
+## Syntax Highlighting
+
+VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
+
+**Input**
+
+````
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+````
+
+**Output**
+
+```js{4}
+export default {
+ data () {
+ return {
+ msg: 'Highlighted!'
+ }
+ }
+}
+```
+
+## Custom Containers
+
+**Input**
+
+```md
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+```
+
+**Output**
+
+::: info
+This is an info box.
+:::
+
+::: tip
+This is a tip.
+:::
+
+::: warning
+This is a warning.
+:::
+
+::: danger
+This is a dangerous warning.
+:::
+
+::: details
+This is a details block.
+:::
+
+## More
+
+Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..1e67e7c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,10 @@
+{
+ "scripts": {
+ "docs:dev": "vitepress dev",
+ "docs:build": "vitepress build",
+ "docs:preview": "vitepress preview"
+ },
+ "devDependencies": {
+ "vitepress": "^1.0.0-rc.24"
+ }
+}
diff --git a/sponsor/index.md b/sponsor/index.md
new file mode 100644
index 0000000..f1ebc2f
--- /dev/null
+++ b/sponsor/index.md
@@ -0,0 +1,12 @@
+# 赞助 rubick
+如果你觉得项目有帮助到您,可以请我喝杯 `Coffee`
+
+
+
+
+
+## 加入知识星球
+如果你对本项目有更多的兴趣或者想要了解 `rubick` 实现原理、常见问题解答、或者其他咨询服务,可以加入我们的付费知识星球。
+这里积累了社区场景问题的答案,你也可以把你想了解的在知识星球进行提问,我们将会第一时间解答:
+
+
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..33ab367
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,635 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@algolia/autocomplete-core@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
+ integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
+ dependencies:
+ "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
+ integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-preset-algolia@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
+ integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-shared@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
+ integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
+
+"@algolia/cache-browser-local-storage@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz#357318242fc542ffce41d6eb5b4a9b402921b0bb"
+ integrity sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==
+ dependencies:
+ "@algolia/cache-common" "4.20.0"
+
+"@algolia/cache-common@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.20.0.tgz#ec52230509fce891091ffd0d890618bcdc2fa20d"
+ integrity sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==
+
+"@algolia/cache-in-memory@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz#5f18d057bd6b3b075022df085c4f83bcca4e3e67"
+ integrity sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==
+ dependencies:
+ "@algolia/cache-common" "4.20.0"
+
+"@algolia/client-account@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.20.0.tgz#23ce0b4cffd63100fb7c1aa1c67a4494de5bd645"
+ integrity sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==
+ dependencies:
+ "@algolia/client-common" "4.20.0"
+ "@algolia/client-search" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+"@algolia/client-analytics@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.20.0.tgz#0aa6bef35d3a41ac3991b3f46fcd0bf00d276fa9"
+ integrity sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==
+ dependencies:
+ "@algolia/client-common" "4.20.0"
+ "@algolia/client-search" "4.20.0"
+ "@algolia/requester-common" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+"@algolia/client-common@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.20.0.tgz#ca60f04466515548651c4371a742fbb8971790ef"
+ integrity sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==
+ dependencies:
+ "@algolia/requester-common" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+"@algolia/client-personalization@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.20.0.tgz#ca81308e8ad0db3b27458b78355f124f29657181"
+ integrity sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==
+ dependencies:
+ "@algolia/client-common" "4.20.0"
+ "@algolia/requester-common" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+"@algolia/client-search@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.20.0.tgz#3bcce817ca6caedc835e0eaf6f580e02ee7c3e15"
+ integrity sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==
+ dependencies:
+ "@algolia/client-common" "4.20.0"
+ "@algolia/requester-common" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+"@algolia/logger-common@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.20.0.tgz#f148ddf67e5d733a06213bebf7117cb8a651ab36"
+ integrity sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==
+
+"@algolia/logger-console@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.20.0.tgz#ac443d27c4e94357f3063e675039cef0aa2de0a7"
+ integrity sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==
+ dependencies:
+ "@algolia/logger-common" "4.20.0"
+
+"@algolia/requester-browser-xhr@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz#db16d0bdef018b93b51681d3f1e134aca4f64814"
+ integrity sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==
+ dependencies:
+ "@algolia/requester-common" "4.20.0"
+
+"@algolia/requester-common@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.20.0.tgz#65694b2263a8712b4360fef18680528ffd435b5c"
+ integrity sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==
+
+"@algolia/requester-node-http@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz#b52b182b52b0b16dec4070832267d484a6b1d5bb"
+ integrity sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==
+ dependencies:
+ "@algolia/requester-common" "4.20.0"
+
+"@algolia/transporter@4.20.0":
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.20.0.tgz#7e5b24333d7cc9a926b2f6a249f87c2889b944a9"
+ integrity sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==
+ dependencies:
+ "@algolia/cache-common" "4.20.0"
+ "@algolia/logger-common" "4.20.0"
+ "@algolia/requester-common" "4.20.0"
+
+"@babel/parser@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+ integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+
+"@docsearch/css@3.5.2", "@docsearch/css@^3.5.2":
+ version "3.5.2"
+ resolved "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.2.tgz#610f47b48814ca94041df969d9fcc47b91fc5aac"
+ integrity sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==
+
+"@docsearch/js@^3.5.2":
+ version "3.5.2"
+ resolved "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.2.tgz#a11cb2e7e62890e9e940283fed6972ecf632629d"
+ integrity sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==
+ dependencies:
+ "@docsearch/react" "3.5.2"
+ preact "^10.0.0"
+
+"@docsearch/react@3.5.2":
+ version "3.5.2"
+ resolved "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.2.tgz#2e6bbee00eb67333b64906352734da6aef1232b9"
+ integrity sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==
+ dependencies:
+ "@algolia/autocomplete-core" "1.9.3"
+ "@algolia/autocomplete-preset-algolia" "1.9.3"
+ "@docsearch/css" "3.5.2"
+ algoliasearch "^4.19.1"
+
+"@esbuild/android-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
+ integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
+
+"@esbuild/android-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
+ integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
+
+"@esbuild/android-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
+ integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
+
+"@esbuild/darwin-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
+ integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
+
+"@esbuild/darwin-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
+ integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
+
+"@esbuild/freebsd-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
+ integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
+
+"@esbuild/freebsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
+ integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
+
+"@esbuild/linux-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
+ integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
+
+"@esbuild/linux-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
+ integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
+
+"@esbuild/linux-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
+ integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
+
+"@esbuild/linux-loong64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
+ integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
+
+"@esbuild/linux-mips64el@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
+ integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
+
+"@esbuild/linux-ppc64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
+ integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
+
+"@esbuild/linux-riscv64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
+ integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
+
+"@esbuild/linux-s390x@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
+ integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
+
+"@esbuild/linux-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
+ integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
+
+"@esbuild/netbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
+ integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
+
+"@esbuild/openbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
+ integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
+
+"@esbuild/sunos-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
+ integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
+
+"@esbuild/win32-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
+ integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
+
+"@esbuild/win32-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
+ integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
+
+"@esbuild/win32-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
+ integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+
+"@jridgewell/sourcemap-codec@^1.4.15":
+ version "1.4.15"
+ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@types/linkify-it@*":
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-3.0.4.tgz#def6a9bb0ce78140860602f16ace37a9997f086a"
+ integrity sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==
+
+"@types/markdown-it@^13.0.4":
+ version "13.0.5"
+ resolved "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-13.0.5.tgz#b5bba2af9ee8473409fe1571ec036417cb1e98fa"
+ integrity sha512-QhJP7hkq3FCrFNx0szMNCT/79CXfcEgUIA3jc5GBfeXqoKsk3R8JZm2wRXJ2DiyjbPE4VMFOSDemLFcUTZmHEQ==
+ dependencies:
+ "@types/linkify-it" "*"
+ "@types/mdurl" "*"
+
+"@types/mdurl@*":
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/@types/mdurl/-/mdurl-1.0.4.tgz#574bfbec51eb41ab5f444116c8555bc4347feba5"
+ integrity sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==
+
+"@types/web-bluetooth@^0.0.18":
+ version "0.0.18"
+ resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz#74bd1c8fd3a2058cb6fc76b188fcded50a83d866"
+ integrity sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==
+
+"@vitejs/plugin-vue@4.3.1":
+ version "4.3.1"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz#635cf512dd1d5c78adf9e24615696e4918cd9d88"
+ integrity sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==
+
+"@vue/compiler-core@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.7.tgz#865a5734c971686d9737d85a0c5a08de045b6162"
+ integrity sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/shared" "3.3.7"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-dom@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz#a245aa03f9bfcdb537a239bf02842072de0644c9"
+ integrity sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==
+ dependencies:
+ "@vue/compiler-core" "3.3.7"
+ "@vue/shared" "3.3.7"
+
+"@vue/compiler-sfc@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz#219d04b3013c7b15fbc536e2279e07810b731cc2"
+ integrity sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/compiler-core" "3.3.7"
+ "@vue/compiler-dom" "3.3.7"
+ "@vue/compiler-ssr" "3.3.7"
+ "@vue/reactivity-transform" "3.3.7"
+ "@vue/shared" "3.3.7"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.5"
+ postcss "^8.4.31"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-ssr@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz#eff4a70f7ceb800d60e68d208b96a030c0f1b636"
+ integrity sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==
+ dependencies:
+ "@vue/compiler-dom" "3.3.7"
+ "@vue/shared" "3.3.7"
+
+"@vue/devtools-api@^6.5.1":
+ version "6.5.1"
+ resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697"
+ integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==
+
+"@vue/reactivity-transform@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz#eb9f5110af5085079b851d162205394bc790d539"
+ integrity sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/compiler-core" "3.3.7"
+ "@vue/shared" "3.3.7"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.5"
+
+"@vue/reactivity@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.7.tgz#48b6671a45ba33039da2c0eb25ae702f924486a9"
+ integrity sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==
+ dependencies:
+ "@vue/shared" "3.3.7"
+
+"@vue/runtime-core@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.7.tgz#c1eece1c98f936dc69dd0667d11b464579b128fd"
+ integrity sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==
+ dependencies:
+ "@vue/reactivity" "3.3.7"
+ "@vue/shared" "3.3.7"
+
+"@vue/runtime-dom@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz#e7cf88cc01591fdf6e3164825554fdadc3137ffc"
+ integrity sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==
+ dependencies:
+ "@vue/runtime-core" "3.3.7"
+ "@vue/shared" "3.3.7"
+ csstype "^3.1.2"
+
+"@vue/server-renderer@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.7.tgz#0cc3dc6ad39a54693e6e8f853caa3c7bb43b0364"
+ integrity sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==
+ dependencies:
+ "@vue/compiler-ssr" "3.3.7"
+ "@vue/shared" "3.3.7"
+
+"@vue/shared@3.3.7":
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.7.tgz#0091852fe5cc4237c8440fe32f3ab6bc920ae6d9"
+ integrity sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==
+
+"@vueuse/core@10.5.0", "@vueuse/core@^10.5.0":
+ version "10.5.0"
+ resolved "https://registry.npmmirror.com/@vueuse/core/-/core-10.5.0.tgz#04d1e6d26592bb997bb755a4830ea7583c3e8612"
+ integrity sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.18"
+ "@vueuse/metadata" "10.5.0"
+ "@vueuse/shared" "10.5.0"
+ vue-demi ">=0.14.6"
+
+"@vueuse/integrations@^10.5.0":
+ version "10.5.0"
+ resolved "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-10.5.0.tgz#38f00bd5a1cd0160645f0c75efd5d9579061e3d6"
+ integrity sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==
+ dependencies:
+ "@vueuse/core" "10.5.0"
+ "@vueuse/shared" "10.5.0"
+ vue-demi ">=0.14.6"
+
+"@vueuse/metadata@10.5.0":
+ version "10.5.0"
+ resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.5.0.tgz#7501a88cf5cbf7a515a03f0b8bbe3cecf30cad11"
+ integrity sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==
+
+"@vueuse/shared@10.5.0":
+ version "10.5.0"
+ resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.5.0.tgz#b3ac8c190a5dae41db5e1b60fe304a9b4247393c"
+ integrity sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==
+ dependencies:
+ vue-demi ">=0.14.6"
+
+algoliasearch@^4.19.1:
+ version "4.20.0"
+ resolved "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.20.0.tgz#700c2cb66e14f8a288460036c7b2a554d0d93cf4"
+ integrity sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==
+ dependencies:
+ "@algolia/cache-browser-local-storage" "4.20.0"
+ "@algolia/cache-common" "4.20.0"
+ "@algolia/cache-in-memory" "4.20.0"
+ "@algolia/client-account" "4.20.0"
+ "@algolia/client-analytics" "4.20.0"
+ "@algolia/client-common" "4.20.0"
+ "@algolia/client-personalization" "4.20.0"
+ "@algolia/client-search" "4.20.0"
+ "@algolia/logger-common" "4.20.0"
+ "@algolia/logger-console" "4.20.0"
+ "@algolia/requester-browser-xhr" "4.20.0"
+ "@algolia/requester-common" "4.20.0"
+ "@algolia/requester-node-http" "4.20.0"
+ "@algolia/transporter" "4.20.0"
+
+ansi-sequence-parser@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf"
+ integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==
+
+csstype@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
+esbuild@^0.18.10:
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
+ integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.18.20"
+ "@esbuild/android-arm64" "0.18.20"
+ "@esbuild/android-x64" "0.18.20"
+ "@esbuild/darwin-arm64" "0.18.20"
+ "@esbuild/darwin-x64" "0.18.20"
+ "@esbuild/freebsd-arm64" "0.18.20"
+ "@esbuild/freebsd-x64" "0.18.20"
+ "@esbuild/linux-arm" "0.18.20"
+ "@esbuild/linux-arm64" "0.18.20"
+ "@esbuild/linux-ia32" "0.18.20"
+ "@esbuild/linux-loong64" "0.18.20"
+ "@esbuild/linux-mips64el" "0.18.20"
+ "@esbuild/linux-ppc64" "0.18.20"
+ "@esbuild/linux-riscv64" "0.18.20"
+ "@esbuild/linux-s390x" "0.18.20"
+ "@esbuild/linux-x64" "0.18.20"
+ "@esbuild/netbsd-x64" "0.18.20"
+ "@esbuild/openbsd-x64" "0.18.20"
+ "@esbuild/sunos-x64" "0.18.20"
+ "@esbuild/win32-arm64" "0.18.20"
+ "@esbuild/win32-ia32" "0.18.20"
+ "@esbuild/win32-x64" "0.18.20"
+
+estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+focus-trap@^7.5.4:
+ version "7.5.4"
+ resolved "https://registry.npmmirror.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2"
+ integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==
+ dependencies:
+ tabbable "^6.2.0"
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+jsonc-parser@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
+ integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
+
+magic-string@^0.30.5:
+ version "0.30.5"
+ resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
+ integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
+mark.js@8.11.1:
+ version "8.11.1"
+ resolved "https://registry.npmmirror.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
+ integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
+
+minisearch@^6.1.0:
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/minisearch/-/minisearch-6.2.0.tgz#310b50508551f22e10815f5baedeeeded03a6b5d"
+ integrity sha512-BECkorDF1TY2rGKt9XHdSeP9TP29yUbrAaCh/C03wpyf1vx3uYcP/+8XlMcpTkgoU0rBVnHMAOaP83Rc9Tm+TQ==
+
+nanoid@^3.3.6:
+ version "3.3.6"
+ resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+ integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+postcss@^8.4.27, postcss@^8.4.31:
+ version "8.4.31"
+ resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+preact@^10.0.0:
+ version "10.18.1"
+ resolved "https://registry.npmmirror.com/preact/-/preact-10.18.1.tgz#3b84bb305f0b05f4ad5784b981d15fcec4e105da"
+ integrity sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==
+
+rollup@^3.27.1:
+ version "3.29.4"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
+ integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+shiki@^0.14.5:
+ version "0.14.5"
+ resolved "https://registry.npmmirror.com/shiki/-/shiki-0.14.5.tgz#375dd214e57eccb04f0daf35a32aa615861deb93"
+ integrity sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==
+ dependencies:
+ ansi-sequence-parser "^1.1.0"
+ jsonc-parser "^3.2.0"
+ vscode-oniguruma "^1.7.0"
+ vscode-textmate "^8.0.0"
+
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+tabbable@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
+vite@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.npmmirror.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26"
+ integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==
+ dependencies:
+ esbuild "^0.18.10"
+ postcss "^8.4.27"
+ rollup "^3.27.1"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+vitepress@^1.0.0-rc.24:
+ version "1.0.0-rc.24"
+ resolved "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-rc.24.tgz#517b44d10e0cd3773f5e2f9799c2bde8e60f0505"
+ integrity sha512-RpnL8cnOGwiRlBbrYQUm9sYkJbtyOt/wYXk2diTcokY4yvks/5lq9LuSt+MURWB6ZqwpSNHvTmxgaSfLoG0/OA==
+ dependencies:
+ "@docsearch/css" "^3.5.2"
+ "@docsearch/js" "^3.5.2"
+ "@types/markdown-it" "^13.0.4"
+ "@vitejs/plugin-vue" "4.3.1"
+ "@vue/devtools-api" "^6.5.1"
+ "@vueuse/core" "^10.5.0"
+ "@vueuse/integrations" "^10.5.0"
+ focus-trap "^7.5.4"
+ mark.js "8.11.1"
+ minisearch "^6.1.0"
+ shiki "^0.14.5"
+ vite "^4.5.0"
+ vue "^3.3.6"
+
+vscode-oniguruma@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
+ integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
+
+vscode-textmate@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
+ integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
+
+vue-demi@>=0.14.6:
+ version "0.14.6"
+ resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
+ integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
+
+vue@^3.3.6:
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/vue/-/vue-3.3.7.tgz#972a218682443a3819d121261b2bff914417f4f0"
+ integrity sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==
+ dependencies:
+ "@vue/compiler-dom" "3.3.7"
+ "@vue/compiler-sfc" "3.3.7"
+ "@vue/runtime-dom" "3.3.7"
+ "@vue/server-renderer" "3.3.7"
+ "@vue/shared" "3.3.7"