From 999dd016661bedbcb760516e027116b31217a1af Mon Sep 17 00:00:00 2001 From: hymbz Date: Thu, 4 Jan 2024 02:00:55 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20:memo:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docs.yaml | 58 ++ .github/workflows/pages-deployment.yaml | 6 +- .github/workflows/release.yml | 2 +- .gitignore | 1 + README.md | 20 +- docs/{ => .other}/CHANGELOG.md | 0 docs/{ => .other}/Dev.md | 0 docs/{ => .other}/LatestChange.md | 0 docs/{ => .other}/dmzj.md | 3 +- docs/{ => .other}/other.md | 0 docs/.vitepress/config.mts | 47 ++ docs/.vitepress/theme/custom.css | 10 + docs/.vitepress/theme/index.js | 4 + docs/PageFill.md | 94 ---- docs/{README-out.md => index.md} | 20 +- .../ehentai\344\276\213\345\233\276.png" | Bin docs/public/favicon.ico | Bin 0 -> 15086 bytes ...5\347\275\256\344\276\213\345\233\276.png" | Bin ...0\344\274\232\345\205\245\345\217\243.jpg" | Bin ...3\345\272\246\345\212\237\350\203\275.jpg" | Bin ...3\351\241\265\344\276\213\345\233\276.png" | Bin ...\350\203\275\347\244\272\344\276\213.webp" | Bin ...\351\225\234\344\276\213\345\233\2761.png" | Bin ...\351\225\234\344\276\213\345\233\2762.png" | Bin ...\345\205\205\347\244\272\344\276\213.webp" | Bin ...63\351\241\265\344\275\215\347\275\256.md" | 28 + "docs/\345\212\237\350\203\275/PWA.md" | 5 + ...67\350\275\264\346\250\241\345\274\217.md" | 14 + ...65\351\235\242\345\241\253\345\205\205.md" | 77 +++ ...40\346\263\225\346\224\257\346\214\201.md" | 9 + ...50\347\275\262\347\277\273\350\257\221.md" | 0 ...56\351\241\271\350\257\264\346\230\216.md" | 46 ++ metaHeader.ts | 8 +- package.json | 10 +- pnpm-lock.yaml | 520 ++++++++++++++++++ release.mjs | 5 +- rollup.config.ts | 2 +- 37 files changed, 859 insertions(+), 130 deletions(-) create mode 100644 .github/workflows/docs.yaml rename docs/{ => .other}/CHANGELOG.md (100%) rename docs/{ => .other}/Dev.md (100%) rename docs/{ => .other}/LatestChange.md (100%) rename docs/{ => .other}/dmzj.md (77%) rename docs/{ => .other}/other.md (100%) create mode 100644 docs/.vitepress/config.mts create mode 100644 docs/.vitepress/theme/custom.css create mode 100644 docs/.vitepress/theme/index.js delete mode 100644 docs/PageFill.md rename docs/{README-out.md => index.md} (89%) rename "docs/images/ehentai\344\276\213\345\233\276.png" => "docs/public/ehentai\344\276\213\345\233\276.png" (100%) create mode 100644 docs/public/favicon.ico rename "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" => "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" (100%) rename "docs/images/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg" => "docs/public/\347\231\276\345\220\210\344\274\232\345\205\245\345\217\243.jpg" (100%) rename "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" => "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" (100%) rename "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" => "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" (100%) rename "docs/images/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp" => "docs/public/\347\277\273\350\257\221\345\212\237\350\203\275\347\244\272\344\276\213.webp" (100%) rename "docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png" => "docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2761.png" (100%) rename "docs/images/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png" => "docs/public/\347\277\273\351\241\265\345\210\206\351\225\234\344\276\213\345\233\2762.png" (100%) rename "docs/images/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp" => "docs/public/\351\241\265\351\235\242\345\241\253\345\205\205\347\244\272\344\276\213.webp" (100%) create mode 100644 "docs/\345\210\244\346\226\255\345\267\246\345\217\263\351\241\265\344\275\215\347\275\256.md" create mode 100644 "docs/\345\212\237\350\203\275/PWA.md" create mode 100644 "docs/\345\212\237\350\203\275/\345\215\267\350\275\264\346\250\241\345\274\217.md" create mode 100644 "docs/\345\212\237\350\203\275/\351\241\265\351\235\242\345\241\253\345\205\205.md" create mode 100644 "docs/\346\227\240\346\263\225\346\224\257\346\214\201.md" rename docs/manga-image-translator.md => "docs/\346\234\254\345\234\260\351\203\250\347\275\262\347\277\273\350\257\221.md" (100%) create mode 100644 "docs/\350\256\276\347\275\256\351\241\271\350\257\264\346\230\216.md" 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 @@ -![页面填充示例](/docs/images/页面填充示例.webp) +![页面填充示例](/docs/public/页面填充示例.webp)

@@ -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,欢迎有相关需求的人安装。 -![翻译功能示例](/docs/images/翻译功能示例.webp) +![翻译功能示例](/docs/public/翻译功能示例.webp) > 如果需要翻译本地漫画,可以使用「[ComicRead PWA](https://comic-read.pages.dev/)」 @@ -148,13 +148,13 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h 除了右下角的悬浮按钮外,将鼠标移动到帖子一楼的顶端也能看到一个新增的「漫画阅读」按钮 -![百合会入口](/docs/images/百合会入口.jpg) +![百合会入口](/docs/public/百合会入口.jpg) ### 记录阅读进度 这个功能是用来快速回到帖子上次阅读进度的。开启后,每个帖子后面都会跟着一个跳转至上次阅读位置的TAG,点击即可跳转至上次阅读进度(阅读进度不仅包括了页数也包括了楼层数),后面跟着的数字是上次阅读后新增的回复数。 -![百合会记录阅读进度功能](/docs/images/百合会记录阅读进度功能.jpg) +![百合会记录阅读进度功能](/docs/public/百合会记录阅读进度功能.jpg) ### 关闭快捷导航的跳转 @@ -170,7 +170,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h ## ehentai -![ehentai例图](/docs/images/ehentai例图.png) +![ehentai例图](/docs/public/ehentai例图.png) 除悬浮按钮外,也会在右侧边栏会增加一个「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. 画格:因为中缝的存在,如果画格有开口,那这个开口在大部分情况下都是对着页边的 - -> ![判断左右页位置例图](./images/判断左右页位置例图.png) -> *by - [柚原もけ] 安达与岛村 02* - -5. 经验:一些杂志——比如百合姬——上刊载的漫画会在第一页的右页放剧情梗概和角色介绍,如果汉化组有汉化这页,那这页本身就算是填充页了,不需要开「页面填充」,但如果之后汉化组不放这页了,那就肯定得开启了。还有类似的情况是,有些汉化组会将漫画第一页放上自己汉化组的 logo 作为第一页,无遮挡的原第一页放到第二页去。 - -> ![百合姬简介页例图](./images/百合姬简介页例图.png) -> *by - [岩見樹代子] 因为今天女友不在 02* - -6. 感觉:一些作者在创作时就会考虑到翻页这一动作,会特意调整页面的位置来利用翻页制造悬念、冲击或转折,让读者在翻开下一页时产生惊喜或震撼,也会用来切换场景或时间。所以漫画看多了就能在左右顺序出错时感觉到违和感,在看的时候感觉好像这页应该在翻页后再出现会更好,不过这个因为是纯凭感觉所以并不能百分百肯定。 - -> ![翻页分镜例图1](./images/翻页分镜例图1.png) -> ![翻页分镜例图2](./images/翻页分镜例图2.png) -> *by - [金子ある] 二人同居与三块蛋糕* - -## 页面填充功能介绍 - -因为日漫一般奇数页在左,偶数页在右,所以正常只要在第一张图片前加一个填充页,使其被顶到左页上即可使左右页的位置正确。 - -

-

举例:

- - - - - - - - - - -
图1填充页
图3图2
-
- -但实际总会有意外——汉化组删掉了单行本中间的空白页、将跨页图分成了左图全图右图三张图、作者在第一页的右页写了序所以也被放了进来等——导致左右页顺序乱掉,为此有了「页面填充」功能,通过手动增删填充页来将左右页顺序调整正确。 - -> ![页面填充示例](./images/页面填充示例.webp) -> 以这个示例动图为例,就需要在第一页用一个填充页来对齐跨页彩图,但在跨页彩图后因为删掉了上面第四点提到的百合姬简介页,所以在看完跨页后得再切换一下「页面填充」调整回来 - -如果图片流中没有出现跨页大图,那「页面填充」的影响范围就是整个图片流;如果出现了一张跨页大图,以跨页大图为分割点,「页面填充」的影响范围将被分为两个。以此类推,图片流中出现的跨页大图将整个图片流分割为多块独立的流。通过侧边栏的页面填充按钮可以查看和修改当前流的「页面填充」的状态。 - -
-

举例:

- - - - - - - - - - - - - - - - - -
图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 @@ -![页面填充示例](https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript/docs/images/页面填充示例.webp) +![页面填充示例](https://comic-read-docs.pages.dev/页面填充示例.webp)

@@ -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,欢迎有相关需求的人安装。 -![翻译功能示例](https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript/docs/images/翻译功能示例.webp) +![翻译功能示例](https://comic-read-docs.pages.dev/翻译功能示例.webp) > 如果需要翻译本地漫画,可以使用「[ComicRead PWA](https://comic-read.pages.dev/)」 @@ -148,13 +148,13 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h 除了右下角的悬浮按钮外,将鼠标移动到帖子一楼的顶端也能看到一个新增的「漫画阅读」按钮 -![百合会入口](https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript/docs/images/百合会入口.jpg) +![百合会入口](https://comic-read-docs.pages.dev/百合会入口.jpg) ### 记录阅读进度 这个功能是用来快速回到帖子上次阅读进度的。开启后,每个帖子后面都会跟着一个跳转至上次阅读位置的TAG,点击即可跳转至上次阅读进度(阅读进度不仅包括了页数也包括了楼层数),后面跟着的数字是上次阅读后新增的回复数。 -![百合会记录阅读进度功能](https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript/docs/images/百合会记录阅读进度功能.jpg) +![百合会记录阅读进度功能](https://comic-read-docs.pages.dev/百合会记录阅读进度功能.jpg) ### 关闭快捷导航的跳转 @@ -170,7 +170,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h ## ehentai -![ehentai例图](https://cdn.jsdelivr.net/gh/hymbz/ComicReadScript/docs/images/ehentai例图.png) +![ehentai例图](https://comic-read-docs.pages.dev/ehentai例图.png) 除悬浮按钮外,也会在右侧边栏会增加一个「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 0000000000000000000000000000000000000000..b5816093e8fe0b5c9f947a2f24bf4473baa046a0 GIT binary patch literal 15086 zcmeI2-)~e!6vw9m`UwAleZYj^3s1iA;v>(zYcOIkF){H?Q;kbZDz!x zjcGBf%%)97`c~6_k1_WdV_I8_=j)95NygSm&-|mSjcFH#4ZuB~6}!hSoS z*|tV#vrxCtIiXo0n=)bZyil(YSk{E$W?uN#7iF$XpEl-7_Q297bZ<2uWPXbf@vfw& z(c|P}%St{Ju}?HHc8whv%Y2Y?YNnavuGqCF53ZJ^XRWeEbS^7>UlBWNI}3Faj4NxJ z_1Ym6oXg5Nb@O$G@v{z^X`in(?~S;w){3zq{4YHHpzUaTz!Aq;s8PiX);*n1*mvLB zZI2##)g5=`wwHWK+aJZH@$`GewsUj0 zEe*`f(-?dMJ%wL1V8ZrCpN(ZfnlWv4?cjIc+)sObLyx& zW**GH7Dk<)ZZPnpzQYTVFEGUQ0a;>0Lm%}3HfjT`8bjKFRJjK5&?b!si)2mY}RlHw=!)Fw8= z>PRutSHkb}aIAHMZgPMv^1<3kf*)C8KrB>e&~~-+sQ7&yeyqq(+}I=M<7ZDGCbhIA z_^HWy;3tRRWMw@mKuBfLO$dKYIvuP)p!F#x z34?`tFRK~F9PEWp|3AatNDiaQP0_YuAPyUao^OC{ z#Xvozk#n^d?5WAy4fH>@ZJzIx{*7llU$;J&s-5oVcGv@ZcG~H7D*-Jm4x3hoF*z1#*?UjjwJ7(N{16XnRqMA}4&Z?o%uux!)jm1+^2B?Q?X#wksfT^?sQRL; zLwK-_Oug(APjV2|zUHf5_NgayRm;21fe~JnNt%D+&w8Sk)katkFEUa5M}M`(Jo^dj zpey%qCbd$x z&%PMN2cK8vL+r)A2MW;}#cymk;@(@aasS!q`|n0Qe-L*bQ+WpBd8{GNUq$=+{Fz2A zU;}^UslL3)7`dPxcqXdnxvZT*LZ$+8iC+*Dm|}UboLL?)7^uV>;ip^AWZ0dTcUxadgOzkDar>jQ?P#u3ah7 z^wgvqV-6mkosd!c95cps@z%^uJNMV(e+Q654~;SA-~mfeo-yVY78XjEYhRv0=BmjL z$^BUr`9rUDF0;=Vu?myN#*sH)S|$&EUmjmipB!++vEoNQXkX*VI59>K`t-hp*fPc( zww1rwm+FUel?lezp9{z*t>1@4U)=S>x@G;M0~}?($a&CLJ%`uH=6P4VY{v|25-Xe{ GgX}+Gp8V7R literal 0 HcmV?d00001 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 举例 +![判断左右页位置例图](/判断左右页位置例图.png) +*[柚原もけ] 安达与岛村 02* +::: + +5. 经验:一些杂志——比如百合姬——上刊载的漫画会在第一页的右页放剧情梗概和角色介绍,如果汉化组有汉化这页,那这页本身就算是填充页了,不需要开「页面填充」,但如果之后汉化组不放这页了,那就肯定得开启了。还有类似的情况是,有些汉化组会将漫画第一页放上自己汉化组的 logo 作为第一页,无遮挡的原第一页放到第二页去。 + +::: info 举例 +![百合姬简介页例图](/百合姬简介页例图.png) +*[岩見樹代子] 因为今天女友不在 02* +::: + +6. 感觉:一些作者在创作时就会考虑到翻页这一动作,会特意调整页面的位置来利用翻页制造悬念、冲击或转折,让读者在翻开下一页时产生惊喜或震撼,也会用来切换场景或时间。所以漫画看多了就能在左右顺序出错时感觉到违和感,在看的时候感觉好像这页应该在翻页后再出现会更好,不过这个因为是纯凭感觉所以并不能百分百肯定。 + +::: info 举例 +![翻页分镜例图1](/翻页分镜例图1.png) +![翻页分镜例图2](/翻页分镜例图2.png) +*[金子ある] 二人同居与三块蛋糕* +::: 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 举例 +![页面填充示例](/页面填充示例.webp) + +以这个示例动图为例,就需要在第一页用一个填充页来对齐跨页彩图,但在跨页彩图后因为删掉了百合姬简介页,所以在看完跨页后得再切换一下「页面填充」调整回来 +::: + +如果图片流中没有出现跨页大图,那「页面填充」的影响范围就是整个图片流。如果出现了一张跨页大图,以跨页大图为分割点,「页面填充」的影响范围将被分为两个。以此类推,图片流中出现的跨页大图将整个图片流分割为多块独立的流。通过侧边栏的页面填充按钮可以查看和修改当前流的「页面填充」的状态。 + +::: 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