diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
new file mode 100644
index 00000000..ced8d175
--- /dev/null
+++ b/.github/workflows/docs.yaml
@@ -0,0 +1,58 @@
+name: updatePage
+
+on:
+ push:
+ paths:
+ - '**.md'
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ deployments: write
+ name: Deploy to Cloudflare Pages
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ id: pnpm-install
+ with:
+ version: 7
+ run_install: false
+
+ - name: Get pnpm store directory
+ id: pnpm-cache
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
+
+ - uses: actions/cache@v3
+ name: Setup pnpm cache
+ with:
+ path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+
+ - name: Install dependencies
+ run: pnpm install --no-frozen-lockfile
+
+ - name: Build
+ run: pnpm run docs:build
+
+ - name: Publish
+ uses: cloudflare/pages-action@1
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ projectName: 'comic-read-docs'
+ directory: 'docs/.vitepress/dist'
+ branch: main
diff --git a/.github/workflows/pages-deployment.yaml b/.github/workflows/pages-deployment.yaml
index e19ab9b2..6ec7886b 100644
--- a/.github/workflows/pages-deployment.yaml
+++ b/.github/workflows/pages-deployment.yaml
@@ -43,13 +43,13 @@ jobs:
run: pnpm install --no-frozen-lockfile
- name: Build
- run: pnpm run build:pwa
+ run: pnpm run pwa:build
- name: Publish
uses: cloudflare/pages-action@1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- projectName: 'comic-read'
- directory: 'src/pwa/dist'
+ projectName: "comic-read"
+ directory: "src/pwa/dist"
branch: main
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7ea55143..f02f9d64 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,6 +18,6 @@ jobs:
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
- body_path: docs/LatestChange.md
+ body_path: docs/.other/LatestChange.md
files: |
ComicRead.user.js
diff --git a/.gitignore b/.gitignore
index 7117ba57..ae173301 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
dist
dev-dist
node_modules
+cache
diff --git a/README.md b/README.md
index 6c34d938..9876ab49 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
+
@@ -12,7 +12,7 @@
这是一个因为目前大部分漫画站都不支持双页显示,所以每次遇到 **漫画中的跨页大图被分割成两页** 就很不爽的人为了有更好的漫画阅读体验而写的油猴脚本,为主流漫画站增加了**双页阅读模式**和各种优化体验的增强功能。
-脚本会在网页右下角弹出用于 **进入阅读模式** 的悬浮按钮,其上的快捷按钮用于切换站点增强功能的开启与否。默认会开启**自动进入阅读模式**的功能,也可在这里关闭。脚本没有全局设置,所有修改都只会在当前站点生效保存。~~反正平时也就只上那几个站点~~
+脚本会在网页右下角弹出用于 **进入阅读模式** 的悬浮按钮,其上的快捷按钮用于切换站点增强功能的开启与否。默认会开启**自动进入阅读模式**的功能,也可在这里关闭。脚本没有全局设置,所有修改都只会在当前站点生效保存。~~反正平时也就只上那几个站点。~~
对于支持站点以外的网站,脚本也提供了「[简易阅读模式](#简易阅读模式)」,除了得手动跳转上/下一话外,和支持站点的使用体验没有区别。
@@ -51,7 +51,7 @@
如果你在用双页模式阅读漫画时完全没有违和感,也不追求漫画左右页位置正确,那不需要了解也完全没事。反倒是在了解后可能会因为意识到违和感的存在,并在阅读少部分漫画时因为不管怎么调整都觉得不对而浑身难受。
-但如果你追求接近翻阅实体书的体验、希望了解页面填充功能,并且**不是强迫症敏感体质**,那还是非常推荐点进「[详情](https://github.com/hymbz/ComicReadScript/blob/master/docs/PageFill.md)」了解一下如何判断页面的左右页位置是否正确,并顺带看下该功能的详细介绍。
+但如果你追求接近翻阅实体书的体验,并且**不是强迫症敏感体质**,那还是非常推荐了解一下《[如何判断漫画左右页位置是否正确?](https://comic-read-docs.pages.dev/判断左右页位置.html)》
## 卷轴模式
@@ -73,8 +73,8 @@
如果需要翻页的话,可以安装:
-1. 能够自动识别大部分网页的「[东方永页机](https://greasyfork.org/zh-CN/scripts/438684)」(为了正确判断图片顺序不能启用 contentVisibility 功能)
-2. 目前已经手动支持了超多图站、漫画网站的「[圖片全載](https://sleazyfork.org/zh-CN/scripts/463305)」
+1. 能够**自动识别**大部分网页的「[东方永页机](https://greasyfork.org/zh-CN/scripts/438684)」(注意不能启用 contentVisibility 功能)
+2. 手动支持了**超多**图站、漫画网站的「[圖片全載](https://sleazyfork.org/zh-CN/scripts/463305)」
3. 等其他带有自动翻页、聚图功能的脚本
用其他脚本将多页图片聚合到一起作为图源。期间不需要手动操作,脚本会自动触发翻页脚本加载至最后一页。
@@ -93,11 +93,11 @@
也正因如此,更推荐大家使用本地部署的项目,不抢服务器资源也不需要排队。**一键翻译全部图片**的功能开关只会在使用本地版时可用,脚本的维护重心也是本地版,无法保证 Cotrans 相关 bug 的修复。具体部署方法可参考 [我的笔记](https://github.com/hymbz/ComicReadScript/blob/master/docs/manga-image-translator.md)。
-脚本默认本地服务器的 url 是 `http://127.0.0.1:5003`,如果部署的 url 与这个不同,请通过 `自定义服务器 URL` 功能修改。
+脚本默认本地服务器的 url 是 ,如果你点开这个链接后没见到 manga-image-translator,就得在`自定义服务器 URL`设置项中输入正确的 url,否则`翻译服务`的菜单项将始终为空。
Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](https://greasyfork.org/zh-CN/scripts/437569)」,支持 Pixiv、Twitter、Misskey、Calckey,欢迎有相关需求的人安装。
-
+
> 如果需要翻译本地漫画,可以使用「[ComicRead PWA](https://comic-read.pages.dev/)」
@@ -148,13 +148,13 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h
除了右下角的悬浮按钮外,将鼠标移动到帖子一楼的顶端也能看到一个新增的「漫画阅读」按钮
-
+
### 记录阅读进度
这个功能是用来快速回到帖子上次阅读进度的。开启后,每个帖子后面都会跟着一个跳转至上次阅读位置的TAG,点击即可跳转至上次阅读进度(阅读进度不仅包括了页数也包括了楼层数),后面跟着的数字是上次阅读后新增的回复数。
-
+
### 关闭快捷导航的跳转
@@ -170,7 +170,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h
## ehentai
-
+
除悬浮按钮外,也会在右侧边栏会增加一个「Load comic」按钮,功能和悬浮按钮一样。
diff --git a/docs/CHANGELOG.md b/docs/.other/CHANGELOG.md
similarity index 100%
rename from docs/CHANGELOG.md
rename to docs/.other/CHANGELOG.md
diff --git a/docs/Dev.md b/docs/.other/Dev.md
similarity index 100%
rename from docs/Dev.md
rename to docs/.other/Dev.md
diff --git a/docs/LatestChange.md b/docs/.other/LatestChange.md
similarity index 100%
rename from docs/LatestChange.md
rename to docs/.other/LatestChange.md
diff --git a/docs/dmzj.md b/docs/.other/dmzj.md
similarity index 77%
rename from docs/dmzj.md
rename to docs/.other/dmzj.md
index bf5c7b56..fab83c36 100644
--- a/docs/dmzj.md
+++ b/docs/.other/dmzj.md
@@ -5,8 +5,7 @@
2. 目录页被删,但PC端漫画页还在。那就可以通过谷歌搜索找到进入
3. 目录页被删,但手机端漫画页还在,但提示漫画不存在。
-
- 那就只能通过 api 获取数据了,但因为 api 需要漫画 id,而 dmzj 的手机端 url 有两种,只有「https://m.dmzj.com/info/45163.html」格式的 url 才能拿到 id 正常调用接口获取数据。在以前可以通过 搜索找到,但现在已经上不去了。如果能搜到 id 的话,还是能通过手动构建 url 来进入
+ 那就只能通过 api 获取数据了,但因为 api 需要漫画 id,而 dmzj 的手机端 url 有两种,只有「https://m.dmzj.com/info/45163.html」格式的 url 才能拿到 id 正常调用接口获取数据。在以前可以通过 搜索找到,但现在已经上不去了。如果能搜到 id 的话,还是能通过手动构建 url 来进入
> 5 级用户可以看所有隐藏漫画(被买的有版权的漫画除外),经抓包测试只需要在指定 api 加上?uid=(5 级用户的 uid) 即可获取章节列表和图片列表,无需直接登录,cookie 也不用
diff --git a/docs/other.md b/docs/.other/other.md
similarity index 100%
rename from docs/other.md
rename to docs/.other/other.md
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
new file mode 100644
index 00000000..99eaed82
--- /dev/null
+++ b/docs/.vitepress/config.mts
@@ -0,0 +1,47 @@
+import { defineConfig } from 'vitepress';
+
+// https://vitepress.dev/reference/site-config
+
+export default defineConfig({
+ lang: 'zh-CN',
+ title: 'ComicRead Script',
+ description: 'A VitePress Site',
+ head: [['link', { rel: 'icon', href: '/favicon.ico' }]],
+ themeConfig: {
+ nav: [
+ {
+ text: 'Greasy Fork',
+ link: 'https://sleazyfork.org/zh-CN/scripts/374903',
+ },
+ { text: 'PWA', link: 'https://comic-read.pages.dev' },
+ ],
+
+ outline: { level: 'deep' },
+
+ sidebar: [
+ { text: '简介', link: '/index' },
+ { text: '设置项说明', link: '/设置项说明' },
+ { text: '判断漫画左右页位置是否正确', link: '/判断左右页位置' },
+
+ {
+ text: '功能',
+ items: [
+ { text: '页面填充', link: '/功能/页面填充' },
+ { text: '卷轴模式', link: '/功能/卷轴模式' },
+ { text: 'PWA', link: '/功能/PWA' },
+ ],
+ },
+
+ { text: '最简单的本地部署翻译服务流程', link: '/本地部署翻译' },
+ { text: '无法支持', link: '/无法支持' },
+ ],
+
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/hymbz/ComicReadScript' },
+ ],
+
+ docFooter: { prev: false, next: false },
+
+ externalLinkIcon: true,
+ },
+});
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
new file mode 100644
index 00000000..18829737
--- /dev/null
+++ b/docs/.vitepress/theme/custom.css
@@ -0,0 +1,10 @@
+.vp-doc h2:first-child {
+ margin-top: 0;
+ padding-top: 0;
+ border-top: unset;
+}
+
+a > img {
+ display: inline;
+ margin: 0 .1em;
+}
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
new file mode 100644
index 00000000..42fe9a93
--- /dev/null
+++ b/docs/.vitepress/theme/index.js
@@ -0,0 +1,4 @@
+import DefaultTheme from 'vitepress/theme'
+import './custom.css'
+
+export default DefaultTheme
diff --git a/docs/PageFill.md b/docs/PageFill.md
deleted file mode 100644
index f65d769b..00000000
--- a/docs/PageFill.md
+++ /dev/null
@@ -1,94 +0,0 @@
-## 如何判断页面的左右页位置是否正确
-
-按照可靠度排序如下
-
-1. 页数:如果页数没被汉化组处理掉的话,直接将漫画页数调整到 **左奇右偶** 即可,不过一般漫画的页数都会被处理掉
-2. 中缝:如果漫画的图源和汉化组都没有对漫画四周的白边进行剪裁的话,在漫画顺序正确的情况下中间会有明显的空白区域,也就是书的中缝
-3. 页边:有些漫画会在页边放有注释、广告之类的东西,这个只会出现在左右两边,是不会放在中缝上的
-4. 画格:因为中缝的存在,如果画格有开口,那这个开口在大部分情况下都是对着页边的
-
-> 
-> *by - [柚原もけ] 安达与岛村 02*
-
-5. 经验:一些杂志——比如百合姬——上刊载的漫画会在第一页的右页放剧情梗概和角色介绍,如果汉化组有汉化这页,那这页本身就算是填充页了,不需要开「页面填充」,但如果之后汉化组不放这页了,那就肯定得开启了。还有类似的情况是,有些汉化组会将漫画第一页放上自己汉化组的 logo 作为第一页,无遮挡的原第一页放到第二页去。
-
-> 
-> *by - [岩見樹代子] 因为今天女友不在 02*
-
-6. 感觉:一些作者在创作时就会考虑到翻页这一动作,会特意调整页面的位置来利用翻页制造悬念、冲击或转折,让读者在翻开下一页时产生惊喜或震撼,也会用来切换场景或时间。所以漫画看多了就能在左右顺序出错时感觉到违和感,在看的时候感觉好像这页应该在翻页后再出现会更好,不过这个因为是纯凭感觉所以并不能百分百肯定。
-
-> 
-> 
-> *by - [金子ある] 二人同居与三块蛋糕*
-
-## 页面填充功能介绍
-
-因为日漫一般奇数页在左,偶数页在右,所以正常只要在第一张图片前加一个填充页,使其被顶到左页上即可使左右页的位置正确。
-
-
- 举例:
-
-
-
- 图1 |
- 填充页 |
-
-
- 图3 |
- 图2 |
-
-
-
-
-但实际总会有意外——汉化组删掉了单行本中间的空白页、将跨页图分成了左图全图右图三张图、作者在第一页的右页写了序所以也被放了进来等——导致左右页顺序乱掉,为此有了「页面填充」功能,通过手动增删填充页来将左右页顺序调整正确。
-
-> 
-> 以这个示例动图为例,就需要在第一页用一个填充页来对齐跨页彩图,但在跨页彩图后因为删掉了上面第四点提到的百合姬简介页,所以在看完跨页后得再切换一下「页面填充」调整回来
-
-如果图片流中没有出现跨页大图,那「页面填充」的影响范围就是整个图片流;如果出现了一张跨页大图,以跨页大图为分割点,「页面填充」的影响范围将被分为两个。以此类推,图片流中出现的跨页大图将整个图片流分割为多块独立的流。通过侧边栏的页面填充按钮可以查看和修改当前流的「页面填充」的状态。
-
-
- 举例:
-
-
-
- 图2 |
- 图1 |
-
-
- 图4 |
- 图3 |
-
-
- 图5(跨页图) |
-
-
- 图7 |
- 图6 |
-
-
-
- 在第一页和第二页切换「页面填充」只会在第一页增加填充页,下面跨页之后的左右顺序不受影响
-
-
-
- 图1 |
- 填充页 |
-
-
- 图3 |
- 图2 |
-
-
- 空白页 |
- 图4 |
-
-
- 图5(跨页图) |
-
-
- 图7 |
- 图6 |
-
-
-
diff --git a/docs/README-out.md b/docs/index.md
similarity index 89%
rename from docs/README-out.md
rename to docs/index.md
index 040e5478..26c55d4c 100644
--- a/docs/README-out.md
+++ b/docs/index.md
@@ -1,4 +1,4 @@
-
+
@@ -12,7 +12,7 @@
这是一个因为目前大部分漫画站都不支持双页显示,所以每次遇到 **漫画中的跨页大图被分割成两页** 就很不爽的人为了有更好的漫画阅读体验而写的油猴脚本,为主流漫画站增加了**双页阅读模式**和各种优化体验的增强功能。
-脚本会在网页右下角弹出用于 **进入阅读模式** 的悬浮按钮,其上的快捷按钮用于切换站点增强功能的开启与否。默认会开启**自动进入阅读模式**的功能,也可在这里关闭。脚本没有全局设置,所有修改都只会在当前站点生效保存。~~反正平时也就只上那几个站点~~
+脚本会在网页右下角弹出用于 **进入阅读模式** 的悬浮按钮,其上的快捷按钮用于切换站点增强功能的开启与否。默认会开启**自动进入阅读模式**的功能,也可在这里关闭。脚本没有全局设置,所有修改都只会在当前站点生效保存。~~反正平时也就只上那几个站点。~~
对于支持站点以外的网站,脚本也提供了「[简易阅读模式](#简易阅读模式)」,除了得手动跳转上/下一话外,和支持站点的使用体验没有区别。
@@ -51,7 +51,7 @@
如果你在用双页模式阅读漫画时完全没有违和感,也不追求漫画左右页位置正确,那不需要了解也完全没事。反倒是在了解后可能会因为意识到违和感的存在,并在阅读少部分漫画时因为不管怎么调整都觉得不对而浑身难受。
-但如果你追求接近翻阅实体书的体验、希望了解页面填充功能,并且**不是强迫症敏感体质**,那还是非常推荐点进「[详情](https://github.com/hymbz/ComicReadScript/blob/master/docs/PageFill.md)」了解一下如何判断页面的左右页位置是否正确,并顺带看下该功能的详细介绍。
+但如果你追求接近翻阅实体书的体验,并且**不是强迫症敏感体质**,那还是非常推荐了解一下「[如何判断漫画左右页位置是否正确?](https://comic-read-docs.pages.dev/判断左右页位置.html)」
## 卷轴模式
@@ -73,8 +73,8 @@
如果需要翻页的话,可以安装:
-1. 能够自动识别大部分网页的「[东方永页机](https://greasyfork.org/zh-CN/scripts/438684)」(为了正确判断图片顺序不能启用 contentVisibility 功能)
-2. 目前已经手动支持了超多图站、漫画网站的「[圖片全載](https://sleazyfork.org/zh-CN/scripts/463305)」
+1. 能够**自动识别**大部分网页的「[东方永页机](https://greasyfork.org/zh-CN/scripts/438684)」(注意不能启用 contentVisibility 功能)
+2. 手动支持了**超多**图站、漫画网站的「[圖片全載](https://sleazyfork.org/zh-CN/scripts/463305)」
3. 等其他带有自动翻页、聚图功能的脚本
用其他脚本将多页图片聚合到一起作为图源。期间不需要手动操作,脚本会自动触发翻页脚本加载至最后一页。
@@ -93,11 +93,11 @@
也正因如此,更推荐大家使用本地部署的项目,不抢服务器资源也不需要排队。**一键翻译全部图片**的功能开关只会在使用本地版时可用,脚本的维护重心也是本地版,无法保证 Cotrans 相关 bug 的修复。具体部署方法可参考 [我的笔记](https://github.com/hymbz/ComicReadScript/blob/master/docs/manga-image-translator.md)。
-脚本默认本地服务器的 url 是 `http://127.0.0.1:5003`,如果部署的 url 与这个不同,请通过 `自定义服务器 URL` 功能修改。
+脚本默认本地服务器的 url 是 ,如果你点开这个链接后没见到 manga-image-translator,就得在`自定义服务器 URL`设置项中输入正确的 url,否则`翻译服务`的菜单项将始终为空。
Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](https://greasyfork.org/zh-CN/scripts/437569)」,支持 Pixiv、Twitter、Misskey、Calckey,欢迎有相关需求的人安装。
-
+
> 如果需要翻译本地漫画,可以使用「[ComicRead PWA](https://comic-read.pages.dev/)」
@@ -148,13 +148,13 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h
除了右下角的悬浮按钮外,将鼠标移动到帖子一楼的顶端也能看到一个新增的「漫画阅读」按钮
-
+
### 记录阅读进度
这个功能是用来快速回到帖子上次阅读进度的。开启后,每个帖子后面都会跟着一个跳转至上次阅读位置的TAG,点击即可跳转至上次阅读进度(阅读进度不仅包括了页数也包括了楼层数),后面跟着的数字是上次阅读后新增的回复数。
-
+
### 关闭快捷导航的跳转
@@ -170,7 +170,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h
## ehentai
-
+
除悬浮按钮外,也会在右侧边栏会增加一个「Load comic」按钮,功能和悬浮按钮一样。
diff --git "a/docs/images/ehentai\344\276\213\345\233\276.png" "b/docs/public/ehentai\344\276\213\345\233\276.png"
similarity index 100%
rename from "docs/images/ehentai\344\276\213\345\233\276.png"
rename to "docs/public/ehentai\344\276\213\345\233\276.png"
diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico
new file mode 100644
index 00000000..b5816093
Binary files /dev/null and b/docs/public/favicon.ico differ
diff --git "a/docs/images/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256\344\276\213\345\233\276.png" "b/docs/public/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256\344\276\213\345\233\276.png"
similarity index 100%
rename from "docs/images/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256\344\276\213\345\233\276.png"
rename to "docs/public/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256\344\276\213\345\233\276.png"
diff --git "a/docs/images/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg" "b/docs/public/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg"
similarity index 100%
rename from "docs/images/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg"
rename to "docs/public/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg"
diff --git "a/docs/images/\347\231\276\345\220\210\344\274\232\350\256\260\345\275\225\351\230\205\350\257\273\350\277\233\345\272\246\345\212\237\350\203\275.jpg" "b/docs/public/\347\231\276\345\220\210\344\274\232\350\256\260\345\275\225\351\230\205\350\257\273\350\277\233\345\272\246\345\212\237\350\203\275.jpg"
similarity index 100%
rename from "docs/images/\347\231\276\345\220\210\344\274\232\350\256\260\345\275\225\351\230\205\350\257\273\350\277\233\345\272\246\345\212\237\350\203\275.jpg"
rename to "docs/public/\347\231\276\345\220\210\344\274\232\350\256\260\345\275\225\351\230\205\350\257\273\350\277\233\345\272\246\345\212\237\350\203\275.jpg"
diff --git "a/docs/images/\347\231\276\345\220\210\345\247\254\347\256\200\344\273\213\351\241\265\344\276\213\345\233\276.png" "b/docs/public/\347\231\276\345\220\210\345\247\254\347\256\200\344\273\213\351\241\265\344\276\213\345\233\276.png"
similarity index 100%
rename from "docs/images/\347\231\276\345\220\210\345\247\254\347\256\200\344\273\213\351\241\265\344\276\213\345\233\276.png"
rename to "docs/public/\347\231\276\345\220\210\345\247\254\347\256\200\344\273\213\351\241\265\344\276\213\345\233\276.png"
diff --git "a/docs/images/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp" "b/docs/public/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp"
similarity index 100%
rename from "docs/images/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp"
rename to "docs/public/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp"
diff --git "a/docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png" "b/docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png"
similarity index 100%
rename from "docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png"
rename to "docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png"
diff --git "a/docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png" "b/docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png"
similarity index 100%
rename from "docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png"
rename to "docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png"
diff --git "a/docs/images/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp" "b/docs/public/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp"
similarity index 100%
rename from "docs/images/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp"
rename to "docs/public/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp"
diff --git "a/docs/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256.md" "b/docs/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256.md"
new file mode 100644
index 00000000..7c943fb6
--- /dev/null
+++ "b/docs/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256.md"
@@ -0,0 +1,28 @@
+# 如何判断漫画左右页位置是否正确?
+
+按照可靠度排序如下
+
+1. 页数:如果页数没被汉化组处理掉的话,直接将漫画页数调整到 **左奇右偶** 即可,不过一般漫画的页数都会被处理掉
+2. 中缝:如果漫画的图源和汉化组都没有对漫画四周的白边进行剪裁的话,在漫画顺序正确的情况下中间会有明显的空白区域,也就是书的中缝
+3. 页边:有些漫画会在页边放有注释、广告之类的东西,这个只会出现在左右两边,是不会放在中缝上的
+4. 画格:因为中缝的存在,如果画格有开口,那这个开口在大部分情况下都是对着页边的
+
+::: info 举例
+
+*[柚原もけ] 安达与岛村 02*
+:::
+
+5. 经验:一些杂志——比如百合姬——上刊载的漫画会在第一页的右页放剧情梗概和角色介绍,如果汉化组有汉化这页,那这页本身就算是填充页了,不需要开「页面填充」,但如果之后汉化组不放这页了,那就肯定得开启了。还有类似的情况是,有些汉化组会将漫画第一页放上自己汉化组的 logo 作为第一页,无遮挡的原第一页放到第二页去。
+
+::: info 举例
+
+*[岩見樹代子] 因为今天女友不在 02*
+:::
+
+6. 感觉:一些作者在创作时就会考虑到翻页这一动作,会特意调整页面的位置来利用翻页制造悬念、冲击或转折,让读者在翻开下一页时产生惊喜或震撼,也会用来切换场景或时间。所以漫画看多了就能在左右顺序出错时感觉到违和感,在看的时候感觉好像这页应该在翻页后再出现会更好,不过这个因为是纯凭感觉所以并不能百分百肯定。
+
+::: info 举例
+
+
+*[金子ある] 二人同居与三块蛋糕*
+:::
diff --git "a/docs/\345\212\237\350\203\275/PWA.md" "b/docs/\345\212\237\350\203\275/PWA.md"
new file mode 100644
index 00000000..1238be87
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275/PWA.md"
@@ -0,0 +1,5 @@
+### 快速下载
+
+除了在页面里直接粘贴、点击输入 URL 按钮手动输入外,还可以通过直接跳转至 `https://comic-read.pages.dev/?url=<压缩包链接>` 来直接开始下载。
+
+可以搭配浏览器的右键搜索功能来减少操作。
diff --git "a/docs/\345\212\237\350\203\275/\345\215\267\350\275\264\346\250\241\345\274\217.md" "b/docs/\345\212\237\350\203\275/\345\215\267\350\275\264\346\250\241\345\274\217.md"
new file mode 100644
index 00000000..b7b47941
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275/\345\215\267\350\275\264\346\250\241\345\274\217.md"
@@ -0,0 +1,14 @@
+因为我很少用卷轴模式,所以对此并没有太多相关优化,只希望尽可能在使用体验上和正常浏览网页一致。
+
+需要注意的几点是:
+
+- `方向键`、`空格`、`PageUp/PageDown` 等原生用于滚动的按键,即使绑定了快捷键在卷轴模式下也不会生效,而是会正常的触发滚动操作
+- `向上/向下翻页`的快捷键在卷轴模式下将表现为:滚动页面高度的 80% 距离
+- 因为[设计问题](../无法支持.md#卷轴模式下兼容-vimium-的滚动)无法支持其他的滚动插件
+
+## 设置项说明
+
+切换到卷轴模式后设置里会多出几个卷轴模式专属的设置项:
+
+- `卷轴图片缩放`:这个缩放类似于浏览器的页面缩放,将同时缩放所有图片,和放大功能的缩放无关
+- `快捷滚动`:正常使用滚动条时需要鼠标点击按下后才会触发滚动,开启此设置后只要鼠标移上滚动条就会立刻触发
diff --git "a/docs/\345\212\237\350\203\275/\351\241\265\351\235\242\345\241\253\345\205\205.md" "b/docs/\345\212\237\350\203\275/\351\241\265\351\235\242\345\241\253\345\205\205.md"
new file mode 100644
index 00000000..b5e72695
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275/\351\241\265\351\235\242\345\241\253\345\205\205.md"
@@ -0,0 +1,77 @@
+## 功能介绍
+
+因为日漫一般奇数页在左,偶数页在右,所以正常只要在第一张图片前加一个填充页,使其被顶到左页上即可使左右页的位置正确。
+
+::: info 举例
+
+
+ 图1 |
+ 填充页 |
+
+
+ 图3 |
+ 图2 |
+
+
+:::
+
+但实际总会有意外——汉化组删掉了单行本中间的空白页、将跨页图分成了左图全图右图三张图、作者在第一页的右页写了序所以也被放了进来等——导致左右页顺序乱掉,为此有了「页面填充」功能,通过手动增删填充页来将左右页顺序调整正确。
+
+::: info 举例
+
+
+以这个示例动图为例,就需要在第一页用一个填充页来对齐跨页彩图,但在跨页彩图后因为删掉了百合姬简介页,所以在看完跨页后得再切换一下「页面填充」调整回来
+:::
+
+如果图片流中没有出现跨页大图,那「页面填充」的影响范围就是整个图片流。如果出现了一张跨页大图,以跨页大图为分割点,「页面填充」的影响范围将被分为两个。以此类推,图片流中出现的跨页大图将整个图片流分割为多块独立的流。通过侧边栏的页面填充按钮可以查看和修改当前流的「页面填充」的状态。
+
+::: info 举例
+
+
+ 图2 |
+ 图1 |
+
+
+ 图4 |
+ 图3 |
+
+
+ 图5(跨页图) |
+
+
+ 图7 |
+ 图6 |
+
+
+
+ 在第一页和第二页切换「页面填充」只会在第一页增加填充页,下面跨页之后的左右顺序不受影响
+
+
+
+ 图1 |
+ 填充页 |
+
+
+ 图3 |
+ 图2 |
+
+
+ 空白页 |
+ 图4 |
+
+
+ 图5(跨页图) |
+
+
+ 图7 |
+ 图6 |
+
+
+:::
+
+## 自动调整
+
+为了保证左右页位置正确,目前脚本有以下机制:
+
+1. 默认开启首页填充
+1. 因为在除结尾外的位置出现了跨页图的话,那张跨页图大概率是页序的「正确答案」,所以如果这张跨页导致了上面一页缺页,就说明在这之前的填充有误,应该据此调整之前的填充(排除结尾是防止被结尾汉化组图误导)
diff --git "a/docs/\346\227\240\346\263\225\346\224\257\346\214\201.md" "b/docs/\346\227\240\346\263\225\346\224\257\346\214\201.md"
new file mode 100644
index 00000000..d55c5e03
--- /dev/null
+++ "b/docs/\346\227\240\346\263\225\346\224\257\346\214\201.md"
@@ -0,0 +1,9 @@
+### 卷轴模式下兼容 `vimium` 的滚动
+
+`vimium` 的滚动分两种,一种是直接滚动整个网页,一种是通过 `document.activeElement` 滚动当前激活的元素。
+
+脚本为了减小对原网页的影响+简易模式设计问题,只能使用弹窗的形式,所以前者 PASS。
+
+而为了避免被原网页的样式影响,以及被 `Dark Reader` 侵入修改掉样式,只能将所有元素放到关闭的 ShadowDom 里。这就又 PASS 掉了后者。
+
+因此,实在是没办法兼容 `vimium`,因为相同的原因,应该也不支持其他滚动插件。并且因为相关快捷键被占用的缘故,不装 `vimium` 可以正常使用 w/s 键触发翻页快捷键的滚动,装了以后就只能按了个寂寞。虽然我自己对此也非常难受但目前也找不到办法,只能硬忍着了。
diff --git a/docs/manga-image-translator.md "b/docs/\346\234\254\345\234\260\351\203\250\347\275\262\347\277\273\350\257\221.md"
similarity index 100%
rename from docs/manga-image-translator.md
rename to "docs/\346\234\254\345\234\260\351\203\250\347\275\262\347\277\273\350\257\221.md"
diff --git "a/docs/\350\256\276\347\275\256\351\241\271\350\257\264\346\230\216.md" "b/docs/\350\256\276\347\275\256\351\241\271\350\257\264\346\230\216.md"
new file mode 100644
index 00000000..1d0d4786
--- /dev/null
+++ "b/docs/\350\256\276\347\275\256\351\241\271\350\257\264\346\230\216.md"
@@ -0,0 +1,46 @@
+## 翻页
+
+### 显示图片加载状态
+
+进度条上会通过色块来显示对应图片的不同状态
+
+- ■ - 加载中
+- ■ - 等待加载
+- ■ - 加载或翻译出错
+- ■ - 空图占位中
+- ■ - 等待翻译
+- ■ - 翻译完成且正在显示
+
+### 位置
+
+除了左侧因为会和工具栏冲突外,滚动条可以通过设置移动到上下右侧。
+
+默认会根据以下条件自动选择位置
+
+1. 如果当前漫画中有多张连续的跨页宽图,则移动到底部。避免被漫画图片干扰看不清
+1. 如果当前显示窗口过小(比如在手机上使用),则移动到顶部。避免在翻页时误触
+1. 除此以外,默认位于右侧
+
+## 显示
+
+### 禁止图片自动放大
+
+脚本默认会将小于显示窗口的图片缩放到能填满窗口,但有些图片在缩放后可能反倒会变模糊,因此有了这个设置用于禁止此行为。
+
+## 翻译
+
+### 翻译服务
+
+因为使用本地部署的 manga-image-translator 时,根据部署配置不同可选翻译服务也不同,所以在选择`翻译服务器`为`本地部署`时,脚本需要发起请求来获取可用的翻译服务。
+
+如果`翻译服务`菜单项为空,可以先再点开几次菜单,每次点开都会再次发起一个新请求。如果还不行就说明脚本无法连接到部署的 manga-image-translator,一般都是因为`自定义服务器 URL`没配置好导致的。
+
+## 其他
+
+### 预加载页数
+
+预加载页数设为`x`,脚本会默认按照如下优先级加载指定页上的图片:
+
+1. 当前显示页
+1. 当前显示页后`x`页
+1. 当前显示页前`x ÷ 2`页
diff --git a/metaHeader.ts b/metaHeader.ts
index 3fb5e95e..4dd9dc41 100644
--- a/metaHeader.ts
+++ b/metaHeader.ts
@@ -60,12 +60,12 @@ export const updateReadme = () => {
);
if (newMd !== readmeMd) fs.writeFileSync(readmePath, newMd);
- // 生成 README-out.md 文件,把相对链接改成 jsdelivr cdn 的链接,方便在其他站点显示图片
- const outMdPath = resolve(__dirname, 'docs/README-out.md');
+ // 生成一个用于 greasyfork 介绍的 md 文件,把相对链接改成文档外链,以便正常显示图片
+ const outMdPath = resolve(__dirname, 'docs/index.md');
const outMd = fs.readFileSync(outMdPath, 'utf8');
const newOutMd = newMd.replaceAll(
- /(?<=]\()\/.+\.(md)?.+\)/g,
- 'https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript$&',
+ '/docs/public/',
+ 'https://comic-read-docs.pages.dev/',
);
if (newOutMd !== outMd) fs.writeFileSync(outMdPath, newOutMd);
};
diff --git a/package.json b/package.json
index 5807b2de..e0714fb6 100644
--- a/package.json
+++ b/package.json
@@ -13,9 +13,12 @@
"test": "vitest",
"check": "tsc -noEmit && eslint .",
"pwa-assets-generator": "pwa-assets-generator",
- "dev:pwa": "vite serve src/pwa",
- "build:pwa": "vite build src/pwa",
- "preview:pwa": "vite preview src/pwa"
+ "pwa:dev": "vite serve src/pwa",
+ "pwa:build": "vite build src/pwa",
+ "pwa:preview": "vite preview src/pwa",
+ "docs:dev": "vitepress dev docs",
+ "docs:build": "vitepress build docs",
+ "docs:preview": "vitepress preview docs"
},
"dependencies": {
"@material-design-icons/svg": "^0.14.13",
@@ -93,6 +96,7 @@
"vite": "^5.0.10",
"vite-plugin-pwa": "^0.17.4",
"vite-plugin-solid": "^2.8.0",
+ "vitepress": "1.0.0-rc.34",
"vitest": "^1.1.1"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ccec979b..d566587f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -226,6 +226,9 @@ devDependencies:
vite-plugin-solid:
specifier: ^2.8.0
version: 2.8.0(solid-js@1.8.7)(vite@5.0.10)
+ vitepress:
+ specifier: 1.0.0-rc.34
+ version: 1.0.0-rc.34(@algolia/client-search@4.22.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3)
vitest:
specifier: ^1.1.1
version: 1.1.1(jsdom@23.0.1)
@@ -237,6 +240,140 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0):
+ resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
+ dependencies:
+ '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
+ '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+ - search-insights
+ dev: true
+
+ /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0):
+ resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
+ peerDependencies:
+ search-insights: '>= 1 < 3'
+ dependencies:
+ '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+ search-insights: 2.13.0
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+ dev: true
+
+ /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0):
+ resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+ dependencies:
+ '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+ '@algolia/client-search': 4.22.0
+ algoliasearch: 4.22.0
+ dev: true
+
+ /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0):
+ resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+ dependencies:
+ '@algolia/client-search': 4.22.0
+ algoliasearch: 4.22.0
+ dev: true
+
+ /@algolia/cache-browser-local-storage@4.22.0:
+ resolution: {integrity: sha512-uZ1uZMLDZb4qODLfTSNHxSi4fH9RdrQf7DXEzW01dS8XK7QFtFh29N5NGKa9S+Yudf1vUMIF+/RiL4i/J0pWlQ==}
+ dependencies:
+ '@algolia/cache-common': 4.22.0
+ dev: true
+
+ /@algolia/cache-common@4.22.0:
+ resolution: {integrity: sha512-TPwUMlIGPN16eW67qamNQUmxNiGHg/WBqWcrOoCddhqNTqGDPVqmgfaM85LPbt24t3r1z0zEz/tdsmuq3Q6oaA==}
+ dev: true
+
+ /@algolia/cache-in-memory@4.22.0:
+ resolution: {integrity: sha512-kf4Cio9NpPjzp1+uXQgL4jsMDeck7MP89BYThSvXSjf2A6qV/0KeqQf90TL2ECS02ovLOBXkk98P7qVarM+zGA==}
+ dependencies:
+ '@algolia/cache-common': 4.22.0
+ dev: true
+
+ /@algolia/client-account@4.22.0:
+ resolution: {integrity: sha512-Bjb5UXpWmJT+yGWiqAJL0prkENyEZTBzdC+N1vBuHjwIJcjLMjPB6j1hNBRbT12Lmwi55uzqeMIKS69w+0aPzA==}
+ dependencies:
+ '@algolia/client-common': 4.22.0
+ '@algolia/client-search': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
+ /@algolia/client-analytics@4.22.0:
+ resolution: {integrity: sha512-os2K+kHUcwwRa4ArFl5p/3YbF9lN3TLOPkbXXXxOvDpqFh62n9IRZuzfxpHxMPKAQS3Et1s0BkKavnNP02E9Hg==}
+ dependencies:
+ '@algolia/client-common': 4.22.0
+ '@algolia/client-search': 4.22.0
+ '@algolia/requester-common': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
+ /@algolia/client-common@4.22.0:
+ resolution: {integrity: sha512-BlbkF4qXVWuwTmYxVWvqtatCR3lzXwxx628p1wj1Q7QP2+LsTmGt1DiUYRuy9jG7iMsnlExby6kRMOOlbhv2Ag==}
+ dependencies:
+ '@algolia/requester-common': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
+ /@algolia/client-personalization@4.22.0:
+ resolution: {integrity: sha512-pEOftCxeBdG5pL97WngOBi9w5Vxr5KCV2j2D+xMVZH8MuU/JX7CglDSDDb0ffQWYqcUN+40Ry+xtXEYaGXTGow==}
+ dependencies:
+ '@algolia/client-common': 4.22.0
+ '@algolia/requester-common': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
+ /@algolia/client-search@4.22.0:
+ resolution: {integrity: sha512-bn4qQiIdRPBGCwsNuuqB8rdHhGKKWIij9OqidM1UkQxnSG8yzxHdb7CujM30pvp5EnV7jTqDZRbxacbjYVW20Q==}
+ dependencies:
+ '@algolia/client-common': 4.22.0
+ '@algolia/requester-common': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
+ /@algolia/logger-common@4.22.0:
+ resolution: {integrity: sha512-HMUQTID0ucxNCXs5d1eBJ5q/HuKg8rFVE/vOiLaM4Abfeq1YnTtGV3+rFEhOPWhRQxNDd+YHa4q864IMc0zHpQ==}
+ dev: true
+
+ /@algolia/logger-console@4.22.0:
+ resolution: {integrity: sha512-7JKb6hgcY64H7CRm3u6DRAiiEVXMvCJV5gRE672QFOUgDxo4aiDpfU61g6Uzy8NKjlEzHMmgG4e2fklELmPXhQ==}
+ dependencies:
+ '@algolia/logger-common': 4.22.0
+ dev: true
+
+ /@algolia/requester-browser-xhr@4.22.0:
+ resolution: {integrity: sha512-BHfv1h7P9/SyvcDJDaRuIwDu2yrDLlXlYmjvaLZTtPw6Ok/ZVhBR55JqW832XN/Fsl6k3LjdkYHHR7xnsa5Wvg==}
+ dependencies:
+ '@algolia/requester-common': 4.22.0
+ dev: true
+
+ /@algolia/requester-common@4.22.0:
+ resolution: {integrity: sha512-Y9cEH/cKjIIZgzvI1aI0ARdtR/xRrOR13g5psCxkdhpgRN0Vcorx+zePhmAa4jdQNqexpxtkUdcKYugBzMZJgQ==}
+ dev: true
+
+ /@algolia/requester-node-http@4.22.0:
+ resolution: {integrity: sha512-8xHoGpxVhz3u2MYIieHIB6MsnX+vfd5PS4REgglejJ6lPigftRhTdBCToe6zbwq4p0anZXjjPDvNWMlgK2+xYA==}
+ dependencies:
+ '@algolia/requester-common': 4.22.0
+ dev: true
+
+ /@algolia/transporter@4.22.0:
+ resolution: {integrity: sha512-ieO1k8x2o77GNvOoC+vAkFKppydQSVfbjM3YrSjLmgywiBejPTvU1R1nEvG59JIIUvtSLrZsLGPkd6vL14zopA==}
+ dependencies:
+ '@algolia/cache-common': 4.22.0
+ '@algolia/logger-common': 4.22.0
+ '@algolia/requester-common': 4.22.0
+ dev: true
+
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
@@ -1575,6 +1712,49 @@ packages:
postcss-selector-parser: 6.0.13
dev: true
+ /@docsearch/css@3.5.2:
+ resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==}
+ dev: true
+
+ /@docsearch/js@3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0):
+ resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==}
+ dependencies:
+ '@docsearch/react': 3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0)
+ preact: 10.19.3
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/react'
+ - react
+ - react-dom
+ - search-insights
+ dev: true
+
+ /@docsearch/react@3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0):
+ resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==}
+ peerDependencies:
+ '@types/react': '>= 16.8.0 < 19.0.0'
+ react: '>= 16.8.0 < 19.0.0'
+ react-dom: '>= 16.8.0 < 19.0.0'
+ search-insights: '>= 1 < 3'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ search-insights:
+ optional: true
+ dependencies:
+ '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
+ '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+ '@docsearch/css': 3.5.2
+ algoliasearch: 4.22.0
+ search-insights: 2.13.0
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ dev: true
+
/@es-joy/jsdoccomment@0.41.0:
resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==}
engines: {node: '>=16'}
@@ -2554,6 +2734,21 @@ packages:
resolution: {integrity: sha512-NivcQAJU1mcnnZjfxcx0WMJ++u5BmiDFEfhx5/JM9wojDq3nnW+7T+4onmx0BUxh+3F28aOvUCF/VyUFhSPGLQ==}
dev: true
+ /@types/linkify-it@3.0.5:
+ resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==}
+ dev: true
+
+ /@types/markdown-it@13.0.7:
+ resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==}
+ dependencies:
+ '@types/linkify-it': 3.0.5
+ '@types/mdurl': 1.0.5
+ dev: true
+
+ /@types/mdurl@1.0.5:
+ resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==}
+ dev: true
+
/@types/minimatch@5.1.2:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
dev: true
@@ -2616,6 +2811,10 @@ packages:
resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==}
dev: true
+ /@types/web-bluetooth@0.0.20:
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+ dev: true
+
/@types/wicg-file-system-access@2023.10.4:
resolution: {integrity: sha512-ewOj7hWhsUTS2+aY6zY+7BwlgqGBj5ZXxKuHt3TAWpIJH0bDW/6bO1N1SdUDAzV8r0Nc+/ZtpAEETYTwrehBMw==}
dev: true
@@ -2821,6 +3020,17 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
+ /@vitejs/plugin-vue@5.0.2(vite@5.0.10)(vue@3.4.3):
+ resolution: {integrity: sha512-kEjJHrLb5ePBvjD0SPZwJlw1QTRcjjCA9sB5VyfonoXVBxTS7TMnqL6EkLt1Eu61RDeiuZ/WN9Hf6PxXhPI2uA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 5.0.10
+ vue: 3.4.3(typescript@5.3.3)
+ dev: true
+
/@vitest/expect@1.1.1:
resolution: {integrity: sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==}
dependencies:
@@ -2859,6 +3069,158 @@ packages:
pretty-format: 29.7.0
dev: true
+ /@vue/compiler-core@3.4.3:
+ resolution: {integrity: sha512-u8jzgFg0EDtSrb/hG53Wwh1bAOQFtc1ZCegBpA/glyvTlgHl+tq13o1zvRfLbegYUw/E4mSTGOiCnAJ9SJ+lsg==}
+ dependencies:
+ '@babel/parser': 7.23.6
+ '@vue/shared': 3.4.3
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-dom@3.4.3:
+ resolution: {integrity: sha512-oGF1E9/htI6JWj/lTJgr6UgxNCtNHbM6xKVreBWeZL9QhRGABRVoWGAzxmtBfSOd+w0Zi5BY0Es/tlJrN6WgEg==}
+ dependencies:
+ '@vue/compiler-core': 3.4.3
+ '@vue/shared': 3.4.3
+ dev: true
+
+ /@vue/compiler-sfc@3.4.3:
+ resolution: {integrity: sha512-NuJqb5is9I4uzv316VRUDYgIlPZCG8D+ARt5P4t5UDShIHKL25J3TGZAUryY/Aiy0DsY7srJnZL5ryB6DD63Zw==}
+ dependencies:
+ '@babel/parser': 7.23.6
+ '@vue/compiler-core': 3.4.3
+ '@vue/compiler-dom': 3.4.3
+ '@vue/compiler-ssr': 3.4.3
+ '@vue/shared': 3.4.3
+ estree-walker: 2.0.2
+ magic-string: 0.30.5
+ postcss: 8.4.32
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-ssr@3.4.3:
+ resolution: {integrity: sha512-wnYQtMBkeFSxgSSQbYGQeXPhQacQiog2c6AlvMldQH6DB+gSXK/0F6DVXAJfEiuBSgBhUc8dwrrG5JQcqwalsA==}
+ dependencies:
+ '@vue/compiler-dom': 3.4.3
+ '@vue/shared': 3.4.3
+ dev: true
+
+ /@vue/devtools-api@6.5.1:
+ resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
+ dev: true
+
+ /@vue/reactivity@3.4.3:
+ resolution: {integrity: sha512-q5f9HLDU+5aBKizXHAx0w4whkIANs1Muiq9R5YXm0HtorSlflqv9u/ohaMxuuhHWCji4xqpQ1eL04WvmAmGnFg==}
+ dependencies:
+ '@vue/shared': 3.4.3
+ dev: true
+
+ /@vue/runtime-core@3.4.3:
+ resolution: {integrity: sha512-C1r6QhB1qY7D591RCSFhMULyzL9CuyrGc+3PpB0h7dU4Qqw6GNyo4BNFjHZVvsWncrUlKX3DIKg0Y7rNNr06NQ==}
+ dependencies:
+ '@vue/reactivity': 3.4.3
+ '@vue/shared': 3.4.3
+ dev: true
+
+ /@vue/runtime-dom@3.4.3:
+ resolution: {integrity: sha512-wrsprg7An5Ec+EhPngWdPuzkp0BEUxAKaQtN9dPU/iZctPyD9aaXmVtehPJerdQxQale6gEnhpnfywNw3zOv2A==}
+ dependencies:
+ '@vue/runtime-core': 3.4.3
+ '@vue/shared': 3.4.3
+ csstype: 3.1.3
+ dev: true
+
+ /@vue/server-renderer@3.4.3(vue@3.4.3):
+ resolution: {integrity: sha512-BUxt8oVGMKKsqSkM1uU3d3Houyfy4WAc2SpSQRebNd+XJGATVkW/rO129jkyL+kpB/2VRKzE63zwf5RtJ3XuZw==}
+ peerDependencies:
+ vue: 3.4.3
+ dependencies:
+ '@vue/compiler-ssr': 3.4.3
+ '@vue/shared': 3.4.3
+ vue: 3.4.3(typescript@5.3.3)
+ dev: true
+
+ /@vue/shared@3.4.3:
+ resolution: {integrity: sha512-rIwlkkP1n4uKrRzivAKPZIEkHiuwY5mmhMJ2nZKCBLz8lTUlE73rQh4n1OnnMurXt1vcUNyH4ZPfdh8QweTjpQ==}
+ dev: true
+
+ /@vueuse/core@10.7.1(vue@3.4.3):
+ resolution: {integrity: sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.7.1
+ '@vueuse/shared': 10.7.1(vue@3.4.3)
+ vue-demi: 0.14.6(vue@3.4.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: true
+
+ /@vueuse/integrations@10.7.1(focus-trap@7.5.4)(vue@3.4.3):
+ resolution: {integrity: sha512-cKo5LEeKVHdBRBtMTOrDPdR0YNtrmN9IBfdcnY2P3m5LHVrsD0xiHUtAH1WKjHQRIErZG6rJUa6GA4tWZt89Og==}
+ peerDependencies:
+ async-validator: '*'
+ axios: '*'
+ change-case: '*'
+ drauu: '*'
+ focus-trap: '*'
+ fuse.js: '*'
+ idb-keyval: '*'
+ jwt-decode: '*'
+ nprogress: '*'
+ qrcode: '*'
+ sortablejs: '*'
+ universal-cookie: '*'
+ peerDependenciesMeta:
+ async-validator:
+ optional: true
+ axios:
+ optional: true
+ change-case:
+ optional: true
+ drauu:
+ optional: true
+ focus-trap:
+ optional: true
+ fuse.js:
+ optional: true
+ idb-keyval:
+ optional: true
+ jwt-decode:
+ optional: true
+ nprogress:
+ optional: true
+ qrcode:
+ optional: true
+ sortablejs:
+ optional: true
+ universal-cookie:
+ optional: true
+ dependencies:
+ '@vueuse/core': 10.7.1(vue@3.4.3)
+ '@vueuse/shared': 10.7.1(vue@3.4.3)
+ focus-trap: 7.5.4
+ vue-demi: 0.14.6(vue@3.4.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: true
+
+ /@vueuse/metadata@10.7.1:
+ resolution: {integrity: sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==}
+ dev: true
+
+ /@vueuse/shared@10.7.1(vue@3.4.3):
+ resolution: {integrity: sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==}
+ dependencies:
+ vue-demi: 0.14.6(vue@3.4.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: true
+
/@wessberg/stringutil@1.0.19:
resolution: {integrity: sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==}
engines: {node: '>=8.0.0'}
@@ -2922,6 +3284,25 @@ packages:
uri-js: 4.4.1
dev: true
+ /algoliasearch@4.22.0:
+ resolution: {integrity: sha512-gfceltjkwh7PxXwtkS8KVvdfK+TSNQAWUeNSxf4dA29qW5tf2EGwa8jkJujlT9jLm17cixMVoGNc+GJFO1Mxhg==}
+ dependencies:
+ '@algolia/cache-browser-local-storage': 4.22.0
+ '@algolia/cache-common': 4.22.0
+ '@algolia/cache-in-memory': 4.22.0
+ '@algolia/client-account': 4.22.0
+ '@algolia/client-analytics': 4.22.0
+ '@algolia/client-common': 4.22.0
+ '@algolia/client-personalization': 4.22.0
+ '@algolia/client-search': 4.22.0
+ '@algolia/logger-common': 4.22.0
+ '@algolia/logger-console': 4.22.0
+ '@algolia/requester-browser-xhr': 4.22.0
+ '@algolia/requester-common': 4.22.0
+ '@algolia/requester-node-http': 4.22.0
+ '@algolia/transporter': 4.22.0
+ dev: true
+
/ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
dependencies:
@@ -4101,6 +4482,10 @@ packages:
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
/dargs@8.1.0:
resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
engines: {node: '>=12'}
@@ -5028,6 +5413,12 @@ packages:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
dev: true
+ /focus-trap@7.5.4:
+ resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}
+ dependencies:
+ tabbable: 6.2.0
+ dev: true
+
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
@@ -6367,6 +6758,10 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
+ /mark.js@8.11.1:
+ resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+ dev: true
+
/marked@11.1.1:
resolution: {integrity: sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==}
engines: {node: '>= 18'}
@@ -6484,6 +6879,10 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
dev: true
+ /minisearch@6.3.0:
+ resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==}
+ dev: true
+
/mlly@1.4.2:
resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
dependencies:
@@ -6493,6 +6892,11 @@ packages:
ufo: 1.3.2
dev: true
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ engines: {node: '>=10'}
+ dev: true
+
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
@@ -7936,6 +8340,10 @@ packages:
source-map-js: 1.0.2
dev: true
+ /preact@10.19.3:
+ resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==}
+ dev: true
+
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -8514,6 +8922,10 @@ packages:
xmlchars: 2.2.0
dev: true
+ /search-insights@2.13.0:
+ resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==}
+ dev: true
+
/section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
@@ -8593,6 +9005,22 @@ packages:
rechoir: 0.6.2
dev: true
+ /shikiji-core@0.9.17:
+ resolution: {integrity: sha512-r1FWTXk6SO2aYqfWgcsJ11MuVQ1ymPSdXzJjK7q8EXuyqu8yc2N5qrQy5+BL6gTVOaF4yLjbxFjF+KTRM1Sp8Q==}
+ dev: true
+
+ /shikiji-transformers@0.9.17:
+ resolution: {integrity: sha512-2CCG9qSLS6Bn/jbeUTEuvC6YSuP8gm8VyX5VjmCvDKyCPGhlLJbH1k/kg9wfRt7cJqpYjhdMDgT5rkdYrOZnsA==}
+ dependencies:
+ shikiji: 0.9.17
+ dev: true
+
+ /shikiji@0.9.17:
+ resolution: {integrity: sha512-0z/1NfkhBkm3ijrfFeHg3G9yDNuHhXdAGbQm7tRxj4WQ5z2y0XDbnagFyKyuV2ebCTS1Mwy1I3n0Fzcc/4xdmw==}
+ dependencies:
+ shikiji-core: 0.9.17
+ dev: true
+
/showdown@2.1.0:
resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==}
hasBin: true
@@ -9152,6 +9580,10 @@ packages:
tslib: 2.6.2
dev: true
+ /tabbable@6.2.0:
+ resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+ dev: true
+
/table@6.8.1:
resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
engines: {node: '>=10.0.0'}
@@ -9677,6 +10109,63 @@ packages:
vite: 5.0.10
dev: true
+ /vitepress@1.0.0-rc.34(@algolia/client-search@4.22.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-TUbTiSdAZFni2XlHlpx61KikgkQ5uG4Wtmw2R0SXhIOG6qGqzDJczAFjkMc4i45I9c3KyatwOYe8oEfCnzVYwQ==}
+ hasBin: true
+ peerDependencies:
+ markdown-it-mathjax3: ^4.3.2
+ postcss: ^8.4.32
+ peerDependenciesMeta:
+ markdown-it-mathjax3:
+ optional: true
+ postcss:
+ optional: true
+ dependencies:
+ '@docsearch/css': 3.5.2
+ '@docsearch/js': 3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0)
+ '@types/markdown-it': 13.0.7
+ '@vitejs/plugin-vue': 5.0.2(vite@5.0.10)(vue@3.4.3)
+ '@vue/devtools-api': 6.5.1
+ '@vueuse/core': 10.7.1(vue@3.4.3)
+ '@vueuse/integrations': 10.7.1(focus-trap@7.5.4)(vue@3.4.3)
+ focus-trap: 7.5.4
+ mark.js: 8.11.1
+ minisearch: 6.3.0
+ mrmime: 2.0.0
+ postcss: 8.4.32
+ shikiji: 0.9.17
+ shikiji-core: 0.9.17
+ shikiji-transformers: 0.9.17
+ vite: 5.0.10
+ vue: 3.4.3(typescript@5.3.3)
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - '@types/node'
+ - '@types/react'
+ - '@vue/composition-api'
+ - async-validator
+ - axios
+ - change-case
+ - drauu
+ - fuse.js
+ - idb-keyval
+ - jwt-decode
+ - less
+ - lightningcss
+ - nprogress
+ - qrcode
+ - react
+ - react-dom
+ - sass
+ - search-insights
+ - sortablejs
+ - stylus
+ - sugarss
+ - terser
+ - typescript
+ - universal-cookie
+ dev: true
+
/vitest@1.1.1(jsdom@23.0.1):
resolution: {integrity: sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -9734,6 +10223,37 @@ packages:
- terser
dev: true
+ /vue-demi@0.14.6(vue@3.4.3):
+ resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.3(typescript@5.3.3)
+ dev: true
+
+ /vue@3.4.3(typescript@5.3.3):
+ resolution: {integrity: sha512-GjN+culMAGv/mUbkIv8zMKItno8npcj5gWlXkSxf1SPTQf8eJ4A+YfHIvQFyL1IfuJcMl3soA7SmN1fRxbf/wA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/compiler-dom': 3.4.3
+ '@vue/compiler-sfc': 3.4.3
+ '@vue/runtime-dom': 3.4.3
+ '@vue/server-renderer': 3.4.3(vue@3.4.3)
+ '@vue/shared': 3.4.3
+ typescript: 5.3.3
+ dev: true
+
/w3c-xmlserializer@5.0.0:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
diff --git a/release.mjs b/release.mjs
index c7a8d9ac..766d7356 100644
--- a/release.mjs
+++ b/release.mjs
@@ -41,6 +41,7 @@ const exec = (...commands) => {
// 测试
exec('pnpm test run');
+ exec('pnpm check');
// 使用 release-it 更新版本,并获得更新日志
const { changelog } = await release({
@@ -54,11 +55,11 @@ const exec = (...commands) => {
plugins: {
'@release-it/conventional-changelog': {
preset: 'conventionalcommits',
- infile: 'docs/CHANGELOG.md',
+ infile: 'docs/.other/CHANGELOG.md',
},
},
});
// 将最新的更改日志写入 LatestChange.md
- shell.echo(changelog).to('docs/LatestChange.md');
+ shell.echo(changelog).to('docs/.other/LatestChange.md');
})();
diff --git a/rollup.config.ts b/rollup.config.ts
index e1e5b7fc..0fa6a20d 100644
--- a/rollup.config.ts
+++ b/rollup.config.ts
@@ -30,7 +30,7 @@ const { meta, createMetaHeader } = getMetaData(isDevMode);
const latestChangeHtml = await (() => {
const md = fs
- .readFileSync(resolve(__dirname, `docs/LatestChange.md`))
+ .readFileSync(resolve(__dirname, `docs/.other/LatestChange.md`))
.toString();
const newMd = md