From 4d2361a7046214fe0f4e4af01831107fd00e38ad Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Tue, 7 Oct 2025 23:13:09 +0800 Subject: [PATCH] feat(theme)!: add collections support (#704) * feat(theme)!: add collection support --- cli/package.json | 4 +- .../.vuepress/collections.ts.handlebars | 124 + cli/templates/.vuepress/config.ts.handlebars | 23 +- cli/templates/.vuepress/navbar.ts.handlebars | 4 +- cli/templates/.vuepress/notes.ts.handlebars | 75 - .../.vuepress/plume.config.ts.handlebars | 8 +- .../preview/custom-component.example.md | 0 .../docs/en/{ => blog}/preview/markdown.md | 0 .../docs/en/{notes => }/demo/README.md | 0 cli/templates/docs/en/{notes => }/demo/bar.md | 0 cli/templates/docs/en/{notes => }/demo/foo.md | 0 .../preview/custom-component.example.md | 0 .../docs/zh/{ => blog}/preview/markdown.md | 0 .../docs/zh/{notes => }/demo/README.md | 0 cli/templates/docs/zh/{notes => }/demo/bar.md | 0 cli/templates/docs/zh/{notes => }/demo/foo.md | 0 docs/.vuepress/client.ts | 4 + docs/.vuepress/collections/en/index.ts | 8 + .../{notes => collections}/en/theme-config.ts | 12 +- .../{notes => collections}/en/theme-guide.ts | 12 +- .../.vuepress/{notes => collections}/index.ts | 0 docs/.vuepress/collections/zh/index.ts | 10 + .../{notes => collections}/zh/theme-config.ts | 14 +- .../{notes => collections}/zh/theme-guide.ts | 20 +- docs/.vuepress/collections/zh/tools.ts | 20 + docs/.vuepress/config.ts | 2 +- docs/.vuepress/llmstxtTOC.ts | 14 +- docs/.vuepress/navbar.ts | 4 +- docs/.vuepress/notes/en/index.ts | 13 - docs/.vuepress/notes/zh/index.ts | 17 - docs/.vuepress/notes/zh/plugins.ts | 33 - docs/.vuepress/notes/zh/tools.ts | 18 - docs/.vuepress/plume.config.ts | 19 +- docs/README.md | 1 + docs/{ => blog}/1.示例/markdown基础.md | 0 docs/{ => blog}/1.示例/markdown扩展.md | 2 +- docs/{ => blog}/1.示例/全屏水印.md | 0 docs/{ => blog}/1.示例/内容水印.md | 0 docs/{ => blog}/1.示例/加密文章.md | 0 docs/{ => blog}/1.示例/图片水印.md | 0 docs/{ => blog}/1.示例/照片类作品示例.md | 0 docs/{ => blog}/1.示例/示例文章.md | 0 docs/{ => blog}/1.示例/示例文章2.md | 0 docs/{ => blog}/1.示例/示例文章3.md | 0 docs/{ => blog}/1.示例/示例文章4.md | 0 docs/{ => blog}/1.示例/示例文章5.md | 0 docs/{ => blog}/1.示例/示例文章6.md | 0 docs/{ => blog}/1.示例/示例文章7.md | 0 docs/{ => blog}/1.示例/示例文章8.md | 0 docs/{ => blog}/1.示例/示例文章9.md | 0 docs/{ => blog}/2.preview/主题效果预览.md | 0 docs/{ => blog}/3.更新说明/102-103.md | 0 docs/{ => blog}/3.更新说明/120.md | 0 docs/{ => blog}/3.更新说明/144.md | 0 docs/{ => blog}/3.更新说明/154.md | 1 - docs/blog/3.更新说明/165.md | 188 ++ docs/{ => blog}/3.更新说明/73-77.md | 0 docs/{ => blog}/4.教程/frontmatter.md | 0 docs/config/collections.md | 528 ++++ .../theme => }/config/frontmatter/basic.md | 0 .../theme => }/config/frontmatter/friend.md | 0 .../theme => }/config/frontmatter/home.md | 0 .../theme => }/config/frontmatter/post.md | 0 docs/config/intro.md | 173 ++ docs/{notes/theme => }/config/locales.md | 11 +- docs/{notes/theme => }/config/markdown.md | 0 docs/{notes/theme => }/config/navbar.md | 4 +- .../theme => }/config/plugins/README.md | 0 .../config/plugins/markdown-enhance.md | 0 .../config/plugins/markdown-image.md | 0 .../config/plugins/markdown-include.md | 0 .../config/plugins/markdown-math.md | 0 .../config/plugins/markdown-power.md | 0 .../theme => }/config/plugins/reading-time.md | 0 .../theme => }/config/plugins/search.md | 0 .../{notes/theme => }/config/plugins/shiki.md | 0 .../theme => }/config/plugins/watermark.md | 0 docs/config/sidebar.md | 115 + docs/{notes/theme => }/config/theme.md | 193 +- .../en/{ => blog}/1.FE/1.Node/english_blog.md | 0 docs/en/{ => blog}/4.Tutorials/frontmatter.md | 0 docs/en/{notes/theme => }/config/basic.md | 0 .../theme => }/config/frontmatter/article.md | 0 .../theme => }/config/frontmatter/basic.md | 0 docs/en/{notes/theme => }/config/intro.md | 0 docs/en/{notes/theme => }/config/locales.md | 0 docs/en/{notes/theme => }/config/notes.md | 0 .../en/{notes/theme => }/guide/custom/home.md | 0 .../{notes/theme => }/guide/custom/style.md | 0 .../theme => }/guide/features/component.md | 0 .../{notes/theme => }/guide/markdown/abbr.md | 0 .../theme => }/guide/markdown/annotation.md | 0 .../{notes/theme => }/guide/markdown/basic.md | 0 .../theme => }/guide/markdown/caniuse.md | 0 .../{notes/theme => }/guide/markdown/card.md | 0 .../theme => }/guide/markdown/collapse.md | 0 .../theme => }/guide/markdown/demo-wrapper.md | 0 .../theme => }/guide/markdown/extensions.md | 0 .../theme => }/guide/markdown/file-tree.md | 0 .../{notes/theme => }/guide/markdown/icons.md | 0 .../theme => }/guide/markdown/include.md | 0 .../{notes/theme => }/guide/markdown/mark.md | 0 .../theme => }/guide/markdown/npm-to.md | 0 .../{notes/theme => }/guide/markdown/plot.md | 0 .../{notes/theme => }/guide/markdown/steps.md | 0 .../{notes/theme => }/guide/markdown/tabs.md | 0 .../theme => }/guide/markdown/timeline.md | 0 .../theme => }/guide/quick-start/blog.md | 0 .../guide/quick-start/deployment.md | 0 .../theme => }/guide/quick-start/document.md | 0 .../guide/quick-start/international.md | 0 .../theme => }/guide/quick-start/intro.md | 0 .../guide/quick-start/optimize-build.md | 0 .../guide/quick-start/project-structure.md | 0 .../theme => }/guide/quick-start/usage.md | 0 .../theme => }/guide/quick-start/write.md | 0 .../theme => }/snippet/create.snippet.md | 0 .../theme => }/snippet/include-1.snippet.md | 0 .../theme => }/snippet/include-2.snippet.md | 0 docs/{notes/theme => }/guide/api/client.md | 0 docs/{notes/theme => }/guide/api/node.md | 16 +- docs/{notes/theme => }/guide/chart/chart.md | 0 docs/{notes/theme => }/guide/chart/echarts.md | 0 .../theme => }/guide/chart/flowchart.md | 0 docs/{notes/theme => }/guide/chart/markmap.md | 0 docs/{notes/theme => }/guide/chart/mermaid.md | 0 .../{notes/theme => }/guide/chart/plantuml.md | 0 docs/guide/code/code-tabs.md | 290 ++ .../{notes/theme => }/guide/code/copy-code.md | 0 docs/{notes/theme => }/guide/code/features.md | 0 docs/{notes/theme => }/guide/code/import.md | 0 docs/{notes/theme => }/guide/code/intro.md | 0 docs/{notes/theme => }/guide/code/twoslash.md | 0 .../theme => }/guide/components/badge.md | 0 .../theme => }/guide/components/card-grid.md | 0 .../guide/components/card-masonry.md | 0 .../theme => }/guide/components/card.md | 0 .../theme => }/guide/components/home-box.md | 0 .../theme => }/guide/components/icon.md | 0 .../theme => }/guide/components/image-card.md | 0 .../theme => }/guide/components/link-card.md | 0 .../theme => }/guide/components/npm-badge.md | 0 .../theme => }/guide/components/plot.md | 0 .../theme => }/guide/components/repo-card.md | 0 .../theme => }/guide/components/swiper.md | 0 .../guide/custom/component-overrides.md | 0 docs/{notes/theme => }/guide/custom/home.md | 28 +- docs/{notes/theme => }/guide/custom/slots.md | 0 docs/{notes/theme => }/guide/custom/style.md | 0 docs/{notes/theme => }/guide/embed/acfun.md | 0 .../theme => }/guide/embed/artplayer.md | 0 .../theme => }/guide/embed/audioReader.md | 0 .../{notes/theme => }/guide/embed/bilibili.md | 0 docs/{notes/theme => }/guide/embed/pdf.md | 0 docs/{notes/theme => }/guide/embed/youtube.md | 0 .../theme => }/guide/features/bulletin.md | 0 .../theme => }/guide/features/changelog.md | 0 .../theme => }/guide/features/comments.md | 0 .../theme => }/guide/features/component.md | 0 .../theme => }/guide/features/contributors.md | 0 .../theme => }/guide/features/copyright.md | 0 .../theme => }/guide/features/encryption.md | 0 .../theme => }/guide/features/friend-links.md | 0 docs/{notes/theme => }/guide/features/icon.md | 0 .../guide/features/image-preview.md | 0 .../guide/features/replace-assets.md | 0 .../theme => }/guide/features/search.md | 0 docs/{notes/theme => }/guide/features/seo.md | 0 .../theme => }/guide/features/sitemap.md | 0 .../theme => }/guide/features/watermark.md | 0 docs/{notes/theme => }/guide/markdown/abbr.md | 0 .../theme => }/guide/markdown/annotation.md | 0 .../{notes/theme => }/guide/markdown/basic.md | 0 .../theme => }/guide/markdown/caniuse.md | 0 docs/{notes/theme => }/guide/markdown/card.md | 0 docs/{notes/theme => }/guide/markdown/chat.md | 0 .../theme => }/guide/markdown/code-tree.md | 0 .../theme => }/guide/markdown/collapse.md | 0 .../theme => }/guide/markdown/demo-wrapper.md | 0 .../theme => }/guide/markdown/extensions.md | 0 .../{notes/theme => }/guide/markdown/field.md | 0 .../theme => }/guide/markdown/file-tree.md | 0 docs/{notes/theme => }/guide/markdown/flex.md | 0 .../{notes/theme => }/guide/markdown/icons.md | 0 .../theme => }/guide/markdown/include.md | 0 docs/{notes/theme => }/guide/markdown/mark.md | 0 .../theme => }/guide/markdown/npm-to.md | 0 docs/{notes/theme => }/guide/markdown/plot.md | 0 .../{notes/theme => }/guide/markdown/steps.md | 0 .../{notes/theme => }/guide/markdown/table.md | 0 docs/{notes/theme => }/guide/markdown/tabs.md | 0 .../theme => }/guide/markdown/timeline.md | 0 .../theme => }/guide/quick-start/blog.md | 0 docs/guide/quick-start/collection-doc.md | 359 +++ docs/guide/quick-start/collection-post.md | 852 ++++++ docs/guide/quick-start/collection.md | 143 + .../guide/quick-start/deployment.md | 0 docs/guide/quick-start/intro.md | 68 + docs/guide/quick-start/locales.md | 168 ++ docs/guide/quick-start/optimize-build.md | 107 + docs/guide/quick-start/project-structure.md | 169 ++ docs/guide/quick-start/sidebar.md | 577 ++++ docs/guide/quick-start/usage.md | 217 ++ docs/guide/quick-start/write.md | 172 ++ .../theme => }/guide/repl/codeSandbox.md | 0 docs/{notes/theme => }/guide/repl/codepen.md | 0 .../guide/repl/demo/Counter.module.css | 0 .../theme => }/guide/repl/demo/Counter.ts | 0 .../theme => }/guide/repl/demo/Counter.vue | 0 .../theme => }/guide/repl/demo/Toggle.vue | 0 .../guide/repl/demo/normal-lib.html | 0 .../theme => }/guide/repl/demo/normal.html | 0 .../guide/repl/frontend-deprecated.md | 0 docs/{notes/theme => }/guide/repl/frontend.md | 2 +- docs/{notes/theme => }/guide/repl/golang.md | 0 docs/{notes/theme => }/guide/repl/jsFiddle.md | 0 docs/{notes/theme => }/guide/repl/kotlin.md | 0 docs/{notes/theme => }/guide/repl/python.md | 0 docs/{notes/theme => }/guide/repl/replit.md | 0 docs/{notes/theme => }/guide/repl/rust.md | 0 docs/notes/theme/config/intro.md | 187 -- docs/notes/theme/config/notes.md | 192 -- docs/notes/theme/config/sidebar.md | 125 - docs/notes/theme/guide/code/code-tabs.md | 259 -- .../notes/theme/guide/quick-start/document.md | 658 ----- docs/notes/theme/guide/quick-start/intro.md | 82 - docs/notes/theme/guide/quick-start/locales.md | 149 - .../theme/guide/quick-start/optimize-build.md | 92 - .../guide/quick-start/project-structure.md | 229 -- docs/notes/theme/guide/quick-start/usage.md | 222 -- docs/notes/theme/guide/quick-start/write.md | 180 -- .../theme => }/snippet/chart-1.snippet.md | 0 .../theme => }/snippet/chart-2.snippet.md | 0 .../theme => }/snippet/chart-3.snippet.md | 0 .../theme => }/snippet/chart-4.snippet.md | 0 .../theme => }/snippet/chart-5.snippet.md | 0 .../theme => }/snippet/chart-6.snippet.md | 0 .../theme => }/snippet/code-block.snippet.md | 0 .../theme => }/snippet/create.snippet.md | 0 .../theme => }/snippet/echarts-1.snippet.md | 0 .../theme => }/snippet/echarts-10.snippet.md | 0 .../theme => }/snippet/echarts-2.snippet.md | 0 .../theme => }/snippet/echarts-3.snippet.md | 0 .../theme => }/snippet/echarts-4.snippet.md | 0 .../theme => }/snippet/echarts-5.snippet.md | 0 .../theme => }/snippet/echarts-6.snippet.md | 0 .../theme => }/snippet/echarts-7.snippet.md | 0 .../theme => }/snippet/echarts-8.snippet.md | 0 .../theme => }/snippet/echarts-9.snippet.md | 0 .../theme => }/snippet/include-1.snippet.md | 0 .../theme => }/snippet/include-2.snippet.md | 0 .../theme => }/snippet/mermaid-1.snippet.md | 0 .../theme => }/snippet/mermaid-10.snippet.md | 0 .../theme => }/snippet/mermaid-11.snippet.md | 0 .../theme => }/snippet/mermaid-12.snippet.md | 0 .../theme => }/snippet/mermaid-13.snippet.md | 0 .../theme => }/snippet/mermaid-14.snippet.md | 0 .../theme => }/snippet/mermaid-15.snippet.md | 0 .../theme => }/snippet/mermaid-16.snippet.md | 0 .../theme => }/snippet/mermaid-17.snippet.md | 0 .../theme => }/snippet/mermaid-2.snippet.md | 0 .../theme => }/snippet/mermaid-3.snippet.md | 0 .../theme => }/snippet/mermaid-4.snippet.md | 0 .../theme => }/snippet/mermaid-5.snippet.md | 0 .../theme => }/snippet/mermaid-6.snippet.md | 0 .../theme => }/snippet/mermaid-7.snippet.md | 0 .../theme => }/snippet/mermaid-8.snippet.md | 0 .../theme => }/snippet/mermaid-9.snippet.md | 0 docs/{notes/theme => }/snippet/snippet-1.js | 0 .../theme => }/snippet/whitespace.snippet.md | 0 docs/{notes => }/tools/README.md | 0 docs/{notes => }/tools/caniuse.md | 0 docs/{notes => }/tools/custom-theme.md | 0 .../{notes => }/tools/home-hero-tint-plate.md | 0 eslint.config.js | 4 +- .../layout-slots/docs/.vuepress/client.ts | 38 +- .../layout-slots/docs/.vuepress/navbar.ts | 8 - examples/layout-slots/docs/.vuepress/notes.ts | 13 - .../docs/.vuepress/plume.config.ts | 20 +- .../docs/{ => blog}/preview/layout-page.md | 0 .../docs/{ => blog}/preview/markdown.md | 0 .../docs/{notes => }/demo/README.md | 0 .../layout-slots/docs/{notes => }/demo/bar.md | 0 .../layout-slots/docs/{notes => }/demo/foo.md | 0 package.json | 3 +- .../src/client/components/ArtPlayer.vue | 2 +- .../src/client/components/FileTreeNode.vue | 2 +- pnpm-lock.yaml | 2472 +++++++++-------- pnpm-workspace.yaml | 60 +- theme/package.json | 4 +- theme/src/client/components/Blog/VPBlog.vue | 150 - theme/src/client/components/Home/VPHome.vue | 29 +- theme/src/client/components/Nav/VPNav.vue | 2 +- .../{Blog => Posts}/VPCategories.vue | 2 +- .../{Blog => Posts}/VPCategoriesGroup.vue | 6 +- .../{Blog => Posts}/VPPagination.vue | 8 +- .../components/{Blog => Posts}/VPPostItem.vue | 82 +- .../components/{Blog => Posts}/VPPostList.vue | 20 +- theme/src/client/components/Posts/VPPosts.vue | 158 ++ .../VPPostsArchives.vue} | 12 +- .../VPPostsAside.vue} | 18 +- .../VPPostsCategories.vue} | 24 +- .../VPPostsExtract.vue} | 55 +- .../VPBlogNav.vue => Posts/VPPostsNav.vue} | 18 +- .../VPPostsProfile.vue} | 37 +- .../VPBlogTags.vue => Posts/VPPostsTags.vue} | 18 +- .../{Blog => Posts}/VPShortPostList.vue | 14 +- theme/src/client/components/VPContent.vue | 112 +- theme/src/client/components/VPDoc.vue | 10 +- .../client/components/VPDocBreadcrumbs.vue | 37 +- theme/src/client/components/VPDocMeta.vue | 12 +- theme/src/client/components/VPLocalNav.vue | 16 +- theme/src/client/components/VPSidebar.vue | 2 +- theme/src/client/composables/blog-data.ts | 26 - theme/src/client/composables/blog-extract.ts | 71 - theme/src/client/composables/collections.ts | 56 + theme/src/client/composables/data.ts | 19 +- theme/src/client/composables/index.ts | 13 +- theme/src/client/composables/internal-link.ts | 61 +- theme/src/client/composables/langs.ts | 16 +- theme/src/client/composables/outline.ts | 8 +- theme/src/client/composables/page.ts | 22 +- .../{blog-archives.ts => posts-archives.ts} | 10 +- .../{blog-category.ts => posts-category.ts} | 12 +- theme/src/client/composables/posts-data.ts | 33 + theme/src/client/composables/posts-extract.ts | 73 + .../{blog-post-list.ts => posts-post-list.ts} | 32 +- .../{blog-tags.ts => posts-tags.ts} | 22 +- theme/src/client/composables/prev-next.ts | 22 +- theme/src/client/config.ts | 2 + theme/src/client/layouts/Layout.vue | 72 +- theme/src/client/shim.d.ts | 16 +- theme/src/client/styles/icons.css | 2 +- .../node/autoFrontmatter/baseFrontmatter.ts | 21 - .../src/node/autoFrontmatter/createFilter.ts | 48 + theme/src/node/autoFrontmatter/generate.ts | 145 + theme/src/node/autoFrontmatter/generator.ts | 187 -- theme/src/node/autoFrontmatter/index.ts | 5 +- theme/src/node/autoFrontmatter/readFile.ts | 46 - .../autoFrontmatter/resolveLinkBySidebar.ts | 51 - .../node/autoFrontmatter/resolveOptions.ts | 183 -- theme/src/node/autoFrontmatter/rules.ts | 260 ++ theme/src/node/collections/compat.ts | 73 + theme/src/node/collections/complete.ts | 35 + theme/src/node/collections/findCollection.ts | 23 + theme/src/node/collections/index.ts | 3 + .../src/node/config/extendsBundlerOptions.ts | 2 +- theme/src/node/config/index.ts | 1 - theme/src/node/config/initThemeOptions.ts | 21 +- theme/src/node/config/resolveNotesOptions.ts | 44 - theme/src/node/config/resolveThemeData.ts | 51 +- theme/src/node/defineConfig.ts | 22 +- theme/src/node/detector/breakingChange.ts | 46 + theme/src/node/detector/options.ts | 2 + theme/src/node/loadConfig/ConfigLoader.ts | 90 + theme/src/node/loadConfig/compiler.ts | 17 +- theme/src/node/loadConfig/findConfigPath.ts | 6 +- theme/src/node/loadConfig/index.ts | 2 +- theme/src/node/loadConfig/loader.ts | 153 - theme/src/node/locales/de.ts | 2 +- theme/src/node/locales/en.ts | 2 +- theme/src/node/locales/fr.ts | 2 +- theme/src/node/locales/ja.ts | 2 +- theme/src/node/locales/ko.ts | 2 +- theme/src/node/locales/ru.ts | 2 +- theme/src/node/locales/zh-tw.ts | 2 +- theme/src/node/locales/zh.ts | 2 +- theme/src/node/pages/autoCategory.ts | 36 +- theme/src/node/pages/createPages.ts | 70 +- theme/src/node/pages/extendsPage.ts | 6 +- theme/src/node/prepare/index.ts | 6 +- .../node/prepare/prepareArticleTagColor.ts | 18 +- theme/src/node/prepare/prepareBlogData.ts | 114 - theme/src/node/prepare/prepareCollections.ts | 36 + theme/src/node/prepare/prepareIcons.ts | 12 +- theme/src/node/prepare/preparePostsData.ts | 113 + theme/src/node/prepare/prepareSidebar.ts | 36 +- theme/src/node/theme.ts | 42 +- theme/src/node/utils/createMatcher.ts | 34 + theme/src/node/utils/index.ts | 1 + theme/src/shared/data.ts | 6 +- theme/src/shared/features/autoFrontmatter.ts | 130 +- theme/src/shared/features/blog.ts | 227 -- theme/src/shared/features/collection.ts | 212 ++ theme/src/shared/features/index.ts | 3 +- theme/src/shared/features/notes.ts | 6 + theme/src/shared/features/posts.ts | 108 + theme/src/shared/features/profile.ts | 2 +- theme/src/shared/frontmatter/home.ts | 9 +- theme/src/shared/frontmatter/normal.ts | 2 +- theme/src/shared/frontmatter/post.ts | 4 +- theme/src/shared/locale.ts | 15 +- theme/src/shared/options.ts | 5 +- theme/src/shared/pageData.ts | 6 +- tsconfig.base.json | 2 +- tsconfig.isolated.json | 17 + tsconfig.json | 5 + 397 files changed, 8101 insertions(+), 6008 deletions(-) create mode 100644 cli/templates/.vuepress/collections.ts.handlebars delete mode 100644 cli/templates/.vuepress/notes.ts.handlebars rename cli/templates/docs/en/{ => blog}/preview/custom-component.example.md (100%) rename cli/templates/docs/en/{ => blog}/preview/markdown.md (100%) rename cli/templates/docs/en/{notes => }/demo/README.md (100%) rename cli/templates/docs/en/{notes => }/demo/bar.md (100%) rename cli/templates/docs/en/{notes => }/demo/foo.md (100%) rename cli/templates/docs/zh/{ => blog}/preview/custom-component.example.md (100%) rename cli/templates/docs/zh/{ => blog}/preview/markdown.md (100%) rename cli/templates/docs/zh/{notes => }/demo/README.md (100%) rename cli/templates/docs/zh/{notes => }/demo/bar.md (100%) rename cli/templates/docs/zh/{notes => }/demo/foo.md (100%) create mode 100644 docs/.vuepress/collections/en/index.ts rename docs/.vuepress/{notes => collections}/en/theme-config.ts (55%) rename docs/.vuepress/{notes => collections}/en/theme-guide.ts (82%) rename docs/.vuepress/{notes => collections}/index.ts (100%) create mode 100644 docs/.vuepress/collections/zh/index.ts rename docs/.vuepress/{notes => collections}/zh/theme-config.ts (72%) rename docs/.vuepress/{notes => collections}/zh/theme-guide.ts (89%) create mode 100644 docs/.vuepress/collections/zh/tools.ts delete mode 100644 docs/.vuepress/notes/en/index.ts delete mode 100644 docs/.vuepress/notes/zh/index.ts delete mode 100644 docs/.vuepress/notes/zh/plugins.ts delete mode 100644 docs/.vuepress/notes/zh/tools.ts rename docs/{ => blog}/1.示例/markdown基础.md (100%) rename docs/{ => blog}/1.示例/markdown扩展.md (99%) rename docs/{ => blog}/1.示例/全屏水印.md (100%) rename docs/{ => blog}/1.示例/内容水印.md (100%) rename docs/{ => blog}/1.示例/加密文章.md (100%) rename docs/{ => blog}/1.示例/图片水印.md (100%) rename docs/{ => blog}/1.示例/照片类作品示例.md (100%) rename docs/{ => blog}/1.示例/示例文章.md (100%) rename docs/{ => blog}/1.示例/示例文章2.md (100%) rename docs/{ => blog}/1.示例/示例文章3.md (100%) rename docs/{ => blog}/1.示例/示例文章4.md (100%) rename docs/{ => blog}/1.示例/示例文章5.md (100%) rename docs/{ => blog}/1.示例/示例文章6.md (100%) rename docs/{ => blog}/1.示例/示例文章7.md (100%) rename docs/{ => blog}/1.示例/示例文章8.md (100%) rename docs/{ => blog}/1.示例/示例文章9.md (100%) rename docs/{ => blog}/2.preview/主题效果预览.md (100%) rename docs/{ => blog}/3.更新说明/102-103.md (100%) rename docs/{ => blog}/3.更新说明/120.md (100%) rename docs/{ => blog}/3.更新说明/144.md (100%) rename docs/{ => blog}/3.更新说明/154.md (99%) create mode 100644 docs/blog/3.更新说明/165.md rename docs/{ => blog}/3.更新说明/73-77.md (100%) rename docs/{ => blog}/4.教程/frontmatter.md (100%) create mode 100644 docs/config/collections.md rename docs/{notes/theme => }/config/frontmatter/basic.md (100%) rename docs/{notes/theme => }/config/frontmatter/friend.md (100%) rename docs/{notes/theme => }/config/frontmatter/home.md (100%) rename docs/{notes/theme => }/config/frontmatter/post.md (100%) create mode 100644 docs/config/intro.md rename docs/{notes/theme => }/config/locales.md (95%) rename docs/{notes/theme => }/config/markdown.md (100%) rename docs/{notes/theme => }/config/navbar.md (97%) rename docs/{notes/theme => }/config/plugins/README.md (100%) rename docs/{notes/theme => }/config/plugins/markdown-enhance.md (100%) rename docs/{notes/theme => }/config/plugins/markdown-image.md (100%) rename docs/{notes/theme => }/config/plugins/markdown-include.md (100%) rename docs/{notes/theme => }/config/plugins/markdown-math.md (100%) rename docs/{notes/theme => }/config/plugins/markdown-power.md (100%) rename docs/{notes/theme => }/config/plugins/reading-time.md (100%) rename docs/{notes/theme => }/config/plugins/search.md (100%) rename docs/{notes/theme => }/config/plugins/shiki.md (100%) rename docs/{notes/theme => }/config/plugins/watermark.md (100%) create mode 100644 docs/config/sidebar.md rename docs/{notes/theme => }/config/theme.md (82%) rename docs/en/{ => blog}/1.FE/1.Node/english_blog.md (100%) rename docs/en/{ => blog}/4.Tutorials/frontmatter.md (100%) rename docs/en/{notes/theme => }/config/basic.md (100%) rename docs/en/{notes/theme => }/config/frontmatter/article.md (100%) rename docs/en/{notes/theme => }/config/frontmatter/basic.md (100%) rename docs/en/{notes/theme => }/config/intro.md (100%) rename docs/en/{notes/theme => }/config/locales.md (100%) rename docs/en/{notes/theme => }/config/notes.md (100%) rename docs/en/{notes/theme => }/guide/custom/home.md (100%) rename docs/en/{notes/theme => }/guide/custom/style.md (100%) rename docs/en/{notes/theme => }/guide/features/component.md (100%) rename docs/en/{notes/theme => }/guide/markdown/abbr.md (100%) rename docs/en/{notes/theme => }/guide/markdown/annotation.md (100%) rename docs/en/{notes/theme => }/guide/markdown/basic.md (100%) rename docs/en/{notes/theme => }/guide/markdown/caniuse.md (100%) rename docs/en/{notes/theme => }/guide/markdown/card.md (100%) rename docs/en/{notes/theme => }/guide/markdown/collapse.md (100%) rename docs/en/{notes/theme => }/guide/markdown/demo-wrapper.md (100%) rename docs/en/{notes/theme => }/guide/markdown/extensions.md (100%) rename docs/en/{notes/theme => }/guide/markdown/file-tree.md (100%) rename docs/en/{notes/theme => }/guide/markdown/icons.md (100%) rename docs/en/{notes/theme => }/guide/markdown/include.md (100%) rename docs/en/{notes/theme => }/guide/markdown/mark.md (100%) rename docs/en/{notes/theme => }/guide/markdown/npm-to.md (100%) rename docs/en/{notes/theme => }/guide/markdown/plot.md (100%) rename docs/en/{notes/theme => }/guide/markdown/steps.md (100%) rename docs/en/{notes/theme => }/guide/markdown/tabs.md (100%) rename docs/en/{notes/theme => }/guide/markdown/timeline.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/blog.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/deployment.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/document.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/international.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/intro.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/optimize-build.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/project-structure.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/usage.md (100%) rename docs/en/{notes/theme => }/guide/quick-start/write.md (100%) rename docs/en/{notes/theme => }/snippet/create.snippet.md (100%) rename docs/en/{notes/theme => }/snippet/include-1.snippet.md (100%) rename docs/en/{notes/theme => }/snippet/include-2.snippet.md (100%) rename docs/{notes/theme => }/guide/api/client.md (100%) rename docs/{notes/theme => }/guide/api/node.md (62%) rename docs/{notes/theme => }/guide/chart/chart.md (100%) rename docs/{notes/theme => }/guide/chart/echarts.md (100%) rename docs/{notes/theme => }/guide/chart/flowchart.md (100%) rename docs/{notes/theme => }/guide/chart/markmap.md (100%) rename docs/{notes/theme => }/guide/chart/mermaid.md (100%) rename docs/{notes/theme => }/guide/chart/plantuml.md (100%) create mode 100644 docs/guide/code/code-tabs.md rename docs/{notes/theme => }/guide/code/copy-code.md (100%) rename docs/{notes/theme => }/guide/code/features.md (100%) rename docs/{notes/theme => }/guide/code/import.md (100%) rename docs/{notes/theme => }/guide/code/intro.md (100%) rename docs/{notes/theme => }/guide/code/twoslash.md (100%) rename docs/{notes/theme => }/guide/components/badge.md (100%) rename docs/{notes/theme => }/guide/components/card-grid.md (100%) rename docs/{notes/theme => }/guide/components/card-masonry.md (100%) rename docs/{notes/theme => }/guide/components/card.md (100%) rename docs/{notes/theme => }/guide/components/home-box.md (100%) rename docs/{notes/theme => }/guide/components/icon.md (100%) rename docs/{notes/theme => }/guide/components/image-card.md (100%) rename docs/{notes/theme => }/guide/components/link-card.md (100%) rename docs/{notes/theme => }/guide/components/npm-badge.md (100%) rename docs/{notes/theme => }/guide/components/plot.md (100%) rename docs/{notes/theme => }/guide/components/repo-card.md (100%) rename docs/{notes/theme => }/guide/components/swiper.md (100%) rename docs/{notes/theme => }/guide/custom/component-overrides.md (100%) rename docs/{notes/theme => }/guide/custom/home.md (96%) rename docs/{notes/theme => }/guide/custom/slots.md (100%) rename docs/{notes/theme => }/guide/custom/style.md (100%) rename docs/{notes/theme => }/guide/embed/acfun.md (100%) rename docs/{notes/theme => }/guide/embed/artplayer.md (100%) rename docs/{notes/theme => }/guide/embed/audioReader.md (100%) rename docs/{notes/theme => }/guide/embed/bilibili.md (100%) rename docs/{notes/theme => }/guide/embed/pdf.md (100%) rename docs/{notes/theme => }/guide/embed/youtube.md (100%) rename docs/{notes/theme => }/guide/features/bulletin.md (100%) rename docs/{notes/theme => }/guide/features/changelog.md (100%) rename docs/{notes/theme => }/guide/features/comments.md (100%) rename docs/{notes/theme => }/guide/features/component.md (100%) rename docs/{notes/theme => }/guide/features/contributors.md (100%) rename docs/{notes/theme => }/guide/features/copyright.md (100%) rename docs/{notes/theme => }/guide/features/encryption.md (100%) rename docs/{notes/theme => }/guide/features/friend-links.md (100%) rename docs/{notes/theme => }/guide/features/icon.md (100%) rename docs/{notes/theme => }/guide/features/image-preview.md (100%) rename docs/{notes/theme => }/guide/features/replace-assets.md (100%) rename docs/{notes/theme => }/guide/features/search.md (100%) rename docs/{notes/theme => }/guide/features/seo.md (100%) rename docs/{notes/theme => }/guide/features/sitemap.md (100%) rename docs/{notes/theme => }/guide/features/watermark.md (100%) rename docs/{notes/theme => }/guide/markdown/abbr.md (100%) rename docs/{notes/theme => }/guide/markdown/annotation.md (100%) rename docs/{notes/theme => }/guide/markdown/basic.md (100%) rename docs/{notes/theme => }/guide/markdown/caniuse.md (100%) rename docs/{notes/theme => }/guide/markdown/card.md (100%) rename docs/{notes/theme => }/guide/markdown/chat.md (100%) rename docs/{notes/theme => }/guide/markdown/code-tree.md (100%) rename docs/{notes/theme => }/guide/markdown/collapse.md (100%) rename docs/{notes/theme => }/guide/markdown/demo-wrapper.md (100%) rename docs/{notes/theme => }/guide/markdown/extensions.md (100%) rename docs/{notes/theme => }/guide/markdown/field.md (100%) rename docs/{notes/theme => }/guide/markdown/file-tree.md (100%) rename docs/{notes/theme => }/guide/markdown/flex.md (100%) rename docs/{notes/theme => }/guide/markdown/icons.md (100%) rename docs/{notes/theme => }/guide/markdown/include.md (100%) rename docs/{notes/theme => }/guide/markdown/mark.md (100%) rename docs/{notes/theme => }/guide/markdown/npm-to.md (100%) rename docs/{notes/theme => }/guide/markdown/plot.md (100%) rename docs/{notes/theme => }/guide/markdown/steps.md (100%) rename docs/{notes/theme => }/guide/markdown/table.md (100%) rename docs/{notes/theme => }/guide/markdown/tabs.md (100%) rename docs/{notes/theme => }/guide/markdown/timeline.md (100%) rename docs/{notes/theme => }/guide/quick-start/blog.md (100%) create mode 100644 docs/guide/quick-start/collection-doc.md create mode 100644 docs/guide/quick-start/collection-post.md create mode 100644 docs/guide/quick-start/collection.md rename docs/{notes/theme => }/guide/quick-start/deployment.md (100%) create mode 100644 docs/guide/quick-start/intro.md create mode 100644 docs/guide/quick-start/locales.md create mode 100644 docs/guide/quick-start/optimize-build.md create mode 100644 docs/guide/quick-start/project-structure.md create mode 100644 docs/guide/quick-start/sidebar.md create mode 100644 docs/guide/quick-start/usage.md create mode 100644 docs/guide/quick-start/write.md rename docs/{notes/theme => }/guide/repl/codeSandbox.md (100%) rename docs/{notes/theme => }/guide/repl/codepen.md (100%) rename docs/{notes/theme => }/guide/repl/demo/Counter.module.css (100%) rename docs/{notes/theme => }/guide/repl/demo/Counter.ts (100%) rename docs/{notes/theme => }/guide/repl/demo/Counter.vue (100%) rename docs/{notes/theme => }/guide/repl/demo/Toggle.vue (100%) rename docs/{notes/theme => }/guide/repl/demo/normal-lib.html (100%) rename docs/{notes/theme => }/guide/repl/demo/normal.html (100%) rename docs/{notes/theme => }/guide/repl/frontend-deprecated.md (100%) rename docs/{notes/theme => }/guide/repl/frontend.md (99%) rename docs/{notes/theme => }/guide/repl/golang.md (100%) rename docs/{notes/theme => }/guide/repl/jsFiddle.md (100%) rename docs/{notes/theme => }/guide/repl/kotlin.md (100%) rename docs/{notes/theme => }/guide/repl/python.md (100%) rename docs/{notes/theme => }/guide/repl/replit.md (100%) rename docs/{notes/theme => }/guide/repl/rust.md (100%) delete mode 100644 docs/notes/theme/config/intro.md delete mode 100644 docs/notes/theme/config/notes.md delete mode 100644 docs/notes/theme/config/sidebar.md delete mode 100644 docs/notes/theme/guide/code/code-tabs.md delete mode 100644 docs/notes/theme/guide/quick-start/document.md delete mode 100644 docs/notes/theme/guide/quick-start/intro.md delete mode 100644 docs/notes/theme/guide/quick-start/locales.md delete mode 100644 docs/notes/theme/guide/quick-start/optimize-build.md delete mode 100644 docs/notes/theme/guide/quick-start/project-structure.md delete mode 100644 docs/notes/theme/guide/quick-start/usage.md delete mode 100644 docs/notes/theme/guide/quick-start/write.md rename docs/{notes/theme => }/snippet/chart-1.snippet.md (100%) rename docs/{notes/theme => }/snippet/chart-2.snippet.md (100%) rename docs/{notes/theme => }/snippet/chart-3.snippet.md (100%) rename docs/{notes/theme => }/snippet/chart-4.snippet.md (100%) rename docs/{notes/theme => }/snippet/chart-5.snippet.md (100%) rename docs/{notes/theme => }/snippet/chart-6.snippet.md (100%) rename docs/{notes/theme => }/snippet/code-block.snippet.md (100%) rename docs/{notes/theme => }/snippet/create.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-1.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-10.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-2.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-3.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-4.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-5.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-6.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-7.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-8.snippet.md (100%) rename docs/{notes/theme => }/snippet/echarts-9.snippet.md (100%) rename docs/{notes/theme => }/snippet/include-1.snippet.md (100%) rename docs/{notes/theme => }/snippet/include-2.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-1.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-10.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-11.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-12.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-13.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-14.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-15.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-16.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-17.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-2.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-3.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-4.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-5.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-6.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-7.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-8.snippet.md (100%) rename docs/{notes/theme => }/snippet/mermaid-9.snippet.md (100%) rename docs/{notes/theme => }/snippet/snippet-1.js (100%) rename docs/{notes/theme => }/snippet/whitespace.snippet.md (100%) rename docs/{notes => }/tools/README.md (100%) rename docs/{notes => }/tools/caniuse.md (100%) rename docs/{notes => }/tools/custom-theme.md (100%) rename docs/{notes => }/tools/home-hero-tint-plate.md (100%) delete mode 100644 examples/layout-slots/docs/.vuepress/navbar.ts delete mode 100644 examples/layout-slots/docs/.vuepress/notes.ts rename examples/layout-slots/docs/{ => blog}/preview/layout-page.md (100%) rename examples/layout-slots/docs/{ => blog}/preview/markdown.md (100%) rename examples/layout-slots/docs/{notes => }/demo/README.md (100%) rename examples/layout-slots/docs/{notes => }/demo/bar.md (100%) rename examples/layout-slots/docs/{notes => }/demo/foo.md (100%) delete mode 100644 theme/src/client/components/Blog/VPBlog.vue rename theme/src/client/components/{Blog => Posts}/VPCategories.vue (94%) rename theme/src/client/components/{Blog => Posts}/VPCategoriesGroup.vue (94%) rename theme/src/client/components/{Blog => Posts}/VPPagination.vue (95%) rename theme/src/client/components/{Blog => Posts}/VPPostItem.vue (81%) rename theme/src/client/components/{Blog => Posts}/VPPostList.vue (73%) create mode 100644 theme/src/client/components/Posts/VPPosts.vue rename theme/src/client/components/{Blog/VPBlogArchives.vue => Posts/VPPostsArchives.vue} (91%) rename theme/src/client/components/{Blog/VPBlogAside.vue => Posts/VPPostsAside.vue} (52%) rename theme/src/client/components/{Blog/VPBlogCategories.vue => Posts/VPPostsCategories.vue} (74%) rename theme/src/client/components/{Blog/VPBlogExtract.vue => Posts/VPPostsExtract.vue} (78%) rename theme/src/client/components/{Blog/VPBlogNav.vue => Posts/VPPostsNav.vue} (87%) rename theme/src/client/components/{Blog/VPBlogProfile.vue => Posts/VPPostsProfile.vue} (75%) rename theme/src/client/components/{Blog/VPBlogTags.vue => Posts/VPPostsTags.vue} (90%) rename theme/src/client/components/{Blog => Posts}/VPShortPostList.vue (80%) delete mode 100644 theme/src/client/composables/blog-data.ts delete mode 100644 theme/src/client/composables/blog-extract.ts create mode 100644 theme/src/client/composables/collections.ts rename theme/src/client/composables/{blog-archives.ts => posts-archives.ts} (83%) rename theme/src/client/composables/{blog-category.ts => posts-category.ts} (82%) create mode 100644 theme/src/client/composables/posts-data.ts create mode 100644 theme/src/client/composables/posts-extract.ts rename theme/src/client/composables/{blog-post-list.ts => posts-post-list.ts} (79%) rename theme/src/client/composables/{blog-tags.ts => posts-tags.ts} (74%) delete mode 100644 theme/src/node/autoFrontmatter/baseFrontmatter.ts create mode 100644 theme/src/node/autoFrontmatter/createFilter.ts create mode 100644 theme/src/node/autoFrontmatter/generate.ts delete mode 100644 theme/src/node/autoFrontmatter/generator.ts delete mode 100644 theme/src/node/autoFrontmatter/readFile.ts delete mode 100644 theme/src/node/autoFrontmatter/resolveLinkBySidebar.ts delete mode 100644 theme/src/node/autoFrontmatter/resolveOptions.ts create mode 100644 theme/src/node/autoFrontmatter/rules.ts create mode 100644 theme/src/node/collections/compat.ts create mode 100644 theme/src/node/collections/complete.ts create mode 100644 theme/src/node/collections/findCollection.ts create mode 100644 theme/src/node/collections/index.ts delete mode 100644 theme/src/node/config/resolveNotesOptions.ts create mode 100644 theme/src/node/detector/breakingChange.ts create mode 100644 theme/src/node/loadConfig/ConfigLoader.ts delete mode 100644 theme/src/node/loadConfig/loader.ts delete mode 100644 theme/src/node/prepare/prepareBlogData.ts create mode 100644 theme/src/node/prepare/prepareCollections.ts create mode 100644 theme/src/node/prepare/preparePostsData.ts create mode 100644 theme/src/node/utils/createMatcher.ts delete mode 100644 theme/src/shared/features/blog.ts create mode 100644 theme/src/shared/features/collection.ts create mode 100644 theme/src/shared/features/posts.ts create mode 100644 tsconfig.isolated.json diff --git a/cli/package.json b/cli/package.json index f03d5303..b35715c4 100644 --- a/cli/package.json +++ b/cli/package.json @@ -40,8 +40,8 @@ }, "plume-deps": { "vuepress": "2.0.0-rc.24", - "vue": "^3.5.21", + "vue": "^3.5.22", "http-server": "^14.1.1", - "typescript": "^5.9.2" + "typescript": "^5.9.3" } } diff --git a/cli/templates/.vuepress/collections.ts.handlebars b/cli/templates/.vuepress/collections.ts.handlebars new file mode 100644 index 00000000..e2df950c --- /dev/null +++ b/cli/templates/.vuepress/collections.ts.handlebars @@ -0,0 +1,124 @@ +/** + * @see https://theme-plume.vuejs.press/guide/collection/ 查看文档了解配置详情。 + * + * Collections 配置文件,它在 `.vuepress/plume.config.{{#if useTs}}ts{{else}}js{{/if}}` 中被导入。 + * + * 请注意,你应该先在这里配置好 Collections,然后再启动 vuepress,主题会在启动 vuepress 时, + * 读取这里配置的 Collections,然后在与 Collection 相关的 Markdown 文件中,自动生成 permalink。 + * + * collection 的 type 为 `post` 时,表示为 文档列表类型(即没有侧边导航栏,有文档列表页) + * 可用于实现如 博客、专栏 等以文章列表聚合形式的文档集合 (内容相对碎片化的) + * + * collection 的 type 为 `doc` 时,表示为文档类型(即有侧边导航栏) + * 可用于实现如 笔记、知识库、文档等以侧边导航栏形式的文档集合 (内容强关联、成体系的) + * 如果发现 侧边栏没有显示,那么请检查你的配置是否正确,以及 Markdown 文件中的 permalink + * 是否是以对应的 Collection 配置的 link 的前缀开头。 是否展示侧边栏是根据 页面链接 的前缀 与 `collection.link` + * 的前缀是否匹配来决定。 + */ + +/** + * 在受支持的 IDE 中会智能提示配置项。 + * + * - `defineCollections` 是用于定义 collection 集合的帮助函数 + * - `defineCollection` 是用于定义单个 collection 配置的帮助函数 + * + * 通过 `defineCollection` 定义的 collection 配置,应该填入 `defineCollections` 中 + */ +import { defineCollection, defineCollections } from 'vuepress-theme-plume' + +{{#if multiLanguage}} +{{#each locales}} +/* =================== locale: {{ lang }} ======================= */ + +const {{ prefix }}Blog = defineCollection({ + // post 类型,这里用于实现 博客功能 + type: 'post', + // 文档集合所在目录,相对于 `docs{{ path }}` + dir: 'blog', + // 文档标题,它将用于在页面的面包屑导航中显示 + title: 'Blog', + // 文章列表页的链接,如果 `linkPrefix` 未定义,它也将作为 相关的文章的 permalink 的前缀 + link: '/blog/', + // linkPrefix: '/article/', // 相关文章的链接前缀 + // postList: true, // 是否启用文章列表页 + // tags: true, // 是否启用标签页 + // archives: true, // 是否启用归档页 + // categories: true, // 是否启用分类页 + // postCover: 'right', // 文章封面位置 + // pagination: 15, // 每页显示文章数量 +}) + +const {{ prefix }}DemoDoc = defineCollection({ + // doc 类型,该类型带有侧边栏 + type: 'doc', + // 文档集合所在目录,相对于 `docs{{ path }}` + dir: 'demo', + // `dir` 所指向的目录中的所有 markdown 文件,其 permalink 需要以 `linkPrefix` 配置作为前缀 + // 如果 前缀不一致,则无法生成侧边栏。 + // 所以请确保 markdown 文件的 permalink 都以 `{{ path }}` + `linkPrefix` 开头 + linkPrefix: '/demo', + // 文档标题,它将用于在页面的面包屑导航中显示 + title: 'Demo', + // 手动配置侧边栏结构 + sidebar: ['', 'foo', 'bar'], + // 根据文件结构自动生成侧边栏 + // sidebar: 'auto', +}) + +/** + * 导出所有的 collections + * ({{ prefix }}Blog 为博客示例,如果不需要博客功能,请删除) + * ({{ prefix }}DemoDoc 为参考示例,如果不需要它,请删除) + */ +export const {{ prefix }}Collections = defineCollections([ + {{ prefix }}Blog, + {{ prefix }}DemoDoc, +]) + +{{/each}} +{{else}} +const blog = defineCollection({ + // post 类型,这里用于实现 博客功能 + type: 'post', + // 文档集合所在目录,相对于 `docs{{ path }}` + dir: 'blog', + // 文档标题,它将用于在页面的面包屑导航中显示 + title: 'Blog', + // 文章列表页的链接,如果 `linkPrefix` 未定义,它也将作为 相关的文章的 permalink 的前缀 + link: '/blog/', + // linkPrefix: '/article/', // 相关文章的链接前缀 + // postList: true, // 是否启用文章列表页 + // tags: true, // 是否启用标签页 + // archives: true, // 是否启用归档页 + // categories: true, // 是否启用分类页 + // postCover: 'right', // 文章封面位置 + // pagination: 15, // 每页显示文章数量 +}) + +const demoDoc = defineCollection({ + // doc 类型,该类型带有侧边栏 + type: 'doc', + // 文档集合所在目录,相对于 `docs{{ path }}` + dir: 'demo', + // `dir` 所指向的目录中的所有 markdown 文件,其 permalink 需要以 `linkPrefix` 配置作为前缀 + // 如果 前缀不一致,则无法生成侧边栏。 + // 所以请确保 markdown 文件的 permalink 都以 `linkPrefix` 开头 + linkPrefix: '/demo', + // 文档标题,它将用于在页面的面包屑导航中显示 + title: 'Demo', + // 手动配置侧边栏结构 + sidebar: ['', 'foo', 'bar'], + // 根据文件结构自动生成侧边栏 + // sidebar: 'auto', +}) + +/** + * 导出所有的 collections + * (blog 为博客示例,如果不需要博客功能,请删除) + * (demoDoc 为参考示例,如果不需要它,请删除) + */ +export default defineCollection([ + blog, + demoDoc, +]) +{{/if}} diff --git a/cli/templates/.vuepress/config.ts.handlebars b/cli/templates/.vuepress/config.ts.handlebars index d7946e49..9f8f658f 100644 --- a/cli/templates/.vuepress/config.ts.handlebars +++ b/cli/templates/.vuepress/config.ts.handlebars @@ -54,23 +54,6 @@ export default defineUserConfig({ // contributors: true, // changelog: false, - /** - * 博客 - * @see https://theme-plume.vuejs.press/config/basic/#blog - */ - // blog: false, // 禁用博客 - // blog: { - // postList: true, // 是否启用文章列表页 - // tags: true, // 是否启用标签页 - // archives: true, // 是否启用归档页 - // categories: true, // 是否启用分类页 - // postCover: 'right', // 文章封面位置 - // pagination: 15, // 每页显示文章数量 - // }, - - /* 博客文章页面链接前缀 */ - article: '/article/', - /** * 编译缓存,加快编译速度 * @see https://theme-plume.vuejs.press/config/basic/#cache @@ -116,9 +99,9 @@ export default defineUserConfig({ // readingTime: true, /** - * markdown - * @see https://theme-plume.vuejs.press/config/markdown/ - */ + * markdown + * @see https://theme-plume.vuejs.press/config/markdown/ + */ // markdown: { // abbr: true, // 启用 abbr 语法 *[label]: content // annotation: true, // 启用 annotation 语法 [+label]: content diff --git a/cli/templates/.vuepress/navbar.ts.handlebars b/cli/templates/.vuepress/navbar.ts.handlebars index 18071fc1..b51db15d 100644 --- a/cli/templates/.vuepress/navbar.ts.handlebars +++ b/cli/templates/.vuepress/navbar.ts.handlebars @@ -15,7 +15,7 @@ export const {{prefix}}Navbar = defineNavbarConfig([ { text: '{{#if isEn}}Archives{{else}}归档{{/if}}', link: '{{ path }}blog/archives/' }, { text: '{{#if isEn}}Notes{{else}}笔记{{/if}}', - items: [{ text: '{{#if isEn}}Demo{{else}}示例{{/if}}', link: '{{ path }}notes/demo/README.md' }] + items: [{ text: '{{#if isEn}}Demo{{else}}示例{{/if}}', link: '{{ path }}demo/README.md' }] }, ]) @@ -28,7 +28,7 @@ export default defineNavbarConfig([ { text: '{{#if isEn}}Archives{{else}}归档{{/if}}', link: '/blog/archives/' }, { text: '{{#if isEn}}Notes{{else}}笔记{{/if}}', - items: [{ text: '{{#if isEn}}Demo{{else}}示例{{/if}}', link: '/notes/demo/README.md' }] + items: [{ text: '{{#if isEn}}Demo{{else}}示例{{/if}}', link: '/demo/README.md' }] }, ]) {{/if}} diff --git a/cli/templates/.vuepress/notes.ts.handlebars b/cli/templates/.vuepress/notes.ts.handlebars deleted file mode 100644 index c13e4e43..00000000 --- a/cli/templates/.vuepress/notes.ts.handlebars +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @see https://theme-plume.vuejs.press/guide/document/ 查看文档了解配置详情。 - * - * Notes 配置文件,它在 `.vuepress/plume.config.{{#if useTs}}ts{{else}}js{{/if}}` 中被导入。 - * - * 请注意,你应该先在这里配置好 Notes,然后再启动 vuepress,主题会在启动 vuepress 时, - * 读取这里配置的 Notes,然后在与 Note 相关的 Markdown 文件中,自动生成 permalink。 - * - * 如果你发现 侧边栏没有显示,那么请检查你的配置是否正确,以及 Markdown 文件中的 permalink - * 是否是以对应的 note 配置的 link 的前缀开头。 是否展示侧边栏是根据 页面链接 的前缀 与 `note.link` - * 的前缀是否匹配来决定。 - */ - -/** - * 在受支持的 IDE 中会智能提示配置项。 - * - * - `defineNoteConfig` 是用于定义单个 note 配置的帮助函数 - * - `defineNotesConfig` 是用于定义 notes 集合的帮助函数 - * - * 通过 `defineNoteConfig` 定义的 note 配置,应该填入 `defineNotesConfig` 的 notes 数组中 - */ -import { defineNoteConfig, defineNotesConfig } from 'vuepress-theme-plume' - -{{#if multiLanguage}} -{{#each locales}} -/* =================== locale: {{ lang }} ======================= */ - -const {{ prefix }}DemoNote = defineNoteConfig({ - dir: 'demo', - // `dir` 所指向的目录中的所有 markdown 文件,其 permalink 需要以 `link` 配置作为前缀 - // 如果 前缀不一致,则无法生成侧边栏。 - // 所以请确保 markdown 文件的 permalink 都以 `link` 开头 - link: '/demo', - // 手动配置侧边栏结构 - sidebar: ['', 'foo', 'bar'], - // 根据文件结构自动生成侧边栏 - // sidebar: 'auto', -}) - -/** - * 导出所有的 note - * 每一个 note 都应该填入到 `notes.notes` 数组中 - * ({{ prefix }}DemoNote 为参考示例,如果不需要它,请删除) - */ -export const {{ prefix }}Notes = defineNotesConfig({ - dir: '{{ removeLeadingSlash path }}notes', - link: '{{ path }}', - notes: [{{ prefix }}DemoNote], -}) - -{{/each}} -{{else}} -const demoNote = defineNoteConfig({ - dir: 'demo', - // `dir` 所指向的目录中的所有 markdown 文件,其 permalink 需要以 `link` 配置作为前缀 - // 如果 前缀不一致,则无法生成侧边栏。 - // 所以请确保 markdown 文件的 permalink 都以 `link` 开头 - link: '/demo', - // 手动配置侧边栏结构 - sidebar: ['', 'foo', 'bar'], - // 根据文件结构自动生成侧边栏 - // sidebar: 'auto', -}) - -/** - * 导出所有的 note - * 每一个 note 都应该填入到 `notes.notes` 数组中 - * (DemoNote 为参考示例,如果不需要它,请删除) - */ -export default defineNotesConfig({ - dir: 'notes', - link: '/', - notes: [demoNote], -}) -{{/if}} diff --git a/cli/templates/.vuepress/plume.config.ts.handlebars b/cli/templates/.vuepress/plume.config.ts.handlebars index fb5684af..49ca144c 100644 --- a/cli/templates/.vuepress/plume.config.ts.handlebars +++ b/cli/templates/.vuepress/plume.config.ts.handlebars @@ -12,11 +12,11 @@ import { defineThemeConfig } from 'vuepress-theme-plume' {{#if multiLanguage}} +import { enCollections, zhCollections } from './collections' import { enNavbar, zhNavbar } from './navbar' -import { enNotes, zhNotes } from './notes' {{else}} import navbar from './navbar' -import notes from './notes' +import collections from './collections' {{/if}} /** @@ -64,7 +64,7 @@ export default defineThemeConfig({ }, navbar, - notes, + collections, /** * 公告板 @@ -102,7 +102,7 @@ export default defineThemeConfig({ }, navbar: {{ prefix }}Navbar, - notes: {{ prefix }}Notes, + collections: {{ prefix }}Collections, /** * 公告板 diff --git a/cli/templates/docs/en/preview/custom-component.example.md b/cli/templates/docs/en/blog/preview/custom-component.example.md similarity index 100% rename from cli/templates/docs/en/preview/custom-component.example.md rename to cli/templates/docs/en/blog/preview/custom-component.example.md diff --git a/cli/templates/docs/en/preview/markdown.md b/cli/templates/docs/en/blog/preview/markdown.md similarity index 100% rename from cli/templates/docs/en/preview/markdown.md rename to cli/templates/docs/en/blog/preview/markdown.md diff --git a/cli/templates/docs/en/notes/demo/README.md b/cli/templates/docs/en/demo/README.md similarity index 100% rename from cli/templates/docs/en/notes/demo/README.md rename to cli/templates/docs/en/demo/README.md diff --git a/cli/templates/docs/en/notes/demo/bar.md b/cli/templates/docs/en/demo/bar.md similarity index 100% rename from cli/templates/docs/en/notes/demo/bar.md rename to cli/templates/docs/en/demo/bar.md diff --git a/cli/templates/docs/en/notes/demo/foo.md b/cli/templates/docs/en/demo/foo.md similarity index 100% rename from cli/templates/docs/en/notes/demo/foo.md rename to cli/templates/docs/en/demo/foo.md diff --git a/cli/templates/docs/zh/preview/custom-component.example.md b/cli/templates/docs/zh/blog/preview/custom-component.example.md similarity index 100% rename from cli/templates/docs/zh/preview/custom-component.example.md rename to cli/templates/docs/zh/blog/preview/custom-component.example.md diff --git a/cli/templates/docs/zh/preview/markdown.md b/cli/templates/docs/zh/blog/preview/markdown.md similarity index 100% rename from cli/templates/docs/zh/preview/markdown.md rename to cli/templates/docs/zh/blog/preview/markdown.md diff --git a/cli/templates/docs/zh/notes/demo/README.md b/cli/templates/docs/zh/demo/README.md similarity index 100% rename from cli/templates/docs/zh/notes/demo/README.md rename to cli/templates/docs/zh/demo/README.md diff --git a/cli/templates/docs/zh/notes/demo/bar.md b/cli/templates/docs/zh/demo/bar.md similarity index 100% rename from cli/templates/docs/zh/notes/demo/bar.md rename to cli/templates/docs/zh/demo/bar.md diff --git a/cli/templates/docs/zh/notes/demo/foo.md b/cli/templates/docs/zh/demo/foo.md similarity index 100% rename from cli/templates/docs/zh/notes/demo/foo.md rename to cli/templates/docs/zh/demo/foo.md diff --git a/docs/.vuepress/client.ts b/docs/.vuepress/client.ts index 62615b1b..174c20d7 100644 --- a/docs/.vuepress/client.ts +++ b/docs/.vuepress/client.ts @@ -2,6 +2,7 @@ import type { ClientConfig } from 'vuepress/client' import { defineMermaidConfig } from '@vuepress/plugin-markdown-chart/client' import { h } from 'vue' import { Layout } from 'vuepress-theme-plume/client' +import VPPostItem from 'vuepress-theme-plume/components/Posts/VPPostItem.vue' import { defineClientConfig } from 'vuepress/client' import AsideNav from '~/components/AsideNav.vue' import { setupThemeColors } from '~/composables/theme-colors.js' @@ -14,6 +15,9 @@ defineMermaidConfig({ }) export default defineClientConfig({ + enhance({ app }) { + app.component('VPPostItem', VPPostItem) + }, setup() { setupThemeColors() }, diff --git a/docs/.vuepress/collections/en/index.ts b/docs/.vuepress/collections/en/index.ts new file mode 100644 index 00000000..470db265 --- /dev/null +++ b/docs/.vuepress/collections/en/index.ts @@ -0,0 +1,8 @@ +import { defineCollections, type ThemeCollections } from 'vuepress-theme-plume' +import { themeConfig } from './theme-config.js' +import { themeGuide } from './theme-guide.js' + +export const enCollections: ThemeCollections = defineCollections([ + themeGuide, + themeConfig, +]) diff --git a/docs/.vuepress/notes/en/theme-config.ts b/docs/.vuepress/collections/en/theme-config.ts similarity index 55% rename from docs/.vuepress/notes/en/theme-config.ts rename to docs/.vuepress/collections/en/theme-config.ts index 0f34ec4f..7703a50f 100644 --- a/docs/.vuepress/notes/en/theme-config.ts +++ b/docs/.vuepress/collections/en/theme-config.ts @@ -1,9 +1,11 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' +import type { ThemeCollectionItem } from 'vuepress-theme-plume' +import { defineCollection } from 'vuepress-theme-plume' -export const themeConfig: ThemeNote = defineNoteConfig({ - dir: 'theme/config', - link: '/config/', +export const themeConfig: ThemeCollectionItem = defineCollection({ + type: 'doc', + dir: 'config', + title: 'Config', + linkPrefix: '/config/', sidebar: [ { text: 'Config', diff --git a/docs/.vuepress/notes/en/theme-guide.ts b/docs/.vuepress/collections/en/theme-guide.ts similarity index 82% rename from docs/.vuepress/notes/en/theme-guide.ts rename to docs/.vuepress/collections/en/theme-guide.ts index 91637f65..aa12d876 100644 --- a/docs/.vuepress/notes/en/theme-guide.ts +++ b/docs/.vuepress/collections/en/theme-guide.ts @@ -1,9 +1,11 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' +import type { ThemeCollectionItem } from 'vuepress-theme-plume' +import { defineCollection } from 'vuepress-theme-plume' -export const themeGuide: ThemeNote = defineNoteConfig({ - dir: 'theme/guide', - link: '/guide/', +export const themeGuide: ThemeCollectionItem = defineCollection({ + type: 'doc', + dir: 'guide', + title: 'Guide', + linkPrefix: '/guide/', sidebar: [ { text: 'Quick Start', diff --git a/docs/.vuepress/notes/index.ts b/docs/.vuepress/collections/index.ts similarity index 100% rename from docs/.vuepress/notes/index.ts rename to docs/.vuepress/collections/index.ts diff --git a/docs/.vuepress/collections/zh/index.ts b/docs/.vuepress/collections/zh/index.ts new file mode 100644 index 00000000..9ec13e7a --- /dev/null +++ b/docs/.vuepress/collections/zh/index.ts @@ -0,0 +1,10 @@ +import { defineCollections, type ThemeCollections } from 'vuepress-theme-plume' +import { themeConfig } from './theme-config.js' +import { themeGuide } from './theme-guide.js' +import { tools } from './tools.js' + +export const zhCollections: ThemeCollections = defineCollections([ + themeGuide, + themeConfig, + tools, +]) diff --git a/docs/.vuepress/notes/zh/theme-config.ts b/docs/.vuepress/collections/zh/theme-config.ts similarity index 72% rename from docs/.vuepress/notes/zh/theme-config.ts rename to docs/.vuepress/collections/zh/theme-config.ts index f85b554b..d2ffce4f 100644 --- a/docs/.vuepress/notes/zh/theme-config.ts +++ b/docs/.vuepress/collections/zh/theme-config.ts @@ -1,9 +1,11 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' +import type { ThemeCollectionItem } from 'vuepress-theme-plume' +import { defineCollection } from 'vuepress-theme-plume' -export const themeConfig: ThemeNote = defineNoteConfig({ - dir: 'theme/config', - link: '/config/', +export const themeConfig: ThemeCollectionItem = defineCollection({ + type: 'doc', + title: '配置', + dir: 'config', + linkPrefix: '/config/', sidebar: [ { text: '配置', @@ -13,8 +15,8 @@ export const themeConfig: ThemeNote = defineNoteConfig({ 'theme', 'locales', 'navbar', - 'notes', 'sidebar', + 'collections', 'markdown', ], }, diff --git a/docs/.vuepress/notes/zh/theme-guide.ts b/docs/.vuepress/collections/zh/theme-guide.ts similarity index 89% rename from docs/.vuepress/notes/zh/theme-guide.ts rename to docs/.vuepress/collections/zh/theme-guide.ts index 49ecbe52..18f56c28 100644 --- a/docs/.vuepress/notes/zh/theme-guide.ts +++ b/docs/.vuepress/collections/zh/theme-guide.ts @@ -1,9 +1,11 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' +import type { ThemeCollectionItem } from 'vuepress-theme-plume' +import { defineCollection } from 'vuepress-theme-plume' -export const themeGuide: ThemeNote = defineNoteConfig({ - dir: 'theme/guide', - link: '/guide/', +export const themeGuide: ThemeCollectionItem = defineCollection({ + type: 'doc', + dir: 'guide', + title: '指南', + linkPrefix: '/guide/', sidebar: [ { text: '从这里开始', @@ -14,9 +16,13 @@ export const themeGuide: ThemeNote = defineNoteConfig({ 'intro', 'usage', 'project-structure', + { + text: '集合', + link: 'collection', + items: ['collection-post', 'collection-doc'], + }, + 'sidebar', 'write', - 'blog', - 'document', 'locales', 'deployment', 'optimize-build', diff --git a/docs/.vuepress/collections/zh/tools.ts b/docs/.vuepress/collections/zh/tools.ts new file mode 100644 index 00000000..6143cf10 --- /dev/null +++ b/docs/.vuepress/collections/zh/tools.ts @@ -0,0 +1,20 @@ +import type { ThemeCollectionItem } from 'vuepress-theme-plume' +import { defineCollection } from 'vuepress-theme-plume' + +export const tools: ThemeCollectionItem = defineCollection({ + type: 'doc', + dir: 'tools', + title: '工具', + linkPrefix: '/tools/', + sidebar: [ + { + text: '工具', + icon: 'tabler:tools', + items: [ + 'custom-theme', + 'home-hero-tint-plate', + 'caniuse', + ], + }, + ], +}) diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index 5463f312..c981be5e 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -28,7 +28,7 @@ export default defineUserConfig({ ['meta', { name: 'google-site-verification', content: 'AaTP7bapCAcoO9ZGE67ilpy99GL6tYqtD30tRHjO9Ps' }], ], - pagePatterns: ['**/*.md', '!**/*.snippet.md', '!.vuepress', '!node_modules', '!docs/notes/theme/guide/代码演示/demo/*'], + pagePatterns: ['**/*.md', '!**/*.snippet.md', '!.vuepress', '!node_modules', '!docs/guide/repl/demo/*'], extendsBundlerOptions(bundlerOptions, app) { addViteOptimizeDepsInclude(bundlerOptions, app, '@simonwep/pickr') diff --git a/docs/.vuepress/llmstxtTOC.ts b/docs/.vuepress/llmstxtTOC.ts index e296c026..c390fa89 100644 --- a/docs/.vuepress/llmstxtTOC.ts +++ b/docs/.vuepress/llmstxtTOC.ts @@ -2,13 +2,7 @@ import type { LLMPage, LLMState } from '@vuepress/plugin-llms' import type { ThemeSidebarItem } from 'vuepress-theme-plume' import { generateTOCLink as rawGenerateTOCLink } from '@vuepress/plugin-llms' import { ensureEndingSlash, ensureLeadingSlash } from 'vuepress/shared' -import { zhNotes } from './notes/zh/index.js' - -const noteNames = { - '/guide/': '指南', - '/config/': '配置', - '/tools/': '工具', -} +import { zhCollections } from './collections/zh/index.js' function normalizePath(prefix: string, path = ''): string { if (path.startsWith('/')) @@ -79,9 +73,9 @@ export function tocGetter(llmPages: LLMPage[], llmState: LLMState): string { } // Notes - zhNotes.notes.forEach(({ dir, link, sidebar = [] }) => { - tableOfContent += `### ${noteNames[link]}\n\n` - const prefix = normalizePath('/notes/', dir) + zhCollections.filter(note => note.type === 'doc').forEach(({ dir, title, sidebar = [] }) => { + tableOfContent += `### ${title}\n\n` + const prefix = normalizePath(dir) if (sidebar === 'auto') { tableOfContent += `${processAutoSidebar(prefix).join('')}\n` } diff --git a/docs/.vuepress/navbar.ts b/docs/.vuepress/navbar.ts index 0c310390..870e62a3 100644 --- a/docs/.vuepress/navbar.ts +++ b/docs/.vuepress/navbar.ts @@ -6,13 +6,13 @@ export const zhNavbar: ThemeNavItem[] = defineNavbarConfig([ { text: '指南', icon: 'icon-park-outline:guide-board', - link: '/notes/theme/guide/quick-start/intro.md', + link: '/guide/quick-start/intro.md', activeMatch: '^/guide/', }, { text: '配置', icon: 'icon-park-outline:setting-two', - link: '/notes/theme/config/intro.md', + link: '/config/intro.md', activeMatch: '^/config/', }, { diff --git a/docs/.vuepress/notes/en/index.ts b/docs/.vuepress/notes/en/index.ts deleted file mode 100644 index af7fd886..00000000 --- a/docs/.vuepress/notes/en/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { ThemeNoteListOptions } from 'vuepress-theme-plume' -import { defineNotesConfig } from 'vuepress-theme-plume' -import { themeConfig } from './theme-config' -import { themeGuide } from './theme-guide' - -export const enNotes: ThemeNoteListOptions = defineNotesConfig({ - dir: 'en/notes', - link: '/', - notes: [ - themeGuide, - themeConfig, - ], -}) diff --git a/docs/.vuepress/notes/zh/index.ts b/docs/.vuepress/notes/zh/index.ts deleted file mode 100644 index 4061e77d..00000000 --- a/docs/.vuepress/notes/zh/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { ThemeNoteListOptions } from 'vuepress-theme-plume' -import { defineNotesConfig } from 'vuepress-theme-plume' -// import { plugins } from './plugins' -import { themeConfig } from './theme-config' -import { themeGuide } from './theme-guide' -import { tools } from './tools' - -export const zhNotes: ThemeNoteListOptions = defineNotesConfig({ - dir: 'notes', - link: '/', - notes: [ - themeGuide, - themeConfig, - // plugins, - tools, - ], -}) diff --git a/docs/.vuepress/notes/zh/plugins.ts b/docs/.vuepress/notes/zh/plugins.ts deleted file mode 100644 index 24d7828c..00000000 --- a/docs/.vuepress/notes/zh/plugins.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' - -export const plugins: ThemeNote = defineNoteConfig({ - dir: 'plugins', - link: '/plugins/', - sidebar: [ - { - text: '插件', - link: '/plugins/', - items: [ - // 'caniuse', - // 'iconify', - 'shiki', - 'md-power', - 'content-updated', - { - text: 'plugin-netlify-functions', - dir: 'netlify-functions', - link: '/plugins/plugin-netlify-functions/', - collapsed: true, - items: [ - '介绍', - '使用', - '功能', - 'api', - 'functions', - ], - }, - ], - }, - ], -}) diff --git a/docs/.vuepress/notes/zh/tools.ts b/docs/.vuepress/notes/zh/tools.ts deleted file mode 100644 index 8e1924d3..00000000 --- a/docs/.vuepress/notes/zh/tools.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { ThemeNote } from 'vuepress-theme-plume' -import { defineNoteConfig } from 'vuepress-theme-plume' - -export const tools: ThemeNote = defineNoteConfig({ - dir: 'tools', - link: '/tools/', - sidebar: [ - { - text: '工具', - icon: 'tabler:tools', - items: [ - 'custom-theme', - 'home-hero-tint-plate', - 'caniuse', - ], - }, - ], -}) diff --git a/docs/.vuepress/plume.config.ts b/docs/.vuepress/plume.config.ts index 61a1d0ad..6bdc0bc2 100644 --- a/docs/.vuepress/plume.config.ts +++ b/docs/.vuepress/plume.config.ts @@ -1,8 +1,8 @@ import type { ThemeConfig } from 'vuepress-theme-plume' import path from 'node:path' import { defineThemeConfig } from 'vuepress-theme-plume' +import { enCollections, zhCollections } from './collections/index.js' import { enNavbar, zhNavbar } from './navbar.js' -import { enNotes, zhNotes } from './notes/index.js' export default defineThemeConfig({ logo: '/plume.png', @@ -27,12 +27,24 @@ export default defineThemeConfig({ locales: { '/': { - notes: zhNotes, + // notes: zhNotes, navbar: zhNavbar, + collections: [ + // 博客 + { type: 'post', dir: '/blog/', link: '/blog/', title: '博客' }, + // 文档 + ...zhCollections, + ], }, '/en/': { - notes: enNotes, + // notes: enNotes, navbar: enNavbar, + collections: [ + // 博客 + { type: 'post', dir: '/blog/', link: '/blog/', title: 'Blog' }, + // 文档 + ...enCollections, + ], }, }, @@ -41,7 +53,6 @@ export default defineThemeConfig({ '/article/enx7c9s/': '123456', }, }, - autoFrontmatter: { exclude: ['**/*.snippet.*'] }, bulletin: { layout: 'top-right', diff --git a/docs/README.md b/docs/README.md index 330bf4de..fed3c84f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -174,6 +174,7 @@ npm run docs:dev 'Hammuu1112', 'SherkeyXD', { github: 'Kinneyzhang', name: 'Geekinney' }, + 'huyunan', ]" /> diff --git a/docs/1.示例/markdown基础.md b/docs/blog/1.示例/markdown基础.md similarity index 100% rename from docs/1.示例/markdown基础.md rename to docs/blog/1.示例/markdown基础.md diff --git a/docs/1.示例/markdown扩展.md b/docs/blog/1.示例/markdown扩展.md similarity index 99% rename from docs/1.示例/markdown扩展.md rename to docs/blog/1.示例/markdown扩展.md index 9ba791cc..e562b441 100644 --- a/docs/1.示例/markdown扩展.md +++ b/docs/blog/1.示例/markdown扩展.md @@ -590,7 +590,7 @@ export default config **输出:** -@[code](../notes/theme/snippet/snippet-1.js) +@[code](../../snippet/snippet-1.js) 如果你只想导入这个文件的一部分: diff --git a/docs/1.示例/全屏水印.md b/docs/blog/1.示例/全屏水印.md similarity index 100% rename from docs/1.示例/全屏水印.md rename to docs/blog/1.示例/全屏水印.md diff --git a/docs/1.示例/内容水印.md b/docs/blog/1.示例/内容水印.md similarity index 100% rename from docs/1.示例/内容水印.md rename to docs/blog/1.示例/内容水印.md diff --git a/docs/1.示例/加密文章.md b/docs/blog/1.示例/加密文章.md similarity index 100% rename from docs/1.示例/加密文章.md rename to docs/blog/1.示例/加密文章.md diff --git a/docs/1.示例/图片水印.md b/docs/blog/1.示例/图片水印.md similarity index 100% rename from docs/1.示例/图片水印.md rename to docs/blog/1.示例/图片水印.md diff --git a/docs/1.示例/照片类作品示例.md b/docs/blog/1.示例/照片类作品示例.md similarity index 100% rename from docs/1.示例/照片类作品示例.md rename to docs/blog/1.示例/照片类作品示例.md diff --git a/docs/1.示例/示例文章.md b/docs/blog/1.示例/示例文章.md similarity index 100% rename from docs/1.示例/示例文章.md rename to docs/blog/1.示例/示例文章.md diff --git a/docs/1.示例/示例文章2.md b/docs/blog/1.示例/示例文章2.md similarity index 100% rename from docs/1.示例/示例文章2.md rename to docs/blog/1.示例/示例文章2.md diff --git a/docs/1.示例/示例文章3.md b/docs/blog/1.示例/示例文章3.md similarity index 100% rename from docs/1.示例/示例文章3.md rename to docs/blog/1.示例/示例文章3.md diff --git a/docs/1.示例/示例文章4.md b/docs/blog/1.示例/示例文章4.md similarity index 100% rename from docs/1.示例/示例文章4.md rename to docs/blog/1.示例/示例文章4.md diff --git a/docs/1.示例/示例文章5.md b/docs/blog/1.示例/示例文章5.md similarity index 100% rename from docs/1.示例/示例文章5.md rename to docs/blog/1.示例/示例文章5.md diff --git a/docs/1.示例/示例文章6.md b/docs/blog/1.示例/示例文章6.md similarity index 100% rename from docs/1.示例/示例文章6.md rename to docs/blog/1.示例/示例文章6.md diff --git a/docs/1.示例/示例文章7.md b/docs/blog/1.示例/示例文章7.md similarity index 100% rename from docs/1.示例/示例文章7.md rename to docs/blog/1.示例/示例文章7.md diff --git a/docs/1.示例/示例文章8.md b/docs/blog/1.示例/示例文章8.md similarity index 100% rename from docs/1.示例/示例文章8.md rename to docs/blog/1.示例/示例文章8.md diff --git a/docs/1.示例/示例文章9.md b/docs/blog/1.示例/示例文章9.md similarity index 100% rename from docs/1.示例/示例文章9.md rename to docs/blog/1.示例/示例文章9.md diff --git a/docs/2.preview/主题效果预览.md b/docs/blog/2.preview/主题效果预览.md similarity index 100% rename from docs/2.preview/主题效果预览.md rename to docs/blog/2.preview/主题效果预览.md diff --git a/docs/3.更新说明/102-103.md b/docs/blog/3.更新说明/102-103.md similarity index 100% rename from docs/3.更新说明/102-103.md rename to docs/blog/3.更新说明/102-103.md diff --git a/docs/3.更新说明/120.md b/docs/blog/3.更新说明/120.md similarity index 100% rename from docs/3.更新说明/120.md rename to docs/blog/3.更新说明/120.md diff --git a/docs/3.更新说明/144.md b/docs/blog/3.更新说明/144.md similarity index 100% rename from docs/3.更新说明/144.md rename to docs/blog/3.更新说明/144.md diff --git a/docs/3.更新说明/154.md b/docs/blog/3.更新说明/154.md similarity index 99% rename from docs/3.更新说明/154.md rename to docs/blog/3.更新说明/154.md index 673aea89..88cf5b9b 100644 --- a/docs/3.更新说明/154.md +++ b/docs/blog/3.更新说明/154.md @@ -2,7 +2,6 @@ title: 1.0.0-rc.154 更新说明 createTime: 2025/06/19 18:10:18 permalink: /article/yw0dmwcm/ -sticky: true tags: - 破坏性更新 --- diff --git a/docs/blog/3.更新说明/165.md b/docs/blog/3.更新说明/165.md new file mode 100644 index 00000000..cfac9295 --- /dev/null +++ b/docs/blog/3.更新说明/165.md @@ -0,0 +1,188 @@ +--- +title: ⚠️ 1.0.0-rc.165 破坏性更新说明:博客与笔记功能迁移至“集合” +sticky: true +createTime: 2025/09/28 22:18:52 +permalink: /blog/dk58a4t2/ +tags: + - 破坏性更新 + - 重要更新 +--- + +:::important ‼️ 本次更新为破坏性更新!博客与笔记功能已整体迁移至全新的“集合”架构。‼️ +::: + + + +## 设计动机:为什么引入“集合”? + +[跳转至迁移指南 👇👇👇](#迁移指南){.read-more} + +### 背景与问题分析 + +主题最初仅支持**博客**功能,将 `docs` 源目录下的所有 Markdown 文件识别为博客文章。随着版本迭代,我们新增了**笔记/知识库**功能,默认将 `notes` 目录作为笔记根目录,并将其内容从博客列表中排除。 + +这种分阶段实现导致了**架构上的不平衡**:博客成为“一等公民”,而笔记功能则显得边缘化。这给用户带来了以下困扰: + +- **路径冗余**:笔记文件必须存放在 `notes/` 目录下,增加了不必要的目录层级 +- **链接复杂**:未开启 `autoFrontmatter` 时,URL 会强制包含 `/notes/` 前缀 +- **概念混淆**:用户常困惑于“笔记”与“文档”的功能区别 +- **配置繁琐**:需要额外调整 `notes.dir` 配置才能实现标准文档站结构 + +这些设计缺陷源于历史迭代的遗留问题,我们对此深表歉意。 + +### 解决方案:统一的内容抽象 + +经过对主流静态站点生成器(如 Hugo、VitePress)和全栈框架(如 Nuxt)的调研,我们从 `@nuxt/content` 的 `collection` 概念中获得灵感。 + +我们决定引入**集合**作为统一的内容组织单元。无论是博客、笔记、文档还是知识库,本质上都是 Markdown 文件的特定集合,只是在呈现方式上有所差异。 + +:::important 核心洞察:通过“集合”抽象,统一各类内容的组织形式,同时保留各自的展示特性。 +::: + +基于内容特征,我们定义了两种集合类型: + +- **`post` 类型**:适用于碎片化、关联性弱的内容(如博客、专栏),提供文章列表作为导航入口 +- **`doc` 类型**:适用于结构化、关联性强的内容(如文档、手册),提供侧边栏进行快速导航 + +这一设计既解决了历史架构问题,又为未来扩展更多内容类型奠定了基础。 + +## 迁移指南 + +### 核心概念 + +- **集合**:通过 `collection.dir` 指定目录,该目录下所有 Markdown 文件均归属该集合 +- **集合类型**: + - `post`:碎片化内容,支持文章列表导航 + - `doc`:结构化内容,支持侧边栏导航 + +### 配置迁移 + +替换原有的 `blog` 和 `notes` 配置: + +```ts twoslash +// @noErrors +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // [!code --:9] + // 移除旧的 blog 和 notes 配置 + blog: { /* 博客配置 */ }, + notes: { + link: '/', + dir: '/notes/', + notes: [ + { dir: 'typescript', link: '/typescript/', sidebar: 'auto' } + ] + }, + // [!code ++:16] + // 使用 collections 配置 + collections: [ + { + type: 'post', // 替代原博客功能 + dir: 'blog', // 指向 docs/blog 目录 + title: '博客' // 集合显示名称 + // 原博客配置继续保留 + // ... + }, + { + type: 'doc', // 替代原笔记功能 + dir: 'typescript', // 指向 docs/typescript 目录 + title: 'TypeScript笔记', + sidebar: 'auto', // 自动生成侧边栏 + }, + ] + }) +}) +``` + +### 目录结构调整 + +按照以下步骤迁移文件: + +**操作步骤:** + +1. 将 `notes` 目录下的子目录直接移至 `docs` 根目录 +2. 创建 `blog` 目录,将原博客文章移入其中 +3. 移除空的 `notes` 目录 + +:::: flex + +
+ +::: file-tree title="迁移前结构" + +- docs + - -- notes + - typescript + - basic.md + - advanced.md + - blog-cate-1 + - post-1.md + - blog-cate-2 + - post-2.md + - blog-post.md + - README.md +::: + +
+ +
+ +
+ +:::file-tree title="迁移后结构" + +- docs + - typescript + - basic.md + - advanced.md + - ++ blog + - blog-cate-1 + - post-1.md + - blog-cate-2 + - post-2.md + - blog-post.md + - README.md + +::: + +
+ +:::: + +### 帮助函数 + +- `defineCollection`:用于定义单个 collection 配置的帮助函数 +- `defineCollections`:用于定义多个 collection 配置的帮助函数 + +```ts twoslash +import { defineCollection, defineCollections } from 'vuepress-theme-plume' + +export const blog = defineCollection({ + type: 'post', + dir: 'blog', + title: '博客' +}) + +export const typescript = defineCollection({ + type: 'doc', + dir: 'typescript', + title: 'TypeScript笔记', + sidebar: 'auto' +}) + +export const collections = defineCollections([ + blog, + typescript +]) +``` + +## 详细文档 + +[集合文档](../../guide/quick-start/collection.md){.read-more} + +[post 集合](../../guide/quick-start/collection-post.md){.read-more} + +[doc 集合](../../guide/quick-start/collection-doc.md){.read-more} diff --git a/docs/3.更新说明/73-77.md b/docs/blog/3.更新说明/73-77.md similarity index 100% rename from docs/3.更新说明/73-77.md rename to docs/blog/3.更新说明/73-77.md diff --git a/docs/4.教程/frontmatter.md b/docs/blog/4.教程/frontmatter.md similarity index 100% rename from docs/4.教程/frontmatter.md rename to docs/blog/4.教程/frontmatter.md diff --git a/docs/config/collections.md b/docs/config/collections.md new file mode 100644 index 00000000..7a4245d4 --- /dev/null +++ b/docs/config/collections.md @@ -0,0 +1,528 @@ +--- +title: 集合配置 +createTime: 2025/09/28 14:00:06 +permalink: /config/collections/ +--- + +## 概述 + +**Collections(集合)** 是主题中用于组织和管理文档的核心概念。每个集合指向源目录下的特定文件夹,将其中的所有 Markdown 文件作为一个逻辑单元进行管理。 + +通过灵活的集合配置,您可以轻松构建多种内容体系: + +- **博客** - 个人随笔与技术分享 +- **专栏** - 专题系列文章 +- **使用手册** - 产品使用文档 +- **笔记** - 学习笔记与知识整理 +- **产品文档** - 完整的项目文档 +- **知识库** - 团队知识管理体系 + +集合主要分为两种类型,适应不同的内容组织需求: + +- **`post` 类型**:适用于碎片化内容,文章间关联较弱,如博客、专栏等 +- **`doc` 类型**:适用于结构化文档,内容关联紧密,如使用手册、产品文档、知识库等 + +::: tip 配置位置 +集合配置支持在 `.vuepress/config.ts` 或独立的 `plume.config.ts` 文件中进行配置。 +::: + +## 基础配置 + +假设您的项目采用以下目录结构: + +::: file-tree title="项目结构" + +- docs + - **blog** + - post-1.md + - post-2.md + - **typescript** + - basic + - intro.md + - variable.md + - types.md +::: + +对应的集合配置示例如下: + +::: code-tabs#configs + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // 集合配置 // [!code focus:7] + collections: [ + // 注册 post 类型集合,实现博客功能 + { type: 'post', dir: 'blog', title: '博客' }, + // 注册 doc 类型集合,实现 TypeScript 文档功能 + { type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } + ], + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + // 独立配置文件中的集合配置 // [!code focus:7] + collections: [ + { type: 'post', dir: 'blog', title: '博客' }, + { type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } + ], +}) +``` + +::: + +## 多语言配置 + +对于多语言项目,您可以在 `locales` 字段中为每种语言单独配置集合: + +::: file-tree title="多语言项目结构" + +- docs + - **blog/** + - post-1.md + - post-2.md + - **typescript/** + - basic + - intro.md + - variable.md + - types.md + - en + - **blog/** + - post-1.md + - post-2.md + - **typescript/** + - basic + - intro.md + - variable.md + - types.md +::: + +::: code-tabs#configs + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + locales: { + '/': { + // 中文集合配置 // [!code focus:4] + collections: [ + { type: 'post', dir: 'blog', title: '博客' }, + { type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } + ], + }, + '/en/': { + // 英文集合配置 // [!code focus:4] + collections: [ + { type: 'post', dir: 'blog', title: 'Blog' }, + { type: 'doc', dir: 'typescript', title: 'TypeScript Note', sidebar: 'auto' } + ], + } + } + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + locales: { + '/': { + // 中文集合配置 // [!code focus:4] + collections: [ + { type: 'post', dir: 'blog', title: '博客' }, + { type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } + ], + }, + '/en/': { + // 英文集合配置 // [!code focus:4] + collections: [ + { type: 'post', dir: 'blog', title: 'Blog' }, + { type: 'doc', dir: 'typescript', title: 'TypeScript Note', sidebar: 'auto' } + ], + } + } +}) +``` + +::: + +## Post 集合详解 + +Post 集合专为博客、专栏等碎片化内容设计,提供完整的文章管理体系: + +### 核心功能 + +- **文章列表页** - 支持文章置顶、封面图、摘要显示、个人信息等 +- **文章分类页** - 基于目录结构自动生成分类 +- **文章标签页** - 灵活的标签管理 +- **文章归档页** - 按时间维度组织内容 + +### 配置示例 + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + // 博客集合配置 + { + type: 'post', + dir: 'blog', + title: '博客', + link: '/blog/', // 列表页链接 + linkPrefix: '/article/', // 文章链接前缀 + postCover: 'top', // 封面图位置 + autoFrontmatter: { permalink: true }, // 自动 frontmatter + }, + // 面试专栏配置 + { + type: 'post', + dir: 'interview', + title: '面试专栏', + link: '/interview/', // 列表页链接 + } + ] +}) +``` + +## Doc 集合详解 + +Doc 集合适用于结构化文档,强调内容间的逻辑关系: + +### 核心功能 + +- **侧边导航栏** - 提供清晰的文档结构导航 +- **自动生成目录** - 基于文件结构智能生成侧边栏 +- **多级嵌套支持** - 支持复杂的文档层次结构 + +### 配置示例 + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + // TypeScript 笔记 - 自动生成侧边栏 + { + type: 'doc', + dir: 'typescript', + title: 'TypeScript笔记', + sidebar: 'auto' + }, + // Python 笔记 - 手动配置侧边栏 + { + type: 'doc', + dir: 'python', + title: 'Python 笔记', + sidebar: [ + { text: '基础语法', link: 'basic' }, + { + text: 'API 文档', + items: [ + { text: 'asyncio', link: 'asyncio' } + ] + }, + 'advanced' // 简写形式 + ] + } + ] +}) +``` + +## 配置类型声明 + +### 基础集合配置 + +```ts +/* 集合配置数组 */ +type ThemeCollections = ThemeCollectionItem[] + +/* 单个集合项 */ +type ThemeCollectionItem = ThemePostCollection | ThemeDocCollection + +/* 集合公共配置 */ +interface ThemeBaseCollection { + /** + * 集合类型 + * - `post`: 文章列表(博客、专栏) + * - `doc`: 结构化文档(笔记、知识库) + */ + type: 'post' | 'doc' + /** + * 文档目录(相对于源目录) + */ + dir: string + /** + * 文章链接前缀 + */ + linkPrefix?: string + /** + * 集合标题(用于面包屑导航) + */ + title: string + /** + * 标签颜色主题 + * @default 'colored' + */ + tagsTheme?: 'colored' | 'gray' | 'brand' + /** + * 自动生成 frontmatter + */ + autoFrontmatter?: AutoFrontmatterOptions | false +} +``` + +### Post 集合专用配置 + +```ts title="Post 集合配置" +interface ThemePostCollection extends ThemeBaseCollection { + type: 'post' + /** + * 包含文件规则(glob 模式) + * @default ['**\/*.md'] + */ + include?: string[] + /** + * 排除文件规则(glob 模式) + * @default [] + */ + exclude?: string[] + /** + * 分页配置 + */ + pagination?: false | number | { + /** + * 每页文章数量 + * @default 15 + */ + perPage?: number + } + /** + * 文章列表页链接 + * @default '/{dir}/' + */ + link?: string + /** + * 是否启用文章列表页 + * @default true + */ + postList?: boolean + /** + * 是否启用标签页 + * @default true + */ + tags?: boolean + /** + * 标签页链接 + * @default '/{link}/tags/' + */ + tagsLink?: string + /** + * 标签页文本 + */ + tagsText?: string + /** + * 是否启用归档页 + * @default true + */ + archives?: boolean + /** + * 归档页链接 + * @default '/{link}/archives/' + */ + archivesLink?: string + /** + * 归档页文本 + */ + archivesText?: string + /** + * 是否启用分类功能 + * @default true + */ + categories?: boolean + /** + * 分类页链接 + * @default '/{link}/categories/' + */ + categoriesLink?: string + /** + * 分类页文本 + */ + categoriesText?: string + /** + * 分类展开深度 + * @default 'deep' + */ + categoriesExpand?: number | 'deep' + /** + * 分类列表转换函数 + */ + categoriesTransform?: (categories: PostsCategoryItem[]) => PostsCategoryItem[] + /** + * 文章封面图配置 + * @default 'right' + */ + postCover?: PostsCoverLayout | PostsCoverStyle + /** + * 个人信息配置 + */ + profile?: ProfileOptions | false + /** + * 社交账号配置 + */ + social?: SocialLink[] | false +} +/* 文章分类项 */ +interface PostsCategoryItem { + id: string + sort: number + name: string +} +/* 封面图布局 */ +type PostsCoverLayout = 'left' | 'right' | 'odd-left' | 'odd-right' | 'top' +/* 封面图样式 */ +interface PostsCoverStyle { + layout?: PostsCoverLayout + ratio?: number | `${number}:${number}` | `${number}/${number}` + width?: number + compact?: boolean +} +/* 社交链接图标 */ +type SocialLinkIcon = SocialLinkIconUnion | { svg: string, name?: string } +/* 社交链接 */ +interface SocialLink { + icon: SocialLinkIcon + link: string + ariaLabel?: string +} + +/** + * 个人资料 + */ +export interface ProfileOptions { + /** + * 头像链接地址 + */ + avatar?: string + /** + * 名称 + */ + name?: string + /** + * 描述 / 简介 / 座右铭 / 签名 + */ + description?: string + /** + * 是否显示为圆形头像 + */ + circle?: boolean + /** + * 地理位置 + */ + location?: string + /** + * 组织,公司 + */ + organization?: string + /** + * 布局位置,左侧或者右侧 + * @default 'right' + */ + layout?: 'left' | 'right' +} +``` + +### Doc 集合专用配置 + +```ts title="Doc 集合配置" +interface ThemeDocCollection extends ThemeBaseCollection { + type: 'doc' + /** + * 侧边栏配置 + */ + sidebar?: 'auto' | (string | ThemeSidebarItem)[] + /** + * 是否显示侧边栏滚动条 + * @default true + */ + sidebarScrollbar?: boolean + /** + * 侧边栏默认折叠状态 + * @default false + */ + sidebarCollapsed?: boolean +} + +/* 侧边栏项配置 */ +interface ThemeSidebarItem { + text?: string + link?: string + icon?: ThemeIcon + badge?: string | ThemeBadge + items?: 'auto' | (string | ThemeSidebarItem)[] + collapsed?: boolean + prefix?: string + rel?: string + target?: string +} + +/* 图标类型 */ +type ThemeIcon = string | { svg: string } + +/* 徽章配置 */ +export interface ThemeBadge { + text?: string + type?: string + color?: string + bgColor?: string + borderColor?: string +} +``` + +### 自动侧边栏生成 + +将 Doc 集合的 `sidebar` 设置为 `'auto'` 时,系统会根据目录结构自动生成侧边栏导航。排序规则遵循[文件夹命名约定](../guide/quick-start/write.md#文件夹命名约定)。 + +### 侧边栏图标配置 + +主题支持两种方式配置侧边栏图标: + +- **在侧边栏配置中直接定义**: + + ```ts + sidebar: [ + { text: '介绍', link: 'intro', icon: 'mdi:tooltip-text-outline' } + ] + ``` + +- **在文档 frontmatter 中定义**: + + ```md + --- + title: 主题介绍 + icon: mdi:tooltip-text-outline + --- + ``` + +两种方式具有相同的效果,您可以根据具体场景选择使用。 + +如需了解侧边栏的完整配置选项和使用技巧,请参阅[侧边栏配置指南](../guide/quick-start/sidebar.md)。 diff --git a/docs/notes/theme/config/frontmatter/basic.md b/docs/config/frontmatter/basic.md similarity index 100% rename from docs/notes/theme/config/frontmatter/basic.md rename to docs/config/frontmatter/basic.md diff --git a/docs/notes/theme/config/frontmatter/friend.md b/docs/config/frontmatter/friend.md similarity index 100% rename from docs/notes/theme/config/frontmatter/friend.md rename to docs/config/frontmatter/friend.md diff --git a/docs/notes/theme/config/frontmatter/home.md b/docs/config/frontmatter/home.md similarity index 100% rename from docs/notes/theme/config/frontmatter/home.md rename to docs/config/frontmatter/home.md diff --git a/docs/notes/theme/config/frontmatter/post.md b/docs/config/frontmatter/post.md similarity index 100% rename from docs/notes/theme/config/frontmatter/post.md rename to docs/config/frontmatter/post.md diff --git a/docs/config/intro.md b/docs/config/intro.md new file mode 100644 index 00000000..aed09477 --- /dev/null +++ b/docs/config/intro.md @@ -0,0 +1,173 @@ +--- +title: 配置说明 +createTime: 2024/03/02 10:48:14 +permalink: /config/intro/ +--- + +## 概述 + +==vuepress-theme-plume== 是基于 [VuePress](https://v2.vuepress.vuejs.org/) 开发的主题,其配置完全遵循 VuePress 的配置规范。 + +**VuePress 提供三种配置类型:** + +- **站点配置**:在配置文件(如 `.vuepress/config.ts`)中直接导出的对象 +- **主题配置**:传递给 `plumeTheme()` 函数的参数对象 +- **页面配置**:基于 YAML 语法在页面 Frontmatter 中定义 + +## VuePress 配置文件 + +VuePress 的基础配置文件通常是 `.vuepress/config.js`,同时也支持 TypeScript 配置文件。使用 `.vuepress/config.ts` 可以获得更完善的类型提示。 + +VuePress 按以下优先顺序解析配置文件: + +**当前工作目录 (cwd) 下:** + +- `vuepress.config.ts` +- `vuepress.config.js` +- `vuepress.config.mjs` + +**源文件目录 (sourceDir) 下:** + +- `.vuepress/config.ts` +- `.vuepress/config.js` +- `.vuepress/config.mjs` + +**基础配置示例:** + +```ts title=".vuepress/config.ts" twoslash +import { viteBundler } from '@vuepress/bundler-vite' +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + // [!code hl:5] + // VuePress 基础配置 + lang: 'zh-CN', + title: '你好, VuePress !', + description: '这是我的第一个 VuePress 站点', + // ... + + // 使用 Vite 作为构建工具 + bundler: viteBundler(), + + // 启用 Plume 主题 + theme: plumeTheme({ // [!code ++:4] + // 主题配置项 + // ... + }), +}) +``` + +## 主题配置文件 + +通常我们在 `.vuepress/config.ts` 中配置主题: + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // 主题配置 + }), + // ... +}) +``` + +然而,修改此文件会导致 VuePress 服务重启并全量刷新。对于小型站点,这个过程很快;但对于内容较多的站点,每次重启都需要较长时间。 + +频繁修改配置文件还容易导致 VuePress ==服务崩溃=={.caution} ::twemoji:angry-face::,需要手动重启服务,严重影响内容编写效率。 + +**解决方案:主题热更新配置**: + +主题提供了 `plume.config.ts` 配置文件,==对该文件的修改支持热更新,无需重启服务=={.tip} ::twemoji:confetti-ball::。 + +你可以在其中配置支持热更新的字段,如 `navbar`、`profile` 等。 + +::: tip +这些字段仍可在 VuePress 配置文件的 `theme` 中配置,但主题配置文件的设置最终会合并到主配置中。 + +为避免数据重复,请勿在两地同时配置同一字段。 +::: + +::: details 什么是热更新? + +**热更新** 是一种开发技术,在 VuePress 中体现为: + +- 配置修改实时生效,无需重启服务,浏览器不刷新页面 +- 页面修改实时生效,浏览器无刷新更新内容 + +::: + +### 配置方法 + +在 VuePress 配置文件同级目录下创建 `plume.config.ts` 文件: + +::: file-tree + +- docs + - .vuepress + - config.ts + - **plume.config.ts** +::: + +```ts title="plume.config.ts" twoslash +// @filename: ./navbar.ts +export default [] +// ---cut--- +import { defineThemeConfig } from 'vuepress-theme-plume' +import navbar from './navbar' + +export default defineThemeConfig({ + // 主题配置 + profile: { + name: 'Your name', + }, + navbar, +}) +``` + +`defineThemeConfig(config)` 函数提供完整的类型提示。除 `plugins` 外,大多数配置都可在此文件中定义。 + +::: warning 注意事项 + +- 主题配置文件仅支持部分热更新字段 +- 避免在 VuePress 配置文件中重复配置已在主题配置文件中设置的字段 +::: + +### 自定义配置文件路径 + +如需使用非默认路径,可在 VuePress 配置中指定: + +```ts title=".vuepress/config.ts" twoslash +import path from 'node:path' +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // 自定义配置文件路径 + configFile: path.join(__dirname, 'custom/config.ts'), // [!code ++] + }), +}) +``` + +::: warning 新手不建议自定义路径,可能引发意外问题 +::: + +## 页面配置 + +通过页面顶部的 YAML Frontmatter,可为每个页面单独配置主题: + +```md {1,5} title="article.md" +--- +title: 文章标题 +createTime: 2024/09/08 22:53:34 +permalink: /article/xxx/ +--- +``` + +在 Markdown 文件顶部,使用 `---` 分隔符包裹的部分即为 Frontmatter,采用 YAML 语法配置。 + +:::tip 如需了解 YAML 基础语法,可参考[这篇博客](/article/ecxnxxd0/) +::: diff --git a/docs/notes/theme/config/locales.md b/docs/config/locales.md similarity index 95% rename from docs/notes/theme/config/locales.md rename to docs/config/locales.md index e1903438..f22aff20 100644 --- a/docs/notes/theme/config/locales.md +++ b/docs/config/locales.md @@ -19,6 +19,7 @@ permalink: /config/locales/ - 德语 (`de-DE`) - `/de/` - 俄语 (`ru-RU`) - `/ru/` - 日语 (`ja-JP`) - `/ja/` +- 韩语 (`ko-KR`) - `/ko/` ## 配置 @@ -110,14 +111,14 @@ export default defineThemeConfig({ - 主题默认导航栏中的首页链接的文本。 - 面包屑导航中的首页链接的文本。 -### blogText +### postsText - 类型: `string` -- 默认值: `'Blog'` -- 详情: 博客链接的文本。 +- 默认值: `'Posts'` +- 详情: 文章列表页链接的文本。 - - 主题默认导航栏中的博客链接的文本。 - - 面包屑导航中的博客链接的文本。 + - 主题默认导航栏中的文章列表页链接的文本。 + - 面包屑导航中的文章列表页链接的文本。 ### tagText diff --git a/docs/notes/theme/config/markdown.md b/docs/config/markdown.md similarity index 100% rename from docs/notes/theme/config/markdown.md rename to docs/config/markdown.md diff --git a/docs/notes/theme/config/navbar.md b/docs/config/navbar.md similarity index 97% rename from docs/notes/theme/config/navbar.md rename to docs/config/navbar.md index 487e34fb..4494c44a 100644 --- a/docs/notes/theme/config/navbar.md +++ b/docs/config/navbar.md @@ -9,7 +9,7 @@ permalink: /config/navigation/ ::: tip 导航栏配置支持在 `.vuepress/config.ts` ,或者在 `plume.config.ts` 中进行配置。 ::: -主题默认会自动生成最简单的导航栏配置,仅包括 **首页** 和 **博客文章列表页** 。 +主题默认会自动生成最简单的导航栏配置,仅包括 **首页** 和 **文章列表页** 。 你也可以自己配置导航栏,覆盖默认的的导航栏配置。 @@ -87,7 +87,7 @@ export default defineUserConfig({ }) ``` -随着站点内容变得越来越丰富,包括了 博客文章列表、notes、友情链接、 外部链接等等, +随着站点内容变得越来越丰富,如通过 集合 配置了 博客、笔记、文档、友情链接、 外部链接等等, 默认生成的导航栏配置满足不了您的需求。 这时候,您可以通过 `navbar` 字段来完全自定义导航栏,它将直接覆盖默认的导航栏配置。 diff --git a/docs/notes/theme/config/plugins/README.md b/docs/config/plugins/README.md similarity index 100% rename from docs/notes/theme/config/plugins/README.md rename to docs/config/plugins/README.md diff --git a/docs/notes/theme/config/plugins/markdown-enhance.md b/docs/config/plugins/markdown-enhance.md similarity index 100% rename from docs/notes/theme/config/plugins/markdown-enhance.md rename to docs/config/plugins/markdown-enhance.md diff --git a/docs/notes/theme/config/plugins/markdown-image.md b/docs/config/plugins/markdown-image.md similarity index 100% rename from docs/notes/theme/config/plugins/markdown-image.md rename to docs/config/plugins/markdown-image.md diff --git a/docs/notes/theme/config/plugins/markdown-include.md b/docs/config/plugins/markdown-include.md similarity index 100% rename from docs/notes/theme/config/plugins/markdown-include.md rename to docs/config/plugins/markdown-include.md diff --git a/docs/notes/theme/config/plugins/markdown-math.md b/docs/config/plugins/markdown-math.md similarity index 100% rename from docs/notes/theme/config/plugins/markdown-math.md rename to docs/config/plugins/markdown-math.md diff --git a/docs/notes/theme/config/plugins/markdown-power.md b/docs/config/plugins/markdown-power.md similarity index 100% rename from docs/notes/theme/config/plugins/markdown-power.md rename to docs/config/plugins/markdown-power.md diff --git a/docs/notes/theme/config/plugins/reading-time.md b/docs/config/plugins/reading-time.md similarity index 100% rename from docs/notes/theme/config/plugins/reading-time.md rename to docs/config/plugins/reading-time.md diff --git a/docs/notes/theme/config/plugins/search.md b/docs/config/plugins/search.md similarity index 100% rename from docs/notes/theme/config/plugins/search.md rename to docs/config/plugins/search.md diff --git a/docs/notes/theme/config/plugins/shiki.md b/docs/config/plugins/shiki.md similarity index 100% rename from docs/notes/theme/config/plugins/shiki.md rename to docs/config/plugins/shiki.md diff --git a/docs/notes/theme/config/plugins/watermark.md b/docs/config/plugins/watermark.md similarity index 100% rename from docs/notes/theme/config/plugins/watermark.md rename to docs/config/plugins/watermark.md diff --git a/docs/config/sidebar.md b/docs/config/sidebar.md new file mode 100644 index 00000000..a474846b --- /dev/null +++ b/docs/config/sidebar.md @@ -0,0 +1,115 @@ +--- +title: 侧边栏配置 +createTime: 2024/08/15 21:05:36 +permalink: /config/sidebar/ +--- + +## 概述 + +侧边栏是主题中位于页面最左侧的核心导航区域,承担着引导用户在不同页面间跳转的重要功能。 + +在 VuePress 生态中,默认主题 `@vuepress/theme-default` 通过 `sidebar` 配置项管理侧边栏。本主题在保留这一经典配置方式的基础上,还提供了更为灵活的集合(Collections)级侧边栏配置方案。 + +## 集合级侧边栏配置 + +集合(Collections)是主题中组织系列文档的核心概念。当集合类型设置为 `doc` 时,您可以在 `collection.sidebar` 中定义专属的侧边栏导航。 + +以下示例展示了如何在 `docs` 目录下创建类型为 `doc` 的集合,并配置其侧边栏: + +::: code-tabs#configs + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { defineCollection, plumeTheme } from 'vuepress-theme-plume' + +// 定义文档集合配置 // [!code hl:10] +const demo = defineCollection({ + type: 'doc', + dir: 'demo', // 文档目录 + title: 'Demo', // 集合名称 + sidebar: [ // 侧边栏配置 // [!code ++:4] + { text: 'one item', link: 'one' }, + { text: 'two item', link: 'two' }, + ] +}) + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [demo], // 注册集合 // [!code hl] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineCollection, defineThemeConfig } from 'vuepress-theme-plume' + +// 使用独立配置文件定义集合 // [!code hl:10] +const demo = defineCollection({ + type: 'doc', + dir: 'demo', + title: 'Demo', + sidebar: [ + { text: 'one item', link: 'one' }, + { text: 'two item', link: 'two' }, + ] +}) + +export default defineThemeConfig({ + collections: [demo], // [!code hl] +}) +``` + +::: + +主题提供的 `defineCollection` 工具函数简化了集合配置过程。如需了解完整的集合配置选项,请参阅[集合配置文档](./collections.md)。 + +## 全局侧边栏配置 + +如果您希望采用传统的全局配置方式管理侧边栏,可以直接在主题配置中使用 `sidebar` 选项。这种方式适合不需要按集合分组导航的场景。 + +::: code-tabs#configs + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // 全局侧边栏配置 // [!code hl:7] + sidebar: { + '/config/': [ // 匹配/config/路径 + { text: '侧边栏配置', link: 'sidebar-1' }, + { text: '侧边栏配置', link: 'sidebar-2' }, + ] + } + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + // 在独立配置文件中定义全局侧边栏 // [!code hl:7] + sidebar: { + '/config/': [ + { text: '侧边栏配置', link: 'sidebar-1' }, + { text: '侧边栏配置', link: 'sidebar-2' }, + ] + } +}) +``` + +::: + +两种配置方式各有优势:集合级配置适合模块化文档结构,全局配置则便于统一管理简单项目的导航。 + +如需了解侧边栏的完整配置选项和使用技巧,请参阅[侧边栏配置指南](../guide/quick-start/sidebar.md)。 diff --git a/docs/notes/theme/config/theme.md b/docs/config/theme.md similarity index 82% rename from docs/notes/theme/config/theme.md rename to docs/config/theme.md index e24b8fec..d77e1cf8 100644 --- a/docs/notes/theme/config/theme.md +++ b/docs/config/theme.md @@ -177,165 +177,6 @@ export default defineThemeConfig({ ::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。 ::: -### blog - -- **类型:** `false | BlogOptions` -- **默认值:** `{ link: '/blog/', include: ['**/*.md'], exclude: [] }` -- **详情:** - - 博客配置。 - - ::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。 - ::: - -```ts -interface BlogOptions { - /** - * blog list link - * - * @default '/blog/' - */ - link?: string - - /** - * 在 `{sourceDir}` 目录中,通过 glob string 配置包含文件 - * - * @default - ['**\*.md'] - */ - include?: string[] - - /** - * 在 `{sourceDir}` 目录中,通过 glob string 配置排除的文件 - * - * @default - ['.vuepress/', 'node_modules/'] - */ - exclude?: string[] - - /** - * 分页配置 - * - * - `false` - 不启用分页 - * - `number` - 每页显示的文章数量 - */ - pagination?: false | number | { - /** - * 每页显示的文章数量 - * @default 10 - */ - perPage?: number - } - - /** - * 是否启用标签页 - * @default true - */ - tags?: boolean - - /** - * 自定义标签页链接 - * - * @default '/blog/tags/' - */ - tagsLink?: string - - /** - * 标签颜色主题 - * - * - `colored`: 彩色标签,不同标签颜色不同 - * - `brand`: 使用主题颜色作为标签颜色 - * - `gray`: 使用 灰色 作为标签颜色 - * - * @default 'colored' - */ - tagsTheme?: 'colored' | 'gray' | 'brand' - - /** - * 是否启用归档页 - * @default true - */ - archives?: boolean - - /** - * 自定义归档页链接 - * - * @default '/blog/archives/' - */ - archivesLink?: string - - /** - * 是否启用分类页 - * @default true - */ - categories?: boolean - - /** - * 自定义分类页链接 - * - * @default '/blog/categories/' - */ - categoriesLink?: string - - /** - * 分类页展开深度 - * - * @default 'deep' - */ - categoriesExpand?: number | 'deep' - - /** - * 文章分类列表转换函数,比如排除不需要的一级分类 - * @param categories 分类列表 - * @returns 返回一个新的分类列表 - */ - categoriesTransform?: (categories: PageCategoryData[]) => PageCategoryData[] - - /** - * 博客文章封面图 - * - * 配置封面图的位置,支持 `'left'`、`'right'`、`'top'`、`'top-inside'` - * - * @default 'right' - */ - postCover?: BlogPostCoverLayout | BlogPostCoverStyle -} - -type BlogPostCoverLayout = 'left' | 'right' | 'odd-left' | 'odd-right' | 'top' - -interface BlogPostCoverStyle { - /** - * 博客文章封面图的位置 - */ - layout?: BlogPostCoverLayout - /** - * 博客文章封面图的比例 - * - * @default '4:3' - */ - ratio?: number | `${number}:${number}` - - /** - * 封面图的宽度, 仅在 layout 为 'left' 或 'right' 时生效 - * - * @default 240 - */ - width?: number - /** - * 是否使用紧凑模式,紧凑模式下,封面图紧贴容器边缘 - * @default false - */ - compact?: boolean -} -``` - -### article - -- **类型:** `string` -- **默认值:** `/article/` -- **详情:** 文章链接前缀 - - ::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。 - ::: - ### autoFrontmatter - **类型:** `false | AutoFrontmatterOptions` @@ -345,18 +186,6 @@ interface BlogPostCoverStyle { ```ts interface AutoFrontmatterOptions { - /** - * glob 匹配,被匹配的文件将会自动生成 frontmatter - * - * @default ['**\/*.md'] - */ - include?: string | string[] - - /** - * glob 匹配,被匹配的文件将不会自动生成 frontmatter - */ - exclude?: string | string[] - /** * 是否自动生成 permalink * @@ -714,27 +543,13 @@ type NavItem = string | { }) ``` -### notes - -- **类型:** `false | NotesOptions` -- **默认值:** `{ link: '/note', dir: 'notes', notes: [] }` -- **详情:** - - 笔记配置, 笔记中的文章默认不会出现在首页文章列表 - - 你可以将配置的notes 配置到 navbar中,以便浏览查看 - -详细配置请查看 [此文档](./notes.md) - ### sidebar - **类型:** `false | SidebarMulti` - **详情:** - 侧边栏配置。**主题更推荐在 [notes 配置](./notes.md) 中进行侧边栏配置。** - - 当你不希望使用 `notes` 功能,但又期望给文档增加侧边栏时,可以使用此配置。 + 侧边栏配置。**主题更推荐在 [collections 配置](./collections.md) 中进行侧边栏配置。** 配置对象的 `key` 为侧边栏公共访问路径前缀。 @@ -775,9 +590,7 @@ interface SidebarItem { /** * 如果未指定,组不可折叠。 - * * 如果为`true`,组可折叠,并默认折叠。 - * * 如果为`false`,组可折叠,但默认展开。 */ collapsed?: boolean @@ -909,10 +722,10 @@ interface SidebarItem { ### createTime -- **类型:** `boolean | 'only-blog'` +- **类型:** `boolean | 'only-posts'` - **默认值:** `true` - **详情:** 是否显示创建时间 - `false` - 不显示 - - `'only-blog'` - 只显示在博客文章页面 + - `'only-posts'` - 只显示在文章列表页面 - `true` - 显示在所有文章页面 diff --git a/docs/en/1.FE/1.Node/english_blog.md b/docs/en/blog/1.FE/1.Node/english_blog.md similarity index 100% rename from docs/en/1.FE/1.Node/english_blog.md rename to docs/en/blog/1.FE/1.Node/english_blog.md diff --git a/docs/en/4.Tutorials/frontmatter.md b/docs/en/blog/4.Tutorials/frontmatter.md similarity index 100% rename from docs/en/4.Tutorials/frontmatter.md rename to docs/en/blog/4.Tutorials/frontmatter.md diff --git a/docs/en/notes/theme/config/basic.md b/docs/en/config/basic.md similarity index 100% rename from docs/en/notes/theme/config/basic.md rename to docs/en/config/basic.md diff --git a/docs/en/notes/theme/config/frontmatter/article.md b/docs/en/config/frontmatter/article.md similarity index 100% rename from docs/en/notes/theme/config/frontmatter/article.md rename to docs/en/config/frontmatter/article.md diff --git a/docs/en/notes/theme/config/frontmatter/basic.md b/docs/en/config/frontmatter/basic.md similarity index 100% rename from docs/en/notes/theme/config/frontmatter/basic.md rename to docs/en/config/frontmatter/basic.md diff --git a/docs/en/notes/theme/config/intro.md b/docs/en/config/intro.md similarity index 100% rename from docs/en/notes/theme/config/intro.md rename to docs/en/config/intro.md diff --git a/docs/en/notes/theme/config/locales.md b/docs/en/config/locales.md similarity index 100% rename from docs/en/notes/theme/config/locales.md rename to docs/en/config/locales.md diff --git a/docs/en/notes/theme/config/notes.md b/docs/en/config/notes.md similarity index 100% rename from docs/en/notes/theme/config/notes.md rename to docs/en/config/notes.md diff --git a/docs/en/notes/theme/guide/custom/home.md b/docs/en/guide/custom/home.md similarity index 100% rename from docs/en/notes/theme/guide/custom/home.md rename to docs/en/guide/custom/home.md diff --git a/docs/en/notes/theme/guide/custom/style.md b/docs/en/guide/custom/style.md similarity index 100% rename from docs/en/notes/theme/guide/custom/style.md rename to docs/en/guide/custom/style.md diff --git a/docs/en/notes/theme/guide/features/component.md b/docs/en/guide/features/component.md similarity index 100% rename from docs/en/notes/theme/guide/features/component.md rename to docs/en/guide/features/component.md diff --git a/docs/en/notes/theme/guide/markdown/abbr.md b/docs/en/guide/markdown/abbr.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/abbr.md rename to docs/en/guide/markdown/abbr.md diff --git a/docs/en/notes/theme/guide/markdown/annotation.md b/docs/en/guide/markdown/annotation.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/annotation.md rename to docs/en/guide/markdown/annotation.md diff --git a/docs/en/notes/theme/guide/markdown/basic.md b/docs/en/guide/markdown/basic.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/basic.md rename to docs/en/guide/markdown/basic.md diff --git a/docs/en/notes/theme/guide/markdown/caniuse.md b/docs/en/guide/markdown/caniuse.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/caniuse.md rename to docs/en/guide/markdown/caniuse.md diff --git a/docs/en/notes/theme/guide/markdown/card.md b/docs/en/guide/markdown/card.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/card.md rename to docs/en/guide/markdown/card.md diff --git a/docs/en/notes/theme/guide/markdown/collapse.md b/docs/en/guide/markdown/collapse.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/collapse.md rename to docs/en/guide/markdown/collapse.md diff --git a/docs/en/notes/theme/guide/markdown/demo-wrapper.md b/docs/en/guide/markdown/demo-wrapper.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/demo-wrapper.md rename to docs/en/guide/markdown/demo-wrapper.md diff --git a/docs/en/notes/theme/guide/markdown/extensions.md b/docs/en/guide/markdown/extensions.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/extensions.md rename to docs/en/guide/markdown/extensions.md diff --git a/docs/en/notes/theme/guide/markdown/file-tree.md b/docs/en/guide/markdown/file-tree.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/file-tree.md rename to docs/en/guide/markdown/file-tree.md diff --git a/docs/en/notes/theme/guide/markdown/icons.md b/docs/en/guide/markdown/icons.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/icons.md rename to docs/en/guide/markdown/icons.md diff --git a/docs/en/notes/theme/guide/markdown/include.md b/docs/en/guide/markdown/include.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/include.md rename to docs/en/guide/markdown/include.md diff --git a/docs/en/notes/theme/guide/markdown/mark.md b/docs/en/guide/markdown/mark.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/mark.md rename to docs/en/guide/markdown/mark.md diff --git a/docs/en/notes/theme/guide/markdown/npm-to.md b/docs/en/guide/markdown/npm-to.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/npm-to.md rename to docs/en/guide/markdown/npm-to.md diff --git a/docs/en/notes/theme/guide/markdown/plot.md b/docs/en/guide/markdown/plot.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/plot.md rename to docs/en/guide/markdown/plot.md diff --git a/docs/en/notes/theme/guide/markdown/steps.md b/docs/en/guide/markdown/steps.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/steps.md rename to docs/en/guide/markdown/steps.md diff --git a/docs/en/notes/theme/guide/markdown/tabs.md b/docs/en/guide/markdown/tabs.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/tabs.md rename to docs/en/guide/markdown/tabs.md diff --git a/docs/en/notes/theme/guide/markdown/timeline.md b/docs/en/guide/markdown/timeline.md similarity index 100% rename from docs/en/notes/theme/guide/markdown/timeline.md rename to docs/en/guide/markdown/timeline.md diff --git a/docs/en/notes/theme/guide/quick-start/blog.md b/docs/en/guide/quick-start/blog.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/blog.md rename to docs/en/guide/quick-start/blog.md diff --git a/docs/en/notes/theme/guide/quick-start/deployment.md b/docs/en/guide/quick-start/deployment.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/deployment.md rename to docs/en/guide/quick-start/deployment.md diff --git a/docs/en/notes/theme/guide/quick-start/document.md b/docs/en/guide/quick-start/document.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/document.md rename to docs/en/guide/quick-start/document.md diff --git a/docs/en/notes/theme/guide/quick-start/international.md b/docs/en/guide/quick-start/international.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/international.md rename to docs/en/guide/quick-start/international.md diff --git a/docs/en/notes/theme/guide/quick-start/intro.md b/docs/en/guide/quick-start/intro.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/intro.md rename to docs/en/guide/quick-start/intro.md diff --git a/docs/en/notes/theme/guide/quick-start/optimize-build.md b/docs/en/guide/quick-start/optimize-build.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/optimize-build.md rename to docs/en/guide/quick-start/optimize-build.md diff --git a/docs/en/notes/theme/guide/quick-start/project-structure.md b/docs/en/guide/quick-start/project-structure.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/project-structure.md rename to docs/en/guide/quick-start/project-structure.md diff --git a/docs/en/notes/theme/guide/quick-start/usage.md b/docs/en/guide/quick-start/usage.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/usage.md rename to docs/en/guide/quick-start/usage.md diff --git a/docs/en/notes/theme/guide/quick-start/write.md b/docs/en/guide/quick-start/write.md similarity index 100% rename from docs/en/notes/theme/guide/quick-start/write.md rename to docs/en/guide/quick-start/write.md diff --git a/docs/en/notes/theme/snippet/create.snippet.md b/docs/en/snippet/create.snippet.md similarity index 100% rename from docs/en/notes/theme/snippet/create.snippet.md rename to docs/en/snippet/create.snippet.md diff --git a/docs/en/notes/theme/snippet/include-1.snippet.md b/docs/en/snippet/include-1.snippet.md similarity index 100% rename from docs/en/notes/theme/snippet/include-1.snippet.md rename to docs/en/snippet/include-1.snippet.md diff --git a/docs/en/notes/theme/snippet/include-2.snippet.md b/docs/en/snippet/include-2.snippet.md similarity index 100% rename from docs/en/notes/theme/snippet/include-2.snippet.md rename to docs/en/snippet/include-2.snippet.md diff --git a/docs/notes/theme/guide/api/client.md b/docs/guide/api/client.md similarity index 100% rename from docs/notes/theme/guide/api/client.md rename to docs/guide/api/client.md diff --git a/docs/notes/theme/guide/api/node.md b/docs/guide/api/node.md similarity index 62% rename from docs/notes/theme/guide/api/node.md rename to docs/guide/api/node.md index a156f756..572066e2 100644 --- a/docs/notes/theme/guide/api/node.md +++ b/docs/guide/api/node.md @@ -31,18 +31,18 @@ __options__ : `PlumeThemeOptions` 查看 [主题配置](../config/navbar.md) 了解更多。 -## `defineNotesConfig(options)` +## `defineCollections(options)` -__options:__ `NotesOptions` +__options:__ `(ThemePostCollection | ThemeDocCollection)[]` -主题 notes 配置类型帮助函数 +主题 collections 配置类型帮助函数 -查看 [主题配置](../config/notes.md) 了解更多。 +查看 [主题配置](../config/collection.md) 了解更多。 -## `defineNoteConfig(options)` +## `defineCollection(options)` -__options:__ `NoteItem` +__options:__ `ThemePostCollection | ThemeDocCollection` -主题 单个 note (`NoteItem`) 配置类型帮助函数 +主题 单个 collection 配置类型帮助函数 -查看 [主题配置](../config/notes.md) 了解更多。 +查看 [主题配置](../config/collection.md) 了解更多。 diff --git a/docs/notes/theme/guide/chart/chart.md b/docs/guide/chart/chart.md similarity index 100% rename from docs/notes/theme/guide/chart/chart.md rename to docs/guide/chart/chart.md diff --git a/docs/notes/theme/guide/chart/echarts.md b/docs/guide/chart/echarts.md similarity index 100% rename from docs/notes/theme/guide/chart/echarts.md rename to docs/guide/chart/echarts.md diff --git a/docs/notes/theme/guide/chart/flowchart.md b/docs/guide/chart/flowchart.md similarity index 100% rename from docs/notes/theme/guide/chart/flowchart.md rename to docs/guide/chart/flowchart.md diff --git a/docs/notes/theme/guide/chart/markmap.md b/docs/guide/chart/markmap.md similarity index 100% rename from docs/notes/theme/guide/chart/markmap.md rename to docs/guide/chart/markmap.md diff --git a/docs/notes/theme/guide/chart/mermaid.md b/docs/guide/chart/mermaid.md similarity index 100% rename from docs/notes/theme/guide/chart/mermaid.md rename to docs/guide/chart/mermaid.md diff --git a/docs/notes/theme/guide/chart/plantuml.md b/docs/guide/chart/plantuml.md similarity index 100% rename from docs/notes/theme/guide/chart/plantuml.md rename to docs/guide/chart/plantuml.md diff --git a/docs/guide/code/code-tabs.md b/docs/guide/code/code-tabs.md new file mode 100644 index 00000000..8a09dd8c --- /dev/null +++ b/docs/guide/code/code-tabs.md @@ -0,0 +1,290 @@ +--- +title: 代码分组 +icon: fluent:group-list-20-filled +createTime: 2024/04/04 10:36:59 +permalink: /guide/code/group/ +--- + +## 概述 + +代码组(Code Tabs)是 主题 中用于并排展示多个相关代码片段的强大功能。 +通过标签页形式组织代码,您可以清晰对比不同技术栈、配置方案或语言版本的实现差异。 + +## 基础语法 + +### 多代码块分组 + +使用代码组语法将多个代码块组织在同一标签容器中: + +**输入:** + +````md +::: code-tabs +@tab config.js +```js +/** + * @type {import('vuepress').UserConfig} + */ +const config = { + // .. +} + +export default config +``` + +@tab config.ts +```ts +import type { UserConfig } from 'vuepress' + +const config: UserConfig = { + // .. +} + +export default config +``` +::: +```` + +**输出:** + +::: code-tabs +@tab config.js + +```js +/** + * @type {import('vuepress').UserConfig} + */ +const config = { + // .. +} + +export default config +``` + +@tab config.ts + +```ts +import type { UserConfig } from 'vuepress' + +const config: UserConfig = { + // .. +} + +export default config +``` + +::: + +### 设置默认激活标签 + +通过 `@tab:active` 语法指定默认显示的代码标签: + +**输入:** + +````md +::: code-tabs +@tab config.js +```js +/** + * @type {import('vuepress').UserConfig} + */ +const config = { + // .. +} + +export default config +``` + +@tab:active config.ts +```ts +import type { UserConfig } from 'vuepress' + +const config: UserConfig = { + // .. +} + +export default config +``` +::: +```` + +**输出:** + +::: code-tabs +@tab config.js + +```js +/** + * @type {import('vuepress').UserConfig} + */ +const config = { + // .. +} + +export default config +``` + +@tab:active config.ts + +```ts +import type { UserConfig } from 'vuepress' + +const config: UserConfig = { + // .. +} + +export default config +``` + +::: + +## 标签图标支持 + +主题为代码组标签提供智能图标显示功能,基于标签标题自动匹配相关技术图标。 + +### 自动图标识别 + +主题内置了主流技术和语言的图标映射: + +**输入:** + +````md +::: code-tabs +@tab pnpm + +```sh +pnpm i +``` + +@tab yarn + +```sh +yarn +``` + +@tab npm + +```sh +npm install +``` + +::: +```` + +**输出:** + +::: code-tabs +@tab pnpm + +```sh +pnpm i +``` + +@tab yarn + +```sh +yarn +``` + +@tab npm + +```sh +npm install +``` + +::: + +### 支持的图标类别 + +主题默认适配以下技术栈的图标: + +- **运行环境**:Node.js、Deno、Bun +- **包管理器**:pnpm、yarn、npm +- **前端框架**:Vue、React、Angular、Svelte、Solid、Next.js、Nuxt +- **编程语言**:TypeScript、JavaScript、C、C++、Java、Python、Rust、Kotlin、Swift、Go + +::: info 图标支持反馈 +如果您使用的技术栈未能正确显示图标,欢迎提交 [issue](https://github.com/pengzhanbo/vuepress-theme-plume/issues/new) 告知我们,我们将尽快添加相关图标支持。 +::: + +## 图标配置选项 + +通过 `markdown.codeTabs` 配置项精确控制图标显示行为: + +```ts +export default defineUserConfig({ + theme: plumeTheme({ + markdown: { + codeTabs: { + icon: true, // 启用图标功能 + } + }, + }) +}) +``` + +配置接口定义: + +```ts +export interface CodeTabsOptions { + icon?: boolean | { + named?: false | string[] + extensions?: false | string[] + } +} +``` + +### 配置示例 + +**禁用所有图标**: + +```ts +export default defineUserConfig({ + theme: plumeTheme({ + markdown: { + codeTabs: { + icon: false + } + } + }) +}) +``` + +**仅显示指定技术栈图标**: + +```ts +export default defineUserConfig({ + theme: plumeTheme({ + markdown: { + codeTabs: { + icon: { + named: ['pnpm', 'yarn', 'npm'], // 仅匹配这些技术名称 + extensions: false // 禁用文件扩展名匹配 + } + } + } + }) +}) +``` + +**配置说明**: + +- `named`:精确匹配技术名称(如 `pnpm`、`vue`、`react`) +- `extensions`:匹配文件扩展名(如 `.ts`、`.js`、`.py`) +- 设置为 `false` 禁用对应匹配方式 +- 空数组使用默认匹配规则 +- 字符串匹配区分大小写 + +## 性能优化说明 + +::: tip 图标体积优化 +您无需担心图标资源对构建体积的影响。代码组图标基于 Iconify 体系实现,配合本地安装的 `@iconify/json` 包,主题会自动: + +- 解析并提取实际使用的图标数据 +- 生成优化的本地图标资源 +- 确保相同图标仅打包一次 + +每个彩色图标的平均体积仅为 1-2KB,即使大量使用不同图标,对最终构建体积的影响也微乎其微。 +::: + +通过合理的配置和使用,代码组功能能够显著提升技术文档的可读性和用户体验,帮助读者更高效地理解不同技术方案间的差异。 diff --git a/docs/notes/theme/guide/code/copy-code.md b/docs/guide/code/copy-code.md similarity index 100% rename from docs/notes/theme/guide/code/copy-code.md rename to docs/guide/code/copy-code.md diff --git a/docs/notes/theme/guide/code/features.md b/docs/guide/code/features.md similarity index 100% rename from docs/notes/theme/guide/code/features.md rename to docs/guide/code/features.md diff --git a/docs/notes/theme/guide/code/import.md b/docs/guide/code/import.md similarity index 100% rename from docs/notes/theme/guide/code/import.md rename to docs/guide/code/import.md diff --git a/docs/notes/theme/guide/code/intro.md b/docs/guide/code/intro.md similarity index 100% rename from docs/notes/theme/guide/code/intro.md rename to docs/guide/code/intro.md diff --git a/docs/notes/theme/guide/code/twoslash.md b/docs/guide/code/twoslash.md similarity index 100% rename from docs/notes/theme/guide/code/twoslash.md rename to docs/guide/code/twoslash.md diff --git a/docs/notes/theme/guide/components/badge.md b/docs/guide/components/badge.md similarity index 100% rename from docs/notes/theme/guide/components/badge.md rename to docs/guide/components/badge.md diff --git a/docs/notes/theme/guide/components/card-grid.md b/docs/guide/components/card-grid.md similarity index 100% rename from docs/notes/theme/guide/components/card-grid.md rename to docs/guide/components/card-grid.md diff --git a/docs/notes/theme/guide/components/card-masonry.md b/docs/guide/components/card-masonry.md similarity index 100% rename from docs/notes/theme/guide/components/card-masonry.md rename to docs/guide/components/card-masonry.md diff --git a/docs/notes/theme/guide/components/card.md b/docs/guide/components/card.md similarity index 100% rename from docs/notes/theme/guide/components/card.md rename to docs/guide/components/card.md diff --git a/docs/notes/theme/guide/components/home-box.md b/docs/guide/components/home-box.md similarity index 100% rename from docs/notes/theme/guide/components/home-box.md rename to docs/guide/components/home-box.md diff --git a/docs/notes/theme/guide/components/icon.md b/docs/guide/components/icon.md similarity index 100% rename from docs/notes/theme/guide/components/icon.md rename to docs/guide/components/icon.md diff --git a/docs/notes/theme/guide/components/image-card.md b/docs/guide/components/image-card.md similarity index 100% rename from docs/notes/theme/guide/components/image-card.md rename to docs/guide/components/image-card.md diff --git a/docs/notes/theme/guide/components/link-card.md b/docs/guide/components/link-card.md similarity index 100% rename from docs/notes/theme/guide/components/link-card.md rename to docs/guide/components/link-card.md diff --git a/docs/notes/theme/guide/components/npm-badge.md b/docs/guide/components/npm-badge.md similarity index 100% rename from docs/notes/theme/guide/components/npm-badge.md rename to docs/guide/components/npm-badge.md diff --git a/docs/notes/theme/guide/components/plot.md b/docs/guide/components/plot.md similarity index 100% rename from docs/notes/theme/guide/components/plot.md rename to docs/guide/components/plot.md diff --git a/docs/notes/theme/guide/components/repo-card.md b/docs/guide/components/repo-card.md similarity index 100% rename from docs/notes/theme/guide/components/repo-card.md rename to docs/guide/components/repo-card.md diff --git a/docs/notes/theme/guide/components/swiper.md b/docs/guide/components/swiper.md similarity index 100% rename from docs/notes/theme/guide/components/swiper.md rename to docs/guide/components/swiper.md diff --git a/docs/notes/theme/guide/custom/component-overrides.md b/docs/guide/custom/component-overrides.md similarity index 100% rename from docs/notes/theme/guide/custom/component-overrides.md rename to docs/guide/custom/component-overrides.md diff --git a/docs/notes/theme/guide/custom/home.md b/docs/guide/custom/home.md similarity index 96% rename from docs/notes/theme/guide/custom/home.md rename to docs/guide/custom/home.md index 8e5cf045..fc8dec04 100644 --- a/docs/notes/theme/guide/custom/home.md +++ b/docs/guide/custom/home.md @@ -514,9 +514,33 @@ config: text-image ::: -### blog +### posts -将 博客文章列表页 作为一个单独区域,插入到 首页中。 +将 post 集合文章列表页 作为一个单独区域,插入到 首页中。 + +```ts +interface PlumeThemeHomePosts extends PlumeHomeConfigBase { + type: 'posts' + collection?: string +} +``` + +当存在多个 post 集合时,默认读取第一个集合的文章列表页。 +还可以通过 `collection` 配置项来指定读取哪个集合的文章列表页。 + +`collection` 的值应该与 集合的 `dir` 值相同。 + +**示例:** + +```md +--- +home: true +config: + - + type: posts + collection: blog +--- +``` ### profile diff --git a/docs/notes/theme/guide/custom/slots.md b/docs/guide/custom/slots.md similarity index 100% rename from docs/notes/theme/guide/custom/slots.md rename to docs/guide/custom/slots.md diff --git a/docs/notes/theme/guide/custom/style.md b/docs/guide/custom/style.md similarity index 100% rename from docs/notes/theme/guide/custom/style.md rename to docs/guide/custom/style.md diff --git a/docs/notes/theme/guide/embed/acfun.md b/docs/guide/embed/acfun.md similarity index 100% rename from docs/notes/theme/guide/embed/acfun.md rename to docs/guide/embed/acfun.md diff --git a/docs/notes/theme/guide/embed/artplayer.md b/docs/guide/embed/artplayer.md similarity index 100% rename from docs/notes/theme/guide/embed/artplayer.md rename to docs/guide/embed/artplayer.md diff --git a/docs/notes/theme/guide/embed/audioReader.md b/docs/guide/embed/audioReader.md similarity index 100% rename from docs/notes/theme/guide/embed/audioReader.md rename to docs/guide/embed/audioReader.md diff --git a/docs/notes/theme/guide/embed/bilibili.md b/docs/guide/embed/bilibili.md similarity index 100% rename from docs/notes/theme/guide/embed/bilibili.md rename to docs/guide/embed/bilibili.md diff --git a/docs/notes/theme/guide/embed/pdf.md b/docs/guide/embed/pdf.md similarity index 100% rename from docs/notes/theme/guide/embed/pdf.md rename to docs/guide/embed/pdf.md diff --git a/docs/notes/theme/guide/embed/youtube.md b/docs/guide/embed/youtube.md similarity index 100% rename from docs/notes/theme/guide/embed/youtube.md rename to docs/guide/embed/youtube.md diff --git a/docs/notes/theme/guide/features/bulletin.md b/docs/guide/features/bulletin.md similarity index 100% rename from docs/notes/theme/guide/features/bulletin.md rename to docs/guide/features/bulletin.md diff --git a/docs/notes/theme/guide/features/changelog.md b/docs/guide/features/changelog.md similarity index 100% rename from docs/notes/theme/guide/features/changelog.md rename to docs/guide/features/changelog.md diff --git a/docs/notes/theme/guide/features/comments.md b/docs/guide/features/comments.md similarity index 100% rename from docs/notes/theme/guide/features/comments.md rename to docs/guide/features/comments.md diff --git a/docs/notes/theme/guide/features/component.md b/docs/guide/features/component.md similarity index 100% rename from docs/notes/theme/guide/features/component.md rename to docs/guide/features/component.md diff --git a/docs/notes/theme/guide/features/contributors.md b/docs/guide/features/contributors.md similarity index 100% rename from docs/notes/theme/guide/features/contributors.md rename to docs/guide/features/contributors.md diff --git a/docs/notes/theme/guide/features/copyright.md b/docs/guide/features/copyright.md similarity index 100% rename from docs/notes/theme/guide/features/copyright.md rename to docs/guide/features/copyright.md diff --git a/docs/notes/theme/guide/features/encryption.md b/docs/guide/features/encryption.md similarity index 100% rename from docs/notes/theme/guide/features/encryption.md rename to docs/guide/features/encryption.md diff --git a/docs/notes/theme/guide/features/friend-links.md b/docs/guide/features/friend-links.md similarity index 100% rename from docs/notes/theme/guide/features/friend-links.md rename to docs/guide/features/friend-links.md diff --git a/docs/notes/theme/guide/features/icon.md b/docs/guide/features/icon.md similarity index 100% rename from docs/notes/theme/guide/features/icon.md rename to docs/guide/features/icon.md diff --git a/docs/notes/theme/guide/features/image-preview.md b/docs/guide/features/image-preview.md similarity index 100% rename from docs/notes/theme/guide/features/image-preview.md rename to docs/guide/features/image-preview.md diff --git a/docs/notes/theme/guide/features/replace-assets.md b/docs/guide/features/replace-assets.md similarity index 100% rename from docs/notes/theme/guide/features/replace-assets.md rename to docs/guide/features/replace-assets.md diff --git a/docs/notes/theme/guide/features/search.md b/docs/guide/features/search.md similarity index 100% rename from docs/notes/theme/guide/features/search.md rename to docs/guide/features/search.md diff --git a/docs/notes/theme/guide/features/seo.md b/docs/guide/features/seo.md similarity index 100% rename from docs/notes/theme/guide/features/seo.md rename to docs/guide/features/seo.md diff --git a/docs/notes/theme/guide/features/sitemap.md b/docs/guide/features/sitemap.md similarity index 100% rename from docs/notes/theme/guide/features/sitemap.md rename to docs/guide/features/sitemap.md diff --git a/docs/notes/theme/guide/features/watermark.md b/docs/guide/features/watermark.md similarity index 100% rename from docs/notes/theme/guide/features/watermark.md rename to docs/guide/features/watermark.md diff --git a/docs/notes/theme/guide/markdown/abbr.md b/docs/guide/markdown/abbr.md similarity index 100% rename from docs/notes/theme/guide/markdown/abbr.md rename to docs/guide/markdown/abbr.md diff --git a/docs/notes/theme/guide/markdown/annotation.md b/docs/guide/markdown/annotation.md similarity index 100% rename from docs/notes/theme/guide/markdown/annotation.md rename to docs/guide/markdown/annotation.md diff --git a/docs/notes/theme/guide/markdown/basic.md b/docs/guide/markdown/basic.md similarity index 100% rename from docs/notes/theme/guide/markdown/basic.md rename to docs/guide/markdown/basic.md diff --git a/docs/notes/theme/guide/markdown/caniuse.md b/docs/guide/markdown/caniuse.md similarity index 100% rename from docs/notes/theme/guide/markdown/caniuse.md rename to docs/guide/markdown/caniuse.md diff --git a/docs/notes/theme/guide/markdown/card.md b/docs/guide/markdown/card.md similarity index 100% rename from docs/notes/theme/guide/markdown/card.md rename to docs/guide/markdown/card.md diff --git a/docs/notes/theme/guide/markdown/chat.md b/docs/guide/markdown/chat.md similarity index 100% rename from docs/notes/theme/guide/markdown/chat.md rename to docs/guide/markdown/chat.md diff --git a/docs/notes/theme/guide/markdown/code-tree.md b/docs/guide/markdown/code-tree.md similarity index 100% rename from docs/notes/theme/guide/markdown/code-tree.md rename to docs/guide/markdown/code-tree.md diff --git a/docs/notes/theme/guide/markdown/collapse.md b/docs/guide/markdown/collapse.md similarity index 100% rename from docs/notes/theme/guide/markdown/collapse.md rename to docs/guide/markdown/collapse.md diff --git a/docs/notes/theme/guide/markdown/demo-wrapper.md b/docs/guide/markdown/demo-wrapper.md similarity index 100% rename from docs/notes/theme/guide/markdown/demo-wrapper.md rename to docs/guide/markdown/demo-wrapper.md diff --git a/docs/notes/theme/guide/markdown/extensions.md b/docs/guide/markdown/extensions.md similarity index 100% rename from docs/notes/theme/guide/markdown/extensions.md rename to docs/guide/markdown/extensions.md diff --git a/docs/notes/theme/guide/markdown/field.md b/docs/guide/markdown/field.md similarity index 100% rename from docs/notes/theme/guide/markdown/field.md rename to docs/guide/markdown/field.md diff --git a/docs/notes/theme/guide/markdown/file-tree.md b/docs/guide/markdown/file-tree.md similarity index 100% rename from docs/notes/theme/guide/markdown/file-tree.md rename to docs/guide/markdown/file-tree.md diff --git a/docs/notes/theme/guide/markdown/flex.md b/docs/guide/markdown/flex.md similarity index 100% rename from docs/notes/theme/guide/markdown/flex.md rename to docs/guide/markdown/flex.md diff --git a/docs/notes/theme/guide/markdown/icons.md b/docs/guide/markdown/icons.md similarity index 100% rename from docs/notes/theme/guide/markdown/icons.md rename to docs/guide/markdown/icons.md diff --git a/docs/notes/theme/guide/markdown/include.md b/docs/guide/markdown/include.md similarity index 100% rename from docs/notes/theme/guide/markdown/include.md rename to docs/guide/markdown/include.md diff --git a/docs/notes/theme/guide/markdown/mark.md b/docs/guide/markdown/mark.md similarity index 100% rename from docs/notes/theme/guide/markdown/mark.md rename to docs/guide/markdown/mark.md diff --git a/docs/notes/theme/guide/markdown/npm-to.md b/docs/guide/markdown/npm-to.md similarity index 100% rename from docs/notes/theme/guide/markdown/npm-to.md rename to docs/guide/markdown/npm-to.md diff --git a/docs/notes/theme/guide/markdown/plot.md b/docs/guide/markdown/plot.md similarity index 100% rename from docs/notes/theme/guide/markdown/plot.md rename to docs/guide/markdown/plot.md diff --git a/docs/notes/theme/guide/markdown/steps.md b/docs/guide/markdown/steps.md similarity index 100% rename from docs/notes/theme/guide/markdown/steps.md rename to docs/guide/markdown/steps.md diff --git a/docs/notes/theme/guide/markdown/table.md b/docs/guide/markdown/table.md similarity index 100% rename from docs/notes/theme/guide/markdown/table.md rename to docs/guide/markdown/table.md diff --git a/docs/notes/theme/guide/markdown/tabs.md b/docs/guide/markdown/tabs.md similarity index 100% rename from docs/notes/theme/guide/markdown/tabs.md rename to docs/guide/markdown/tabs.md diff --git a/docs/notes/theme/guide/markdown/timeline.md b/docs/guide/markdown/timeline.md similarity index 100% rename from docs/notes/theme/guide/markdown/timeline.md rename to docs/guide/markdown/timeline.md diff --git a/docs/notes/theme/guide/quick-start/blog.md b/docs/guide/quick-start/blog.md similarity index 100% rename from docs/notes/theme/guide/quick-start/blog.md rename to docs/guide/quick-start/blog.md diff --git a/docs/guide/quick-start/collection-doc.md b/docs/guide/quick-start/collection-doc.md new file mode 100644 index 00000000..51267046 --- /dev/null +++ b/docs/guide/quick-start/collection-doc.md @@ -0,0 +1,359 @@ +--- +title: doc 集合 +icon: streamline-ultimate:sidebar-line-left +createTime: 2025/10/05 17:11:48 +permalink: /guide/collection/doc/ +--- + +## 概述 + +**doc 集合**专为管理结构化文档而设计,适用于文章间存在强关联关系、需要整体呈现的场景。典型应用包括: + +- API 技术文档 +- 产品使用教程 +- 专题开发指南 +- 知识体系笔记 + +该集合通过**智能侧边导航栏**实现文档间的快速跳转与内容组织。 + +::: info 主题支持配置多个独立的 doc 集合 +::: + +## 创建 doc 集合 + +通过三个步骤快速创建文档集合: + +:::: steps + +- **创建文档目录** + + ::: file-tree + - docs + - ++ guide + - ++ intro.md + - ++ install.md + - ++ … + ::: + +- **配置集合参数** + + ::: code-tabs#config + + @tab .vuepress/config.ts + + ```ts twoslash + import { defineUserConfig } from 'vuepress' + import { plumeTheme } from 'vuepress-theme-plume' + + export default defineUserConfig({ + theme: plumeTheme({ + collections: [ // [!code focus:3] + { type: 'doc', dir: 'guide', title: '指南' } + ] + }) + }) + ``` + + @tab .vuepress/plume.config.ts + + ```ts twoslash + import { defineThemeConfig } from 'vuepress-theme-plume' + + export default defineThemeConfig({ + collections: [ // [!code focus:3] + { type: 'doc', dir: 'guide', title: '指南' } + ] + }) + ``` + + ::: + +- **完成配置** +:::: + +### 多语言支持 + +为不同语言版本配置独立的文档集合: + +::: file-tree + +- docs + - guide + - intro.md + - install.md + - … + - en + - guide + - intro.md + - install.md + - … +::: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + locales: { + '/': { // [!code focus:5] + collections: [ + { type: 'doc', dir: 'guide', title: '指南' } + ] + }, + '/en/': { // [!code focus:5] + collections: [ + { type: 'doc', dir: 'guide', title: 'Guide' } + ] + } + } + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + locales: { + '/': { // [!code focus:5] + collections: [ + { type: 'doc', dir: 'guide', title: '指南' } + ] + }, + '/en/': { // [!code focus:5] + collections: [ + { type: 'doc', dir: 'guide', title: 'Guide' } + ] + } + } +}) +``` + +::: + +## 目录结构配置 + +`dir` 参数定义文档源文件位置,支持相对和绝对路径: + +```ts +dir: 'guide' // 指向 docs/guide +dir: '/guide/' // 等效写法 +dir: './guide/' // 等效写法 +dir: '/team/guide/' // 指向 docs/team/guide +``` + +::: info 多语言环境下路径相对于对应的语言目录 +::: + +## 自动 Frontmatter 生成 + +::: info 仅在执行 `vuepress dev` 或 `vuepress build` 后生效 +::: + +支持自动生成文档元数据,可自定义处理逻辑: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl:10] + autoFrontmatter: { + title: true, // 自动生成标题 + createTime: true, // 自动生成创建时间 + permalink: true, // 自动生成永久链接 + transform: (data, context, locale) => { // 自定义转换 + data.foo ??= 'foo' + return data + } + } + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl:10] + autoFrontmatter: { + title: true, // 自动生成标题 + createTime: true, // 自动生成创建时间 + permalink: true, // 自动生成永久链接 + transform: (data, context, locale) => { // 自定义转换 + data.foo ??= 'foo' + return data + } + } + } + ] +}) +``` + +::: + +生成效果: + +```md title="docs/guide/install.md" +--- +title: install +createTime: 2025/03/24 20:15:12 +permalink: /guide/a1b2c3d4/ +--- +``` + +## 侧边栏配置 + +提供灵活的侧边栏导航配置选项: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl:5] + sidebar: [ // 手动配置导航项 + 'intro', + 'install', + ], + sidebarScrollbar: true, // 显示侧边栏滚动条 + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl:5] + sidebar: [ // 手动配置导航项 + 'intro', + 'install', + ], + sidebarScrollbar: true, // 显示侧边栏滚动条 + } + ] +}) +``` + +::: + +### 自动生成侧边栏 + +设置 `sidebar: 'auto'` 自动基于目录结构生成导航: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl] + sidebar: 'auto', // 自动生成导航结构 + sidebarCollapsed: undefined, // 折叠状态:true-折叠 false-展开 + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'doc', + dir: 'guide', + title: '指南', + // [!code hl] + sidebar: 'auto', // 自动生成导航结构 + sidebarCollapsed: undefined, // 折叠状态:true-折叠 false-展开 + } + ] +}) +``` + +::: + +### 手动配置侧边栏 + +[查看**侧边栏**详细配置说明](./sidebar.md){.read-more} + +## 集合首页定制 + +目录下的 `README.md` 自动作为集合首页,支持转换为功能丰富的门户布局: + +```md title="typescript/README.md" +--- +pageLayout: home +config: + - type: hero + title: TypeScript 完全指南 + description: 从基础到进阶的 TypeScript 学习路径 + - type: features + features: + - title: 类型系统 + details: 深入理解 TypeScript 类型系统 + icon: mdi:code-braces + - title: 高级特性 + details: 掌握泛型、装饰器等高级功能 + icon: mdi:rocket-launch +--- +``` diff --git a/docs/guide/quick-start/collection-post.md b/docs/guide/quick-start/collection-post.md new file mode 100644 index 00000000..110e5aae --- /dev/null +++ b/docs/guide/quick-start/collection-post.md @@ -0,0 +1,852 @@ +--- +title: post 集合 +icon: mdi:post-outline +createTime: 2025/10/05 17:10:57 +permalink: /guide/collection/post/ +--- + +## 概述 + +**post 集合**用于管理碎片化的多篇文章集合。这里的"碎片化"指文章间无强关联关系,或仅需扁平化展示的场景,典型应用包括: + +- 博客系统 +- 专题专栏 +- 新闻资讯 +- 随笔记录 + +该集合提供完整的文章管理功能: + +- **文章列表页** - 支持置顶、封面图、摘要展示 +- **文章分类页** - 基于目录结构自动生成分类 +- **文章标签页** - 根据页面 `frontmatter.tags` 生成标签 +- **文章归档页** - 基于 `frontmatter.createTime` 生成时间线归档 + +各页面均预留个人信息展示区域,支持个人简介或组织信息配置。 + +::: info 主题支持配置多个 post 集合 +::: + +## 创建 post 集合 + +通过三个简单步骤即可完成 post 集合创建: + +:::: steps + +- **创建文章目录** + + ::: file-tree + - docs + - ++ blog + - ++ post-1.md + - ++ post-2.md + - ++ … + ::: + +- **配置集合参数** + + ::: code-tabs#config + + @tab .vuepress/config.ts + + ```ts twoslash + import { defineUserConfig } from 'vuepress' + import { plumeTheme } from 'vuepress-theme-plume' + + export default defineUserConfig({ + theme: plumeTheme({ + collections: [ // [!code focus:3] + { type: 'post', dir: 'blog', title: '博客' } + ] + }) + }) + ``` + + @tab .vuepress/plume.config.ts + + ```ts twoslash + import { defineThemeConfig } from 'vuepress-theme-plume' + + export default defineThemeConfig({ + collections: [ // [!code focus:3] + { type: 'post', dir: 'blog', title: '博客' } + ] + }) + ``` + + ::: + +- **完成** + +:::: + +配置完成后,主题自动扫描 `docs/blog` 目录并生成以下页面: + +- 文章列表页:`/blog/` +- 文章分类页:`/blog/categories/` +- 文章标签页:`/blog/tags/` +- 文章归档页:`/blog/archives/` + +启用 `autoFrontmatter` 后,系统自动为 Markdown 文件生成永久链接: + +```md title="docs/blog/post-1.md" +--- +title: post-1 +createTime: 2025/03/24 20:15:12 +permalink: /blog/a1b2c3d4/ +--- +``` + +### 多语言支持 + +在主题多语言配置中定义不同语言的 post 集合: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + locales: { + '/': { // [!code focus:5] + collections: [ + { type: 'post', dir: 'blog', title: '博客' } + ] + }, + '/en/': { // [!code focus:5] + collections: [ + { type: 'post', dir: 'blog', title: 'Blog' } + ] + } + } + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + locales: { + '/': { // [!code focus:5] + collections: [ + { type: 'post', dir: 'blog', title: '博客' } + ] + }, + '/en/': { // [!code focus:5] + collections: [ + { type: 'post', dir: 'blog', title: 'Blog' } + ] + } + } +}) +``` + +::: + +## 集合目录配置 + +`dir` 参数指定集合的源文件目录,支持绝对路径和相对路径(均相对于源目录): + +```ts +dir: 'blog' // 指向 docs/blog +dir: '/blog/' // 等效写法 +dir: './blog/' // 等效写法 +dir: '/team/blog/' // 指向 docs/team/blog +``` + +::: info 在多语言下,则相对于多语言目录 +::: + +### 文件过滤 + +通过 `include` 和 `exclude` 配置过滤 Markdown 文件, +使用 [picomatch ::quill:search::](https://chat.baidu.com/search?word=picomatch+%E7%9A%84+glob+pattern+%E8%A7%84%E5%88%99){.no-icon} 模式匹配: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:4] + include: ['**/*.md'], // 包含所有 .md 文件 + exclude: ['**/*.snippet.md'] // 排除代码片段文件 + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:4] + include: ['**/*.md'], // 包含所有 .md 文件 + exclude: ['**/*.snippet.md'] // 排除代码片段文件 + } + ] +}) +``` + +::: + +## 页面生成配置 + +默认基于 `dir` 配置生成页面路径,支持完整自定义: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:16] + postList: true, // 启用文章列表页 + link: '/blog/', // 列表页链接 + linkPrefix: '/blog/', // 文章链接前缀 + tags: true, // 启用标签页 + tagsLink: '/blog/tags/', // 标签页链接 + tagsTheme: 'colored', // 标签主题 colored|gray|brand + tagsText: '标签', // 标签页标题 + archives: true, // 启用归档页 + archivesLink: '/blog/archives/', // 归档页链接 + archivesText: '归档', // 归档页标题 + categories: true, // 启用分类页 + categoriesLink: '/blog/categories/', // 分类页链接 + categoriesText: '分类', // 分类页标题 + categoriesExpand: 'deep', // 分类展开层级 number|'deep' + categoriesTransform: categories => categories, // 分类转换函数 + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:16] + postList: true, // 启用文章列表页 + link: '/blog/', // 列表页链接 + linkPrefix: '/blog/', // 文章链接前缀 + tags: true, // 启用标签页 + tagsLink: '/blog/tags/', // 标签页链接 + tagsTheme: 'colored', // 标签主题 colored|gray|brand + tagsText: '标签', // 标签页标题 + archives: true, // 启用归档页 + archivesLink: '/blog/archives/', // 归档页链接 + archivesText: '归档', // 归档页标题 + categories: true, // 启用分类页 + categoriesLink: '/blog/categories/', // 分类页链接 + categoriesText: '分类', // 分类页标题 + categoriesExpand: 'deep', // 分类展开层级 number|'deep' + categoriesTransform: categories => categories, // 分类转换函数 + } + ] +}) +``` + +::: + +## 自动 Frontmatter 生成 + +::: info 仅在执行 `vuepress dev` 或 `vuepress build` 后生效 +::: + +支持集合级别的 frontmatter 自动生成,可自定义转换逻辑: + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:10] + autoFrontmatter: { + title: true, // 自动生成标题 + createTime: true, // 自动生成创建时间 + permalink: true, // 自动生成永久链接 + transform: (data, context, locale) => { // 自定义转换 + data.foo ??= 'foo' + return data + } + } + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:10] + autoFrontmatter: { + title: true, // 自动生成标题 + createTime: true, // 自动生成创建时间 + permalink: true, // 自动生成永久链接 + transform: (data, context, locale) => { // 自定义转换 + data.foo ??= 'foo' + return data + } + } + } + ] +}) +``` + +::: + +生成示例: + +```md title="docs/blog/post-1.md" +--- +title: post-1 +createTime: 2025/03/24 20:15:12 +permalink: /blog/a1b2c3d4/ +--- +``` + +## 个人信息配置 + +每个 post 集合支持独立配置个人信息展示区域。未配置时继承[主题默认 profile 设置](../../config/theme.md#profile)。 + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:10] + profile: { + avatar: '/avatar.jpg', // 头像路径 + name: '张三', // 显示名称 + description: '个人简介', // 简介文本 + circle: true, // 圆形头像 + location: '广州', // 所在地 + organization: '组织名称', // 所属组织 + layout: 'right', // 布局位置 left|right + } + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:10] + profile: { + avatar: '/avatar.jpg', // 头像路径 + name: '张三', // 显示名称 + description: '个人简介', // 简介文本 + circle: true, // 圆形头像 + location: '广州', // 所在地 + organization: '组织名称', // 所属组织 + layout: 'right', // 布局位置 left|right + } + } + ] +}) +``` + +::: + +## 社交链接 + +个人信息区域支持社交链接配置,未配置时继承[主题默认 social 设置](../../config/theme.md#social)。 + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:4] + social: [ + { icon: 'github', link: 'https://github.com/pengzhanbo' }, + ], + } + ] + }) +}) +``` + +@tab .vuepress/plume.config.ts + +``` ts +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + // [!code hl:4] + social: [ + { icon: 'github', link: 'https://github.com/pengzhanbo' }, + ], + } + ] +}) +``` + +::: + +### 内置图标库 + +::: flex + +
+ +- discord +- telegram +- facebook +- github +- instagram +- linkedin +- mastodon +- npm +- slack +- twitter +- x +- youtube + +
+ +- qq +- weibo +- bilibili +- gitlab +- docker +- juejin +- zhihu +- douban +- steam +- stackoverflow +- xbox + +
+ +::: + +## 文章封面配置 + +文章列表页支持封面图展示,提供多种布局和尺寸选项。 + +### 基础配置 + +在 frontmatter 中定义封面图路径: + +```md{3} +--- +title: 文章标题 +cover: /images/cover.jpg +--- +``` + +**路径规范**:仅支持绝对路径或远程 URL。本地图片需放置在 `.vuepress/public` 目录: + +::: file-tree + +- docs + - .vuepress + - public + - images + - cover.jpg + - config.ts + - article.md +::: + +默认展示效果: + +
+ +
+ +### 高级布局 + +调整封面图位置和尺寸: + +```md{4-7} +--- +title: 文章标题 +cover: /images/cover.jpg +coverStyle: + layout: left + ratio: 16:9 + width: 300 +--- +``` + +效果展示: + +
+ +
+ +### 紧凑模式 + +无摘要时启用紧凑布局: + +```md{8} +--- +title: 文章标题 +cover: /images/cover.jpg +coverStyle: + layout: left + ratio: 16:9 + width: 300 + compact: true +--- +``` + +效果展示: + +
+ +
+ +::: warning `compact: true` 仅在无摘要时生效 +::: + +### 顶部大图布局 + +```md{5} +--- +title: 文章标题 +cover: /images/cover.jpg +coverStyle: + layout: top + ratio: 16:9 + width: 300 +--- +``` + +效果展示: + +
+ +
+ +### 预设配置 + +为保持视觉统一,支持集合级封面图预设: + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'post', + dir: 'blog', + title: '博客', + postCover: { + layout: 'left', + ratio: '16:9', + width: 300, + compact: true + } + } + ], + }) +}) +``` + +布局模式说明: + +```ts +type PostCoverLayout = 'left' | 'right' | 'odd-left' | 'odd-right' | 'top' + +interface PostCoverStyle { + layout?: PostCoverLayout // 布局位置 + ratio?: number | `${number}:${number}` // 宽高比,默认 '4:3' + width?: number // 宽度(左右布局生效),默认 240 + compact?: boolean // 紧凑模式,默认 false +} +``` + +特殊布局模式: + +- `odd-left` - 奇数项居左,偶数项居右 +- `odd-right` - 奇数项居右,偶数项居左 + +`odd-left` 布局效果: + +
+ + + +
+ +::: warning 移动端适配 +窄屏设备上自动切换为 `top` 布局以确保显示效果 +::: + +## 文章元数据 + +通过 frontmatter 配置文章元数据: + +```md +--- +title: 文章标题 +createTime: 2024/01/01 00:00:00 +tags: + - tag1 + - tag2 +--- +``` + +`title` 和 `createTime` 在文件创建时自动生成,支持手动修改。 + +### 可用属性 + +| 属性 | 类型 | 默认值 | 说明 | +| ---------- | ------------------- | -------- | -------------------------- | +| title | `string` | 文件名 | 文章标题 | +| createTime | `string` | 当前时间 | 创建时间 | +| tags | `string[]` | `[]` | 文章标签 | +| sticky | `boolean \| number` | false | 置顶标识,数字越大排序越前 | +| draft | `boolean` | false | 草稿模式,构建后隐藏 | +| cover | `string` | `''` | 封面图路径 | +| coverStyle | `PostCoverStyle` | `null` | 封面样式配置 | +| excerpt | `boolean \| string` | '' | 摘要内容,支持自动提取 | + +同时支持[通用 frontmatter 配置](../../config/frontmatter/basic.md)中的所有字段。 + +## 文章摘要配置 + +### 自动提取 + +使用 `` 标记摘要截断点: + +```md +--- +title: 标题 +--- + +摘要内容区域 + + + +正文剩余部分 +``` + +### 手动定义 + +通过 excerpt 字段自定义摘要: + +```md +--- +title: 标题 +excerpt: 自定义摘要内容 +--- +``` + +**配置说明**: + +- `excerpt: false` - 禁用摘要(忽略 ``) +- `excerpt: string` - 自定义内容(忽略 ``) + +::: tip 推荐使用 <!-- more --> 注释定义摘要 +::: + +## 配置到站点首页 + +主题提供了两种方式来设置 post 集合 的文章列表页 到站点主页,满足不同的需求场景: + +- **方式一:配置 主页的 `pageLayout` 属性为 `posts`** + +```md title="docs/README.md" +--- +pageLayout: posts +--- +``` + +还可以通过 `collection` 配置项来指定读取哪个集合的文章列表页,默认读取第一个集合的文章列表页。 + +`collection` 需要与集合配置的 `dir` 的值相同。 + +```md title="docs/README.md" +--- +pageLayout: posts +collection: blog +--- +``` + +此配置会直接将页面应用 `posts` 布局,显示博客文章列表。 + +这是将主页修改为 博客页的 最简单的方式,但缺点是 缺少灵活性。 + +- **方式二:配置 主页的 `pageLayout` 属性为 `home`, 添加 `type: posts` 的首页区域类型** + +```md title="docs/README.md" +--- +pageLayout: home +config: + - type: posts + collection: blog +--- +``` + +使用这种方式,你不仅可以在首页中添加 文章列表,还可以灵活的在页面的其他区域添加不同的内容。 + +比如,配置首屏为 `banner`,然后紧跟着 博客文章列表: + +```md title="docs/README.md" +--- +pageLayout: home +config: + - type: banner + - type: posts +--- +``` + +更多自定义配置,请参考 [自定义首页](../custom/home.md)。 + +当使用以上两种方式 将首页配置为 文章列表页后,由于主题默认依然会生成 文章列表页, +这导致存在了重复功能的页面。为此,你可能需要在 集合配置中, +**关闭自动生成博客文章列表页**: + +(还可以重新修改 分类页/标签页/归档页的链接地址) + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { type: 'post', dir: 'blog', title: '博客', postList: false } + ], + }) +}) +``` diff --git a/docs/guide/quick-start/collection.md b/docs/guide/quick-start/collection.md new file mode 100644 index 00000000..2eb8024c --- /dev/null +++ b/docs/guide/quick-start/collection.md @@ -0,0 +1,143 @@ +--- +title: 集合 +icon: fluent:list-bar-tree-16-regular +createTime: 2025/09/28 14:14:53 +permalink: /guide/collection/ +--- + +## 概述 + +==Collections(集合)== 是主题中用于组织和管理文档的核心概念。 +每个集合指向源目录下的特定文件夹,将其中的所有 Markdown 文件作为一个逻辑单元进行管理。 + +通过灵活的集合配置,您可以轻松构建多种内容体系: + +- **博客** - 个人随笔与技术分享 +- **专栏** - 专题系列文章 +- **使用手册** - 产品使用文档 +- **笔记** - 学习笔记与知识整理 +- **产品文档** - 完整的项目文档 +- **知识库** - 团队知识管理体系 +- 更多... + +## 创建集合 + +一个普通的 VuePress 静态站点的文件结构大致如下: + +:::file-tree + +- my-site + - docs \# 源目录 + - .vuepress/ + - … + - README.md \# 首页 + - package.json + +::: + +当你想要添加一个用于 **博客** 的集合: + +:::: steps + +- **创建 blog 目录** + + :::file-tree + - docs + - blog + - post-1.md + - post-2.md + - … + - … + ::: + +- **在主题配置中添加类型为 `post` 的集合** + + 将 `dir` 配置项指向 `blog` 目录 + + ::: code-tabs#config: + + @tab .vuepress/config.ts + + ```ts twoslash + import { defineUserConfig } from 'vuepress' + import { plumeTheme } from 'vuepress-theme-plume' + + export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + // [!code word:type] + { type: 'post', dir: 'blog', title: '博客' } // [!code word:dir] + ] + }) + }) + ``` + + @tab .vuepress/plume.config.ts + + ```ts twoslash + import { defineThemeConfig } from 'vuepress-theme-plume' + + export default defineThemeConfig({ + collections: [ + // [!code word:type] + { type: 'post', dir: 'blog', title: '博客' } // [!code word:dir] + ] + }) + ``` + + ::: + + `blog` 目录下的 markdown 文章,在 post 集合中读取为文章列表,并生成列表页、分类页、标签页等页面。 + +- **完成** +:::: + +在这其中,需要注意的是: + +- **dir 配置项** + + 集合配置中的 `dir` 指向源目录下的某个文件夹,该文件夹下的所有 markdown 文件都将归属于该集合。 + +- **type 配置项** + + 集合配置中的 `type` 指定了集合的类型。 + + 集合的类型决定了该集合下的文档将会提供哪些功能,当前主题支持的类型如下: + + - `post`:表示碎片化文章的集合,文章之间不存在关联关系或弱关联关系。 + - `doc`: 表示结构化文章的集合,文章之间存在结构化的强关联关系,作为一个整体。 + +- **title 配置项** + + 集合配置中的 `title` 指定了集合的名称。 + + 在主题中,`title` 用于页面的面包屑导航中。 + +## 集合类型 + +集合的类型决定了该集合下的文档将会提供哪些功能。 + +### post 集合 + +post 集合提供了以下的功能实现: + +- 文章列表页 - 文章置顶、文章封面图、文章摘要等。 +- 文章分类页 - 根据目录结构自动生成分类。 +- 文章标签页 - 根据页面 `frontmatter.tags` 生成标签。 +- 文章归档页 - 根据页面 `frontmatter.createTime` 生成归档。 + + + +### doc 集合 + +doc 集合提供了以下的功能实现: + +- **侧边导航栏** - 提供清晰的文档结构导航 +- **自动生成目录** - 基于文件结构智能生成侧边栏 +- **多级嵌套支持** - 支持复杂的文档层次结构 + + + +## 集合配置 + + diff --git a/docs/notes/theme/guide/quick-start/deployment.md b/docs/guide/quick-start/deployment.md similarity index 100% rename from docs/notes/theme/guide/quick-start/deployment.md rename to docs/guide/quick-start/deployment.md diff --git a/docs/guide/quick-start/intro.md b/docs/guide/quick-start/intro.md new file mode 100644 index 00000000..6e58e73f --- /dev/null +++ b/docs/guide/quick-start/intro.md @@ -0,0 +1,68 @@ +--- +title: 主题介绍 +icon: mdi:tooltip-text-outline +createTime: 2024/03/04 11:06:24 +permalink: /guide/intro/ +tags: + - 指南 + - 快速开始 +--- + +==vuepress-theme-plume== 是基于 VuePress 构建的现代化主题,无论您需要创建**技术博客**、**生活随笔**、**产品文档**、**知识库**还是**系列教程**,都能满足您的多样化需求。 + +我们在文本排版和图片展示方面进行了深度优化,特别是对 Markdown 语法进行了丰富扩展,让您能够轻松创作出**美观易读、表现力强**的专业内容。 + +::: details 初次接触 VuePress? + +VuePress 是一个[静态站点生成器](https://en.wikipedia.org/wiki/Static_site_Generator) (SSG), +专门为构建高性能的内容型网站而设计。简而言之,它能将 Markdown 格式的内容通过主题渲染,生成可部署在任何地方的静态 HTML 页面。 +::: + +[前往 **VuePress 官网** 深入了解](https://v2.vuepress.vuejs.org/zh/){.read-more} + +## 核心优势 + +相比 VuePress 默认主题,我们提供了显著的改进: + +### 🎨 卓越的用户体验 + +全面优化界面设计和交互逻辑,打造更加美观、简洁且易用的阅读体验。 + +### 🚀 丰富的功能特性 + +- **多样化布局**:支持完全自定义的==首页==,可选==文章列表==、==文档==模式 +- **内容增强**:内置==全文搜索==、==文章评论==、==内容加密==、==文章水印==等实用功能 +- **代码展示**:支持代码块==分组==、==折叠==、==聚焦==、==行高亮==、==差异对比==,可嵌入 CodePen、JSFiddle、CodeSandbox 等平台的==代码演示== +- **图标系统**:集成 [iconify](https://icon-sets.iconify.d/) **200,000+** ==图标==,可选配 `iconfont` / `fontawesome` 图标库 +- **媒体嵌入**:支持==PDF 嵌入==、==Bilibili/Youtube/本地视频==嵌入 +- **图表渲染**:集成 chart.js、Echarts、Mermaid、Flowchart、Markmap、PlantUML 等多种==图表引擎== +- **布局容器**:灵活的 Markdown 容器语法,提供==提示容器==、==文件树==、==代码树==、==卡片容器==、==瀑布流容器==等 +- **扩展能力**:支持==布局插槽==、==组件覆写==、==自定义样式==,轻松实现个性化布局设计 + +### 🎉 一切内容皆为 “集合” + +将内容划分为多个==集合==,每个集合都有独立的目录,根据不同的集合类型,轻松实现如 **博客**、**专栏**、 +**系列教程**、**知识库**、**产品文档** 等多样化需求。 + +### ⚡ 高效的开发体验 + +引入编译缓存机制,缓存 Markdown 文件编译结果和复杂代码块解析结果,大幅提升构建速度。 + +### 🔧 智能的配置管理 + +支持独立的主题配置文件,避免因配置修改导致 VuePress 服务频繁重启。在保持配置灵活性的同时,大幅简化配置流程,降低使用门槛。 + +### 🌟 开箱即用的解决方案 + +==plume 主题==预先集成了搭建站点所需的常用功能和配置,让您无需关注技术细节,能够**专注于内容创作**,充分发挥 Markdown 增强语法的优势,更好地表达想法。 + +::: tip 版本说明 + +本主题基于 [vuepress-next](https://github.com/vuepress/vuepress-next) 开发,目前处于 RC 阶段。 + +当前版本的功能和 API 已趋于稳定,但未来更新中仍可能出现破坏性变更。 + +如果您在使用过程中遇到问题或有改进建议,欢迎在 [Issues](https://github.com/pengzhanbo/vuepress-theme-plume/issues) +中提出,也欢迎通过 [PR](https://github.com/pengzhanbo/vuepress-theme-plume/pulls) 参与主题完善。 + +::: diff --git a/docs/guide/quick-start/locales.md b/docs/guide/quick-start/locales.md new file mode 100644 index 00000000..2ccfea33 --- /dev/null +++ b/docs/guide/quick-start/locales.md @@ -0,0 +1,168 @@ +--- +title: 国际化 +icon: material-symbols-light:language +createTime: 2024/03/05 10:01:26 +permalink: /guide/locales/ +tags: + - 指南 + - i18n +--- + +本指南将帮助您快速为 VuePress 主题配置多语言支持。通过简单的目录结构和配置调整,即可实现专业的国际化站点。 + +## 目录结构规划 + +首先创建符合多语言要求的目录结构。以下示例展示支持中文、英文和法文的项目布局: + +::: file-tree + +- docs + - **en** # 英文文档目录 + - foo.md + - README.md # 英文首页 + - **fr** # 法文文档目录 + - foo.md + - README.md # 法文首页 + - foo.md + - README.md # 中文首页 +::: + +**目录结构说明**: + +- `docs/en/` - 存储英文版本文档 +- `docs/fr/` - 存储法文版本文档 +- `docs/` - 存储默认语言(中文)文档 + +::: important 保持文件结构一致性 +在不同语言目录中,请保持相同的文件名和目录结构。这确保主题能够在语言切换时正确导航到对应语言的文档版本。 +::: + +## VuePress 基础配置 + +### 设置默认语言 + +在配置文件 `.vuepress/config.ts` 中声明默认语言: + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' + +export default defineUserConfig({ + // 设置默认语言代码 + lang: 'zh-CN', // [!code ++] + // 配置多语言支持 + locales: { + '/': { lang: 'zh-CN', title: '博客' }, // 简体中文作为默认语言 + } +}) +``` + +### 添加其他语言支持 + +扩展 `locales` 配置来支持更多语言: + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' + +export default defineUserConfig({ + lang: 'zh-CN', + locales: { + '/': { lang: 'zh-CN', title: '博客' }, // 简体中文 + '/en/': { lang: 'en-US', title: 'Blog' }, // 美式英语 // [!code ++] + '/fr/': { lang: 'fr-FR', title: 'Le blog' }, // 法语 // [!code ++] + } +}) +``` + +**配置要点**: + +- `locales` 的键名(如 `/en/`)对应文档目录中的语言文件夹名称 +- 这些键名同时作为各语言页面的访问路径前缀 +- 每个语言必须设置正确的 `lang` 属性,即使只使用单一语言 + +::: tip 语言代码规范 + +- **路径键名**:遵循 [ISO 639](https://zh.wikipedia.org/wiki/ISO_639-1) 标准(如英语使用 `/en/`) +- **语言代码**:使用 [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) 标准格式(如英语使用 `en-US`) +::: + +## 主题多语言配置 + +在主题配置中通过 `locales` 字段为每种语言定制化界面元素: + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + lang: 'zh-CN', // [!code focus:6] + locales: { + '/': { lang: 'zh-CN', title: '博客' }, + '/en/': { lang: 'en-US', title: 'Blog' }, + '/fr/': { lang: 'fr-FR', title: 'Le blog' }, + }, + theme: plumeTheme({ + // 主题级多语言配置 + locales: { // [!code focus:20] + // 简体中文配置 + '/': { + selectLanguageName: '简体中文', + navbar: [ + { text: '首页', link: '/' }, + { text: '博客', link: '/blog/' }, + ] + }, + // 英文配置 + '/en/': { + selectLanguageName: 'English', + navbar: [ + { text: 'Home', link: '/en/' }, + { text: 'Blog', link: '/en/blog/' }, + ] + }, + // 法文配置 + '/fr/': { // [!code focus:7] + selectLanguageName: 'Français', + navbar: [ + { text: 'Accueil', link: '/fr/' }, + { text: 'Le Blog', link: '/fr/blog/' }, + ] + } + } + }) +}) +``` + +**关键配置项**: + +- `selectLanguageName`:在语言选择器中显示的语言名称 +- `navbar`:各语言独有的导航栏配置 +- 所有主题配置项均支持在 `locales` 中按语言重写 + +## 配置一致性要求 + +确保 VuePress 配置与主题配置的路径键名完全匹配: + +```ts +export default { +// VuePress 配置 + locales: { + '/': { /* 中文配置 */ }, + '/en/': { /* 英文配置 */ }, + }, + + // 主题配置 + theme: plumeTheme({ + locales: { + '/': { /* 中文主题配置 */ }, + '/en/': { /* 英文主题配置 */ } + } + }) +} +``` + +## 扩展阅读 + +- [主题 Locales 配置](../../config/theme.md#locale-配置) - 了解各语言专属的主题行为配置 +- [多语言文本配置](../../config/locales.md) - 掌握界面文本的国际化定制方法 + +通过以上配置,您的文档站点将具备完整的多语言支持能力,为用户提供更友好的国际化访问体验。 diff --git a/docs/guide/quick-start/optimize-build.md b/docs/guide/quick-start/optimize-build.md new file mode 100644 index 00000000..981fa261 --- /dev/null +++ b/docs/guide/quick-start/optimize-build.md @@ -0,0 +1,107 @@ +--- +title: 构建优化 +icon: clarity:bundle-solid +outline: 2 +createTime: 2024/09/10 01:50:20 +permalink: /guide/optimize-build/ +--- + +## 图片尺寸优化 + +在 Markdown 文档中通过 `![alt](url)` 或 `` 嵌入图片时,虽然能够正常显示内容,但潜在的布局稳定性问题往往被忽视。 + +### 布局抖动问题分析 + +当图片体积较小或网络状况良好时,页面布局抖动并不明显。然而,面对大体积图片或较差的网络环境,图片加载过程中的布局重排问题就会凸显: + +1. **加载前**:图片占位空间未被预留,后续内容向上挤压 +2. **加载后**:图片突然占据空间,迫使后续内容重新排列 +3. **用户体验**:频繁的布局变化导致视觉跳动和操作卡顿 + +### 解决方案:预计算图片尺寸 + +根据 [MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#height)的建议,同时指定 `height` 和 `width` 属性能够让浏览器提前计算图片宽高比,预留显示空间,从根本上消除布局偏移。 + +主题提供的自动化解决方案: + +```ts +export default defineUserConfig({ + theme: plumeTheme({ + plugins: { + markdownPower: { + imageSize: true, // 可选 'local' | 'all' + }, + } + }) +}) +``` + +**配置选项说明**: + +- `'local'` 或 `true`:仅为本地图片添加尺寸属性 +- `'all'`:同时处理本地和远程图片资源 + +**实现机制**: + +- 构建时自动分析图片原始尺寸 +- 为 `` 标签注入精确的 `width` 和 `height` 属性 +- 基于图片宽高比预留显示空间 + +::: important 性能注意事项 + +- 此功能仅在**生产环境构建**时生效,避免开发阶段性能损耗 +- 使用 `'all'` 选项时会请求所有远程图片资源,可能显著增加构建时间 +- 优化策略:并发请求 + 头部信息分析,在获取尺寸数据后立即终止连接 +::: + +## 图标加载优化 + +### Iconify 集成优势 + +主题深度集成 [Iconify](https://icon-sets.iconify.design/) 项目,提供超过 20 万枚图标的选择灵活性。虽然本地安装 `@iconify/json` 包需要约 70MB 存储空间,但实际构建时仅包含使用到的图标资源,实现按需加载。 + +### 性能瓶颈与解决方案 + +**问题根源**: +图标按集合(collection)组织,每个集合包含 100-1000+ 个图标的 JSON 文件。当使用多个不同集合的图标时,频繁的 I/O 读取和 JSON 解析会产生显著性能开销。 + +**实际案例**: + +- 使用 54 个图标集合中的 160+ 个图标 +- 初始构建:约 500ms 图标解析时间 +- 用户体验:开发服务器启动缓慢 + +**缓存优化机制**: + +```mermaid +graph LR + A[首次构建] --> B[解析使用图标] + B --> C[生成缓存文件] + C --> D[二次构建] + D --> E[读取缓存] + E --> F[20ms 完成加载] +``` + +**优化效果**: + +- 构建时间从 500ms 降至 20ms +- 开发服务器启动速度显著提升 +- 资源利用率最大化 + +### 最佳实践建议 + +1. **图标使用规划**: + - 优先选择同一集合内的图标 + - 避免过度分散使用不同集合 + +2. **开发体验优化**: + - 首次启动后缓存自动生效 + - 新增图标时缓存智能更新 + - 无需手动干预缓存管理 + +3. **生产构建保障**: + - 缓存机制不影响最终输出 + - 保持图标资源的按需加载特性 + - 确保构建产物的最优体积 + +通过这两项优化措施,主题在保持功能丰富性的同时,确保了优秀的构建性能和运行时体验。 diff --git a/docs/guide/quick-start/project-structure.md b/docs/guide/quick-start/project-structure.md new file mode 100644 index 00000000..1e001073 --- /dev/null +++ b/docs/guide/quick-start/project-structure.md @@ -0,0 +1,169 @@ +--- +title: 项目结构 +icon: ph:tree-structure-bold +createTime: 2024/09/16 21:59:30 +permalink: /guide/project-structure/ +--- + +本指南详细说明使用 VuePress 和 Plume 主题创建的项目文件结构,帮助您更好地组织和管理项目文件。 + +通过[命令行工具创建](./usage.md#命令行安装)的项目,其典型文件结构如下: + +::: file-tree + +- .git/ +- **docs** \# 文档源目录 + - .vuepress \# VuePress 配置目录 + - public/ \# 静态资源 + - client.ts \# 客户端配置(可选) + - collections.ts \# Collections 配置(可选) + - config.ts \# VuePress 主配置 + - navbar.ts \# 导航栏配置(可选) + - plume.config.ts \# 主题配置文件(可选) + - demo \# 文档类型 collection + - foo.md + - bar.md + - blog \# 博客类型 collection + - preview \# 博客分类 + - markdown.md \# 分类文章 + - article.md \# 博客文章 + - README.md \# 站点首页 + - … +- package.json +- pnpm-lock.yaml +- .gitignore +- README.md +::: + +::: tip 手动创建的项目也可参考此结构进行组织 +::: + +## 文档源目录 + +**文档源目录**包含站点的所有 Markdown 源文件。在使用命令行工具启动 VuePress 时需指定此目录: + +```sh +# [!code word:docs] +vuepress dev docs +# ↑ 文档源目录 +``` + +对应的 package.json 脚本配置: + +```json title="package.json" +{ + "scripts": { + "docs:dev": "vuepress dev docs", + "docs:build": "vuepress build docs" + } +} +``` + +VuePress 仅处理文档源目录内的文件,其他目录将被忽略。 + +## `.vuepress` 配置目录 + +`.vuepress/` 是 VuePress 的核心配置目录,您可在此配置项目、创建自定义组件和样式。 + +### `client.ts` - 客户端配置 + +用于扩展 VuePress 客户端功能,如注册全局组件: + +```ts title=".vuepress/client.ts" +import { defineClientConfig } from 'vuepress/client' + +export default defineClientConfig({ + enhance({ app, router, siteData }) { + // app: Vue 应用实例 + // router: Vue Router 实例 + // siteData: 站点数据 + + // 注册全局组件 + app.component('MyComponent', MyComponent) + }, + setup() { + // Vue 根组件的 setup 方法 + } +}) +``` + +### `config.ts` - 主配置文件 + +VuePress 的核心配置文件,设置主题、插件和构建工具: + +```ts title=".vuepress/config.ts" twoslash +import { viteBundler } from '@vuepress/bundler-vite' +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + lang: 'zh-CN', + theme: plumeTheme({ + // 主题配置... + }), + bundler: viteBundler(), +}) +``` + +### `plume.config.ts` - 主题配置 + +专为主题提供的配置文件,支持热更新,修改后无需重启服务: + +::: code-tabs +@tab .vuepress/plume.config.ts + +```ts twoslash +// @filename: ./navbar.ts +export default [] + +// @filename: ./collections.ts +export default [] +// ---cut--- +import { defineThemeConfig } from 'vuepress-theme-plume' +import collections from './collections' +import navbar from './navbar' + +export default defineThemeConfig({ + logo: '/logo.svg', + profile: { + name: 'Theme Plume', + }, + navbar, + collections, + // 更多配置... +}) +``` + +@tab .vuepress/navbar.ts + +```ts twoslash +import { defineNavbarConfig } from 'vuepress-theme-plume' + +export default defineNavbarConfig([ + // 导航项配置... +]) +``` + +@tab .vuepress/collections.ts + +```ts twoslash +import { defineCollections } from 'vuepress-theme-plume' + +export default defineCollections([ + { + type: 'post', + dir: 'blog', + title: '博客', + link: '/blog/' + }, + { + type: 'doc', + dir: 'demo', + linkPrefix: '/demo/', + title: '文档示例', + sidebar: 'auto' + }, +]) +``` + +::: diff --git a/docs/guide/quick-start/sidebar.md b/docs/guide/quick-start/sidebar.md new file mode 100644 index 00000000..d5d13bce --- /dev/null +++ b/docs/guide/quick-start/sidebar.md @@ -0,0 +1,577 @@ +--- +title: 侧边栏 +icon: ph:sidebar-duotone +createTime: 2025/09/29 15:45:34 +permalink: /guide/sidebar/ +tags: + - 指南 + - 快速开始 + +--- + +## 概述 + +侧边栏是文档常见的页面导航方式,可以快速定位到文档内容。 + +主题提供了两种方式配置侧边栏,包括: + +- 通过主题配置的 `sidebar` 选项配置侧边栏 +- 在 [类型为 `doc` 的集合](./collection-doc.md) 中配置侧边栏 + +## 文件结构与基础配置 + +### 目录结构设计 + +典型的项目结构可能如下: + +::: file-tree + +- docs + - typescript # TypeScript 学习笔记 + - basic.md + - types.md + - rust # Rust 编程笔记 + - tuple.md + - struct.md + - README.md # 站点首页 +::: + +### 通过`sidebar` 配置 + +这种方式适用于简单小巧的文档站点。 + +::: code-tabs#config + +@tab .vuepress/config.ts + +```ts twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + sidebar: { + '/typescript/': [ + 'basic', + 'types' + ], + '/rust/': [ + 'tuple', + 'struct' + ] + } + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + sidebar: { + '/typescript/': [ + 'basic', + 'types' + ], + '/rust/': [ + 'tuple', + 'struct' + ] + } +}) +``` + +::: + +### 通过 `collection` 配置 + +`collections` (集合)可以灵活的组织和管理站点中的不同类别的文档,这种方式适用于复杂的站点。 + +::: code-tabs#config + +@tab .vuepress/config.ts + +```js twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + collections: [ + { + type: 'doc', + dir: 'typescript', + linkPrefix: '/typescript/', + title: 'TypeScript 笔记', + sidebar: ['basic', 'types'], + }, + { + type: 'doc', + dir: 'rust', + linkPrefix: '/rust/', + title: 'Rust 笔记', + sidebar: ['tuple', 'struct'], + } + ], + }) +}) +``` + +@tab .vuepress/plume.config.ts + +```ts twoslash +import { defineThemeConfig } from 'vuepress-theme-plume' + +export default defineThemeConfig({ + collections: [ + { + type: 'doc', + dir: 'typescript', + linkPrefix: '/typescript/', + title: 'TypeScript 笔记', + sidebar: ['basic', 'types'], + }, + { + type: 'doc', + dir: 'rust', + linkPrefix: '/rust/', + title: 'Rust 笔记', + sidebar: ['tuple', 'struct'], + } + ], +}) +``` + +::: + +::: tip 配置时机建议 +在创建文档文件前完成笔记配置。主题的 [auto-frontmatter](../../config/theme.md#autofrontmatter) 功能会根据配置自动生成永久链接和侧边栏结构。 +::: + +## 进阶配置管理 + +### 模块化配置方案 + +对于复杂项目,推荐使用主题提供的类型安全配置工具: + +::: code-tabs + +@tab .vuepress/collections.ts + +```ts twoslash +import { defineCollection, defineCollections } from 'vuepress-theme-plume' + +// 单个集合配置 +const typescript = defineCollection({ + dir: 'typescript', + linkPrefix: '/typescript/', + sidebar: [ + 'guide/intro.md', + 'guide/getting-start.md', + 'config/config-file.md', + ] +}) + +// 导出所有集合配置 +export default defineCollections([ + typescript +]) +``` + +@tab .vuepress/config.ts + +```ts twoslash +// @filename: ./collections.ts +export default [] + +// ---cut--- +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' +import collections from './collections' // [!code ++] + +export default defineUserConfig({ + theme: plumeTheme({ + collections // [!code ++] + }), +}) +``` + +::: + +### 大型项目配置拆分 + +当集合数量较多时,可采用模块化配置结构: + +::: file-tree + +- docs + - .vuepress + - collections + - typescript.ts + - rust.ts + - index.ts + - … + - typescript/ + - rust/ +::: + +配置代码组织示例: + +::: code-tabs +@tab .vuepress/config.ts + +```ts twoslash +// @filename: ./collections/index.ts +export default [] + +// ---cut--- +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' +import collections from './collections/index.ts' // [!code ++] + +export default defineUserConfig({ + theme: plumeTheme({ + collections // [!code ++] + }), +}) +``` + +@tab .vuepress/collections/index.ts + +```ts twoslash +// @filename: ./rust.ts +export default {} +// @filename: ./typescript.ts +export default {} + +// ---cut--- +import { defineCollections } from 'vuepress-theme-plume' +import rust from './rust' // [!code ++] +import typescript from './typescript' // [!code ++] + +export default defineCollections([ + rust, + typescript, +]) +``` + +@tab .vuepress/collections/typescript.ts + +```ts +import { defineCollection } from 'vuepress-theme-plume' + +export default defineCollection({ + type: 'doc', + dir: 'typescript', + link: '/typescript/', + title: 'TypeScript 笔记', + sidebar: [ + 'guide/intro.md', + 'guide/getting-start.md', + 'config/config-file.md', + ] +}) +``` + +::: + +## 侧边栏配置详解 + +### 文件结构示例 + +假设 TypeScript 笔记 包含以下结构: + +::: file-tree + +- docs + - typescript + - guide + - intro.md + - getting-start.md + - config + - config-file.md + - configuration.md + - reference + - basic.md + - syntax.md + - modules.md + - built-in + - types + - Required.md + - Omit.md + - README.md +::: + +### 自动生成侧边栏 + +最简单的配置方式使用自动生成: + +```ts +import { defineCollection } from 'vuepress-theme-plume' + +export default defineCollection({ + type: 'doc', + dir: 'typescript', + sidebar: 'auto' // 自动生成侧边栏 // [!code ++] +}) +``` + +主题根据目录结构自动配置侧边栏。 + +**排序控制**:通过数字前缀管理显示顺序 + +::: file-tree + +- typescript + - 1.guide + - 1.intro.md + - 2.getting-start.md + - 2.config + - 1.config-file.md + - 2.configuration.md + - … +::: + +数字前缀仅用于排序,不会在侧边栏中显示。 + +**自动折叠**:默认情况下,侧边栏不会自动折叠,可以通过配置 `sidebarCollapsed` 开启自动折叠: + +```ts +import { defineCollection } from 'vuepress-theme-plume' + +export default defineCollection({ + type: 'doc', + dir: 'typescript', + sidebar: 'auto', + sidebarCollapsed: true, // [!code ++] +}) +``` + +`sidebarCollapsed` 有以下可选值: + +- `undefined`: 默认,不自动折叠 +- `true`: 默认全部折叠 +- `false`: 默认全部展开 + +### 自动生成次级侧边栏 + +为了更加灵活的控制侧边栏,减少配置的复杂度,主题允许配置仅自动生成次级侧边栏: + +```ts +import { defineCollection } from 'vuepress-theme-plume' + +export default defineCollection({ + type: 'doc', + dir: 'typescript', + sidebar: [ + // 次级 items 自动读取 typescript/guide 目录 + { text: '指南', prefix: 'guide', items: 'auto' }, + // 次级 items 自动读取 typescript/config 目录 + { text: '配置', prefix: 'config', items: 'auto' }, + ], +}) +``` + +### 自定义侧边栏配置 + +#### 基础配置类型 + +```ts +interface SidebarItem { + text?: string // 显示文本 + link?: string // 链接地址 + icon?: ThemeIcon // 图标配置 + badge?: string | ThemeBadge // 徽章 + prefix?: string // 链接前缀 + items?: 'auto' | (string | SidebarItem)[] // 下一级侧边栏 + collapsed?: boolean // 折叠状态 +} +``` + +#### 配置示例 + +**基础链接配置**: + +采用简写形式,可以传入 md 文件的路径或 页面链接地址, +主题会自动读取文件的 `frontmatter` 配置作为侧边栏配置。 + +```ts +sidebar: [ + // 绝对路径时, + // 在 themeConfig.sidebar 中是相对于 `key` 前缀的路径 + // 在 collection 中是相对于 `dir` 的路径 + '/guide/intro.md', // markdown 文件地址 + '/guide/getting-start/', // 页面链接地址 + '/config/config-file', // 可以省略 `.md` 后缀 +] +``` + +**完整对象配置**: + +```ts +sidebar: [ + { text: '介绍', link: '/guide/intro' }, + { text: '快速上手', link: '/guide/getting-start' }, +] +``` + +**嵌套分组配置**: + +```ts +sidebar: [ + { + text: '指南', + prefix: '/guide', + items: [ + { text: '介绍', link: 'intro' }, + 'getting-start', // 简写形式 + ], + }, + { + text: '配置', + prefix: '/config', + items: 'auto', // 自动生成该分组下的侧边栏 + }, +] +``` + +### Prefix 路径处理规则 + +`prefix` 用于简化相同前缀的链接配置: + +```ts +const sidebarItem: SidebarItem = { + prefix: '/guide', + items: [ + 'intro', // → /guide/intro.md + '/config/config-file', // → /config/config-file.md (绝对路径) + { link: '/blog/' }, // → /guide/blog/ + { link: '/config/' } // → /config.md (绝对路径) + ] +} +``` + +**路径判断规则**: + +- 以 `/` 开头:绝对路径,不拼接 prefix +- 其他情况:相对路径,与 prefix 拼接 + +**多级嵌套示例**: + +```ts +const sidebarItem: SidebarItem = { + prefix: '/guide', + items: [ + 'intro', // → /guide/intro.md + { + prefix: '/config', // 绝对路径,抛弃上级的 prefix + items: ['config-file'] // → /config/config-file.md + }, + { + prefix: 'blog', // 相对路径,拼接上级的 prefix + items: ['intro'] // → /guide/blog/intro.md + } + ] +} +``` + +::: warning 层级深度限制 +避免超过 3 层嵌套的侧边栏配置,过深的层级会影响用户体验和界面美观。 +::: + +## 视觉增强功能 + +### 图标配置 + +支持多种图标源,通过 `markdown.icon.provide` 配置: + +```ts +sidebar: [ + { + text: '指南', + prefix: '/guide', + icon: 'ep:guide', // Iconify 图标 + items: [ + { text: '介绍', link: 'intro', icon: 'ph:info-light' }, + ], + }, +] +``` + +**本地图标配置**: + +```ts +const sidebarItem: SidebarItem = { + text: '指南', + icon: '/images/guide.png', // 本地图片 + items: [ + { + text: '介绍', + icon: 'https://example.com/icon.png' // 远程图片 + }, + ] +} +``` + +::: important 本地资源路径 +本地图片路径应从 `/` 开始,对应 `.vuepress/public/` 目录: + +::: file-tree + +- docs + - .vuepress + - public + - images + - guide.png + - info.png +::: + +### 徽章功能 + +通过徽章提供额外信息提示: + +```ts +sidebar: [ + { + text: '指南', + badge: { text: '新', type: 'danger' }, // 对象形式 + items: [ + { text: '介绍', badge: '推荐' }, // 字符串简写 + ], + }, +] +``` + +**Frontmatter 配置**: + +```md +--- +title: 介绍 +badge: + text: 新功能 + type: danger +--- +``` + +### 分组分隔符 + +在复杂侧边栏中添加视觉分隔: + +```ts +sidebar: [ + { + text: '指南', + items: [ + '项目 1', + '项目 2', + { text: '高级功能', link: '---' }, // 分隔符 + '项目 3', + '项目 4', + ], + }, +] +``` + +**分隔符特征**:`link` 字段包含至少三个连续的 `-` diff --git a/docs/guide/quick-start/usage.md b/docs/guide/quick-start/usage.md new file mode 100644 index 00000000..4575a214 --- /dev/null +++ b/docs/guide/quick-start/usage.md @@ -0,0 +1,217 @@ +--- +title: 安装与使用 +icon: grommet-icons:install +createTime: 2024/03/04 09:50:07 +permalink: /guide/usage/ +tags: + - 指南 + - 快速开始 +--- + +## 环境要求 + +- [Node.js](https://nodejs.org/):**^20.6.0 或 >= 22.0.0** [+node-versions] +- 包管理器:[npm 8+](https://www.npmjs.com/)、[pnpm 8+](https://pnpm.io/zh/) 或 [Yarn 2+](https://yarnpkg.com/) + +[+node-versions]: **^20.6.0:** `20.6.0` 及以上但低于 `21.0.0` 的版本 +[+node-versions]: **>= 22.0.0:** `22.0.0` 及以上的版本 + +:::: details 如何安装环境依赖? +::: steps + +1. **下载 Node.js** + + 访问 [Node.js 官网](https://nodejs.org/zh-cn) 下载最新稳定版,按照安装向导完成安装(通常保持默认设置即可)。 + +2. **启用 PNPM** + + 安装完成后打开终端,执行以下命令: + + ```sh + corepack enable + ``` + + 我们推荐使用 pnpm 作为包管理器。 + +3. **环境就绪** +::: +:::: + +## 命令行安装 + +我们提供了命令行工具,可快速搭建基础项目结构。执行以下命令启动安装向导: + +::: npm-to + +```sh +npm create vuepress-theme-plume@latest +``` + +::: + +启动后只需回答几个简单问题即可完成配置: + + + +::: details 命令行工具使用指南 + +以 Windows 系统为例: + +1. 按下 `Win + R` 打开"运行"对话框 +2. 输入 `cmd` 或 `powershell` 后按 Enter + +如果当前目录不正确,可使用以下命令切换: + +```sh +D: # 切换到 D 盘(根据实际情况调整) +cd open-source # 进入目标目录 +``` + +此时执行 `pnpm create vuepress-theme-plume@latest` 即可创建项目,项目将位于 `D:\open-source\my-project` 目录。 +::: + +## 手动安装 + +::: info 注意事项 + +- 使用 [pnpm](https://pnpm.io/zh/) 时需额外安装 `vue` 作为 peer-dependencies +- 使用 [Yarn 2+](https://yarnpkg.com/) 时需在 `.yarnrc.yml` 中设置 `nodeLinker: 'node-modules'` +::: + +如需手动安装,请按以下步骤操作: + +:::: steps + +- ### 创建项目目录 + + ```sh + mkdir my-blog + cd my-blog + ``` + +- ### 初始化项目 + + ::: npm-to + + ```sh + git init + npm init + ``` + + ::: + +- ### 安装核心依赖 + + 安装 `vuepress@next` 和主题包: + + ::: npm-to + + ```sh + # 安装 VuePress + npm i -D vuepress@next vue + # 安装主题和构建工具 + npm i -D vuepress-theme-plume @vuepress/bundler-vite@next + ``` + + ::: + + ::: warning 版本兼容性 + 当前主题已适配至 vuepress@{{ vuepressVersion }},使用其他版本可能存在兼容性问题。 + ::: + +- ### 配置构建脚本 + + 在 `package.json` 中添加: + + ```json title="package.json" + { + "scripts": { + "docs:dev": "vuepress dev docs", + "docs:build": "vuepress build docs" + } + } + ``` + + VuePress 默认使用 `docs` 目录作为文档根目录。 + +- ### 配置 Git 忽略规则 + + ::: code-tabs + @tab .gitignore + + ```txt + node_modules + .temp + .cache + ``` + + @tab sh + + ```sh + echo 'node_modules' >> .gitignore + echo '.temp' >> .gitignore + echo '.cache' >> .gitignore + ``` + + ::: + +- ### 配置主题 + + ```ts title="docs/.vuepress/config.ts" twoslash + import { viteBundler } from '@vuepress/bundler-vite' + import { defineUserConfig } from 'vuepress' + import { plumeTheme } from 'vuepress-theme-plume' + + export default defineUserConfig({ + // 必须设置默认语言 + lang: 'zh-CN', + theme: plumeTheme({ + // 主题配置... + }), + bundler: viteBundler(), + }) + ``` + + ::: warning 语言配置必填 + 无论是否使用多语言,都必须正确配置 `lang` 选项,主题依赖此设置确定文本语言环境。 + ::: + +- ### 创建首页文档 + + ```md title="README.md" + --- + home: true + --- + ``` + +- ### 启动开发服务器 + + ::: npm-to + + ```sh + npm run docs:dev + ``` + + ::: + + VuePress 将在 启动开发服务器,支持 Markdown 文件的热重载。 + +- ### 安装完成 + +:::: + +## 主题更新 + +使用以下命令检查并更新主题: + +::: npm-to + +```sh +npx vp-update +``` + +::: + + diff --git a/docs/guide/quick-start/write.md b/docs/guide/quick-start/write.md new file mode 100644 index 00000000..51c0d513 --- /dev/null +++ b/docs/guide/quick-start/write.md @@ -0,0 +1,172 @@ +--- +title: 编写文章 +icon: mingcute:edit-4-line +createTime: 2024/03/04 10:06:06 +permalink: /guide/write/ +tags: + - 指南 + - 快速开始 +--- + +VuePress 完整支持 [标准 Markdown 语法](../markdown/basic.md),同时允许通过 +[YAML](https://dev.to/paulasantamaria/introduction-to-yaml-125f) +格式的 Frontmatter 定义页面元数据(如标题、创建时间等)。 + +此外,主题还提供了丰富的 [Markdown 扩展语法](../markdown/extensions.md)。您不仅可以在 Markdown 中直接编写 HTML,还能使用 Vue 组件来增强内容表现力。 + +## Frontmatter 页面配置 + +通过 Frontmatter 可以自定义每个页面的属性和行为。Frontmatter 位于文件顶部,由 `---` 分隔符包裹。 + +```md title="post.md" + +--- +title: 文章标题 +createTime: 2024/09/08 22:53:34 +permalink: /article/9eh4d6ao/ +--- + +页面正文内容位于第二个 `---` 之后。 +``` + +::: details 什么是 Frontmatter? +Frontmatter 是采用 [YAML](https://dev.to/paulasantamaria/introduction-to-yaml-125f) 格式的配置区块,位于 Markdown 文件顶部,通过 `---` 分隔符界定。 + +推荐阅读 [Frontmatter 详解](../../../../4.教程/frontmatter.md) 了解完整语法规范。 +::: + +## 自动生成 Frontmatter + +主题在开发服务器启动后,会自动为文档源目录中的 Markdown 文件生成必要的 Frontmatter 字段,包括:**标题**、**创建时间** 和 **永久链接**。 + +这一功能既减轻了内容创作者的重复工作负担,也为主题的后续功能提供了必要的数据支持。 + +```md +--- +title: 标题 +createTime: 2024/09/08 22:53:34 +permalink: /article/9eh4d6ao/ +--- +``` + +### 标题生成规则 + +主题默认使用文件名作为文章标题。解析时会自动移除[文件命名约定](#文件夹命名约定)中的序号和扩展名,例如 `1.我的文章.md` 将生成标题 `我的文章`。 + +### 创建时间 + +主题以文件的创建时间为基准,格式化为 `yyyy/MM/dd HH:mm:ss` 作为文章创建时间。 + +### 永久链接 + +**永久链接**是文章发布后的固定访问地址。一旦生成,即使文件路径或名称发生变化,该链接仍保持不变。 + +预先设置永久链接有助于: + +- 提升 **SEO 效果**,避免收录地址频繁变动 +- 保持整个站点链接风格的 **一致性** + +### 禁用自动生成 + +如需完全手动控制 Frontmatter,可通过 [主题配置 > autoFrontmatter](../../config/theme.md#autofrontmatter) 禁用自动生成功能。 + +```ts title=".vuepress/config.ts" twoslash +import { defineUserConfig } from 'vuepress' +import { plumeTheme } from 'vuepress-theme-plume' + +export default defineUserConfig({ + theme: plumeTheme({ + // 完全禁用所有自动生成 + // autoFrontmatter: false, + + // 按需启用特定功能 + autoFrontmatter: { + permalink: true, // 生成永久链接 + createTime: true, // 生成创建时间 + title: true, // 生成标题 + }, + collections: [{ + type: 'post', + dir: 'blog', + title: '博客', + // 针对特定 collection 配置 + autoFrontmatter: { + permalink: true, + createTime: true, + title: true + } + }] + }) +}) +``` + +## 文件组织约定 + +::: info 说明 +以下示例基于[项目结构](./project-structure.md)中的基准文件结构。 +::: + +主题提供了灵活的文件组织方式,您可以在 `docs` 目录中按喜好创建任意命名的 Markdown 文件。 + +### 文件夹命名约定 + +主题对 `docs` 目录中的文件夹命名采用以下规则: + +对于 `post` 类型的 collection: + +- 文件夹名称作为文章的 **分类** +- 支持多级目录,子目录作为父分类的子项 + +需要排序时,采用以下命名模式(适用于所有类型的 collection): + +```ts :no-line-numbers +const dir = /\d+\.[\s\S]+/ +// 格式:数字 + . + 分类名称 +// 示例:1.前端 +``` + +数字部分将作为 **排序依据**。未带数字的目录按默认规则排序。 + +**示例结构:** + +::: file-tree + +- docs + - blog \# post 类型 collection + - 1.前端 + - 1.html/ + - 2.css/ + - 3.javascript/ + - 2.后端/ + - 运维/ + - typescript \# doc 类型 collection + - 1.基础 + - 1.变量.md + - 2.类型.md + - 2.进阶.md +::: + +主题将根据目录结构自动生成分类页面或者侧边栏。 + +### 文件命名约定 + +文件命名遵循与[文件夹命名约定](#文件夹命名约定)相同的规则,为笔记功能的[自动生成侧边栏](../../config/notes.md#自动生成侧边栏)提供排序依据。 + +## 开始写作 + +现在您可以在 `docs` 目录下创建 Markdown 文件开始写作了。关于 Markdown 扩展功能的完整说明,请参阅[扩展语法文档](../markdown/extensions.md)。 + +由于主题默认自动生成文章标题,正文内容的标题应从二级标题 `## 二级标题` 开始。如果禁用了 `autoFrontmatter.title`,则使用一级标题 `# 一级标题` 开始。 + +### 文章标签 + +通过 `frontmatter.tags` 为文章添加标签: + +```md +--- +title: 我的文章 +tags: + - 标签1 + - 标签2 +--- +``` diff --git a/docs/notes/theme/guide/repl/codeSandbox.md b/docs/guide/repl/codeSandbox.md similarity index 100% rename from docs/notes/theme/guide/repl/codeSandbox.md rename to docs/guide/repl/codeSandbox.md diff --git a/docs/notes/theme/guide/repl/codepen.md b/docs/guide/repl/codepen.md similarity index 100% rename from docs/notes/theme/guide/repl/codepen.md rename to docs/guide/repl/codepen.md diff --git a/docs/notes/theme/guide/repl/demo/Counter.module.css b/docs/guide/repl/demo/Counter.module.css similarity index 100% rename from docs/notes/theme/guide/repl/demo/Counter.module.css rename to docs/guide/repl/demo/Counter.module.css diff --git a/docs/notes/theme/guide/repl/demo/Counter.ts b/docs/guide/repl/demo/Counter.ts similarity index 100% rename from docs/notes/theme/guide/repl/demo/Counter.ts rename to docs/guide/repl/demo/Counter.ts diff --git a/docs/notes/theme/guide/repl/demo/Counter.vue b/docs/guide/repl/demo/Counter.vue similarity index 100% rename from docs/notes/theme/guide/repl/demo/Counter.vue rename to docs/guide/repl/demo/Counter.vue diff --git a/docs/notes/theme/guide/repl/demo/Toggle.vue b/docs/guide/repl/demo/Toggle.vue similarity index 100% rename from docs/notes/theme/guide/repl/demo/Toggle.vue rename to docs/guide/repl/demo/Toggle.vue diff --git a/docs/notes/theme/guide/repl/demo/normal-lib.html b/docs/guide/repl/demo/normal-lib.html similarity index 100% rename from docs/notes/theme/guide/repl/demo/normal-lib.html rename to docs/guide/repl/demo/normal-lib.html diff --git a/docs/notes/theme/guide/repl/demo/normal.html b/docs/guide/repl/demo/normal.html similarity index 100% rename from docs/notes/theme/guide/repl/demo/normal.html rename to docs/guide/repl/demo/normal.html diff --git a/docs/notes/theme/guide/repl/frontend-deprecated.md b/docs/guide/repl/frontend-deprecated.md similarity index 100% rename from docs/notes/theme/guide/repl/frontend-deprecated.md rename to docs/guide/repl/frontend-deprecated.md diff --git a/docs/notes/theme/guide/repl/frontend.md b/docs/guide/repl/frontend.md similarity index 99% rename from docs/notes/theme/guide/repl/frontend.md rename to docs/guide/repl/frontend.md index 934659f7..7ef0de5d 100644 --- a/docs/notes/theme/guide/repl/frontend.md +++ b/docs/guide/repl/frontend.md @@ -733,7 +733,7 @@ setInterval(() => { ``` ::: details 展开查看 `/.vuepress/bulletin.md` 代码 -@[code](../../../../.vuepress/bulletin.md) +@[code](../../.vuepress/bulletin.md) ::: **输出:** diff --git a/docs/notes/theme/guide/repl/golang.md b/docs/guide/repl/golang.md similarity index 100% rename from docs/notes/theme/guide/repl/golang.md rename to docs/guide/repl/golang.md diff --git a/docs/notes/theme/guide/repl/jsFiddle.md b/docs/guide/repl/jsFiddle.md similarity index 100% rename from docs/notes/theme/guide/repl/jsFiddle.md rename to docs/guide/repl/jsFiddle.md diff --git a/docs/notes/theme/guide/repl/kotlin.md b/docs/guide/repl/kotlin.md similarity index 100% rename from docs/notes/theme/guide/repl/kotlin.md rename to docs/guide/repl/kotlin.md diff --git a/docs/notes/theme/guide/repl/python.md b/docs/guide/repl/python.md similarity index 100% rename from docs/notes/theme/guide/repl/python.md rename to docs/guide/repl/python.md diff --git a/docs/notes/theme/guide/repl/replit.md b/docs/guide/repl/replit.md similarity index 100% rename from docs/notes/theme/guide/repl/replit.md rename to docs/guide/repl/replit.md diff --git a/docs/notes/theme/guide/repl/rust.md b/docs/guide/repl/rust.md similarity index 100% rename from docs/notes/theme/guide/repl/rust.md rename to docs/guide/repl/rust.md diff --git a/docs/notes/theme/config/intro.md b/docs/notes/theme/config/intro.md deleted file mode 100644 index 0b22888a..00000000 --- a/docs/notes/theme/config/intro.md +++ /dev/null @@ -1,187 +0,0 @@ ---- -title: 配置说明 -createTime: 2024/03/02 10:48:14 -permalink: /config/intro/ ---- - -## 概述 - -==vuepress-theme-plume== 是基于 [VuePress](https://v2.vuepress.vuejs.org/) 的主题。 -因此,配置需要遵循 VuePress 的配置规范。 - -**在 VuePress 中,有三种配置类型:** - -- **站点配置**: 这是你在 配置文件 _(如 `.vuepress/config.ts`)_ 中直接导出的对象 -- **主题配置**: 传递给 `plumeTheme()` 的对象参数 -- **页面配置**: 由在页面顶部基于 YAML 语法的 Frontmatter 提供 - -## VuePress 配置文件 - -VuePress 站点的基本配置文件是 `.vuepress/config.js` ,但也同样支持 TypeScript 配置文件。 -你可以使用 `.vuepress/config.ts` 来得到更好的类型提示。 - -具体而言,VuePress 对于配置文件的路径有着约定(按照优先顺序): - -当前工作目录 `cwd` 下: - -- `vuepress.config.ts` -- `vuepress.config.js` -- `vuepress.config.mjs` - -源文件目录 `sourceDir` 下: - -- `.vuepress/config.ts` -- `.vuepress/config.js` -- `.vuepress/config.mjs` - -基础配置文件示例: - -```ts title=".vuepress/config.ts" twoslash -import { viteBundler } from '@vuepress/bundler-vite' -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - // [!code hl:5] - // VuePress 的基本配置 - lang: 'zh-CN', - title: '你好, VuePress !', - description: '这是我的第一个 VuePress 站点', - // ... - - // 使用 vite 作为构建工具 - bundler: viteBundler(), - - // 告诉 VuePress 使用 Plume 主题 - theme: plumeTheme({ // [!code ++:4] - // 在这里配置主题 - // ... - }), -}) -``` - -## 主题配置文件 - -一般我们使用 `.vuepress/config.js` 或者 `.vuepress/config.ts` 来配置主题。 - -```ts title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - // 在这里配置主题 - }), - // ... -}) -``` - -但是当我们已经启动了 VuePress 服务后,每次对该文件的修改,都会导致 VuePress 服务重启, -然后站点进行全量刷新,这可能需要等待一段时间才能恢复, 当站点内容较少时,这个过程很快, -而对于一些较大的站点,可能需要等待较长的时间。 - -特别是频繁修改时,很容易使 VuePress ==服务崩溃=={.caution} ::twemoji:angry-face::,不得不手动重启。 - -**这给我们在编写站点内容时带来的极大的不便。** - -实际上,主题配置中的一部分字段,并不需要重启 VuePress 服务, -比如 `navbar`、`profile` 等字段,可以通过 热更新 的方式实时生效。 - -主题添加主题配置文件 `plume.config.ts` 的支持, -==对该文件的修改将通过热更新的方式实时生效。=={.tip} ::twemoji:confetti-ball:: - -你可以在这个文件中配置支持热更新的字段,比如 `navbar`、`profile` 等字段。 - -::: tip -这些支持热更新的字段依然可以在 VuePress 配置文件的 `theme` 中进行配置,主题配置文件的配置 -最终会合并到 VuePress 配置文件中。 - -在 主题配置文件配置的字段,避免在 VuePress 配置文件的 `theme` 配置中重复配置。 -因为在合并过程可能会出现数据重复的情况。 -::: - -::: details 什么是 热更新? - -**热更新** 是编程的一种技术,在 VuePress 中,体现为: - -- 对配置的修改实时生效,不需要重启 VuePress 服务,浏览器不会自动刷新页面 -- 对页面的修改实时生效,在浏览器中页面无需刷新即可看到修改后的效果 - -::: - -### 配置 - -在 [VuePress 配置文件](#vuepress-配置文件) 相同的路径下创建一个 `plume.config.js` 文件, -你也可以使用 TypeScript 来创建一个 `plume.config.ts` 文件,以获得更好的类型提示。 - -::: file-tree - -- docs - - .vuepress - - config.ts - - **plume.config.ts** -::: - -```ts title="plume.config.ts" twoslash -// @filename: ./navbar.ts -export default [] -// ---cut--- -import { defineThemeConfig } from 'vuepress-theme-plume' -import navbar from './navbar' - -export default defineThemeConfig({ - // 在这里配置主题 - profile: { - name: 'Your name', - }, - navbar, -}) -``` - -主题提供了 `defineThemeConfig(config)` 函数,为主题使用者提供主题配置的类型帮助。 -你可以直接在这个文件中配置除了 `plugins` 字段外的其他配置。 - -::: warning 主题配置文件仅能配置部分支持热更新的配置字段 -::: - -::: warning 配置会被合并到 VuePress 配置的主题配置中,已经在主题配置文件中配置的字段,不需要在 VuePress 配置文件中的 `theme` 配置中重复配置 -::: - -### 自定义配置文件路径 - -如果你不希望按照 VuePress 默认的配置文件路径管理你的主题配置文件, -你也可以在 VuePress 配置文件中指定自己的主题配置文件路径。 - -```ts title=".vuepress/config.ts" twoslash -import path from 'node:path' -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - // 在这里定义自己的主题配置文件路径 - configFile: path.join(__dirname, 'custom/config.ts'), // [!code ++] - }), -}) -``` - -::: warning 如果你是新手用户,不推荐自定义配置文件路径,这可能带来意想不到的问题。 -::: - -## 页面配置 - -使用在页面的顶部使用 YAML 语法的 Frontmatter,可以为每个页面进行单独配置主题。 - -```md {1,5} title="article.md" ---- -title: 文章标题 -createTime: 2024/09/08 22:53:34 -permalink: /article/xxx/ ---- -``` - -在 Markdown 文件的顶部,使用 `---` 分隔符,在两个 `---` 之间的部分被称为 Frontmatter。 -这部分通过 `YAML` 语法进行配置。 - -:::tip 如果你不了解 `YAML`,可以通过 [这篇博客](/article/ecxnxxd0/) 了解它的基本用法。 -::: diff --git a/docs/notes/theme/config/notes.md b/docs/notes/theme/config/notes.md deleted file mode 100644 index b21af02f..00000000 --- a/docs/notes/theme/config/notes.md +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: notes配置 -createTime: 2024/03/02 14:00:06 -permalink: /config/notes/ ---- - -## 概述 - -::: tip notes 配置支持在 `.vuepress/config.ts` ,或者在 `plume.config.ts` 中进行配置。 -::: - -主题默认将 `sourceDir` 目录下的 `notes` 目录作为 文档/知识笔记 的存放目录, -该目录下的所有文件都会被排除在 博客文章之外。 - -默认配置如下: - -::: code-tabs#configs - -@tab .vuepress/config.ts - -```ts twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - notes: { link: '/', dir: 'notes', notes: [] }, // [!code highlight] - }) -}) -``` - -@tab .vuepress/plume.config.ts - -```ts twoslash -import { defineThemeConfig } from 'vuepress-theme-plume' - -export default defineThemeConfig({ - notes: { link: '/', dir: 'notes', notes: [] }, // [!code highlight] -}) -``` - -::: - -如果启用了 多语言配置, 你 也可以在 `locales` 字段中 分别配置 `notes` - -```ts -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - locales: { - '/': { - notes: { link: '/', dir: 'notes', notes: [] }, // [!code highlight] - }, - '/zh/': { - notes: { link: '/zh/', dir: 'notes', notes: [] }, // [!code highlight] - } - } - }) -}) -``` - -## 配置 - -```ts -interface NotesOptions { - /** - * 保存所有笔记的目录 - * @default '/notes/' - */ - dir: string - /** - * 所有笔记的默认链接前缀 - * @default '/' - */ - link: string - /** - * 笔记配置 - */ - notes: NoteItem[] -} - -interface NoteItem { - /** - * 保存笔记的目录 - */ - dir: string - /** - * 当前笔记的链接前缀,将会与 `notes.link` 合并 - */ - link: string - /** - * 当前笔记名称 - */ - text?: string - /** - * 当前笔记的侧边栏配置 - * - `'auto'` 根据目录结构自动生成侧边栏 - * - `string` 侧边栏文件路径, 如 `'/notes/sidebar.md'`,主题将会读取该文件作为侧边栏 - * - `SidebarItem` 单项侧边栏配置 - */ - sidebar?: 'auto' | (string | SidebarItem)[] -} - -interface ThemeBadge { - /* 徽章文本 */ - text?: string - /* 徽章类型,内置: 'info' | 'tip' | 'danger' | 'warning' */ - type?: string - /* 文本颜色 */ - color?: string - /* 背景颜色 */ - bgColor?: string - /* 边框颜色 */ - borderColor?: string -} - -interface SidebarItem { - /** - * 侧边栏文本 - */ - text?: string - - /** - * 侧边栏链接 - */ - link?: string - - /** - * 侧边栏图标 - */ - icon?: ThemeIcon - - /** - * 徽章 - */ - badge?: string | ThemeBadge - - /** - * 次级侧边栏分组 - * 不超过 3 层 - */ - items?: 'auto' | (string | SidebarItem)[] - - /** - * 如果未指定,组不可折叠。 - * - * 如果为`true`,组可折叠,并默认折叠。 - * - * 如果为`false`,组可折叠,但默认展开。 - */ - collapsed?: boolean - - /** - * 当前分组的链接前缀 - */ - prefix?: string - - rel?: string - target?: string -} - -/** - * - 支持 iconify 图标,直接使用 iconify name 即可自动加载 - * @see https://icon-sets.iconify.design/ - * - * - 如果 iconify 图标不满足您的需求,也可以支持传入 svg 字符串。 - * - 还支持使用 本地图片 或 远程图片,本地图片的路径需要以 `/` 开头。 - */ -export type ThemeIcon = string | { svg: string } -``` - -### 自动生成侧边栏 - -当配置某个 笔记 的 `sidebar` 为 `auto` 时,会自动根据目录结构生成侧边栏。 - -排序根据 [文件夹命名约定](../guide/quick-start/write.md#文件夹命名约定) 。 - -### 侧边栏图标 - -主题不仅可以通过 侧边栏配置中 `icon` 配置图标,还可以通过 文件中的 frontmatter 中 `icon` 字段 配置图标, -与 侧边栏配置中的 `icon` 一致。 - -```md ---- -title: 主题介绍 -icon: mdi:tooltip-text-outline ---- -``` - -完整侧边栏使用说明,请查看 [此文档](../guide/quick-start/document.md) 。 diff --git a/docs/notes/theme/config/sidebar.md b/docs/notes/theme/config/sidebar.md deleted file mode 100644 index a4af622c..00000000 --- a/docs/notes/theme/config/sidebar.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: 侧边栏配置 -createTime: 2024/08/15 21:05:36 -permalink: /config/sidebar/ ---- - -## 概述 - -在本主题中,侧边栏 特指 位于页面 最左侧的内容区域,用于导航到不同的页面。 - -在 `vuepress` 的默认主题 `@vuepress/theme-default` 中,侧边栏是通过 `sidebar` 进行配置。 - -**但在本主题中,为使其更具语义化,主题将侧边栏配置整合到了 [notes 配置](./notes.md) 中** 。 -通过一个 `note` 对应一个 `sidebar` 的方式,实现更加简洁,语义化的侧边栏配置。 - -同时,为了满足 用户不希望使用 `notes` 功能的需求,本主题也提供了 `sidebar` 的选项进行侧边栏配置。 - -## Notes 中的侧边栏配置 - -`notes` 的功能是聚合一系列的文章,通过侧边栏来导航到 notes 中不同的文章。 - -你可以在 `notes` 目录下创建多个 `note` ,在每一个 `note` 中单独配置 `sidebar`: - -::: code-tabs#configs - -@tab .vuepress/config.ts - -```ts twoslash -import { defineUserConfig } from 'vuepress' -import { defineNoteConfig, plumeTheme } from 'vuepress-theme-plume' - -// [!code ++:8] -const noteA = defineNoteConfig({ - dir: 'note A', - link: '/note-a/', - sidebar: [ - { text: 'one item', link: 'one' }, - { text: 'two item', link: 'two' }, - ] -}) - -export default defineUserConfig({ - theme: plumeTheme({ - notes: { - link: '/', - dir: 'notes', - notes: [noteA], // [!code ++] - }, - }) -}) -``` - -@tab .vuepress/plume.config.ts - -```ts twoslash -import { defineNoteConfig, defineThemeConfig } from 'vuepress-theme-plume' - -// [!code ++:8] -const noteA = defineNoteConfig({ - dir: 'note A', - link: '/note-a/', - sidebar: [ - { text: 'one item', link: 'one' }, - { text: 'two item', link: 'two' }, - ] -}) - -export default defineThemeConfig({ - notes: { - link: '/', - dir: 'notes', - notes: [noteA], // [!code ++] - }, -}) -``` - -::: - -主题提供了 `defineNoteConfig` 来帮助你配置 note , 你可以参考 [这里](./notes.md)来查看如何配置。 - -## 通用 Sidebar 配置 - -如果你不想使用 `notes` 的方式来管理系列文章,但又期望通过侧边栏来导航到不同的文章, -可以通过 [sidebar](../config/theme.md#sidebar) 通用配置来实现。 - -::: code-tabs#configs - -@tab .vuepress/config.ts - -```ts twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - notes: false, - sidebar: { - '/config/': [ - { text: '侧边栏配置', link: 'sidebar-1' }, - { text: '侧边栏配置', link: 'sidebar-2' }, - ] - } - }) -}) -``` - -@tab .vuepress/plume.config.ts - -```ts twoslash -import { defineThemeConfig } from 'vuepress-theme-plume' - -export default defineThemeConfig({ - notes: false, - sidebar: { - '/config/': [ - { text: '侧边栏配置', link: 'sidebar-1' }, - { text: '侧边栏配置', link: 'sidebar-2' }, - ] - } -}) -``` - -::: - -完整侧边栏使用说明,请查看 [此文档](../guide/quick-start/document.md) 。 diff --git a/docs/notes/theme/guide/code/code-tabs.md b/docs/notes/theme/guide/code/code-tabs.md deleted file mode 100644 index 94930f5a..00000000 --- a/docs/notes/theme/guide/code/code-tabs.md +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: 代码组 -icon: fluent:group-list-20-filled -createTime: 2024/04/04 10:36:59 -permalink: /guide/code/group/ ---- - -## 语法 - -可以像这样对多个代码块进行分组: - -**输入:** - -````md -::: code-tabs -@tab config.js -```js -/** - * @type {import('vuepress').UserConfig} - */ -const config = { - // .. -} - -export default config -``` - -@tab config.ts -```ts -import type { UserConfig } from 'vuepress' - -const config: UserConfig = { - // .. -} - -export default config -``` -::: -```` - -**输出:** - -::: code-tabs -@tab config.js - -```js -/** - * @type {import('vuepress').UserConfig} - */ -const config = { - // .. -} - -export default config -``` - -@tab config.ts - -```ts -import type { UserConfig } from 'vuepress' - -const config: UserConfig = { - // .. -} - -export default config -``` - -::: - -你还可以通过 `@tab:active` 选择其中一个代码块作为默认显示的代码块。 - -**输入:** - -````md -::: code-tabs -@tab config.js -```js -/** - * @type {import('vuepress').UserConfig} - */ -const config = { - // .. -} - -export default config -``` - -@tab:active config.ts -```ts -import type { UserConfig } from 'vuepress' - -const config: UserConfig = { - // .. -} - -export default config -``` -::: -```` - -**输出:** - -::: code-tabs -@tab config.js - -```js -/** - * @type {import('vuepress').UserConfig} - */ -const config = { - // .. -} - -export default config -``` - -@tab:active config.ts - -```ts -import type { UserConfig } from 'vuepress' - -const config: UserConfig = { - // .. -} - -export default config -``` - -::: - -## 分组标题图标 - -主题支持在 代码块分组的组标题上显示图标。 图标根据 标题,即 `@tab 标题` 进行解析适配不同的图标 - -默认解析规则与 [文件树](../markdown/file-tree.md) 一致。 - -如, `pnpm / yarn / npm` 分组图标: - -**输入:** - -````md -::: code-tabs -@tab pnpm - -```sh -pnpm i -``` - -@tab yarn - -```sh -yarn -``` - -@tab npm - -```sh -npm install -``` - -::: -```` - -**输出:** - -::: code-tabs -@tab pnpm - -```sh -pnpm i -``` - -@tab yarn - -```sh -yarn -``` - -@tab npm - -```sh -npm install -``` - -::: - -主题默认适配了 前端主流的一些技术: - -- 运行环境,如: `NodeJs / Deno / Bun` -- 包管理器,如: `pnpm / yarn / npm` -- 库、框架,如: `vue / react / angular / svelte / solid / Next / Nuxt` 等 - -还包括一些主流的语言,如: `TypeScript / JavaScript / C / C++ / Java / Python / Rust / Kotlin / Swift / Go` 等 - -::: info -如果您发现您所使用的 库、框架、语言等未能正确显示图标,可以提出 [issue](https://github.com/pengzhanbo/vuepress-theme-plume/issues/new) 告诉我,我会尽量添加相关图标。 -::: - -### 配置 - -您可以通过 `markdown.codeTabs` 控制分组图标的行为: - -```ts -export default defineUserConfig({ - theme: plumeTheme({ - markdown: { - codeTabs: { - icon: true, // CodeTabsOptions - } - }, - }) -}) -``` - -```ts -export interface CodeTabsOptions { - icon?: boolean | { named?: false | string[], extensions?: false | string[] } -} -``` - -- `true`: 使用默认解析规则显示图标 -- `false`: 不显示图标 -- `{ named?: false | string[], extensions?: false | string[] }`: - - `named`: 表示 库/框架/语言 名称,严格匹配 `@tab 标题` 中的 `标题` 字段,如 `pnpm`、`yarn`、`npm` 等,如果设置为 `false` 则不显示图标,如果为 空数组,则使用默认匹配规则 - - `extensions`: 表示 文件扩展名,匹配 `@tab 标题` 中的 `标题` 字段是否包含扩展名,如 `.ts`、`.js` 等,如果设置为 `false` 则不显示图标,如果为 空数组,则使用默认匹配规则 - - 请注意, `named` 和 `extensions` 数组中的元素必须是 `string` 类型,且严格区分大小写。 - -举一个例子,如果您是一个前端开发,且仅想在 `pnpm/yarn/npm` 分组时显示图标,其它分组时不显示图标, -那么可以进行如下配置: - -```ts -export default defineUserConfig({ - theme: plumeTheme({ - plugins: { - markdownPower: { - codeTabs: { - icon: { - named: ['pnpm', 'yarn', 'npm'], // [!code ++:2] - extensions: false, - } - } - }, - } - }) -}) -``` - -你可以灵活地配置图标显示规则。 - -::: tip 担心图标会影响构建包体积? -您无需担心,代码块分组的图标 也是从 `iconify` 解析获取,推荐您在本地安装 `@iconify/json` 项目, -主题会自动将 `@iconify/json` 中的图标数据解析为本地图标资源,即使您在不同的页面 -多次使用,这包括了 导航栏、侧边栏、图标组件等,相同图标仅会存在一份资源! - -每个彩色图标的大小约在 `1kb ~ 2kb` 之间,即使您的文件树非常夸张的使用了 100+ 不同的图标,对最终的构建包体积影响 -也不会很大。 -::: diff --git a/docs/notes/theme/guide/quick-start/document.md b/docs/notes/theme/guide/quick-start/document.md deleted file mode 100644 index 644e52a9..00000000 --- a/docs/notes/theme/guide/quick-start/document.md +++ /dev/null @@ -1,658 +0,0 @@ ---- -title: 文档/知识笔记 -icon: teenyicons:doc-outline -createTime: 2024/03/04 15:45:34 -permalink: /guide/document/ -tags: - - 指南 - - 快速开始 ---- - -## 概述 - -主题提供了 `笔记` 的功能,它用于聚合 同一个系列的文章、或者作为站点的 **子文档** 。 - -`笔记` 以 文件结构 作为划分依据,默认以 `notes/` 作为根目录, -存放在 `notes` 目录下的 文档不会作为 博客文章,不会出现在 博客文章列表页中。 - -## 文件结构与配置 - -我们有一个项目中,有以下文件结构: - -::: file-tree - -- docs - - notes - - typescript \# typescript 笔记 - - basic.md - - types.md - - rust \# rust 笔记 - - tuple.md - - struct.md - - blog-post.md \# 博客文章 - - README.md \# 站点首页 - -::: - -在 `docs/notes` 目录下,有两个子目录,分别用于存放 `typescript` 和 `rust` 的系列内容。 - -接下来,在配置文件中配置 `notes`: - -```js title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - notes: { - // 声明所有笔记的目录,(默认配置,通常您不需要声明它) - dir: '/notes/', - link: '/', // 声明所有笔记默认的链接前缀, 默认为 '/' (默认配置,通常您不需要声明它) - notes: [ - // 每个笔记都是 `notes` 数组中的一个对象 - { - // 声明笔记的目录,相对于 `notes.dir`,这里表示 `notes/typescript` 目录 - dir: 'typescript', - // 声明笔记的链接前缀,与 `notes.link` 拼接,这里表示 `/typescript/` - // 笔记内的所有文章会以 `/typescript/` 作为访问链接前缀。 - link: '/typescript/', - // 配置 笔记侧边导航栏,用于导航向笔记内的所有文档 - // 声明为 `auto` 的,将根据目录结构自动生成侧边栏导航 - sidebar: 'auto' - }, - { - dir: 'rust', - link: '/rust/', - sidebar: [ - { text: '简介', items: ['foo'] } - ] - } - ] - } - }) -}) -``` - -::: tip - -你应该在创建文件之前,建议先把笔记的目录和链接前缀等配置好。 -主题默认启用了 [auto-frontmatter](../../config/theme.md#autofrontmatter), -需要根据配置,为目录中的 md 文件生成永久链接,以及侧边栏。 - -::: - -## 编写notes配置 - -由于 `notes` 配置全部写在 `plumeTheme({ })` 中可能会导致 代码层级嵌套过深,因此更推荐使用主题提供的 -`defineNotesConfig()` 和 `defineNoteConfig()` 将 notes 配置提取到外部,它们还能帮助你获得更好的类型提示, -更具可读性和便于维护。 - -::: code-tabs - -@tab .vuepress/notes.ts - -```ts twoslash -import { defineNoteConfig, defineNotesConfig } from 'vuepress-theme-plume' - -/** - * 配置 单个 note - */ -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - '/guide/intro.md', - '/guide/getting-start.md', - '/config/config-file.md', - ] -}) - -/** - * 配置 notes - */ -export default defineNotesConfig({ - // 声明所有笔记的目录,(默认配置,通常您不需要声明它) - dir: '/notes/', - link: '/', - // 在这里添加 note 配置 - notes: [typescript] // [!code ++] -}) -``` - -@tab .vuepress/config.ts - -```ts twoslash -// @filename: ./notes.ts -export default {} - -// ---cut--- -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' -import notes from './notes' // [!code ++] - -export default defineUserConfig({ - theme: plumeTheme({ - notes // [!code ++] - }), -}) -``` - -::: - -:::: details 笔记比较多时怎么配置? -如果您拥有比较多的笔记,全部放到一个 `notes.ts` 中配置,可能会显得文件比较大且不好维护。 -您可以对文件进行拆分,以 `.vuepress/notes/` 目录作为 笔记配置的目录。 -::: file-tree - -- docs - - .vuepress - - notes - - typescript.ts - - rust.ts - - index.ts - - … - - notes - - typescript/ - - rust/ -::: - -代码如下所示: - -::: code-tabs -@tab .vuepress/config.ts - -```ts -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' -import notes from './notes/index.ts' // [!code ++] - -export default defineUserConfig({ - theme: plumeTheme({ - notes // [!code ++] - }), -}) -``` - -@tab .vuepress/notes/index.ts - -```ts -import { defineNotesConfig } from 'vuepress-theme-plume' -import rust from './rust' // [!code ++] -import typescript from './typescript' // [!code ++] - -export default defineNotesConfig({ - // 声明所有笔记的目录,(默认配置,通常您不需要声明它) - dir: '/notes/', - link: '/', - // 在这里添加 note 配置 - notes: [ // [!code ++:4] - typescript, - rust, - ] -}) -``` - -@tab .vuepress/notes/typescript.ts - -```ts -import { defineNoteConfig } from 'vuepress-theme-plume' - -export default defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - '/guide/intro.md', - '/guide/getting-start.md', - '/config/config-file.md', - ] -}) -``` - -@tab .vuepress/notes/rust.ts - -```ts -import { defineNoteConfig } from 'vuepress-theme-plume' - -export default defineNoteConfig({ - dir: 'rust', - link: '/rust/', - sidebar: [ - '/guide/intro.md', - '/guide/getting-start.md', - '/config/config-file.md', - ] -}) -``` - -::: -:::: - -### 侧边栏配置 - -以 `typescript` 目录为例,它拥有如下的文件结构: - -::: file-tree - -- typescript - - guide - - intro.md - - getting-start.md - - config - - config-file.md - - configuration.md - - reference - - basic.md - - syntax.md - - modules.md - - built-in - - types - - Required.md - - Omit.md - - README.md - -::: - -#### 自动生成侧边栏 - -一种最简单的配置方式是 `sidebar: 'auto'` , 主题会自动根据 文件结构生成侧边栏,并根据 首个字符的编码 来排序。 - -如果想要修改 自动生成的侧边栏的顺序,可以直接在 目录名 或 文件名之前,添加 `1.` 或 `2.` 等前缀。 - -::: file-tree - -- typescript - - 1.guide - - 1.intro.md - - 2.getting-start.md - - 2.config - - 1.config-file.md - - 2.configuration.md - - … -::: - -主题将根据 这部分的前缀的 数字 进行排序,前缀部分不会显示在侧边栏中。 - -#### 自定义侧边栏 - -有时候自动生成侧边栏 不能完全满足需求,你可以自定义侧边栏。 - -以下是 侧边栏的 类型定义: - -```ts -interface ThemeBadge { - /* 徽章文本 */ - text?: string - /* 徽章类型,内置: 'info' | 'tip' | 'danger' | 'warning' */ - type?: string - /* 文本颜色 */ - color?: string - /* 背景颜色 */ - bgColor?: string - /* 边框颜色 */ - borderColor?: string -} - -type ThemeIcon = string | { svg: string } - -type Sidebar = (string | SidebarItem)[] - -interface SidebarItem { - /** - * 侧边栏文本 - */ - text?: string - - /** - * 侧边栏链接 - */ - link?: string - - /** - * 侧边栏图标 - */ - icon?: ThemeIcon - - /** - * 侧边栏徽章 - */ - badge?: string | ThemeBadge - - /** - * 当前分组的链接前缀,链接前缀会拼接在 `items` 内的 `link` 之前 - * 当且仅当 `items` 内的 `link` 为 相对路径时,才会拼接 - */ - prefix?: string - /** - * 次级侧边栏分组 - */ - items?: 'auto' | (string | SidebarItem)[] - - /** - * 如果未指定,组不可折叠。 - * 如果为`true`,组可折叠,并默认折叠。 - * 如果为`false`,组可折叠,但默认展开。 - */ - collapsed?: boolean -} -``` - -当 传入类型为 `string` 时,表示 markdown 文件的路径: - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - '/guide/intro.md', - '/guide/getting-start.md', - '/config/config-file.md', - // ... - ] -}) - -// ... other code -``` - -你也可以省略 `.md` 文件后缀,简写为 `/guide/intro` 。主题会解析 对应的文件,获取 **标题** 和 **页面链接地址** -并将其转换为 `{ text: string, link: string }` 的数据形式。 - -当传入类型为 `SidebarItem` 时: - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { text: '介绍', link: '/guide/intro' }, - { text: '快速上手', link: '/guide/getting-start' }, - // ... - ] -}) - -// ... other code -``` - -也可以进行多层嵌套: - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - text: '指南', - prefix: '/guide', // 使用 prefix 拼接,可以简写 下面的 items 中的 link 为相对路径 - items: [ - // 可以混用 string 和 SidebarItem - { text: '介绍', link: 'intro' }, - 'getting-start', - ], - }, - { - text: '配置', - prefix: '/config', - items: 'auto', // items 为 'auto',会根据 prefix 的文件结构自动生成侧边栏 - }, - ] -}) - -// ... other code -``` - -### 关于 `prefix` - -`prefix` 的目的是为了简写与其同层级的 `items` 项内的 链接,它允许你将这些链接的相同的前缀提取到 -`prefix` 中,由主题帮您完成完整链接的拼接。 - -需要注意的是,`items` 中的链接 仅有 相对路径的链接才会与 `prefix` 拼接,而绝对路径则不进行处理。 - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - prefix: '/guide', - items: [ - 'intro', // 相对路径, 最终拼接为 /guide/intro - '/config/config-file', // 绝对路径,不拼接 - { - text: '博客', - link: 'blog', // 相对路径, 最终拼接为 /guide/blog - }, - { - text: '配置', - link: '/config', // 绝对路径,不拼接 - } - ] - } - ] -}) -``` - -同时,`items` 内还支持 深层嵌套,内部还依然支持 `prefix`,这里也遵循相同的规则,`prefix` 如果是相对路径, -则会与 上一层的 `prefix` 拼接,再与 当前层级 `items` 内的 `link` 拼接,如果 `prefix` 是绝对路径,则不与 -上一层级 `prefix` 拼接。 - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - prefix: '/guide', - items: [ - 'intro', // 相对路径, 最终拼接为 /guide/intro - { - prefix: '/config', - items: [ - 'config-file', // 相对路径, 最终拼接为 /config/config-file - 'configuration', // 相对路径, 最终拼接为 /config/configuration - ] - }, - { - prefix: 'blog', - items: [ - 'intro', // 相对路径, 最终拼接为 /guide/blog/intro - 'getting-start', // 相对路径, 最终拼接为 /guide/blog/getting-start - ] - } - ] - } - ] -}) -``` - -**是否是绝对路径的判断标准是,如果以 `/` 开头,则为绝对路径,否则为相对路径** - -:::warning -不建议 侧边栏的层级过深,超过 3 层的侧边栏 可能会导致 糟糕的 UI 效果。 -::: - -### 侧边栏图标 - -为侧边栏添加 ==图标== 有助于 侧边栏更好的呈现。 - -支持通过 [markdown -> icon](../guide/features/icon.md) 配置的来源的图标。 - -- 当 `markdown.icon.provide` 为 `iconify` 时,支持 [iconify](https://iconify.design/) 图标 -- 当 `markdown.icon.provide` 为 `iconfont` 时,支持 [iconfont](https://www.iconfont.cn/) 图标 -- 当 `markdown.icon.provide` 为 `fontawesome` 时,支持 [fontawesome](https://fontawesome.com/) 图标 - -`markdown.icon.provide` 为非 `iconify` 值时,可以在 图标名称前加上 `iconify` 前缀,强制使用 [iconify](https://iconify.design/) 图标。 - -```ts -const item = { text: '首页', link: '/', icon: 'iconify carbon:home' } -``` - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - text: '指南', - prefix: '/guide', - icon: 'ep:guide', // iconify icon name // [!code hl] - items: [ - { text: '介绍', link: 'intro', icon: 'ph:info-light' }, // [!code hl] - ], - }, - ] -}) -``` - -也可以使用本地图标,或者本地图片: - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - text: '指南', - prefix: '/guide', - icon: '/images/guide.png', // iconify icon name // [!code hl] - items: [ - { text: '介绍', link: 'intro', icon: '/images/info.png' }, // [!code hl] - // 也可以是一个远程图片 - { text: '快速上手', link: 'getting-start', icon: 'https://cn.vuejs.org/images/logo.png' }, - ], - }, - ] -}) -``` - -**请注意,使用本地图片必须以 `/` 开头,表示为 静态资源路径,它将从 `.vuepress/public/` 目录中加载。** - -::: file-tree - -- docs - - .vuepress - - public \# 在这个位置保存静态资源 - - images - - guide.png - - info.png - - … -::: - -当 `sidebar: auto` 时,可在 md 文件的 `frontmatter` 部分,添加 一个 `icon` 字段: - -```md title="intro.md" ---- -title: 介绍 -icon: ep:guide ---- -``` - -### 侧边栏徽章 - -主题支持为侧边栏添加徽章,徽章可以用于辅助提供更多的信息。 - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - text: '指南', - prefix: '/guide', - badge: { text: '徽章', type: 'danger' }, // [!code hl] - items: [ - { text: '介绍', link: 'intro', badge: '徽章' }, // [!code hl] - ], - }, - ] -}) -``` - -当 `sidebar: auto` 时,可在 md 文件的 `frontmatter` 部分,添加 一个 `badge` 字段: - -```md title="intro.md" ---- -title: 介绍 -badge: - text: 徽章 - type: danger ---- -``` - -```md title="intro.md" ---- -title: 介绍 -badge: 徽章 ---- -``` - -### 侧边栏组内分隔 - -在组内对 项 进行分隔 是一个相对小众的需求,它在组的项比较多,但又不适合拆分为多个组,或者组内拆分多组的情况下, -可能会比较适用,它提供了一个平级的,使用辅助文本颜色显示一个分隔项名 的方式,对项进行简单的分隔。 - -```ts title=".vuepress/notes.ts" twoslash -import { defineNoteConfig } from 'vuepress-theme-plume' - -const typescript = defineNoteConfig({ - dir: 'typescript', - link: '/typescript/', - sidebar: [ - { - text: '指南', - items: [ - '项目 1', - '项目 2', - '项目 3', - { text: '分隔', link: '---' }, // [!code ++] - '项目 4', - '项目 5', - // ... - ], - }, - ] -}) -``` - -在组内完成分隔非常简单,你只需要在合适的位置插入一个 `{ text: 'xxxx', link: '---' }` 即可, -它的重点仅是将 `link` 设置为 连续的 `---` 即可,至少三个 `-` 。 -你可以随意定义文本,还可以添加图标。 - -## 笔记首页 - -你可能注意到,在 `typescript` 目录下,有一个 `README.md` 文件,它会被作为笔记首页显示。 - -::: file-tree - -- typescript - - README.md - - … -- … -::: - -默认情况下,它与 普通的文档页面 没有区别,这是因为 主题 默认对 所有页面 设置了 `pageLayout: docs`。 - -但你可以直接配置 `pageLayout: 'home'`,就像配置 [站点首页](../custom/home.md) 一样,为 笔记配置一个个性化的首页! - -```md title="typescript/README.md" ---- -pageLayout: home -config: - - type: hero - - type: features ---- -``` diff --git a/docs/notes/theme/guide/quick-start/intro.md b/docs/notes/theme/guide/quick-start/intro.md deleted file mode 100644 index 0d6c7b54..00000000 --- a/docs/notes/theme/guide/quick-start/intro.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 主题介绍 -icon: mdi:tooltip-text-outline -createTime: 2024/03/04 11:06:24 -permalink: /guide/intro/ -tags: - - 指南 - - 快速开始 ---- - -==vuepress-theme-plume== 是一个基于 VuePress 的主题,无论您是想写 **生活类博客**、**技术类博客**、 -或者是 **产品文档**、**知识库**、**系列文档** 等,主题都可以满足您的需求。 - -主题针对 文本内容、图片内容 的表现做了大量的优化,特别是针对 Markdown 内容的语法 做了 丰富的扩展, -你可以很轻松的利用这些特性编写 美观、易读、表现力丰富 的内容。 - -::: details 不了解 VuePress ? - -VuePress 是一个 [静态站点生成器](https://en.wikipedia.org/wiki/Static_site_generator) (SSG) 。 -专为构建快速、以内容为中心的站点而设计。 -简而言之,VuePress 获取用 Markdown 编写的内容,对其应用主题,并生成可以轻松部署到任何地方的静态 HTML 页面。 -::: - -[前往 **VuePress 官网** 了解更多](https://v2.vuepress.vuejs.org/zh/){.read-more} - -## 优势 - -与 vuepress 默认主题相比: - -### 更好的用户体验 - -大幅度优化了界面、交互,更为美观、简洁,易用。 - -### 更多的功能 - -- 灵活的,可完全自定义的 ==首页== ; - -- 可选的 ==博客== 、==文档== 、==知识笔记== ; - -- 内置支持 ==全文搜索== 、==文章评论== 、==内容加密== 、 ==文章水印== 等; - -- 可对 ==代码块== 进行 分组、折叠、聚焦、行高亮、差异对比 等, - 支持嵌入 CodePen、JSFiddle、CodeSandbox 等作为 ==代码演示==; - -- 内置支持 [iconify](https://icon-sets.iconify.design/) **200k+** ==图标==,还支持可选的 `iconfont` / `fontawesome` 图标; - -- 支持 ==嵌入 PDF==、==嵌入 Bilibili /Youtube / 本地 视频==; - -- 支持 chart.js、Echarts、Mermaid、Flowchart、Markmap、PlantUML 等多种可选的 ==图表== ; - -- 灵活的 markdown 容器语法,支持 ==提示容器==、==文件树==、==代码树==、==卡片容器==、==瀑布流容器== 等; - -- 支持 ==布局插槽==、==组件覆写== ==自定义样式== 等,你可以灵活地扩展组件,实现 个性化的 布局。 - -更多的功能等待你的发现 ! - -### 更好的开发体验 - -增加编译缓存,缓存 markdown 文件编译、缓存 复杂 代码块 内容解析结果。 - -### 更好的配置 - -支持使用单独的主题配置文件,避免修改配置导致频繁重启 VuePress 服务。 - -大幅度简化了配置,更易于使用,同时还保留了丰富灵活的配置项,满足个性化的需求。 - -### 更多 - -==plume 主题== 尽可能的内置你可能需要的功能,以及搭建站点所需要的一般性配置,您无需关注这些细节。 -目的是,让您更专注于 内容的创作,更好的表达你的想法,享受 Markdown 增强语法带来的便利。 - -::: tip - -本主题 基于 [vuepress-next](https://github.com/vuepress/vuepress-next), 目前处于 RC 阶段。 - -当前主题 功能和 API 趋于稳定,但在未来的更新中仍有小概率出现破坏更改。 - -如果您在使用过程中遇到问题,或者有新的想法, -请在 [Issues](https://github.com/pengzhanbo/vuepress-theme-plume/issues) 里提出, -也欢迎 通过 [PR](https://github.com/pengzhanbo/vuepress-theme-plume/pulls) 帮助完善主题。 - -::: diff --git a/docs/notes/theme/guide/quick-start/locales.md b/docs/notes/theme/guide/quick-start/locales.md deleted file mode 100644 index 2d66c2c0..00000000 --- a/docs/notes/theme/guide/quick-start/locales.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: 国际化 -icon: material-symbols-light:language -createTime: 2024/03/05 10:01:26 -permalink: /guide/locales/ -tags: - - 指南 - - i18n ---- - -在主题内实现 ==国际化== 只需要进行一些简单的配置。 - -举一个例子,创建一个 默认语言为 **中文**,并包含 **英语** 和 **法语** 的项目。 - -## 目录 - -首先,需要创建类似于下面的目录结构: - -::: file-tree - -- docs - - **en** \# 英文目录 - - foo.md - - README.md \# 英文首页 - - **fr** \# 法文目录 - - foo.md - - README.md \# 法文首页 - - foo.md - - README.md \# 中文首页 -::: - -其中,`docs/en/` 用于保存 **英文** 文档,`docs/fr/` 保存 **法文** 文档,而 **中文** 则直接保存在 `docs/` 下。 - -::: important 不同语言下的目录结构与文件名保持一致 -在不同的语言目录下,请尽量保持文件名和目录名的一致。这有助于在 切换语言时,主题能够正确的导航到 文章 -的不同的语言版本。 -::: - -## vuepress 配置 - -### 默认语言 - -在 `.vuepress/config.ts` 中,声明默认的语言: - -```ts title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' - -export default defineUserConfig({ - // 声明默认的语言 - lang: 'zh-CN', // [!code ++] - // 多语言下支持的各种语言 locales - locales: { - '/': { lang: 'zh-CN', title: '博客' }, // 默认语言 为 简体中文 - } -}) -``` - -### 添加其他语言 - -你需要为每个语言设置 `lang` 选项。即使你只在使用单个语言,你也必须在 `.vuepress/config.{js,ts}` 中设置 `lang`。 - -::: tip 为什么要这样做? -要提供正确的语言环境文本,主题需要知道根文件夹以及每个多语言文件夹正在使用哪种语言。 -::: - -在 `.vuepress/config.ts` 中配置: - -```ts title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' - -export default defineUserConfig({ - // 声明默认的语言 - lang: 'zh-CN', - // 多语言下支持的各种语言 locales - locales: { - // 配置 不同 path 下的语言 - '/': { lang: 'zh-CN', title: '博客' }, // 默认语言 为 简体中文 - '/en/': { lang: 'en-US', title: 'Blog' }, // 英文 // [!code ++] - '/fr/': { lang: 'fr-FR', title: 'Le blog' }, // 法语 // [!code ++] - } -}) -``` - -**`locales` 配置中的 `key` 作为 `localPath`, 对应着 `docs` 目录下的语言路径,应该保证它们具有相同的命名。** - -**同时,`key` (`localPath`) 也将作为 不同语言的页面访问链接的前缀。** - -::: important 语言代码 -`locales` 配置中的 `key` 即 `localePath` 需要符合 [ISO 639](https://zh.wikipedia.org/wiki/ISO_639-1) 规范, -对于非默认语言的,如 `英语` 应该为 `/en/`。 - -在 `locales[localePath]` 中, `lang` 为当前语言的 **语言代码**,请使用标准的 [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) 语言代码。如, `英语` 应该为 `en-US`,(表示英语(美国))。 -::: - -## 主题配置 - -在主题配置中,同样使用 `locales` 配置项进行多语言配置。 - -`locales` 支持 所有主题配置项。 - -```ts title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - lang: 'zh-CN', - locales: { - '/': { lang: 'zh-CN', title: '博客' }, // 默认语言 为 简体中文 - '/en/': { lang: 'en-US', title: 'Blog' }, // 英文 - '/fr/': { lang: 'fr-FR', title: 'Le blog' }, // 法语 - }, - theme: plumeTheme({ - // 主题内的多语言配置 - locales: { - '/': { // [!code hl] - // 当前语言显示在导航栏多语言下拉菜单的文本 - selectLanguageName: '简体中文', - navbar: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - ] - }, - '/en/': { // [!code hl] - selectLanguageName: 'English', - navbar: [ - { text: 'Home', link: '/en/' }, - { text: 'Blog', link: '/en/blog/' }, - ] - }, - '/fr/': { // [!code hl] - selectLanguageName: 'Français', - navbar: [ - { text: 'Accueil', link: '/fr/' }, - { text: 'Le Blog', link: '/fr/blog/' }, - ] - } - } - }) -}) -``` - -主题 `theme.locales` 配置中的 `key` 应与 `vuepress` 配置中的 `locales` 配置中的 `key` 一致。 - -您应该为 `theme.locales[localePath]` 配置 `selectLanguageName` 用于在导航栏多语言下拉菜单中显示当前语言的名称。 - -更多 `locales` 配置请查看 - -- [主题配置 > Locales 配置](../../config/theme.md#locale-配置) - 配置主题在不同语言下的行为。 -- [主题配置 > 多语言配置](../../config/locales.md) - 配置与语言相关的文本。 diff --git a/docs/notes/theme/guide/quick-start/optimize-build.md b/docs/notes/theme/guide/quick-start/optimize-build.md deleted file mode 100644 index 3f46bf79..00000000 --- a/docs/notes/theme/guide/quick-start/optimize-build.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: 构建优化 -icon: clarity:bundle-solid -outline: 2 -createTime: 2024/09/10 01:50:20 -permalink: /guide/optimize-build/ ---- - -## 图片优化 - -当我们在 markdown 中使用 `[alt](url)` 或者 `` 嵌入图片后,虽然页面按照预期的显示了 -图片。 - -由于图片的体积不同,当图片体积较小,网络情况良好的时候,我们不会感受到页面的布局有产生明显的抖动。 -然而,当图片体积较大,或者网络情况较差时,由于图片为完成加载,原本页面上应该显示图片的位置被后面的 -内容挤压,等到图片加载完成后,页面布局会发生变化,图片重新占据应该显示的位置,其它的内容被排开。 - -事实上这个体验相当不友好。特别是对于页面内的图片数量较多时,页面会频繁发生布局变化,这一过程还可能 -感知到卡顿,较为明显的是布局的抖动。 - -因此,让页面布局稳定下来,图片是一个必须解决的问题。 - -从 [MDN > img](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#height) 我们可以知道: - -::: info -`` 同时包括 `height` 和 `width` 使浏览器在加载图像之前计算图像的长宽比。 -此长宽比用于保留显示图像所需的空间,减少甚至防止在下载图像并将其绘制到屏幕上时布局的偏移。 -减少布局偏移是良好用户体验和 Web 性能的主要组成部分。 -::: - -因此,主题围绕这个问题,提供了 一个解决方案: - -为 markdown 文件中的 `[alt](url)` 或者 `` 自动添加 `width` 和 `height` 属性。 - -你可以通过配置 `markdownPower` 来启用它: - -```ts -export default defineUserConfig({ - theme: plumeTheme({ - plugins: { - markdownPower: { - imageSize: true, // 'local' | 'all' - }, - } - }) -}) -``` - -启用此功能后,主题会通过图片资源地址,获取图片的原始尺寸,然后为图片添加 `width` 和 `height` 属性。 - -- 如果设置为 `'local'`, 则仅为 本地图片添加 `width` 和 `height` 属性。 -- 如果设置为 `'all'`, 则包括 __本地图片__ 和 __网络图片__ 都 添加 `width` 和 `height` 属性。 -- 如果设置为 `true`, 则等同于 `'local'` - -::: important -请注意,出于性能考虑,即使您启用了此功能,该功能也仅在 构建生产包时生效。 -::: - -::: important -请谨慎使用 `'all'` 选项,该选项会在构建生产包时,请求所有 markdown 中包含的 远程图片资源, -这对于包含较多图片资源的站点而言,会使得构建时间变长。 - -主题也针对此类情况做了优化,请求远程图片仅在获取 __几 KB__ 的数据包足够分析尺寸后不再等待请求完成, -同时并发请求其他图片资源。这在一定程度上能够改善构建时间。 -::: - -## 图标优化 - -得益于 开源项目 [iconify](https://icon-sets.iconify.design/) 的强大,您可以在主题内使用大约 20 万 个图标。 - -当然,这并不意味着主题需要加载全部的图标。您可能已经注意到,主题推荐您在本地安装 `@iconify/json` 包,这需要 -下载大约 __70Mb__ 的资源包,如果加载全部的图标到文档站点中,这太大太大了。 - -但请放心,主题仅会加载您有使用到的图标资源,这包括 导航栏、侧边栏、首页 Features 等配置中的 iconify 图标, -以及通过语法糖 `::collect:name::` 和 组件 `` 等各种方式使用的图标。 - -当从本地 `@iconify/json` 中加载图标时, iconify 通过 `[collect]:[name]` 的形式为图标命名,其中根据 -`collect` 来区分图标所属的集合,每个集合拥有 100 ~ 1000+ 数量不等的图标,保存在以 `collect` 为维度的 `json` -文件中。当文档使用了比较多的不同的 `collect` 下的图标时,即使从本地加载和解析 `json`,也需要花费比较长的时间, -以主题站点为例,主题使用了 __54 个collect__ 超过 __160+ 个图标__, 在初始启动时,在图标解析加载大约需要耗费 `500ms` -的时间开销,这显然是难以接受的。 - -针对这种情况,主题会在首次启动时,缓存有使用的图标资源,当二次启动时,优先从缓存中加载图标,由于仅缓存有使用的 -图标资源,加载这部分资源远比 频繁解析不同 `collect` 下的图标资源要快的多,且资源利用率更高。 - -其时间开销从 `500ms` 减少到了 `20ms` 甚至更低!这也进一步优化了 启动开发服务的时间! - -::: info -使用 __54 个collect__ 下的图标资源 这种情况相对来说比较极端,这也意味着 54 次的 i/o 读取和 json 解析, -花费 `500ms` 的时间开销也算是正常,然而实际使用的图标数量仅 `160+ 个` 时,所带来的 直观感受是 -__不应该花费这么长的时间的__ ,因此,缓存这部分的图标资源是一个很好的选择。 -::: diff --git a/docs/notes/theme/guide/quick-start/project-structure.md b/docs/notes/theme/guide/quick-start/project-structure.md deleted file mode 100644 index 3cd8c39e..00000000 --- a/docs/notes/theme/guide/quick-start/project-structure.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: 项目结构 -icon: ph:tree-structure-bold -createTime: 2024/09/16 21:59:30 -permalink: /guide/project-structure/ ---- - -本指南将向您说明 VuePress 和 Plume 创建的项目的文件结构,以及如何在项目中使用它们。 - -当您 [使用命令行工具创建](./usage.md#命令行安装) 的项目,它的文件结构是这样的: - -::: file-tree - -- .git/ -- **docs** \# 文档源目录 - - .vuepress \# vuepress 配置文件夹 - - public/ \# 静态资源目录 - - client.ts \# 客户端配置 (可选) - - config.ts \# vuepress 配置 - - navbar.ts \# 导航栏配置 (可选) - - notes.ts \# notes 配置 (可选) - - plume.config.ts \# 主题配置文件 (可选) - - notes \# 系列文档、知识笔记 - - demo - - foo.md - - bar.md - - preview \# 博客分类之一 - - markdown.md \# 分类下的博客文章 - - article.md \# 博客文章 - - README.md \# 首页 - - … -- package.json -- pnpm-lock.yaml -- .gitignore -- README.md -::: - -::: tip 如果你是手动创建的,也可以参考此文件结构管理您的项目 -::: - -## 文档源目录 - -**文档源目录** 指的是,你的站点的所有 markdown 文件所在的目录。该目录一般在使用 命令行工具 启动 VuePress -时指定: - -```sh -# [!code word:docs] -vuepress dev docs -# 这里声明了文档源目录为 docs -``` - -```json title="package.json" -{ - "scripts": { - "docs:dev": "vuepress dev docs", - // ^^^^ - "docs:build": "vuepress build docs" - // ^^^^ - } -} -``` - -一般而言,VuePress 仅会接管 该目录,非源目录下的其它文件会被忽略。 - -## `.vuepress` 目录 - -`.vuepress/` 目录是 VuePress 配置文件夹,你还可以在这里创建 自己的组件、自定义主题样式等。 - -**在此目录中:** - -### `client.ts` - -客户端配置文件,你可以在这里扩展 VuePress 的功能,比如声明新的全局组件等。 - -```ts title=".vuepress/client.ts" -import { defineClientConfig } from 'vuepress/client' - -export default defineClientConfig({ - enhance({ app, router, siteData }) { - // app: vue app 实例 - // router: vue router 实例 - // siteData: vuepress 站点配置 - - // 注册全局组件 - app.component('MyComponent', MyComponent) - }, - setup() { - // 等同于 vue 根组件 上的 setup 方法 - } -}) -``` - -### `config.ts` - -为 VuePress 配置文件,你需要在这里进行一些必要的配置,比如 主题、插件、构建工具等。 - -```ts title=".vuepress/config.ts" twoslash -import { viteBundler } from '@vuepress/bundler-vite' -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - lang: 'zh-CN', - theme: plumeTheme({ - // more... - }), - bundler: viteBundler(), -}) -``` - -### `plume.config.ts` - -主题配置文件,由于每次修改 `.vuepress/config.ts`,都需要重启 VuePress 服务,然而实际上大多数时候都不需要这么做。 - -主题将不需要重启服务的配置移动到了这里。在这里修改配置时,仅通过热更新的方式更新主题。 - -::: code-tabs -@tab .vuepress/plume.config.ts - -```ts twoslash -// @filename: ./navbar.ts -export default [] - -// @filename: ./notes.ts -export default { - dir: '/notes/', - link: '/', - notes: [], -} -// ---cut--- -import { defineThemeConfig } from 'vuepress-theme-plume' -import navbar from './navbar' -import notes from './notes' - -export default defineThemeConfig({ - logo: '/logo.svg', - profile: { - name: 'Theme Plume', - }, - navbar, - notes, - // ... more -}) -``` - -@tab .vuepress/navbar.ts - -```ts twoslash -import { defineNavbarConfig } from 'vuepress-theme-plume' - -export default defineNavbarConfig([ - // ... -]) -``` - -@tab .vuepress/notes.ts - -```ts twoslash -import { defineNotesConfig } from 'vuepress-theme-plume' - -export default defineNotesConfig({ - dir: '/notes/', - link: '/', - notes: [], -}) -``` - -::: - -## notes 目录 - -**notes** 目录用于存放你的 知识笔记、系列文档等。 - -### 如何理解知识笔记/系列文档 ? - -一种很常见的场景是,您正在学习某项技能,并打算把学习心得、重点内容、疑难点等记录在笔记中,这一场景下, -您可能会写多篇文档进行记录。 - -或者是,您正在准备面试,想要提前准备好 面试题目和答案,这时候可能会把 每个题目和答案都单独作为一篇文档。 - -你很容易就会希望把它们都单独放在一个目录下进行管理,与此同时,还希望在生成的文档站点中,能够快速的在 -这项技能笔记 的不同文档之间导航,或者在不同的面试题目之间导航。 - -这是博客类型的文档满足不了的诉求,而这恰恰是 `notes` 所要解决的一个痛点。 - -上述的内容,很容易产生以下目录结构: - -::: file-tree - -- notes - - interview \# 面试题 - - 自我介绍.md - - 我的技能.md - - 做过的项目.md - - … - - typescript \# 学习笔记 - - 基础 - - 基本类型.md - - 泛型.md - - … - - 进阶 - - 函数.md - - … -::: - -这可以很方便的管理多个系列文档,每个系列文档都可以有自己的目录结构。 - -## 其它目录/文件 - -在 ==文档源目录== 中的 其它目录、文件,除了 `README.md` 被识别为 `主页` 之外,都会被识别为 博客文章。 -而 目录结构 则将被识别为 博客分类。 - -::: file-tree - -- docs - - 生活 - - 旅游日记.md - - … - - 学习 - - 考试笔记.md - - … - - 工作 - - 番茄时间.md - - … - - 杂事.md \# 无分类的文章 - - README.md \# 主页 - - … - -::: diff --git a/docs/notes/theme/guide/quick-start/usage.md b/docs/notes/theme/guide/quick-start/usage.md deleted file mode 100644 index b45da680..00000000 --- a/docs/notes/theme/guide/quick-start/usage.md +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: 安装/使用 -icon: grommet-icons:install -createTime: 2024/03/04 09:50:07 -permalink: /guide/usage/ -tags: - - 指南 - - 快速开始 ---- - -## 依赖环境 - -- [Node.js](https://nodejs.org/) : **^20.6.0 或 >= 22.0.0** [+node-versions] -- [npm 8+](https://www.npmjs.com/) 或 [pnpm 8+](https://pnpm.io/zh/) 或 [Yarn 2+](https://yarnpkg.com/) - -[+node-versions]: **^20.6.0:** `20.6.0` 及以上但不高于 `21.0.0` 的版本 -[+node-versions]: **>= 22.0.0:** `22.0.0` 及以上的版本 - -:::: details 怎么安装依赖环境? -::: steps - -1. **请前往 [Node.js 官网](https://nodejs.org/zh-cn) 下载最新稳定版本** - - 请根据指引完成安装,一般而言,在安装过程中,您只需要保持其默认设置,直接选择下一步即可。 - -2. **安装 PNPM** - - 在您安装完成 node.js 后,请打开 终端,执行如下命令: - - ```sh - corepack enable - ``` - - 主题推荐您使用 pnpm 作为项目管理器。 - -3. **完成** - -::: -:::: - -## 命令行安装 - -主题提供了一个 命令行工具,帮助您构建一个基本项目。您可以通过运行以下命令,启动 安装向导。 - -::: npm-to - -```sh -npm create vuepress-theme-plume@latest -``` - -::: - -启动向导后,您只需要回答几个简单的问题: - - - -::: details 怎么使用命令行工具? - -以 Windows 系统为例,你可以使用以下方法来启动 CMD 命令行工具: - -1. 按下 `Win + R` 键打开 “运行” 对话框。 -2. 输入 `cmd` 并按下 Enter 键。 (也可以输入 `powershell` 来打开 PowerShell) - -注意此时 `cmd` 可能不在你期望的目录位置,你可以使用如下命令来切换到正确的目录: - -```sh -D: # 此命令将切换到 D: 分区,进入其他分区请按照实际情况修改 -cd open-source # 进入 D: 分区下的 open-source 目录 -``` - -此时,你就可以在这里输入 `pnpm create vuepress-theme-plume@latest` 来创建一个基本的项目了。 - -创建的项目将位于 `D:\open-source\my-project` 目录下。 -::: - -## 手动安装 - -::: info 提示 - -- 使用 [pnpm](https://pnpm.io/zh/) 时,你需要安装 `vue` 作为 peer-dependencies 。 -- 使用 [Yarn 2+](https://yarnpkg.com/) 时,你需要在 `.yarnrc.yml` 文件中设置 `nodeLinker: 'node-modules'` 。 -::: - -使用本主题,你需要首先新建一个项目,并安装`vuepress@next`以及本主题 - -:::: steps - -- ### 新建文件夹并进入目录 - - ``` sh - mkdir my-blog - cd my-blog - ``` - -- ### 初始化项目 - - ::: npm-to - - ``` sh - git init - npm init - ``` - - ::: - -- ### 安装相关依赖 - - 安装 `vuepress@next` 和 `vuepress-theme-plume` 作为本地依赖。 - - ::: npm-to - - ```sh - # 安装 vuepress - npm i -D vuepress@next vue - # 安装 主题和打包工具 - npm i -D vuepress-theme-plume @vuepress/bundler-vite@next - ``` - - ::: - - :::warning - 主题当前版本 已适配至 vuepress@{{ vuepressVersion }},你应该安装这个版本的 VuePress。高于或低于这个版本,可能会存在潜在的兼容性问题。 - ::: - -- ### 在 `package.json` 中添加 `script` - - ``` json title="package.json" - { - "scripts": { - "docs:dev": "vuepress dev docs", - "docs:build": "vuepress build docs" - } - } - ``` - - `vuepress` 默认将文档源码放在 `docs` 目录下。 - -- ### 将默认的临时目录和缓存目录添加到`.gitignore` 文件中 - - ::: code-tabs - @tab .gitignore - - ``` txt - node_modules - .temp - .cache - ``` - - @tab sh - - ``` sh - echo 'node_modules' >> .gitignore - echo '.temp' >> .gitignore - echo '.cache' >> .gitignore - ``` - - ::: - -- ### 在 `docs/.vuepress/config.{js,ts}` 中配置主题 - - ``` ts title="docs/.vuepress/config.ts" twoslash - import { viteBundler } from '@vuepress/bundler-vite' - import { defineUserConfig } from 'vuepress' - import { plumeTheme } from 'vuepress-theme-plume' - - export default defineUserConfig({ - // 请不要忘记设置默认语言 - lang: 'zh-CN', - theme: plumeTheme({ - // more... - }), - bundler: viteBundler(), - }) - ``` - - :::warning 不要忘记设置默认语言 - 无论是否需要使用 **多语言** ,你都应该为 VuePress 配置 正确 `lang` 选项值。 - 主题需要根据 `lang` 选项来确定语言环境文本。 - ::: - -- ### 在 `docs` 目录下新建 `README.md` 文件 - - 声明首页配置。 - - ``` md title="README.md" - --- - home: true - --- - ``` - -- ### 在本地服务器启动你的文档站点 - - ::: npm-to - - ``` sh - npm run docs:dev - ``` - - ::: - - VuePress 会在 - 启动一个热重载的开发服务器。当修改 Markdown 文件时,浏览器中的内容也会自动更新。 - -- ### 完成 - -:::: - -## 更新主题 - -您可以直接在项目中运行以下命令检查是否有可用的更新: - -::: npm-to - -``` sh -npx vp-update -``` - -::: - - diff --git a/docs/notes/theme/guide/quick-start/write.md b/docs/notes/theme/guide/quick-start/write.md deleted file mode 100644 index a4493aa6..00000000 --- a/docs/notes/theme/guide/quick-start/write.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: 编写文章 -icon: mingcute:edit-4-line -createTime: 2024/03/04 10:06:06 -permalink: /guide/write/ -tags: - - 指南 - - 快速开始 ---- - -VuePress 支持完整的 [Markdown 语法](../markdown/basic.md), -以及使用 [YAML](https://dev.to/paulasantamaria/introduction-to-yaml-125f) -定义 frontmatter 页面元数据,例如 标题和创建时间。 - -主题还对 Markdown 语法进行了 [扩展](../markdown/extensions.md) 支持。你还可以直接在 -Markdown 中写 HTML ,或者使用 Vue 组件。 - -## Frontmatter - -你可以通过设置 frontmatter 中的值来自定义 VuePress 里每个页面。 -Frontmatter 是你的文件顶部在 `---` 中间的部分。 - -```md title="post.md" - ---- -title: 文章标题 -createTime: 2024/09/08 22:53:34 -permalink: /article/9eh4d6ao/ ---- - -页面内容在第二个 `---` 后面。 -``` - -::: details 什么是 frontmatter? -frontmatter 是一个 [YAML](https://dev.to/paulasantamaria/introduction-to-yaml-125f) 格式的配置内容,被放置于 markdown 文件的顶部,通过 `---` 来分隔。 - -您可以阅读 [这篇文章](../../../../4.教程/frontmatter.md) 了解如何正确书写 frontmatter。 -::: - -## 自动生成 Frontmatter - -默认配置下,主题在启动开发服务后,会帮助为源目录中的 markdown 文件,生成一些 `frontmatter` 配置。 -这些配置包括: __标题__, __创建时间__ 以及 __永久链接__。 - -一方面,这可以减少 内容创作者 的一些重复工作;另一方面,这些配置也为主题后续的其他功能提供了前置支持。 - -```md ---- -title: 标题 -createTime: 2024/09/08 22:53:34 -permalink: /article/9eh4d6ao/ ---- -``` - -### 标题 - -主题默认 使用文件名作为文章标题。在解析 文件名 时,[文件命名约定](#文件夹命名约定) 所命名的文件名如 -`1.我的文章.md`,其中 `1.` 和 `.md` 部分将被裁剪,最终文章标题为 `我的文章` 。 - -### 创建时间 - -主题默认使用文件创建时间作为文章创建时间,并将其格式化为 `yyyy/MM/dd HH:mm:ss`。 - -### 永久链接 - -__永久链接__ 指的是,文章发布后的 访问地址,这个地址一旦生成,只要您不手动修改它,即使文件路径、文件名发生改变也不会改变。 - -提前准备好 __永久链接__ 是比较有价值的,一方面,它可以帮助改善 站点的 SEO,避免收录的地址频繁变动; -另一方面,主题使用一套规范 生成 __永久链接__ ,它使得整个站点的 链接 风格一致。 - -- __博客文章__ - - 对于 博客文章,默认使用 `/article/` 作为永久链接的前缀,然后使用 [`nanoid`](https://github.com/ai/nanoid) - 生成长度为 `8` 的随机字符串进行拼接,作为文章的永久链接, 如 `/article/9eh4d6ao/`。 - - 对于链接前缀,还可以通过修改 [主题配置 > article](../../config/theme.md#article) 替换默认的 `/article/`。 - -- __notes__ - - 对于 notes , 主题使用更为灵活的自定义方案,你可以在 [notes > note.link](../../config/notes.md#配置) 声明不同的 - note 的链接前缀,然后同样适用 [`nanoid`](https://github.com/ai/nanoid) - 生成长度为 `8` 的随机字符串进行拼接,作为 note 文章的永久链接。 - -### 禁用自动生成 - -你可能不想主题做额外的自动生成,希望由自己完全掌控。这完全没问题,主题支持通过配置来控制 自动生成 frontmatter 的行为。 -通过 [主题配置 > autoFrontmatter](../../config/theme.md#autofrontmatter) 即可轻松做到。 - -```ts title=".vuepress/config.ts" twoslash -import { defineUserConfig } from 'vuepress' -import { plumeTheme } from 'vuepress-theme-plume' - -export default defineUserConfig({ - theme: plumeTheme({ - // 完全禁用所有自动生成 - // autoFrontmatter: false, - - // 控制部分自动生成 - autoFrontmatter: { - permalink: true, // 是否生成永久链接 - createTime: true, // 是否生成创建时间 - title: true, // 是否生成标题 - } - }) -}) -``` - -## 约定 - -::: info 提示 -以下内容,以 [项目结构](./project-structure.md) 中的文件结构作为基准。 -::: - -使用本主题编写文章是一件很轻松的事情,你可以在 `docs`目录中按照你的个人命名喜好新建任意名字的`Markdown`文件。 - -### 文件夹命名约定 - -对于 `docs` 中的文件夹命名,主题有一套简单的约定。 - -- 文件夹的名称将作为 `category` 即 __分类__。 -- 允许多级目录,子级目录将作为父目录对应的分类的子项。 -- 如果目录名称 在 [主题配置 notes](../../config/notes.md) 中声明用于 notes 文章管理,则默认不作为 分类目录。 - -由于文件夹名称将作为分类名称,且不在主题配置中进行排序配置,对于有排序需要的场景,使用以下规则进行命名: - -``` ts :no-line-numbers -const dir = /\d+\.[\s\S]+/ -// 即 数字 + . + 分类名称 -// 如: 1.前端 -``` - -数字将作为 __排序__ 的依据。 如果不带数字,则以默认的规则进行排序。 - -__example:__ - -::: file-tree - -- docs - - 1.前端 - - 1.html/ - - 2.css/ - - 3.javascript/ - - 2.后端/ - - 运维/ -::: - -主题将根据 目录结构,生成一个 分类页。 - -### 文件命名约定 - -- __博客文章__ - - 对于 __博客文章__ 的名称,主题没有任何约定,你可以任意命名。博客文章默认排序规则仅根据文件创建时间进行排序。 - 你还可以通过 [frontmatter > sticky](../../config/frontmatter/post.md#sticky) 配置文章是否置顶。 - -- __notes__ - - 对于 __notes__ 中的 markdown 文件名称,依然遵循 与 [文件夹命名约定](#文件夹命名约定) 相同的规则。 - 这可以为 notes 的 [自动生成侧边栏](../../config/notes.md#自动生成侧边栏) 提供排序依据。 - -## 文章写作 - -你可以使用 `markdown` 语法开始在 `docs` 下新建 `Markdown` 文件,编写你自己的文章了, -关于 markdown 扩展的功能支持,请查看 [这个文档](../markdown/extensions.md) - -由于主题默认会为文章 的 `frontmatter` 自动生成一个 `title`,因此,文章内容的主体部分的标题,起始应该从 `h2` 即 -`## 二级标题` 开始。如果您禁用了 `autoFrontmatter.title`,那么应该使用 `h1` 即 `# 一级标题` 开始。 - -### 标签 - -通过 `frontmatter.tags` 可以为文章添加标签。 - -```md ---- -title: 我的文章 -tags: - - 标签 1 - - 标签 2 ---- -``` diff --git a/docs/notes/theme/snippet/chart-1.snippet.md b/docs/snippet/chart-1.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-1.snippet.md rename to docs/snippet/chart-1.snippet.md diff --git a/docs/notes/theme/snippet/chart-2.snippet.md b/docs/snippet/chart-2.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-2.snippet.md rename to docs/snippet/chart-2.snippet.md diff --git a/docs/notes/theme/snippet/chart-3.snippet.md b/docs/snippet/chart-3.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-3.snippet.md rename to docs/snippet/chart-3.snippet.md diff --git a/docs/notes/theme/snippet/chart-4.snippet.md b/docs/snippet/chart-4.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-4.snippet.md rename to docs/snippet/chart-4.snippet.md diff --git a/docs/notes/theme/snippet/chart-5.snippet.md b/docs/snippet/chart-5.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-5.snippet.md rename to docs/snippet/chart-5.snippet.md diff --git a/docs/notes/theme/snippet/chart-6.snippet.md b/docs/snippet/chart-6.snippet.md similarity index 100% rename from docs/notes/theme/snippet/chart-6.snippet.md rename to docs/snippet/chart-6.snippet.md diff --git a/docs/notes/theme/snippet/code-block.snippet.md b/docs/snippet/code-block.snippet.md similarity index 100% rename from docs/notes/theme/snippet/code-block.snippet.md rename to docs/snippet/code-block.snippet.md diff --git a/docs/notes/theme/snippet/create.snippet.md b/docs/snippet/create.snippet.md similarity index 100% rename from docs/notes/theme/snippet/create.snippet.md rename to docs/snippet/create.snippet.md diff --git a/docs/notes/theme/snippet/echarts-1.snippet.md b/docs/snippet/echarts-1.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-1.snippet.md rename to docs/snippet/echarts-1.snippet.md diff --git a/docs/notes/theme/snippet/echarts-10.snippet.md b/docs/snippet/echarts-10.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-10.snippet.md rename to docs/snippet/echarts-10.snippet.md diff --git a/docs/notes/theme/snippet/echarts-2.snippet.md b/docs/snippet/echarts-2.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-2.snippet.md rename to docs/snippet/echarts-2.snippet.md diff --git a/docs/notes/theme/snippet/echarts-3.snippet.md b/docs/snippet/echarts-3.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-3.snippet.md rename to docs/snippet/echarts-3.snippet.md diff --git a/docs/notes/theme/snippet/echarts-4.snippet.md b/docs/snippet/echarts-4.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-4.snippet.md rename to docs/snippet/echarts-4.snippet.md diff --git a/docs/notes/theme/snippet/echarts-5.snippet.md b/docs/snippet/echarts-5.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-5.snippet.md rename to docs/snippet/echarts-5.snippet.md diff --git a/docs/notes/theme/snippet/echarts-6.snippet.md b/docs/snippet/echarts-6.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-6.snippet.md rename to docs/snippet/echarts-6.snippet.md diff --git a/docs/notes/theme/snippet/echarts-7.snippet.md b/docs/snippet/echarts-7.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-7.snippet.md rename to docs/snippet/echarts-7.snippet.md diff --git a/docs/notes/theme/snippet/echarts-8.snippet.md b/docs/snippet/echarts-8.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-8.snippet.md rename to docs/snippet/echarts-8.snippet.md diff --git a/docs/notes/theme/snippet/echarts-9.snippet.md b/docs/snippet/echarts-9.snippet.md similarity index 100% rename from docs/notes/theme/snippet/echarts-9.snippet.md rename to docs/snippet/echarts-9.snippet.md diff --git a/docs/notes/theme/snippet/include-1.snippet.md b/docs/snippet/include-1.snippet.md similarity index 100% rename from docs/notes/theme/snippet/include-1.snippet.md rename to docs/snippet/include-1.snippet.md diff --git a/docs/notes/theme/snippet/include-2.snippet.md b/docs/snippet/include-2.snippet.md similarity index 100% rename from docs/notes/theme/snippet/include-2.snippet.md rename to docs/snippet/include-2.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-1.snippet.md b/docs/snippet/mermaid-1.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-1.snippet.md rename to docs/snippet/mermaid-1.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-10.snippet.md b/docs/snippet/mermaid-10.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-10.snippet.md rename to docs/snippet/mermaid-10.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-11.snippet.md b/docs/snippet/mermaid-11.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-11.snippet.md rename to docs/snippet/mermaid-11.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-12.snippet.md b/docs/snippet/mermaid-12.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-12.snippet.md rename to docs/snippet/mermaid-12.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-13.snippet.md b/docs/snippet/mermaid-13.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-13.snippet.md rename to docs/snippet/mermaid-13.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-14.snippet.md b/docs/snippet/mermaid-14.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-14.snippet.md rename to docs/snippet/mermaid-14.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-15.snippet.md b/docs/snippet/mermaid-15.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-15.snippet.md rename to docs/snippet/mermaid-15.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-16.snippet.md b/docs/snippet/mermaid-16.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-16.snippet.md rename to docs/snippet/mermaid-16.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-17.snippet.md b/docs/snippet/mermaid-17.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-17.snippet.md rename to docs/snippet/mermaid-17.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-2.snippet.md b/docs/snippet/mermaid-2.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-2.snippet.md rename to docs/snippet/mermaid-2.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-3.snippet.md b/docs/snippet/mermaid-3.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-3.snippet.md rename to docs/snippet/mermaid-3.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-4.snippet.md b/docs/snippet/mermaid-4.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-4.snippet.md rename to docs/snippet/mermaid-4.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-5.snippet.md b/docs/snippet/mermaid-5.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-5.snippet.md rename to docs/snippet/mermaid-5.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-6.snippet.md b/docs/snippet/mermaid-6.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-6.snippet.md rename to docs/snippet/mermaid-6.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-7.snippet.md b/docs/snippet/mermaid-7.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-7.snippet.md rename to docs/snippet/mermaid-7.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-8.snippet.md b/docs/snippet/mermaid-8.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-8.snippet.md rename to docs/snippet/mermaid-8.snippet.md diff --git a/docs/notes/theme/snippet/mermaid-9.snippet.md b/docs/snippet/mermaid-9.snippet.md similarity index 100% rename from docs/notes/theme/snippet/mermaid-9.snippet.md rename to docs/snippet/mermaid-9.snippet.md diff --git a/docs/notes/theme/snippet/snippet-1.js b/docs/snippet/snippet-1.js similarity index 100% rename from docs/notes/theme/snippet/snippet-1.js rename to docs/snippet/snippet-1.js diff --git a/docs/notes/theme/snippet/whitespace.snippet.md b/docs/snippet/whitespace.snippet.md similarity index 100% rename from docs/notes/theme/snippet/whitespace.snippet.md rename to docs/snippet/whitespace.snippet.md diff --git a/docs/notes/tools/README.md b/docs/tools/README.md similarity index 100% rename from docs/notes/tools/README.md rename to docs/tools/README.md diff --git a/docs/notes/tools/caniuse.md b/docs/tools/caniuse.md similarity index 100% rename from docs/notes/tools/caniuse.md rename to docs/tools/caniuse.md diff --git a/docs/notes/tools/custom-theme.md b/docs/tools/custom-theme.md similarity index 100% rename from docs/notes/tools/custom-theme.md rename to docs/tools/custom-theme.md diff --git a/docs/notes/tools/home-hero-tint-plate.md b/docs/tools/home-hero-tint-plate.md similarity index 100% rename from docs/notes/tools/home-hero-tint-plate.md rename to docs/tools/home-hero-tint-plate.md diff --git a/eslint.config.js b/eslint.config.js index fd53b049..5f165cc1 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -7,8 +7,8 @@ export default config({ }, ignores: [ 'lib', - 'docs/notes/theme/snippet/code-block.snippet.md', - 'docs/notes/theme/snippet/whitespace.snippet.md', + 'docs/snippet/code-block.snippet.md', + 'docs/snippet/whitespace.snippet.md', ], globals: { __VUEPRESS_VERSION__: 'readonly', diff --git a/examples/layout-slots/docs/.vuepress/client.ts b/examples/layout-slots/docs/.vuepress/client.ts index 1b3b3851..3e42fd49 100644 --- a/examples/layout-slots/docs/.vuepress/client.ts +++ b/examples/layout-slots/docs/.vuepress/client.ts @@ -45,26 +45,26 @@ export default defineClientConfig({ 'page-top': () => h(SlotDemo, { name: 'page-top' }), 'page-bottom': () => h(SlotDemo, { name: 'page-bottom' }), - 'blog-top': () => h(SlotDemo, { name: 'blog-top' }), - 'blog-bottom': () => h(SlotDemo, { name: 'blog-bottom', mt: 16 }), - 'blog-aside-top': () => h(SlotDemo, { name: 'blog-aside-top', h: 44, mt: 16 }), - 'blog-aside-bottom': () => h(SlotDemo, { name: 'blog-aside-bottom', h: 44 }), - 'blog-extract-before': () => h(SlotDemo, { name: 'blog-extract-before' }), - 'blog-extract-after': () => h(SlotDemo, { name: 'blog-extract-after' }), - 'blog-post-list-before': () => h(SlotDemo, { name: 'blog-post-list-before', mt: 16 }), - 'blog-post-list-after': () => h(SlotDemo, { name: 'blog-post-list-after' }), - 'blog-post-list-pagination-after': () => h(SlotDemo, { - name: 'blog-post-list-pagination-after', + 'posts-top': () => h(SlotDemo, { name: 'posts-top' }), + 'posts-bottom': () => h(SlotDemo, { name: 'posts-bottom', mt: 16 }), + 'posts-aside-top': () => h(SlotDemo, { name: 'posts-aside-top', h: 44, mt: 16 }), + 'posts-aside-bottom': () => h(SlotDemo, { name: 'posts-aside-bottom', h: 44 }), + 'posts-extract-before': () => h(SlotDemo, { name: 'posts-extract-before' }), + 'posts-extract-after': () => h(SlotDemo, { name: 'posts-extract-after' }), + 'posts-post-list-before': () => h(SlotDemo, { name: 'posts-post-list-before', mt: 16 }), + 'posts-post-list-after': () => h(SlotDemo, { name: 'posts-post-list-after' }), + 'posts-post-list-pagination-after': () => h(SlotDemo, { + name: 'posts-post-list-pagination-after', }), - 'blog-tags-before': () => h(SlotDemo, { name: 'blog-tags-before', mt: 16 }), - 'blog-tags-after': () => h(SlotDemo, { name: 'blog-tags-after', mt: 16 }), - 'blog-tags-content-before': () => h(SlotDemo, { name: 'blog-tags-content-before', mt: 16 }), - 'blog-tags-title-after': () => h(SlotDemo, { name: 'blog-tags-title-after' }), - 'blog-archives-before': () => h(SlotDemo, { name: 'blog-archives-before', mt: 16 }), - 'blog-archives-after': () => h(SlotDemo, { name: 'blog-archives-after' }), - 'blog-categories-before': () => h(SlotDemo, { name: 'blog-categories-before' }), - 'blog-categories-content-before': () => h(SlotDemo, { name: 'blog-categories-content-before' }), - 'blog-categories-after': () => h(SlotDemo, { name: 'blog-categories-after' }), + 'posts-tags-before': () => h(SlotDemo, { name: 'posts-tags-before', mt: 16 }), + 'posts-tags-after': () => h(SlotDemo, { name: 'posts-tags-after', mt: 16 }), + 'posts-tags-content-before': () => h(SlotDemo, { name: 'posts-tags-content-before', mt: 16 }), + 'posts-tags-title-after': () => h(SlotDemo, { name: 'posts-tags-title-after' }), + 'posts-archives-before': () => h(SlotDemo, { name: 'posts-archives-before', mt: 16 }), + 'posts-archives-after': () => h(SlotDemo, { name: 'posts-archives-after' }), + 'posts-categories-before': () => h(SlotDemo, { name: 'posts-categories-before' }), + 'posts-categories-content-before': () => h(SlotDemo, { name: 'posts-categories-content-before' }), + 'posts-categories-after': () => h(SlotDemo, { name: 'posts-categories-after' }), }), NotFound: () => h(NotFound, null, { 'layout-top': () => h(SlotDemo, { name: 'layout-top' }), diff --git a/examples/layout-slots/docs/.vuepress/navbar.ts b/examples/layout-slots/docs/.vuepress/navbar.ts deleted file mode 100644 index 6a5128e1..00000000 --- a/examples/layout-slots/docs/.vuepress/navbar.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineNavbarConfig } from 'vuepress-theme-plume' - -export const navbar = defineNavbarConfig([ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - { text: '404', link: '/404/' }, - { text: '笔记', link: '/notes/demo/README.md' }, -]) diff --git a/examples/layout-slots/docs/.vuepress/notes.ts b/examples/layout-slots/docs/.vuepress/notes.ts deleted file mode 100644 index 01c39b0c..00000000 --- a/examples/layout-slots/docs/.vuepress/notes.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineNoteConfig, defineNotesConfig } from 'vuepress-theme-plume' - -const demoNote = defineNoteConfig({ - dir: 'demo', - link: '/demo', - sidebar: ['', 'foo', 'bar'], -}) - -export const notes = defineNotesConfig({ - dir: 'notes', - link: '/', - notes: [demoNote], -}) diff --git a/examples/layout-slots/docs/.vuepress/plume.config.ts b/examples/layout-slots/docs/.vuepress/plume.config.ts index 8e4f20cf..7e06a8b5 100644 --- a/examples/layout-slots/docs/.vuepress/plume.config.ts +++ b/examples/layout-slots/docs/.vuepress/plume.config.ts @@ -1,6 +1,4 @@ import { defineThemeConfig } from 'vuepress-theme-plume' -import { navbar } from './navbar' -import { notes } from './notes' /** * @see https://theme-plume.vuejs.press/config/basic/ @@ -26,6 +24,20 @@ export default defineThemeConfig({ // organization: '', }, - navbar, - notes, + navbar: [ + { text: '首页', link: '/' }, + { text: '博客', link: '/blog/' }, + { text: '404', link: '/404/' }, + { text: '笔记', link: '/demo/README.md' }, + ], + collections: [ + { type: 'post', dir: 'blog', title: '博客' }, + { + type: 'doc', + dir: 'demo', + linkPrefix: '/demo/', + title: '笔记', + sidebar: ['', 'foo', 'bar'], + }, + ], }) diff --git a/examples/layout-slots/docs/preview/layout-page.md b/examples/layout-slots/docs/blog/preview/layout-page.md similarity index 100% rename from examples/layout-slots/docs/preview/layout-page.md rename to examples/layout-slots/docs/blog/preview/layout-page.md diff --git a/examples/layout-slots/docs/preview/markdown.md b/examples/layout-slots/docs/blog/preview/markdown.md similarity index 100% rename from examples/layout-slots/docs/preview/markdown.md rename to examples/layout-slots/docs/blog/preview/markdown.md diff --git a/examples/layout-slots/docs/notes/demo/README.md b/examples/layout-slots/docs/demo/README.md similarity index 100% rename from examples/layout-slots/docs/notes/demo/README.md rename to examples/layout-slots/docs/demo/README.md diff --git a/examples/layout-slots/docs/notes/demo/bar.md b/examples/layout-slots/docs/demo/bar.md similarity index 100% rename from examples/layout-slots/docs/notes/demo/bar.md rename to examples/layout-slots/docs/demo/bar.md diff --git a/examples/layout-slots/docs/notes/demo/foo.md b/examples/layout-slots/docs/demo/foo.md similarity index 100% rename from examples/layout-slots/docs/notes/demo/foo.md rename to examples/layout-slots/docs/demo/foo.md diff --git a/package.json b/package.json index de40778d..ad171e75 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "type": "module", "version": "1.0.0-rc.164", "private": true, - "packageManager": "pnpm@10.17.0", + "packageManager": "pnpm@10.18.1", "author": "pengzhanbo (https://github.com/pengzhanbo/)", "license": "MIT", "keywords": [ @@ -49,6 +49,7 @@ "@types/lodash.merge": "catalog:dev", "@types/minimist": "catalog:dev", "@types/node": "catalog:dev", + "@types/picomatch": "catalog:dev", "@types/stylus": "catalog:dev", "@types/webpack-env": "catalog:dev", "@vitest/coverage-istanbul": "catalog:dev", diff --git a/plugins/plugin-md-power/src/client/components/ArtPlayer.vue b/plugins/plugin-md-power/src/client/components/ArtPlayer.vue index 2669f924..8cec604f 100644 --- a/plugins/plugin-md-power/src/client/components/ArtPlayer.vue +++ b/plugins/plugin-md-power/src/client/components/ArtPlayer.vue @@ -39,7 +39,7 @@ async function createPlayer() { loaded.value = false const { default: ArtPlayer } = await import( - /* webpackChunkName: "artplayer" */ 'artplayer' + /* webpackChunkName: "artplayer" */ 'artplayer', ) loaded.value = true const { src, type: _t, width: _w, height: _h, ratio: _r, ...opt } = props diff --git a/plugins/plugin-md-power/src/client/components/FileTreeNode.vue b/plugins/plugin-md-power/src/client/components/FileTreeNode.vue index d1abb607..f313dba0 100644 --- a/plugins/plugin-md-power/src/client/components/FileTreeNode.vue +++ b/plugins/plugin-md-power/src/client/components/FileTreeNode.vue @@ -16,7 +16,7 @@ const activeFileTreeNode = inject>('active-file-tree-node', ref('')) const onNodeClick = inject< (filename: string, type: 'file' | 'folder') => void - >('on-file-tree-node-click', () => {}) +>('on-file-tree-node-click', () => {}) const active = ref(props.expanded) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41d41fa3..b41f13be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,17 +7,17 @@ settings: catalogs: dev: '@commitlint/cli': - specifier: ^19.8.1 - version: 19.8.1 + specifier: ^20.1.0 + version: 20.1.0 '@commitlint/config-conventional': - specifier: ^19.8.1 - version: 19.8.1 + specifier: ^20.0.0 + version: 20.0.0 '@pengzhanbo/eslint-config-vue': - specifier: ^1.37.0 - version: 1.37.0 + specifier: ^1.38.0 + version: 1.38.0 '@pengzhanbo/stylelint-config': - specifier: ^1.37.0 - version: 1.37.0 + specifier: ^1.38.0 + version: 1.38.0 '@simonwep/pickr': specifier: ^1.9.1 version: 1.9.1 @@ -40,8 +40,11 @@ catalogs: specifier: ^1.2.5 version: 1.2.5 '@types/node': - specifier: ^24.5.2 - version: 24.5.2 + specifier: ^24.7.0 + version: 24.7.0 + '@types/picomatch': + specifier: ^4.0.2 + version: 4.0.2 '@types/stylus': specifier: ^0.48.43 version: 0.48.43 @@ -52,8 +55,8 @@ catalogs: specifier: ^3.2.4 version: 3.2.4 bumpp: - specifier: ^10.2.3 - version: 10.2.3 + specifier: ^10.3.1 + version: 10.3.1 commitizen: specifier: ^4.3.1 version: 4.3.1 @@ -70,8 +73,8 @@ catalogs: specifier: ^3.3.0 version: 3.3.0 eslint: - specifier: ^9.36.0 - version: 9.36.0 + specifier: ^9.37.0 + version: 9.37.0 http-server: specifier: ^14.1.1 version: 14.1.1 @@ -79,17 +82,17 @@ catalogs: specifier: ^9.1.7 version: 9.1.7 less: - specifier: ^4.4.1 - version: 4.4.1 + specifier: ^4.4.2 + version: 4.4.2 lint-staged: - specifier: ^16.1.6 - version: 16.1.6 + specifier: ^16.2.3 + version: 16.2.3 markdown-it: specifier: ^14.1.0 version: 14.1.0 memfs: - specifier: ^4.42.0 - version: 4.42.0 + specifier: ^4.49.0 + version: 4.49.0 mermaid: specifier: ^11.12.0 version: 11.12.0 @@ -103,8 +106,8 @@ catalogs: specifier: ^6.0.1 version: 6.0.1 stylelint: - specifier: ^16.24.0 - version: 16.24.0 + specifier: ^16.25.0 + version: 16.25.0 stylus: specifier: ^0.64.0 version: 0.64.0 @@ -112,11 +115,11 @@ catalogs: specifier: ^7.0.0 version: 7.0.0 tsdown: - specifier: ^0.15.3 - version: 0.15.3 + specifier: ^0.15.6 + version: 0.15.6 typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^5.9.3 + version: 5.9.3 vitest: specifier: ^3.2.4 version: 3.2.4 @@ -124,12 +127,12 @@ catalogs: specifier: ^4.5.1 version: 4.5.1 wait-on: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 peer: '@iconify/json': - specifier: ^2.2.386 - version: 2.2.386 + specifier: ^2.2.392 + version: 2.2.392 artplayer: specifier: ^5.3.0 version: 5.3.0 @@ -137,8 +140,8 @@ catalogs: specifier: ^5.0.3 version: 5.0.3 hls.js: - specifier: ^1.6.12 - version: 1.6.12 + specifier: ^1.6.13 + version: 1.6.13 mathjax-full: specifier: ^3.2.2 version: 3.2.2 @@ -146,11 +149,11 @@ catalogs: specifier: 1.7.3 version: 1.7.3 pyodide: - specifier: ^0.28.2 - version: 0.28.2 + specifier: ^0.28.3 + version: 0.28.3 sass: - specifier: ^1.93.0 - version: 1.93.0 + specifier: ^1.93.2 + version: 1.93.2 swiper: specifier: ^12.0.2 version: 12.0.2 @@ -206,18 +209,12 @@ catalogs: chokidar: specifier: 4.0.3 version: 4.0.3 - create-filter: - specifier: ^1.1.0 - version: 1.1.0 dayjs: specifier: ^1.11.18 version: 1.11.18 echarts: specifier: ^6.0.0 version: 6.0.0 - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 flowchart.ts: specifier: ^3.0.1 version: 3.0.1 @@ -237,14 +234,14 @@ catalogs: specifier: ^4.1.0 version: 4.1.0 katex: - specifier: ^0.16.22 - version: 0.16.22 + specifier: ^0.16.23 + version: 0.16.23 local-pkg: specifier: ^1.1.2 version: 1.1.2 lru-cache: - specifier: ^11.2.1 - version: 11.2.1 + specifier: ^11.2.2 + version: 11.2.2 mark.js: specifier: ^8.11.1 version: 8.11.1 @@ -267,8 +264,8 @@ catalogs: specifier: ^1.0.3 version: 1.0.3 nanoid: - specifier: ^5.1.5 - version: 5.1.5 + specifier: ^5.1.6 + version: 5.1.6 os-locale: specifier: ^6.0.2 version: 6.0.2 @@ -276,26 +273,29 @@ catalogs: specifier: ^7.0.3 version: 7.0.3 package-manager-detector: - specifier: ^1.3.0 - version: 1.3.0 + specifier: ^1.4.0 + version: 1.4.0 picocolors: specifier: ^1.1.1 version: 1.1.1 + picomatch: + specifier: ^4.0.3 + version: 4.0.3 shiki: specifier: ^3.13.0 version: 3.13.0 tinyglobby: - specifier: ^0.2.13 + specifier: ^0.2.15 version: 0.2.15 tm-grammars: - specifier: ^1.24.12 - version: 1.24.12 + specifier: ^1.24.16 + version: 1.24.16 tm-themes: specifier: ^1.10.9 version: 1.10.9 vue: - specifier: ^3.5.21 - version: 3.5.21 + specifier: ^3.5.22 + version: 3.5.22 vuepress: '@vuepress/bundler-vite': specifier: 2.0.0-rc.24 @@ -369,9 +369,9 @@ catalogs: overrides: '@bufbuild/protobuf': ^2.9.0 - '@typescript-eslint/utils': ^8.44.0 + '@typescript-eslint/utils': ^8.46.0 esbuild: ^0.25.10 - sass-embedded: ^1.93.0 + sass-embedded: ^1.93.2 patchedDependencies: floating-vue: @@ -384,16 +384,16 @@ importers: devDependencies: '@commitlint/cli': specifier: catalog:dev - version: 19.8.1(@types/node@24.5.2)(typescript@5.9.2) + version: 20.1.0(@types/node@24.7.0)(typescript@5.9.3) '@commitlint/config-conventional': specifier: catalog:dev - version: 19.8.1 + version: 20.0.0 '@pengzhanbo/eslint-config-vue': specifier: catalog:dev - version: 1.37.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1)) + version: 1.38.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1)) '@pengzhanbo/stylelint-config': specifier: catalog:dev - version: 1.37.0(stylelint@16.24.0(typescript@5.9.2)) + version: 1.38.0(stylelint@16.25.0(typescript@5.9.3)) '@types/js-yaml': specifier: catalog:dev version: 4.0.9 @@ -408,7 +408,10 @@ importers: version: 1.2.5 '@types/node': specifier: catalog:dev - version: 24.5.2 + version: 24.7.0 + '@types/picomatch': + specifier: catalog:dev + version: 4.0.2 '@types/stylus': specifier: catalog:dev version: 0.48.43 @@ -417,13 +420,13 @@ importers: version: 1.18.8 '@vitest/coverage-istanbul': specifier: catalog:dev - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1)) bumpp: specifier: catalog:dev - version: 10.2.3(magicast@0.3.5) + version: 10.3.1(magicast@0.3.5) commitizen: specifier: catalog:dev - version: 4.3.1(@types/node@24.5.2)(typescript@5.9.2) + version: 4.3.1(@types/node@24.7.0)(typescript@5.9.3) conventional-changelog-cli: specifier: catalog:dev version: 5.0.0(conventional-commits-filter@5.0.0) @@ -435,25 +438,25 @@ importers: version: 7.0.3 cz-conventional-changelog: specifier: catalog:dev - version: 3.3.0(@types/node@24.5.2)(typescript@5.9.2) + version: 3.3.0(@types/node@24.7.0)(typescript@5.9.3) eslint: specifier: catalog:dev - version: 9.36.0(jiti@2.5.1) + version: 9.37.0(jiti@2.5.1) husky: specifier: catalog:dev version: 9.1.7 less: specifier: catalog:dev - version: 4.4.1 + version: 4.4.2 lint-staged: specifier: catalog:dev - version: 16.1.6 + version: 16.2.3 markdown-it: specifier: catalog:dev version: 14.1.0 memfs: specifier: catalog:dev - version: 4.42.0 + version: 4.49.0 minimist: specifier: catalog:dev version: 1.2.8 @@ -464,11 +467,11 @@ importers: specifier: catalog:dev version: 6.0.1 sass-embedded: - specifier: ^1.93.0 - version: 1.93.0 + specifier: ^1.93.2 + version: 1.93.2 stylelint: specifier: catalog:dev - version: 16.24.0(typescript@5.9.2) + version: 16.25.0(typescript@5.9.3) stylus: specifier: catalog:dev version: 0.64.0 @@ -477,16 +480,16 @@ importers: version: 7.0.0 tsdown: specifier: catalog:dev - version: 0.15.3(typescript@5.9.2) + version: 0.15.6(typescript@5.9.3) typescript: specifier: catalog:dev - version: 5.9.2 + version: 5.9.3 vitest: specifier: catalog:dev - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) wait-on: specifier: catalog:dev - version: 9.0.0 + version: 9.0.1 cli: dependencies: @@ -516,19 +519,19 @@ importers: dependencies: '@iconify/json': specifier: catalog:peer - version: 2.2.386 + version: 2.2.392 '@simonwep/pickr': specifier: catalog:dev version: 1.9.1 '@vuepress/bundler-vite': specifier: catalog:vuepress - version: 2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1) + version: 2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1) '@vuepress/plugin-llms': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/shiki-twoslash': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) chart.js: specifier: catalog:prod version: 4.5.0 @@ -558,10 +561,10 @@ importers: version: 12.0.2 vue: specifier: catalog:prod - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.9.3) vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) vuepress-theme-plume: specifier: workspace:* version: link:../theme @@ -574,19 +577,19 @@ importers: dependencies: '@iconify/json': specifier: catalog:peer - version: 2.2.386 + version: 2.2.392 '@vuepress/bundler-vite': specifier: catalog:vuepress - version: 2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1) + version: 2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1) http-server: specifier: catalog:dev version: 14.1.1 vue: specifier: catalog:prod - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.9.3) vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) vuepress-theme-plume: specifier: workspace:* version: link:../../theme @@ -595,7 +598,7 @@ importers: dependencies: vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) plugins/plugin-md-power: dependencies: @@ -625,10 +628,10 @@ importers: version: 2.1.0 '@vuepress/helper': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vueuse/core': specifier: catalog:prod - version: 13.9.0(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(vue@3.5.22(typescript@5.9.3)) chokidar: specifier: catalog:prod version: 4.0.3 @@ -640,13 +643,13 @@ importers: version: 2.0.2 less: specifier: catalog:dev - version: 4.4.1 + version: 4.4.2 local-pkg: specifier: catalog:prod version: 1.1.2 lru-cache: specifier: catalog:prod - version: 11.2.1 + version: 11.2.2 markdown-it: specifier: catalog:dev version: 14.1.0 @@ -655,16 +658,16 @@ importers: version: 4.0.0 nanoid: specifier: catalog:prod - version: 5.1.5 + version: 5.1.6 pyodide: specifier: catalog:peer - version: 0.28.2 + version: 0.28.3 sass: specifier: catalog:peer - version: 1.93.0 + version: 1.93.2 sass-embedded: - specifier: ^1.93.0 - version: 1.93.0 + specifier: ^1.93.2 + version: 1.93.2 shiki: specifier: catalog:prod version: 3.13.0 @@ -676,16 +679,16 @@ importers: version: 0.2.15 tm-grammars: specifier: catalog:prod - version: 1.24.12 + version: 1.24.16 tm-themes: specifier: catalog:prod version: 1.10.9 vue: specifier: catalog:prod - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.9.3) vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) devDependencies: '@types/markdown-it': specifier: catalog:dev @@ -698,7 +701,7 @@ importers: version: 5.0.3 hls.js: specifier: catalog:peer - version: 1.6.12 + version: 1.6.13 mpegts.js: specifier: catalog:peer version: 1.7.3 @@ -707,13 +710,13 @@ importers: dependencies: '@vuepress/helper': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vueuse/core': specifier: catalog:prod - version: 13.9.0(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(vue@3.5.22(typescript@5.9.3)) '@vueuse/integrations': specifier: catalog:prod - version: 13.9.0(axios@1.12.2)(change-case@5.4.4)(focus-trap@7.6.5)(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(axios@1.12.2)(change-case@5.4.4)(focus-trap@7.6.5)(vue@3.5.22(typescript@5.9.3)) chokidar: specifier: catalog:prod version: 4.0.3 @@ -731,10 +734,10 @@ importers: version: 7.0.3 vue: specifier: catalog:prod - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.9.3) vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) theme: dependencies: @@ -743,7 +746,7 @@ importers: version: 3.0.2 '@iconify/vue': specifier: catalog:prod - version: 5.0.0(vue@3.5.21(typescript@5.9.2)) + version: 5.0.0(vue@3.5.22(typescript@5.9.3)) '@pengzhanbo/utils': specifier: catalog:prod version: 2.1.0 @@ -755,85 +758,79 @@ importers: version: link:../plugins/plugin-search '@vuepress/helper': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-cache': specifier: catalog:vuepress - version: 2.0.0-rc.112(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-comment': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-copy-code': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-docsearch': specifier: catalog:vuepress - version: 2.0.0-rc.112(@algolia/client-search@5.35.0)(search-insights@2.17.3)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(@algolia/client-search@5.35.0)(search-insights@2.17.3)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-git': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-markdown-chart': specifier: catalog:vuepress - version: 2.0.0-rc.112(chart.js@4.5.0)(flowchart.ts@3.0.1)(markdown-it@14.1.0)(markmap-lib@0.18.12(markmap-common@0.18.9))(markmap-toolbar@0.18.12(markmap-common@0.18.9))(markmap-view@0.18.12(markmap-common@0.18.9))(mermaid@11.12.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(chart.js@4.5.0)(flowchart.ts@3.0.1)(markdown-it@14.1.0)(markmap-lib@0.18.12(markmap-common@0.18.9))(markmap-toolbar@0.18.12(markmap-common@0.18.9))(markmap-view@0.18.12(markmap-common@0.18.9))(mermaid@11.12.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-markdown-hint': specifier: catalog:vuepress - version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-markdown-image': specifier: catalog:vuepress - version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-markdown-include': specifier: catalog:vuepress - version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-markdown-math': specifier: catalog:vuepress - version: 2.0.0-rc.112(katex@0.16.22)(markdown-it@14.1.0)(mathjax-full@3.2.2)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(katex@0.16.23)(markdown-it@14.1.0)(mathjax-full@3.2.2)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-nprogress': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-photo-swipe': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-reading-time': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-replace-assets': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-seo': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-shiki': specifier: catalog:vuepress - version: 2.0.0-rc.112(@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))))(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))))(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-sitemap': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/plugin-watermark': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vuepress/shiki-twoslash': specifier: catalog:vuepress - version: 2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + version: 2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) '@vueuse/core': specifier: catalog:prod - version: 13.9.0(vue@3.5.21(typescript@5.9.2)) + version: 13.9.0(vue@3.5.22(typescript@5.9.3)) bcrypt-ts: specifier: catalog:prod version: 7.1.0 chokidar: specifier: catalog:prod version: 4.0.3 - create-filter: - specifier: catalog:prod - version: 1.1.0 dayjs: specifier: catalog:prod version: 1.11.18 esbuild: specifier: ^0.25.10 version: 0.25.10 - fast-glob: - specifier: catalog:prod - version: 3.3.3 gray-matter: specifier: catalog:prod version: 4.0.3 @@ -842,7 +839,7 @@ importers: version: 4.1.0 katex: specifier: catalog:prod - version: 0.16.22 + version: 0.16.23 local-pkg: specifier: catalog:prod version: 1.1.2 @@ -851,29 +848,35 @@ importers: version: 3.2.2 nanoid: specifier: catalog:prod - version: 5.1.5 + version: 5.1.6 + p-map: + specifier: catalog:prod + version: 7.0.3 package-manager-detector: specifier: catalog:prod - version: 1.3.0 + version: 1.4.0 + picomatch: + specifier: catalog:prod + version: 4.0.3 vue: specifier: catalog:prod - version: 3.5.21(typescript@5.9.2) + version: 3.5.22(typescript@5.9.3) vuepress: specifier: catalog:vuepress - version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + version: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) vuepress-plugin-md-power: specifier: workspace:* version: link:../plugins/plugin-md-power devDependencies: '@iconify/json': specifier: catalog:peer - version: 2.2.386 + version: 2.2.392 swiper: specifier: catalog:peer version: 12.0.2 vue-router: specifier: catalog:dev - version: 4.5.1(vue@3.5.21(typescript@5.9.2)) + version: 4.5.1(vue@3.5.22(typescript@5.9.3)) packages: @@ -1025,11 +1028,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -1082,75 +1080,95 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - '@commitlint/cli@19.8.1': - resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} + '@commitlint/cli@20.1.0': + resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.8.1': - resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==} + '@commitlint/config-conventional@20.0.0': + resolution: {integrity: sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==} engines: {node: '>=v18'} '@commitlint/config-validator@19.8.1': resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} engines: {node: '>=v18'} - '@commitlint/ensure@19.8.1': - resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==} + '@commitlint/config-validator@20.0.0': + resolution: {integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==} + engines: {node: '>=v18'} + + '@commitlint/ensure@20.0.0': + resolution: {integrity: sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==} engines: {node: '>=v18'} '@commitlint/execute-rule@19.8.1': resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==} engines: {node: '>=v18'} - '@commitlint/format@19.8.1': - resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==} + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.8.1': - resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==} + '@commitlint/format@20.0.0': + resolution: {integrity: sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==} engines: {node: '>=v18'} - '@commitlint/lint@19.8.1': - resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==} + '@commitlint/is-ignored@20.0.0': + resolution: {integrity: sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==} + engines: {node: '>=v18'} + + '@commitlint/lint@20.0.0': + resolution: {integrity: sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==} engines: {node: '>=v18'} '@commitlint/load@19.8.1': resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==} engines: {node: '>=v18'} - '@commitlint/message@19.8.1': - resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==} + '@commitlint/load@20.1.0': + resolution: {integrity: sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==} engines: {node: '>=v18'} - '@commitlint/parse@19.8.1': - resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==} + '@commitlint/message@20.0.0': + resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==} engines: {node: '>=v18'} - '@commitlint/read@19.8.1': - resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==} + '@commitlint/parse@20.0.0': + resolution: {integrity: sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==} + engines: {node: '>=v18'} + + '@commitlint/read@20.0.0': + resolution: {integrity: sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==} engines: {node: '>=v18'} '@commitlint/resolve-extends@19.8.1': resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==} engines: {node: '>=v18'} - '@commitlint/rules@19.8.1': - resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==} + '@commitlint/resolve-extends@20.1.0': + resolution: {integrity: sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.8.1': - resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==} + '@commitlint/rules@20.0.0': + resolution: {integrity: sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==} engines: {node: '>=v18'} - '@commitlint/top-level@19.8.1': - resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==} + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@20.0.0': + resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==} engines: {node: '>=v18'} '@commitlint/types@19.8.1': resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} engines: {node: '>=v18'} + '@commitlint/types@20.0.0': + resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==} + engines: {node: '>=v18'} + '@conventional-changelog/git-client@1.0.1': resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} engines: {node: '>=18'} @@ -1209,8 +1227,8 @@ packages: search-insights: optional: true - '@dual-bundle/import-meta-resolve@4.1.0': - resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@dual-bundle/import-meta-resolve@4.2.1': + resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} @@ -1225,8 +1243,8 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@es-joy/jsdoccomment@0.53.0': - resolution: {integrity: sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ==} + '@es-joy/jsdoccomment@0.68.1': + resolution: {integrity: sha512-wJJXnfG2Pq7ZC8IeOupkkAVtEH6OYy1uVxRTeshXDQfSNsZneS7FUQlNf710osZ5Yz/b5ev9xChvybTT7CM63g==} engines: {node: '>=20.11.0'} '@esbuild/aix-ppc64@0.25.10': @@ -1391,12 +1409,6 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1420,24 +1432,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + '@eslint/config-helpers@0.4.0': + resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.2': resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.36.0': - resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} + '@eslint/js@9.37.0': + resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/markdown@7.2.0': - resolution: {integrity: sha512-cmDloByulvKzofM0tIkSGWwxMcrKOLsXZC+EM0FLkRIrxKzW+2RkZAt9TAh37EtQRmx1M4vjBEmlC6R0wiGkog==} + '@eslint/markdown@7.3.0': + resolution: {integrity: sha512-v9Cpl9IvzGmWMUwDAwSbf1b2GMwjQJiD0TSHegFrIu23mjqGQOvaCwnetzbG3/fjk8x7baKaIbSTBlpCktZRRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1448,6 +1464,10 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -1504,8 +1524,8 @@ packages: resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} engines: {node: '>=10.13.0'} - '@iconify/json@2.2.386': - resolution: {integrity: sha512-qvSvaRBu4B1PXKLoXc2yme+eRy3NDTQh/CO3k1vmXjwDKFTFUEVmn8nTD4elPMJZEQa3OOVjh4NfYopnxiAabA==} + '@iconify/json@2.2.392': + resolution: {integrity: sha512-WkkQIDpmgetgvIn1jso6XKY3S5Pf9L6QD1J2RNLeiF+jzdouyayoRm2LLxe4dmnp9i3Cbf8w7oRuaVlhwK8Xtg==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -1807,8 +1827,8 @@ packages: '@mermaid-js/parser@0.6.2': resolution: {integrity: sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==} - '@napi-rs/wasm-runtime@1.0.5': - resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@napi-rs/wasm-runtime@1.0.6': + resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1822,8 +1842,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/types@0.89.0': - resolution: {integrity: sha512-yuo+ECPIW5Q9mSeNmCDC2im33bfKuwW18mwkaHMQh8KakHYDzj4ci/q7wxf2qS3dMlVVCIyrs3kFtH5LmnlYnw==} + '@oxc-project/types@0.94.0': + resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} @@ -1907,13 +1927,13 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@pengzhanbo/eslint-config-vue@1.37.0': - resolution: {integrity: sha512-6AAGag4OgUu7blwLFl6opvzCBJUa5AJDA9rQuKWPJKwjY6/S/TAfPnI2Y3J2+ianTpD9W4FmDPBgi6mpwIUEVw==} + '@pengzhanbo/eslint-config-vue@1.38.0': + resolution: {integrity: sha512-jNGkW/jCKkvdBbKiGuOS8p/fxGKXRxd5jJnaWq+Fn/vmNGiik7Ouv83tG7G7rwWxAQfWu5RQ+GuGoBzqeLquLw==} peerDependencies: '@prettier/plugin-xml': ^3.4.2 - '@unocss/eslint-plugin': ^66.5.0 - eslint: ^9.34.0 - eslint-plugin-format: ^1.0.1 + '@unocss/eslint-plugin': ^66.5.2 + eslint: ^9.37.0 + eslint-plugin-format: ^1.0.2 eslint-plugin-tailwindcss: ^3.18.2 peerDependenciesMeta: '@prettier/plugin-xml': @@ -1925,28 +1945,28 @@ packages: eslint-plugin-tailwindcss: optional: true - '@pengzhanbo/eslint-config@1.37.0': - resolution: {integrity: sha512-L2X2KHO/IJ+oBwucJ8i62mRJNA4bf9EK409XZd2vIa3ZV5Imk92et9UjBct0rnHh+dnIbJk/88c1E5901P8hBA==} + '@pengzhanbo/eslint-config@1.38.0': + resolution: {integrity: sha512-uUWw1LG3CzZZuFqj/ThnBRfMrKpIfmSCVYxyv+kHsmp65GGT+XM/erHbmi1vjQsDfeBg1rlPWLVdzRJeJqIc8g==} peerDependencies: - '@eslint-react/eslint-plugin': ^1.52.9 - '@next/eslint-plugin-next': ^15.5.2 + '@eslint-react/eslint-plugin': ^2.0.6 + '@next/eslint-plugin-next': ^15.5.4 '@prettier/plugin-xml': ^3.4.2 - '@unocss/eslint-plugin': ^66.5.0 + '@unocss/eslint-plugin': ^66.5.2 astro-eslint-parser: ^1.2.2 - eslint: ^9.34.0 + eslint: ^9.37.0 eslint-plugin-astro: ^1.3.1 - eslint-plugin-format: ^1.0.1 - eslint-plugin-react-hooks: ^5.2.0 - eslint-plugin-react-refresh: ^0.4.20 + eslint-plugin-format: ^1.0.2 + eslint-plugin-react-hooks: ^6.1.1 + eslint-plugin-react-refresh: ^0.4.23 eslint-plugin-solid: ^0.14.5 - eslint-plugin-svelte: ^3.11.0 + eslint-plugin-svelte: ^3.12.4 eslint-plugin-tailwindcss: ^3.18.2 - eslint-plugin-vue: ^10.4.0 + eslint-plugin-vue: ^10.5.0 eslint-plugin-vuejs-accessibility: ^2.4.1 eslint-processor-vue-blocks: ^2.0.0 prettier-plugin-astro: ^0.14.1 prettier-plugin-slidev: ^1.0.5 - svelte-eslint-parser: ^1.3.1 + svelte-eslint-parser: ^1.3.3 vue-eslint-parser: ^10.2.0 peerDependenciesMeta: '@eslint-react/eslint-plugin': @@ -1986,10 +2006,10 @@ packages: vue-eslint-parser: optional: true - '@pengzhanbo/stylelint-config@1.37.0': - resolution: {integrity: sha512-9qVWA+33/zsZ4c21chh+vnBIOrOlFHzSOVygA8611OxIlJSEPx2Hsz/nzs7gzMg0t6w1MmqUWE9DBjcqxSID1g==} + '@pengzhanbo/stylelint-config@1.38.0': + resolution: {integrity: sha512-8crl1EEoNvJ6daw8exv9B2NAQNsFLIV8/qODICgr6vx4HAbV50T30tLkgfAVFdYgeMfnFexFoj1vvIUbnvNzyQ==} peerDependencies: - stylelint: ^16.23.1 + stylelint: ^16.25.0 '@pengzhanbo/utils@2.1.0': resolution: {integrity: sha512-mdcNoYZ6S9EhRqAIpjnD2dcFxaP7E9JdMrP2z5uXuEesddNcmQ4GvEs/wcyxKmFXqeFdL88fJu7l8a6hNN4zPQ==} @@ -2005,85 +2025,85 @@ packages: '@quansync/fs@0.1.5': resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} - '@rolldown/binding-android-arm64@1.0.0-beta.38': - resolution: {integrity: sha512-AE3HFQrjWCKLFZD1Vpiy+qsqTRwwoil1oM5WsKPSmfQ5fif/A+ZtOZetF32erZdsR7qyvns6qHEteEsF6g6rsQ==} + '@rolldown/binding-android-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.38': - resolution: {integrity: sha512-RaoWOKc0rrFsVmKOjQpebMY6c6/I7GR1FBc25v7L/R7NlM0166mUotwGEv7vxu7ruXH4SJcFeVrfADFUUXUmmQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.38': - resolution: {integrity: sha512-Ymojqc2U35iUc8NFU2XX1WQPfBRRHN6xHcrxAf9WS8BFFBn8pDrH5QPvH1tYs3lDkw6UGGbanr1RGzARqdUp1g==} + '@rolldown/binding-darwin-x64@1.0.0-beta.42': + resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.38': - resolution: {integrity: sha512-0ermTQ//WzSI0nOL3z/LUWMNiE9xeM5cLGxjewPFEexqxV/0uM8/lNp9QageQ8jfc/VO1OURsGw34HYO5PaL8w==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': + resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.38': - resolution: {integrity: sha512-GADxzVUTCTp6EWI52831A29Tt7PukFe94nhg/SUsfkI33oTiNQtPxyLIT/3oRegizGuPSZSlrdBurkjDwxyEUQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': + resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.38': - resolution: {integrity: sha512-SKO7Exl5Yem/OSNoA5uLHzyrptUQ8Hg70kHDxuwEaH0+GUg+SQe9/7PWmc4hFKBMrJGdQtii8WZ0uIz9Dofg5Q==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.38': - resolution: {integrity: sha512-SOo6+WqhXPBaShLxLT0eCgH17d3Yu1lMAe4mFP0M9Bvr/kfMSOPQXuLxBcbBU9IFM9w3N6qP9xWOHO+oUJvi8Q==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.38': - resolution: {integrity: sha512-yvsQ3CyrodOX+lcoi+lejZGCOvJZa9xTsNB8OzpMDmHeZq3QzJfpYjXSAS6vie70fOkLVJb77UqYO193Cl8XBQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.38': - resolution: {integrity: sha512-84qzKMwUwikfYeOuJ4Kxm/3z15rt0nFGGQArHYIQQNSTiQdxGHxOkqXtzPFqrVfBJUdxBAf+jYzR1pttFJuWyg==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.38': - resolution: {integrity: sha512-QrNiWlce01DYH0rL8K3yUBu+lNzY+B0DyCbIc2Atan6/S6flxOL0ow5DLQvMamOI/oKhrJ4xG+9MkMb9dDHbLQ==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.38': - resolution: {integrity: sha512-fnLtHyjwEsG4/aNV3Uv3Qd1ZbdH+CopwJNoV0RgBqrcQB8V6/Qdikd5JKvnO23kb3QvIpP+dAMGZMv1c2PJMzw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': + resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.38': - resolution: {integrity: sha512-19cTfnGedem+RY+znA9J6ARBOCEFD4YSjnx0p5jiTm9tR6pHafRfFIfKlTXhun+NL0WWM/M0eb2IfPPYUa8+wg==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.38': - resolution: {integrity: sha512-HcICm4YzFJZV+fI0O0bFLVVlsWvRNo/AB9EfUXvNYbtAxakCnQZ15oq22deFdz6sfi9Y4/SagH2kPU723dhCFA==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.38': - resolution: {integrity: sha512-4Qx6cgEPXLb0XsCyLoQcUgYBpfL0sjugftob+zhUH0EOk/NVCAIT+h0NJhY+jn7pFpeKxhNMqhvTNx3AesxIAQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2091,8 +2111,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.29': resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} - '@rolldown/pluginutils@1.0.0-beta.38': - resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} + '@rolldown/pluginutils@1.0.0-beta.42': + resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} '@rollup/rollup-android-arm-eabi@4.46.2': resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} @@ -2287,8 +2307,8 @@ packages: stylelint: optional: true - '@stylistic/eslint-plugin@5.2.3': - resolution: {integrity: sha512-oY7GVkJGVMI5benlBDCaRrSC1qPasafyv5dOBLLv5MTilMGnErKhO6ziEfodDDIZbo5QxPUNW360VudJOFODMw==} + '@stylistic/eslint-plugin@5.4.0': + resolution: {integrity: sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -2485,15 +2505,18 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@24.3.1': - resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} - '@types/node@24.5.2': resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} + '@types/node@24.7.0': + resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/picomatch@4.0.2': + resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -2530,97 +2553,105 @@ packages: '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} - '@typescript-eslint/eslint-plugin@8.42.0': - resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} + '@typescript-eslint/eslint-plugin@8.45.0': + resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.42.0 + '@typescript-eslint/parser': ^8.45.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.42.0': - resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} + '@typescript-eslint/parser@8.45.0': + resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.42.0': - resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} + '@typescript-eslint/project-service@8.45.0': + resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.44.0': - resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==} + '@typescript-eslint/project-service@8.46.0': + resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.42.0': - resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.44.0': - resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==} + '@typescript-eslint/scope-manager@8.45.0': + resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.42.0': - resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} + '@typescript-eslint/scope-manager@8.46.0': + resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.45.0': + resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.44.0': - resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==} + '@typescript-eslint/tsconfig-utils@8.46.0': + resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.42.0': - resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.40.0': - resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.42.0': - resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} + '@typescript-eslint/types@8.45.0': + resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.44.0': - resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==} + '@typescript-eslint/types@8.46.0': + resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.42.0': - resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} + '@typescript-eslint/typescript-estree@8.45.0': + resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.44.0': - resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==} + '@typescript-eslint/typescript-estree@8.46.0': + resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.44.0': - resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==} + '@typescript-eslint/utils@8.46.0': + resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.42.0': - resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.44.0': - resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==} + '@typescript-eslint/visitor-keys@8.45.0': + resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.46.0': + resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/vfs@1.6.1': @@ -2643,8 +2674,8 @@ packages: peerDependencies: vitest: 3.2.4 - '@vitest/eslint-plugin@1.3.8': - resolution: {integrity: sha512-+M0eRDo/UiIF4xZZbZBBAR2Resx0ihdLRNpYevkrDJ6F3xHuEXSAAJGt6Ahabd0eJC4mQKvLA1JY1qBM058Cag==} + '@vitest/eslint-plugin@1.3.15': + resolution: {integrity: sha512-U9NGRhN4QrIsxRl4LITQ/deLD5Hv6MC8KrLx+exFX1ri41naX2EaBJAJdbtAyjGnQnBGaXpC6kNFmQac7Ogm2w==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -2696,20 +2727,20 @@ packages: '@vue/compiler-core@3.5.18': resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} - '@vue/compiler-core@3.5.21': - resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} '@vue/compiler-dom@3.5.18': resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} - '@vue/compiler-dom@3.5.21': - resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} - '@vue/compiler-sfc@3.5.21': - resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} + '@vue/compiler-sfc@3.5.22': + resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} - '@vue/compiler-ssr@3.5.21': - resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} + '@vue/compiler-ssr@3.5.22': + resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -2734,25 +2765,25 @@ packages: typescript: optional: true - '@vue/reactivity@3.5.21': - resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} + '@vue/reactivity@3.5.22': + resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} - '@vue/runtime-core@3.5.21': - resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} + '@vue/runtime-core@3.5.22': + resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} - '@vue/runtime-dom@3.5.21': - resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} + '@vue/runtime-dom@3.5.22': + resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} - '@vue/server-renderer@3.5.21': - resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} + '@vue/server-renderer@3.5.22': + resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} peerDependencies: - vue: 3.5.21 + vue: 3.5.22 '@vue/shared@3.5.18': resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} - '@vue/shared@3.5.21': - resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} '@vuepress/bundler-vite@2.0.0-rc.24': resolution: {integrity: sha512-prgT3f6xOBC43rhfvzlfXY0wJKsI+oV5RC4s0YyVPZ0s5VQKI3RRD1aY+euiVFPks3Mjx+DxEtKBOLsJ7I6crA==} @@ -3053,8 +3084,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@4.1.0: - resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} anymatch@3.1.3: @@ -3229,8 +3260,8 @@ packages: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} - bumpp@10.2.3: - resolution: {integrity: sha512-nsFBZACxuBVu6yzDSaZZaWpX5hTQ+++9WtYkmO+0Bd3cpSq0Mzvqw5V83n+fOyRj3dYuZRFCQf5Z9NNfZj+Rnw==} + bumpp@10.3.1: + resolution: {integrity: sha512-cOKPRFCWvHcYPJQAHN6V7Jp/wAfnyqQRXQ+2fgWIL6Gao20rpu7xQ1cGGo1APOfmbQmmHngEPg9Fy7nJ3giRkQ==} engines: {node: '>=18'} hasBin: true @@ -3243,8 +3274,8 @@ packages: '@75lb/nature': optional: true - c12@3.2.0: - resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==} + c12@3.3.0: + resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -3377,9 +3408,9 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@5.1.0: + resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + engines: {node: '>=20'} cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} @@ -3429,8 +3460,8 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@14.0.0: - resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} commander@7.2.0: @@ -3601,9 +3632,6 @@ packages: engines: {node: ^20.0.0 || >=22.0.0, npm: '>=10'} hasBin: true - create-filter@1.1.0: - resolution: {integrity: sha512-mSHedS8IpVElLHvTFY9Bg+P0Fs5EyOypkoAWQRhSDyl1c2kzzFJVPv9o7ueOaYxmx/Cn4Cl3HWMLny6pE1b/aA==} - cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -3903,6 +3931,10 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} @@ -3931,8 +3963,8 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dotenv@17.2.1: - resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} dts-resolver@2.1.2: @@ -4080,8 +4112,8 @@ packages: peerDependencies: eslint: ^9.5.0 - eslint-flat-config-utils@2.1.1: - resolution: {integrity: sha512-K8eaPkBemHkfbYsZH7z4lZ/tt6gNSsVh535Wh9W9gQBS2WjvfUbbVr2NZR3L1yiRCLuOEimYfPxCxODczD4Opg==} + eslint-flat-config-utils@2.1.4: + resolution: {integrity: sha512-bEnmU5gqzS+4O+id9vrbP43vByjF+8KOs+QuuV4OlqAuXmnRW2zfI/Rza1fQvdihQ5h4DUo0NqFAiViD4mSrzQ==} eslint-json-compat-utils@0.2.1: resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} @@ -4125,14 +4157,14 @@ packages: typescript: optional: true - eslint-plugin-jsdoc@54.3.1: - resolution: {integrity: sha512-6KlEwRCaQfSi1Wsis4cxsqDfOuQDPG56ozSPCkG+N9aISTQpahbo2n0YZs6c7CIVXQzVdYSxuvQ6w31rfeiMhw==} + eslint-plugin-jsdoc@60.8.1: + resolution: {integrity: sha512-LDcQpH4cYzU+EEri907GSzr16U2UOBiQcm95dK8ka5SnTwIT3Y7bC0iiY/MKyOotTRXaw4MY3Ec9BgHIfDBvHQ==} engines: {node: '>=20.11.0'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsonc@2.20.1: - resolution: {integrity: sha512-gUzIwQHXx7ZPypUoadcyRi4WbHW2TPixDr0kqQ4miuJBU0emJmyGTlnaT3Og9X2a8R1CDayN9BFSq5weGWbTng==} + eslint-plugin-jsonc@2.21.0: + resolution: {integrity: sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -4143,8 +4175,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-n@17.21.3: - resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} + eslint-plugin-n@17.23.1: + resolution: {integrity: sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -4153,14 +4185,14 @@ packages: resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@4.15.0: - resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==} + eslint-plugin-perfectionist@4.15.1: + resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.45.0' - eslint-plugin-pnpm@1.1.1: - resolution: {integrity: sha512-gNo+swrLCgvT8L6JX6hVmxuKeuStGK2l8IwVjDxmYIn+wP4SW/d0ORLKyUiYamsp+UxknQo3f2M1irrTpqahCw==} + eslint-plugin-pnpm@1.2.0: + resolution: {integrity: sha512-HKIFEmRGVxXvPx/hCpZY0qUGCYoaSYO6EVut4Hf9bckC0qP6F23mBgdoIExRZIWoViHuMznSaDU1FpQmc2xpgw==} peerDependencies: eslint: ^9.0.0 @@ -4176,8 +4208,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-plugin-unicorn@60.0.0: - resolution: {integrity: sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==} + eslint-plugin-unicorn@61.0.2: + resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: eslint: '>=9.29.0' @@ -4191,14 +4223,17 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-plugin-vue@10.4.0: - resolution: {integrity: sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==} + eslint-plugin-vue@10.5.0: + resolution: {integrity: sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 vue-eslint-parser: ^10.0.0 peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true '@typescript-eslint/parser': optional: true @@ -4208,8 +4243,8 @@ packages: peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-yml@1.18.0: - resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==} + eslint-plugin-yml@1.19.0: + resolution: {integrity: sha512-S+4GbcCWksFKAvFJtf0vpdiCkZZvDJCV4Zsi9ahmYkYOYcf+LRqqzvzkb/ST7vTYV6sFwXOvawzYyL/jFT2nQA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -4236,8 +4271,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.36.0: - resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} + eslint@9.37.0: + resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4593,8 +4628,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -4700,8 +4735,8 @@ packages: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} - hls.js@1.6.12: - resolution: {integrity: sha512-Pz+7IzvkbAht/zXvwLzA/stUHNqztqKvlLbfpq6ZYU68+gZ+CZMlsbQBPUviRap+3IQ41E39ke7Ia+yvhsehEQ==} + hls.js@1.6.13: + resolution: {integrity: sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==} homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} @@ -4923,10 +4958,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} @@ -5104,6 +5135,10 @@ packages: resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} + jsdoc-type-pratt-parser@6.3.3: + resolution: {integrity: sha512-N1HQK15ZXdwgmXsALjUWW9Cwyg1BQS5hfP8KzDkbR4mjb+Ep8Uxcfwz+OU1tsNCRg99rk62d8GMNdG8Qz4k+Gg==} + engines: {node: '>=20.0.0'} + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -5134,8 +5169,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.0: - resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + jsonc-eslint-parser@2.4.1: + resolution: {integrity: sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} jsonc-parser@3.3.1: @@ -5156,6 +5191,10 @@ packages: resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true + katex@0.16.23: + resolution: {integrity: sha512-7VlC1hsEEolL9xNO05v9VjrvWZePkCVBJqj8ruICxYjZfHaHbaU53AlP+PODyFIXEnaEIEWi3wJy7FPZ95JAVg==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -5199,8 +5238,8 @@ packages: resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==} engines: {node: '>=8'} - less@4.4.1: - resolution: {integrity: sha512-X9HKyiXPi0f/ed0XhgUlBeFfxrlDP3xR4M7768Zl+WXLUViuL9AOPPJP4nCV0tgRWvTYvpNmN0SFhZOQzy16PA==} + less@4.4.2: + resolution: {integrity: sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==} engines: {node: '>=14'} hasBin: true @@ -5221,13 +5260,13 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@16.1.6: - resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} + lint-staged@16.2.3: + resolution: {integrity: sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==} engines: {node: '>=20.17'} hasBin: true - listr2@9.0.3: - resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} + listr2@9.0.4: + resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} engines: {node: '>=20.0.0'} lit-element@4.2.1: @@ -5318,23 +5357,20 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} - engines: {node: 20 || >=22} - lru-cache@11.2.1: resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==} engines: {node: 20 || >=22} + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.18: - resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} - magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -5469,9 +5505,8 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - memfs@4.42.0: - resolution: {integrity: sha512-RG+4HMGyIVp6UWDWbFmZ38yKrSzblPnfJu0PyPt0hw52KW4PPlPp+HdV4qZBG0hLDuYVnf8wfQT4NymKXnlQjA==} - engines: {node: '>= 4.0.0'} + memfs@4.49.0: + resolution: {integrity: sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ==} meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} @@ -5659,10 +5694,6 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - nano-spawn@1.0.2: - resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} - engines: {node: '>=20.17'} - nano-spawn@1.0.3: resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} @@ -5672,8 +5703,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} engines: {node: ^18 || >=20} hasBin: true @@ -5727,6 +5758,9 @@ packages: engines: {node: ^14.16.0 || >=16.10.0} hasBin: true + object-deep-merge@1.0.5: + resolution: {integrity: sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -5824,6 +5858,9 @@ packages: package-manager-detector@1.3.0: resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + package-manager-detector@1.4.0: + resolution: {integrity: sha512-rRZ+pR1Usc+ND9M2NkmCvE/LYJS+8ORVV9X0KuNSY/gFsp7RBHJM/ADh9LYq4Vvfq6QkKrW6/weuh8SMEtN5gw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5904,9 +5941,6 @@ packages: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -5917,6 +5951,9 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + photoswipe@5.4.4: resolution: {integrity: sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA==} engines: {node: '>= 0.12.0'} @@ -5944,9 +5981,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -5954,8 +5988,8 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - pnpm-workspace-yaml@1.1.1: - resolution: {integrity: sha512-nGBB7h3Ped3g9dBrR6d3YNwXCKYsEg8K9J3GMmSrwGEXq3RHeGW44/B4MZW51p4FRMnyxJzTY5feSBbUjRhIHQ==} + pnpm-workspace-yaml@1.2.0: + resolution: {integrity: sha512-4CnZHmLSaprRnIm2iQ27Zl1cWPRHdX7Ehw7ckRwujoPKCk2QAz4agsA2MbTodg4sgbqYfJ68ULT+Q5A8dU+Mow==} points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} @@ -6065,8 +6099,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pyodide@0.28.2: - resolution: {integrity: sha512-2BrZHrALvhYZfIuTGDHOvyiirHNLziHfBiBb1tpBFzLgAvDBb2ACxNPFFROCOzLnqapORmgArDYY8mJmMWH1Eg==} + pyodide@0.28.3: + resolution: {integrity: sha512-rtCsyTU55oNGpLzSVuAd55ZvruJDEX8o6keSdWKN9jPeBVSNlynaKFG7eRqkiIgU7i2M6HEgYtm0atCEQX3u4A==} engines: {node: '>=18.0.0'} qs@6.14.0: @@ -6210,8 +6244,8 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rolldown-plugin-dts@0.16.6: - resolution: {integrity: sha512-OPQKAft45efpjU3ppcI9GyRHAT0otTIdMv0gcoBlcR9B3QssZvTFH6zbT3Ij5x+7ymX5TCPyHb+VIkRYTJrTaA==} + rolldown-plugin-dts@0.16.8: + resolution: {integrity: sha512-lsx7yrYA0ZXfARLEcPKgHIw8DX4fLQOhmMChgZbn5eFhqibY2Bav1+/Yn5WNm+ATtw+cefXYgEYO/7njeHsgAA==} engines: {node: '>=20.18.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 @@ -6229,8 +6263,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.38: - resolution: {integrity: sha512-58frPNX55Je1YsyrtPJv9rOSR3G5efUZpRqok94Efsj0EUa8dnqJV3BldShyI7A+bVPleucOtzXHwVpJRcR0kQ==} + rolldown@1.0.0-beta.42: + resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -6276,117 +6310,117 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.93.0: - resolution: {integrity: sha512-fBTnh5qgOyw0CGVaF2iPsIIRj40D9Mnf19WerixjmWwmYKaGhxd62STsuMt6t1dWS5lkUZWRgrJ+2biQiEcCBg==} + sass-embedded-all-unknown@1.93.2: + resolution: {integrity: sha512-GdEuPXIzmhRS5J7UKAwEvtk8YyHQuFZRcpnEnkA3rwRUI27kwjyXkNeIj38XjUQ3DzrfMe8HcKFaqWGHvblS7Q==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.93.0: - resolution: {integrity: sha512-bwU+0uWUVoATaYAb9mnDj7GCEnNAIrinzT4UlA6GlicH+ELEZlNwVjaPJfdCyyYs8iOKuzUPfZrFZuwRCsXXqw==} + sass-embedded-android-arm64@1.93.2: + resolution: {integrity: sha512-346f4iVGAPGcNP6V6IOOFkN5qnArAoXNTPr5eA/rmNpeGwomdb7kJyQ717r9rbJXxOG8OAAUado6J0qLsjnjXQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.93.0: - resolution: {integrity: sha512-oMm6RafXdpWDejufUs+GcgBSS/wa/iG1zRhwsCrkIkMLhqa34oN7xLkNs9Ieg337nlIryUBijwAVMFlAs/mgIg==} + sass-embedded-android-arm@1.93.2: + resolution: {integrity: sha512-I8bpO8meZNo5FvFx5FIiE7DGPVOYft0WjuwcCCdeJ6duwfkl6tZdatex1GrSigvTsuz9L0m4ngDcX/Tj/8yMow==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.93.0: - resolution: {integrity: sha512-lKk7elql2abYeLY+wNBW8DB13W8An9JWlAr/BWOAtluz1RMsPVZwv0amQiP2PcR6HA02QDoLfRE/QpnPDHzCuw==} + sass-embedded-android-riscv64@1.93.2: + resolution: {integrity: sha512-hSMW1s4yJf5guT9mrdkumluqrwh7BjbZ4MbBW9tmi1DRDdlw1Wh9Oy1HnnmOG8x9XcI1qkojtPL6LUuEJmsiDg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.93.0: - resolution: {integrity: sha512-wuyphs1VMS/PRXtCBLhA0bVo5nyKFCXKaVKMbqPylOTvoTHe7u0zxjWRN4eF5LTPVuQp0A+LYgJz07duzxwJew==} + sass-embedded-android-x64@1.93.2: + resolution: {integrity: sha512-JqktiHZduvn+ldGBosE40ALgQ//tGCVNAObgcQ6UIZznEJbsHegqStqhRo8UW3x2cgOO2XYJcrInH6cc7wdKbw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.93.0: - resolution: {integrity: sha512-lEb5J/jabesh16xdocRFgpzIa8GAZCLrdKtUnGbn9a4Y4WkEKHtUkvAm9ZtqE8YiuIm8PwHW/zBUKtZYoGYoYA==} + sass-embedded-darwin-arm64@1.93.2: + resolution: {integrity: sha512-qI1X16qKNeBJp+M/5BNW7v/JHCDYWr1/mdoJ7+UMHmP0b5AVudIZtimtK0hnjrLnBECURifd6IkulybR+h+4UA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.93.0: - resolution: {integrity: sha512-mo9OfKyNF6MiFf711c+QGR7aPpFqAC9FttiLKPYH3RRBZQZU/UcG4mbg+yXfKbhZrJmYngbGiTzE9B+xiOz27Q==} + sass-embedded-darwin-x64@1.93.2: + resolution: {integrity: sha512-4KeAvlkQ0m0enKUnDGQJZwpovYw99iiMb8CTZRSsQm8Eh7halbJZVmx67f4heFY/zISgVOCcxNg19GrM5NTwtA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.93.0: - resolution: {integrity: sha512-bJclpjTeP/qCu7zYLZQXROx4xIT3x+qfj/q92fripV9L9Oj2khfUm+2nW0Cq7DS6UrHphrWZ9QSnVYFhkCKtEA==} + sass-embedded-linux-arm64@1.93.2: + resolution: {integrity: sha512-9ftX6nd5CsShJqJ2WRg+ptaYvUW+spqZfJ88FbcKQBNFQm6L87luj3UI1rB6cP5EWrLwHA754OKxRJyzWiaN6g==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.93.0: - resolution: {integrity: sha512-wtO2vB8rMc5zF29xwC3AMgmBgNgm3i3/8zog5vQBD4yddqCJ93JcWDjdUqYmq0H/DLD/Z7q91j6X/YgPq1WuEg==} + sass-embedded-linux-arm@1.93.2: + resolution: {integrity: sha512-N3+D/ToHtzwLDO+lSH05Wo6/KRxFBPnbjVHASOlHzqJnK+g5cqex7IFAp6ozzlRStySk61Rp6d+YGrqZ6/P0PA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.93.0: - resolution: {integrity: sha512-VH0zFGqsTy+lThHAm3y8Dpd/X4nC5DLJvk66+mJTg7rwblRhfPpsVO6n8QHeN5ZV1ATTnLh/PbZ7uEPiyAg2wg==} + sass-embedded-linux-musl-arm64@1.93.2: + resolution: {integrity: sha512-+3EHuDPkMiAX5kytsjEC1bKZCawB9J6pm2eBIzzLMPWbf5xdx++vO1DpT7hD4bm4ZGn0eVHgSOKIfP6CVz6tVg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.93.0: - resolution: {integrity: sha512-mMGAy+2VLLTMDPDG/mfzMmoy09potXp/ZRPRsyJEYVjF0rQij6Iss3qsZbCjVJa4atLwBtPJ14M0NvqpAa2WIg==} + sass-embedded-linux-musl-arm@1.93.2: + resolution: {integrity: sha512-XBTvx66yRenvEsp3VaJCb3HQSyqCsUh7R+pbxcN5TuzueybZi0LXvn9zneksdXcmjACMlMpIVXi6LyHPQkYc8A==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.93.0: - resolution: {integrity: sha512-/a+MvExFEKvwPXyZsQ8b1DWYJMpTnXSdwpe9pDNkdTIcliMAtP952krCx14nBP0UqqNoU/TetyMR8H0WwyeJEA==} + sass-embedded-linux-musl-riscv64@1.93.2: + resolution: {integrity: sha512-0sB5kmVZDKTYzmCSlTUnjh6mzOhzmQiW/NNI5g8JS4JiHw2sDNTvt1dsFTuqFkUHyEOY3ESTsfHHBQV8Ip4bEA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.93.0: - resolution: {integrity: sha512-o168nV9QI5U+2LFBMmMecWzu6yJ7WJZZfQGlo4Frvg9vC3Em3W02GfAel+g9leJg+0PDnpJLqOsPdrngg25T/Q==} + sass-embedded-linux-musl-x64@1.93.2: + resolution: {integrity: sha512-t3ejQ+1LEVuHy7JHBI2tWHhoMfhedUNDjGJR2FKaLgrtJntGnyD1RyX0xb3nuqL/UXiEAtmTmZY+Uh3SLUe1Hg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.93.0: - resolution: {integrity: sha512-KYHED49coJQT633cBbqBfBOPmRe3yNbE+D2kqMONADBqzGyxHZpQRStCenhPmDabVLI4fgc3fn//6ubqH724jA==} + sass-embedded-linux-riscv64@1.93.2: + resolution: {integrity: sha512-e7AndEwAbFtXaLy6on4BfNGTr3wtGZQmypUgYpSNVcYDO+CWxatKVY4cxbehMPhxG9g5ru+eaMfynvhZt7fLaA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.93.0: - resolution: {integrity: sha512-9OD9OlZ61dmz/BbW4n29l3v74//ibiQCmWu8YBoXVgxxgcbi+2CFv+vRE8guA73BgEdPComw0tpgD1FkW3v12g==} + sass-embedded-linux-x64@1.93.2: + resolution: {integrity: sha512-U3EIUZQL11DU0xDDHXexd4PYPHQaSQa2hzc4EzmhHqrAj+TyfYO94htjWOd+DdTPtSwmLp+9cTWwPZBODzC96w==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.93.0: - resolution: {integrity: sha512-Hh9OPBMg+i1g8OzQyOtQuJg/3ncup4Z+FHdXNzPIeFXcIeS+TVuVQyvJfnB+hYgvVGyBJ+9ekuUYzB+1zA82nw==} + sass-embedded-unknown-all@1.93.2: + resolution: {integrity: sha512-7VnaOmyewcXohiuoFagJ3SK5ddP9yXpU0rzz+pZQmS1/+5O6vzyFCUoEt3HDRaLctH4GT3nUGoK1jg0ae62IfQ==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.93.0: - resolution: {integrity: sha512-3SNRTxBVk+c0Oyd4gCp4/KAQ+S6B9S5ihq5dxMMfWpvoQSUqn6mqhkEFrofG1oNlP7KsA2UzhTnFGDRid1An+A==} + sass-embedded-win32-arm64@1.93.2: + resolution: {integrity: sha512-Y90DZDbQvtv4Bt0GTXKlcT9pn4pz8AObEjFF8eyul+/boXwyptPZ/A1EyziAeNaIEIfxyy87z78PUgCeGHsx3Q==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.93.0: - resolution: {integrity: sha512-6/RJGOdm3bwe71YJaYanQ81I6KA//T/a+MnKlRpP5zk5fy2ygAIGNeNr2ENEBu/KZCuFg7KY49g46v+hPKT6Ow==} + sass-embedded-win32-x64@1.93.2: + resolution: {integrity: sha512-BbSucRP6PVRZGIwlEBkp+6VQl2GWdkWFMN+9EuOTPrLxCJZoq+yhzmbjspd3PeM8+7WJ7AdFu/uRYdO8tor1iQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.93.0: - resolution: {integrity: sha512-dQACVfrbwKtvnrA0xH67YAdUYi6k7XcPg8uNF3DPf/VaJMQzduE1z5w3NFa9oVjtqXM4+FA9P7Qdv06Bzf614g==} + sass-embedded@1.93.2: + resolution: {integrity: sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.93.0: - resolution: {integrity: sha512-CQi5/AzCwiubU3dSqRDJ93RfOfg/hhpW1l6wCIvolmehfwgCI35R/0QDs1+R+Ygrl8jFawwwIojE2w47/mf94A==} + sass@1.93.2: + resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} engines: {node: '>=14.0.0'} hasBin: true @@ -6499,10 +6533,6 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - slice-ansi@7.1.0: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} @@ -6582,6 +6612,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -6641,52 +6675,40 @@ packages: postcss-html: ^1.0.0 stylelint: '>=14.0.0' - stylelint-config-recommended-scss@15.0.1: - resolution: {integrity: sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==} + stylelint-config-recommended-scss@16.0.2: + resolution: {integrity: sha512-aUTHhPPWCvFyWaxtckJlCPaXTDFsp4pKO8evXNCsW9OwsaUWyMd6jvcUhSmfGWPrTddvzNqK4rS/UuSLcbVGdQ==} engines: {node: '>=20'} peerDependencies: postcss: ^8.3.3 - stylelint: ^16.16.0 + stylelint: ^16.24.0 peerDependenciesMeta: postcss: optional: true - stylelint-config-recommended@16.0.0: - resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==} - engines: {node: '>=18.12.0'} - peerDependencies: - stylelint: ^16.16.0 - stylelint-config-recommended@17.0.0: resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.23.0 - stylelint-config-standard-scss@15.0.1: - resolution: {integrity: sha512-8pmmfutrMlPHukLp+Th9asmk21tBXMVGxskZCzkRVWt1d8Z0SrXjUUQ3vn9KcBj1bJRd5msk6yfEFM0UYHBRdg==} + stylelint-config-standard-scss@16.0.0: + resolution: {integrity: sha512-/FHECLUu+med/e6OaPFpprG86ShC4SYT7Tzb2PTVdDjJsehhFBOioSlWqYFqJxmGPIwO3AMBxNo+kY3dxrbczA==} engines: {node: '>=20'} peerDependencies: postcss: ^8.3.3 - stylelint: ^16.18.0 + stylelint: ^16.23.1 peerDependenciesMeta: postcss: optional: true - stylelint-config-standard@38.0.0: - resolution: {integrity: sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==} - engines: {node: '>=18.12.0'} - peerDependencies: - stylelint: ^16.18.0 - stylelint-config-standard@39.0.0: resolution: {integrity: sha512-JabShWORb8Bmc1A47ZyJstran60P3yUdI1zWMpGYPeFiC6xzHXJMkpKAd8EjIhq3HPUplIWWMDJ/xu0AiPd+kA==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.23.0 - stylelint-define-config@16.22.0: - resolution: {integrity: sha512-EEgHRugsryKo7LpenYyd4yLoZon3lHvRAi7WsMaZoRX9GPOkeDXrMga+N4VA4nK4Zus02EQwyYkndNQ64jaB2A==} + stylelint-define-config@16.24.0: + resolution: {integrity: sha512-QktXPtFnT7EQNVOTNA0Rju1lVM0wHWkYvXTLFWpA832vS+EUsDf9ay6GBMjm9MQ0ocPRJBU+apyJetCbsMcj8A==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} peerDependencies: stylelint: '>=16.0.0' @@ -6703,8 +6725,8 @@ packages: peerDependencies: stylelint: ^16.0.2 - stylelint@16.24.0: - resolution: {integrity: sha512-7ksgz3zJaSbTUGr/ujMXvLVKdDhLbGl3R/3arNudH7z88+XZZGNLMTepsY28WlnvEFcuOmUe7fg40Q3lfhOfSQ==} + stylelint@16.25.0: + resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==} engines: {node: '>=18.12.0'} hasBin: true @@ -6823,8 +6845,8 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - tm-grammars@1.24.12: - resolution: {integrity: sha512-p7U/SQtyw5Ae9gBZYubEt5zOS0g8peGpyEF8bFnV4N+tb3YOJApDHpWhWvPtasQtGRHyNDa87qzlLSnsPQ+jmw==} + tm-grammars@1.24.16: + resolution: {integrity: sha512-zbT9/jJYh8DJ0NnZJe7P2Egf9Nd6m7dfNDOBYGLLrcWSUwGQ7DqbOterJ5zeU0fE/2AuF/k2NPkRuYwHPmjwcg==} tm-themes@1.10.9: resolution: {integrity: sha512-2pBK8ZHXFibHOoKmi1aE2VF1ISsMpqTU+RS3+YS8LGNEm4WSkmnDqdylbtsmZIfFTxy/8KbsiBKbrmnHYVTZFw==} @@ -6881,8 +6903,8 @@ packages: tsconfig-vuepress@7.0.0: resolution: {integrity: sha512-P3EoKacv1UWp5X30/huXjxUinnj8rl4FcTS29nW4TANflkvoh7JDDiXp2c/Tmcy7Ex4N+3exjr/BjPn7Jadnew==} - tsdown@0.15.3: - resolution: {integrity: sha512-51p2z1F3GBAG9+9J+BNo6rYCvajZ9TAGtFMq/hCwjhvxFbzJ/Py4SHmLNltbraR4QFepW694cZwab33Nb7H2Ew==} + tsdown@0.15.6: + resolution: {integrity: sha512-W6++O3JeV9gm3JY6P/vLiC7zzTcJbZhQxXb+p3AvRMpDOPBIg82yXULyZCcwjsihY/bFG+Qw37HkezZbP7fzUg==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: @@ -6930,6 +6952,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@4.2.0: + resolution: {integrity: sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==} + engines: {node: '>=16'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -6950,8 +6976,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -6977,12 +7003,12 @@ packages: unconfig@7.3.3: resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==} - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - undici-types@7.12.0: resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici@6.21.3: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} engines: {node: '>=18.17'} @@ -7085,7 +7111,7 @@ packages: less: ^4.0.0 lightningcss: ^1.21.0 sass: ^1.70.0 - sass-embedded: ^1.93.0 + sass-embedded: ^1.93.2 stylus: '>=0.54.8' sugarss: ^5.0.0 terser: ^5.16.0 @@ -7125,7 +7151,7 @@ packages: less: ^4.0.0 lightningcss: ^1.21.0 sass: ^1.70.0 - sass-embedded: ^1.93.0 + sass-embedded: ^1.93.2 stylus: '>=0.54.8' sugarss: ^5.0.0 terser: ^5.16.0 @@ -7225,8 +7251,8 @@ packages: peerDependencies: vue: ^3.2.0 - vue@3.5.21: - resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} + vue@3.5.22: + resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -7247,8 +7273,8 @@ packages: '@vuepress/bundler-webpack': optional: true - wait-on@9.0.0: - resolution: {integrity: sha512-bKOl7CJ4zGhKW4qvoasLM5t2NtLUcc1Ar2N6XeYCQpW0w+DMdLC0YH1JUH3bTWDCsHblapHMzhtFmmPc+ITNJw==} + wait-on@9.0.1: + resolution: {integrity: sha512-noeCAI+XbqWMXY23sKril0BSURhuLYarkVXwJv1uUWwoojZJE7pmX3vJ7kh7SZaNgPGzfsCSQIZM/AGvu0Q9pA==} engines: {node: '>=20.0.0'} hasBin: true @@ -7515,7 +7541,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.3.0 + package-manager-detector: 1.4.0 tinyexec: 1.0.1 '@antfu/utils@9.2.0': {} @@ -7605,10 +7631,6 @@ snapshots: dependencies: '@babel/types': 7.28.2 - '@babel/parser@7.28.3': - dependencies: - '@babel/types': 7.28.2 - '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 @@ -7675,66 +7697,92 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@commitlint/cli@19.8.1(@types/node@24.5.2)(typescript@5.9.2)': + '@commitlint/cli@20.1.0(@types/node@24.7.0)(typescript@5.9.3)': dependencies: - '@commitlint/format': 19.8.1 - '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@24.5.2)(typescript@5.9.2) - '@commitlint/read': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/format': 20.0.0 + '@commitlint/lint': 20.0.0 + '@commitlint/load': 20.1.0(@types/node@24.7.0)(typescript@5.9.3) + '@commitlint/read': 20.0.0 + '@commitlint/types': 20.0.0 tinyexec: 1.0.1 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/config-conventional@19.8.1': + '@commitlint/config-conventional@20.0.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.0.0 conventional-changelog-conventionalcommits: 7.0.2 '@commitlint/config-validator@19.8.1': dependencies: '@commitlint/types': 19.8.1 ajv: 8.17.1 + optional: true - '@commitlint/ensure@19.8.1': + '@commitlint/config-validator@20.0.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.0.0 + ajv: 8.17.1 + + '@commitlint/ensure@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@19.8.1': {} + '@commitlint/execute-rule@19.8.1': + optional: true - '@commitlint/format@19.8.1': - dependencies: - '@commitlint/types': 19.8.1 - chalk: 5.5.0 + '@commitlint/execute-rule@20.0.0': {} - '@commitlint/is-ignored@19.8.1': + '@commitlint/format@20.0.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.0.0 + chalk: 5.6.0 + + '@commitlint/is-ignored@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 semver: 7.7.2 - '@commitlint/lint@19.8.1': + '@commitlint/lint@20.0.0': dependencies: - '@commitlint/is-ignored': 19.8.1 - '@commitlint/parse': 19.8.1 - '@commitlint/rules': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/is-ignored': 20.0.0 + '@commitlint/parse': 20.0.0 + '@commitlint/rules': 20.0.0 + '@commitlint/types': 20.0.0 - '@commitlint/load@19.8.1(@types/node@24.5.2)(typescript@5.9.2)': + '@commitlint/load@19.8.1(@types/node@24.7.0)(typescript@5.9.3)': dependencies: '@commitlint/config-validator': 19.8.1 '@commitlint/execute-rule': 19.8.1 '@commitlint/resolve-extends': 19.8.1 '@commitlint/types': 19.8.1 chalk: 5.5.0 - cosmiconfig: 9.0.0(typescript@5.9.2) - cosmiconfig-typescript-loader: 6.1.0(@types/node@24.5.2)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.7.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + optional: true + + '@commitlint/load@20.1.0(@types/node@24.7.0)(typescript@5.9.3)': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.1.0 + '@commitlint/types': 20.0.0 + chalk: 5.6.0 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.7.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -7742,18 +7790,18 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@19.8.1': {} + '@commitlint/message@20.0.0': {} - '@commitlint/parse@19.8.1': + '@commitlint/parse@20.0.0': dependencies: - '@commitlint/types': 19.8.1 + '@commitlint/types': 20.0.0 conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.8.1': + '@commitlint/read@20.0.0': dependencies: - '@commitlint/top-level': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/top-level': 20.0.0 + '@commitlint/types': 20.0.0 git-raw-commits: 4.0.0 minimist: 1.2.8 tinyexec: 1.0.1 @@ -7766,17 +7814,27 @@ snapshots: import-meta-resolve: 4.1.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 + optional: true - '@commitlint/rules@19.8.1': + '@commitlint/resolve-extends@20.1.0': dependencies: - '@commitlint/ensure': 19.8.1 - '@commitlint/message': 19.8.1 - '@commitlint/to-lines': 19.8.1 - '@commitlint/types': 19.8.1 + '@commitlint/config-validator': 20.0.0 + '@commitlint/types': 20.0.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 - '@commitlint/to-lines@19.8.1': {} + '@commitlint/rules@20.0.0': + dependencies: + '@commitlint/ensure': 20.0.0 + '@commitlint/message': 20.0.0 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.0.0 - '@commitlint/top-level@19.8.1': + '@commitlint/to-lines@20.0.0': {} + + '@commitlint/top-level@20.0.0': dependencies: find-up: 7.0.0 @@ -7784,6 +7842,12 @@ snapshots: dependencies: '@types/conventional-commits-parser': 5.0.1 chalk: 5.5.0 + optional: true + + '@commitlint/types@20.0.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.6.0 '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': dependencies: @@ -7832,7 +7896,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@dual-bundle/import-meta-resolve@4.1.0': {} + '@dual-bundle/import-meta-resolve@4.2.1': {} '@emnapi/core@1.5.0': dependencies: @@ -7853,18 +7917,18 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/types': 8.44.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@es-joy/jsdoccomment@0.53.0': + '@es-joy/jsdoccomment@0.68.1': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/types': 8.45.0 comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.8.0 + jsdoc-type-pratt-parser: 6.3.3 '@esbuild/aix-ppc64@0.25.10': optional: true @@ -7944,46 +8008,47 @@ snapshots: '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.36.0(jiti@2.5.1))': + '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.37.0(jiti@2.5.1))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) ignore: 5.3.2 - '@eslint-community/eslint-utils@4.7.0(eslint@9.36.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.5.1))': dependencies: - eslint: 9.36.0(jiti@2.5.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.5.1))': - dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.3.2(eslint@9.36.0(jiti@2.5.1))': + '@eslint/compat@1.3.2(eslint@9.37.0(jiti@2.5.1))': optionalDependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -7994,9 +8059,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.36.0': {} + '@eslint/js@9.37.0': {} - '@eslint/markdown@7.2.0': + '@eslint/markdown@7.3.0': dependencies: '@eslint/core': 0.15.2 '@eslint/plugin-kit': 0.3.5 @@ -8017,6 +8082,11 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 @@ -8062,10 +8132,10 @@ snapshots: '@hutson/parse-repository-url@5.0.0': {} - '@iconify/json@2.2.386': + '@iconify/json@2.2.392': dependencies: '@iconify/types': 2.0.0 - pathe: 1.1.2 + pathe: 2.0.3 '@iconify/types@2.0.0': {} @@ -8095,10 +8165,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/vue@5.0.0(vue@3.5.21(typescript@5.9.2))': + '@iconify/vue@5.0.0(vue@3.5.22(typescript@5.9.3))': dependencies: '@iconify/types': 2.0.0 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) '@isaacs/balanced-match@4.0.1': {} @@ -8286,13 +8356,13 @@ snapshots: optionalDependencies: markdown-it: 14.1.0 - '@mdit/plugin-katex-slim@0.23.1(katex@0.16.22)(markdown-it@14.1.0)': + '@mdit/plugin-katex-slim@0.23.1(katex@0.16.23)(markdown-it@14.1.0)': dependencies: '@mdit/helper': 0.22.1(markdown-it@14.1.0) '@mdit/plugin-tex': 0.22.1(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 optionalDependencies: - katex: 0.16.22 + katex: 0.16.23 markdown-it: 14.1.0 '@mdit/plugin-mark@0.22.1(markdown-it@14.1.0)': @@ -8361,7 +8431,7 @@ snapshots: dependencies: langium: 3.3.1 - '@napi-rs/wasm-runtime@1.0.5': + '@napi-rs/wasm-runtime@1.0.6': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 @@ -8380,7 +8450,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@oxc-project/types@0.89.0': {} + '@oxc-project/types@0.94.0': {} '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -8443,18 +8513,19 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.1 optional: true - '@pengzhanbo/eslint-config-vue@1.37.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))': + '@pengzhanbo/eslint-config-vue@1.38.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))': dependencies: - '@pengzhanbo/eslint-config': 1.37.0(eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))))(eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.36.0(jiti@2.5.1)))(eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))) - eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))) - eslint-plugin-vuejs-accessibility: 2.4.1(eslint@9.36.0(jiti@2.5.1)) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)) - vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1)) + '@pengzhanbo/eslint-config': 1.38.0(eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))))(eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.37.0(jiti@2.5.1)))(eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1)))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))) + eslint: 9.37.0(jiti@2.5.1) + eslint-plugin-vue: 10.5.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))) + eslint-plugin-vuejs-accessibility: 2.4.1(eslint@9.37.0(jiti@2.5.1)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1)) + vue-eslint-parser: 10.2.0(eslint@9.37.0(jiti@2.5.1)) transitivePeerDependencies: - '@eslint-react/eslint-plugin' - '@eslint/json' - '@next/eslint-plugin-next' + - '@stylistic/eslint-plugin' - '@typescript-eslint/parser' - '@vue/compiler-sfc' - astro-eslint-parser @@ -8470,67 +8541,67 @@ snapshots: - typescript - vitest - '@pengzhanbo/eslint-config@1.37.0(eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))))(eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.36.0(jiti@2.5.1)))(eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)))': + '@pengzhanbo/eslint-config@1.38.0(eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))))(eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.37.0(jiti@2.5.1)))(eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1)))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1)))': dependencies: '@antfu/install-pkg': 1.1.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.36.0(jiti@2.5.1)) - '@eslint/markdown': 7.2.0 - '@stylistic/eslint-plugin': 5.2.3(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@vitest/eslint-plugin': 1.3.8(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1)) - eslint: 9.36.0(jiti@2.5.1) - eslint-config-flat-gitignore: 2.1.0(eslint@9.36.0(jiti@2.5.1)) - eslint-flat-config-utils: 2.1.1 - eslint-merge-processors: 2.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-antfu: 3.1.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-command: 3.3.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-lite: 0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-jsdoc: 54.3.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-jsonc: 2.20.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-n: 17.21.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.37.0(jiti@2.5.1)) + '@eslint/markdown': 7.3.0 + '@stylistic/eslint-plugin': 5.4.0(eslint@9.37.0(jiti@2.5.1)) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + '@vitest/eslint-plugin': 1.3.15(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1)) + eslint: 9.37.0(jiti@2.5.1) + eslint-config-flat-gitignore: 2.1.0(eslint@9.37.0(jiti@2.5.1)) + eslint-flat-config-utils: 2.1.4 + eslint-merge-processors: 2.0.0(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-antfu: 3.1.1(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-command: 3.3.1(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-import-lite: 0.3.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + eslint-plugin-jsdoc: 60.8.1(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-jsonc: 2.21.0(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-n: 17.23.1(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint-plugin-pnpm: 1.1.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-regexp: 2.10.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-toml: 0.12.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-unicorn: 60.0.0(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-unused-imports: 4.2.0(@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-vuejs-accessibility: 2.4.1(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-yml: 1.18.0(eslint@9.36.0(jiti@2.5.1)) - globals: 16.3.0 - jsonc-eslint-parser: 2.4.0 + eslint-plugin-perfectionist: 4.15.1(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + eslint-plugin-pnpm: 1.2.0(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-regexp: 2.10.0(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-toml: 0.12.0(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-unicorn: 61.0.2(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-unused-imports: 4.2.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-vuejs-accessibility: 2.4.1(eslint@9.37.0(jiti@2.5.1)) + eslint-plugin-yml: 1.19.0(eslint@9.37.0(jiti@2.5.1)) + globals: 16.4.0 + jsonc-eslint-parser: 2.4.1 local-pkg: 1.1.2 parse-gitignore: 2.0.0 toml-eslint-parser: 0.10.0 yaml-eslint-parser: 1.3.0 optionalDependencies: - eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)) - vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-vue: 10.5.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1)) + vue-eslint-parser: 10.2.0(eslint@9.37.0(jiti@2.5.1)) transitivePeerDependencies: - '@eslint/json' - supports-color - typescript - vitest - '@pengzhanbo/stylelint-config@1.37.0(stylelint@16.24.0(typescript@5.9.2))': + '@pengzhanbo/stylelint-config@1.38.0(stylelint@16.25.0(typescript@5.9.3))': dependencies: '@pengzhanbo/utils': 2.1.0 - '@stylelint-types/stylelint-order': 7.0.0(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2)) - '@stylelint-types/stylelint-scss': 6.11.0(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2)) - '@stylelint-types/stylelint-stylistic': 3.1.3(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2)) - '@stylistic/stylelint-plugin': 4.0.0(stylelint@16.24.0(typescript@5.9.2)) + '@stylelint-types/stylelint-order': 7.0.0(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3)) + '@stylelint-types/stylelint-scss': 6.11.0(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3)) + '@stylelint-types/stylelint-stylistic': 3.1.3(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3)) + '@stylistic/stylelint-plugin': 4.0.0(stylelint@16.25.0(typescript@5.9.3)) local-pkg: 1.1.2 postcss: 8.5.6 postcss-html: 1.8.0 - stylelint: 16.24.0(typescript@5.9.2) - stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.9.2)) - stylelint-config-standard: 39.0.0(stylelint@16.24.0(typescript@5.9.2)) - stylelint-config-standard-scss: 15.0.1(postcss@8.5.6)(stylelint@16.24.0(typescript@5.9.2)) - stylelint-define-config: 16.22.0(stylelint@16.24.0(typescript@5.9.2)) - stylelint-order: 7.0.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-standard: 39.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-standard-scss: 16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-define-config: 16.24.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint-order: 7.0.0(stylelint@16.25.0(typescript@5.9.3)) '@pengzhanbo/utils@2.1.0': {} @@ -8543,53 +8614,53 @@ snapshots: dependencies: quansync: 0.2.11 - '@rolldown/binding-android-arm64@1.0.0-beta.38': + '@rolldown/binding-android-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.38': + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.38': + '@rolldown/binding-darwin-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.38': + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.38': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.38': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.38': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.38': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.38': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.38': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.38': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': dependencies: - '@napi-rs/wasm-runtime': 1.0.5 + '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.38': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.38': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.38': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': optional: true '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rolldown/pluginutils@1.0.0-beta.38': {} + '@rolldown/pluginutils@1.0.0-beta.42': {} '@rollup/rollup-android-arm-eabi@4.46.2': optional: true @@ -8715,12 +8786,12 @@ snapshots: '@shikijs/core': 3.9.2 '@shikijs/types': 3.9.2 - '@shikijs/twoslash@3.9.2(typescript@5.9.2)': + '@shikijs/twoslash@3.9.2(typescript@5.9.3)': dependencies: '@shikijs/core': 3.9.2 '@shikijs/types': 3.9.2 - twoslash: 0.3.3(typescript@5.9.2) - typescript: 5.9.2 + twoslash: 0.3.3(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8750,35 +8821,35 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@stylelint-types/stylelint-order@7.0.0(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2))': + '@stylelint-types/stylelint-order@7.0.0(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3))': dependencies: - stylelint-define-config: 16.22.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint-define-config: 16.24.0(stylelint@16.25.0(typescript@5.9.3)) optionalDependencies: - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - '@stylelint-types/stylelint-scss@6.11.0(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2))': + '@stylelint-types/stylelint-scss@6.11.0(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3))': dependencies: - stylelint-define-config: 16.22.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint-define-config: 16.24.0(stylelint@16.25.0(typescript@5.9.3)) optionalDependencies: - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - '@stylelint-types/stylelint-stylistic@3.1.3(stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)))(stylelint@16.24.0(typescript@5.9.2))': + '@stylelint-types/stylelint-stylistic@3.1.3(stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3))': dependencies: - stylelint-define-config: 16.22.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint-define-config: 16.24.0(stylelint@16.25.0(typescript@5.9.3)) optionalDependencies: - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - '@stylistic/eslint-plugin@5.2.3(eslint@9.36.0(jiti@2.5.1))': + '@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1))': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/types': 8.40.0 - eslint: 9.36.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) + '@typescript-eslint/types': 8.44.1 + eslint: 9.37.0(jiti@2.5.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.3 - '@stylistic/stylelint-plugin@4.0.0(stylelint@16.24.0(typescript@5.9.2))': + '@stylistic/stylelint-plugin@4.0.0(stylelint@16.25.0(typescript@5.9.3))': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 @@ -8787,7 +8858,7 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 style-search: 0.1.0 - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) '@svta/common-media-library@0.12.4': {} @@ -8799,7 +8870,7 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/chai@5.2.2': dependencies: @@ -8807,11 +8878,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 24.5.2 + '@types/node': 24.7.0 '@types/d3-array@3.2.1': {} @@ -8940,7 +9011,7 @@ snapshots: '@types/express-serve-static-core@5.0.7': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -8954,7 +9025,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/geojson@7946.0.16': {} @@ -8972,7 +9043,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/less@3.0.8': {} @@ -9007,16 +9078,18 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@24.3.1': - dependencies: - undici-types: 7.10.0 - '@types/node@24.5.2': dependencies: undici-types: 7.12.0 + '@types/node@24.7.0': + dependencies: + undici-types: 7.14.0 + '@types/normalize-package-data@2.4.4': {} + '@types/picomatch@4.0.2': {} + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -9025,24 +9098,24 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/semver@7.7.0': {} '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.3.1 + '@types/node': 24.5.2 '@types/send': 0.17.5 '@types/stylus@0.48.43': dependencies: - '@types/node': 24.5.2 + '@types/node': 24.7.0 '@types/trusted-types@2.0.7': {} @@ -9052,158 +9125,168 @@ snapshots: '@types/webpack-env@1.18.8': {} - '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/type-utils': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 + eslint: 9.37.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1 - eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 + debug: 4.4.3 + eslint: 9.37.0(jiti@2.5.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 - debug: 4.4.1 - typescript: 5.9.2 + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) + '@typescript-eslint/types': 8.45.0 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.44.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) - '@typescript-eslint/types': 8.44.0 - debug: 4.4.1 - typescript: 5.9.2 + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.42.0': + '@typescript-eslint/scope-manager@8.44.1': dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 - '@typescript-eslint/scope-manager@8.44.0': + '@typescript-eslint/scope-manager@8.45.0': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': + '@typescript-eslint/scope-manager@8.46.0': dependencies: - typescript: 5.9.2 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 - '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1 - eslint: 9.36.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.37.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.40.0': {} + '@typescript-eslint/types@8.44.1': {} - '@typescript-eslint/types@8.42.0': {} + '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/types@8.44.0': {} + '@typescript-eslint/types@8.46.0': {} - '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 - debug: 4.4.1 + '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.44.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 - debug: 4.4.1 + '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) - typescript: 5.9.2 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + eslint: 9.37.0(jiti@2.5.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.42.0': + '@typescript-eslint/visitor-keys@8.44.1': dependencies: - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.44.0': + '@typescript-eslint/visitor-keys@8.45.0': dependencies: - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 - '@typescript/vfs@1.6.1(typescript@5.9.2)': + '@typescript-eslint/visitor-keys@8.46.0': + dependencies: + '@typescript-eslint/types': 8.46.0 + eslint-visitor-keys: 4.2.1 + + '@typescript/vfs@1.6.1(typescript@5.9.3)': dependencies: debug: 4.4.1 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@6.0.1(vite@7.0.6(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2))': + '@vitejs/plugin-vue@6.0.1(vite@7.0.6(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.0.6(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) - vue: 3.5.21(typescript@5.9.2) + vite: 7.0.6(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) + vue: 3.5.22(typescript@5.9.3) - '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))': + '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.1 @@ -9215,18 +9298,18 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.3.8(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))': + '@vitest/eslint-plugin@1.3.15(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))': dependencies: - '@typescript-eslint/scope-manager': 8.42.0 - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.5.1) optionalDependencies: - typescript: 5.9.2 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + typescript: 5.9.3 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -9238,13 +9321,13 @@ snapshots: chai: 5.2.1 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + vite: 7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -9290,10 +9373,10 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.21': + '@vue/compiler-core@3.5.22': dependencies: - '@babel/parser': 7.28.3 - '@vue/shared': 3.5.21 + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.22 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -9303,27 +9386,27 @@ snapshots: '@vue/compiler-core': 3.5.18 '@vue/shared': 3.5.18 - '@vue/compiler-dom@3.5.21': + '@vue/compiler-dom@3.5.22': dependencies: - '@vue/compiler-core': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 - '@vue/compiler-sfc@3.5.21': + '@vue/compiler-sfc@3.5.22': dependencies: - '@babel/parser': 7.28.3 - '@vue/compiler-core': 3.5.21 - '@vue/compiler-dom': 3.5.21 - '@vue/compiler-ssr': 3.5.21 - '@vue/shared': 3.5.21 + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 estree-walker: 2.0.2 - magic-string: 0.30.18 + magic-string: 0.30.19 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.21': + '@vue/compiler-ssr@3.5.22': dependencies: - '@vue/compiler-dom': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 '@vue/compiler-vue2@2.7.16': dependencies: @@ -9350,7 +9433,7 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@3.0.5(typescript@5.9.2)': + '@vue/language-core@3.0.5(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.22 '@vue/compiler-dom': 3.5.18 @@ -9361,40 +9444,40 @@ snapshots: path-browserify: 1.0.1 picomatch: 4.0.3 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@vue/reactivity@3.5.21': + '@vue/reactivity@3.5.22': dependencies: - '@vue/shared': 3.5.21 + '@vue/shared': 3.5.22 - '@vue/runtime-core@3.5.21': + '@vue/runtime-core@3.5.22': dependencies: - '@vue/reactivity': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/reactivity': 3.5.22 + '@vue/shared': 3.5.22 - '@vue/runtime-dom@3.5.21': + '@vue/runtime-dom@3.5.22': dependencies: - '@vue/reactivity': 3.5.21 - '@vue/runtime-core': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/reactivity': 3.5.22 + '@vue/runtime-core': 3.5.22 + '@vue/shared': 3.5.22 csstype: 3.1.3 - '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2))': + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.21 - '@vue/shared': 3.5.21 - vue: 3.5.21(typescript@5.9.2) + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + vue: 3.5.22(typescript@5.9.3) '@vue/shared@3.5.18': {} - '@vue/shared@3.5.21': {} + '@vue/shared@3.5.22': {} - '@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1)': + '@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1)': dependencies: - '@vitejs/plugin-vue': 6.0.1(vite@7.0.6(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)) - '@vuepress/bundlerutils': 2.0.0-rc.24(typescript@5.9.2) - '@vuepress/client': 2.0.0-rc.24(typescript@5.9.2) - '@vuepress/core': 2.0.0-rc.24(typescript@5.9.2) + '@vitejs/plugin-vue': 6.0.1(vite@7.0.6(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + '@vuepress/bundlerutils': 2.0.0-rc.24(typescript@5.9.3) + '@vuepress/client': 2.0.0-rc.24(typescript@5.9.3) + '@vuepress/core': 2.0.0-rc.24(typescript@5.9.3) '@vuepress/shared': 2.0.0-rc.24 '@vuepress/utils': 2.0.0-rc.24 autoprefixer: 10.4.21(postcss@8.5.6) @@ -9402,9 +9485,9 @@ snapshots: postcss: 8.5.6 postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1) rollup: 4.46.2 - vite: 7.0.6(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) - vue: 3.5.21(typescript@5.9.2) - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vite: 7.0.6(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) + vue: 3.5.22(typescript@5.9.3) + vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - jiti @@ -9420,21 +9503,21 @@ snapshots: - typescript - yaml - '@vuepress/bundlerutils@2.0.0-rc.24(typescript@5.9.2)': + '@vuepress/bundlerutils@2.0.0-rc.24(typescript@5.9.3)': dependencies: - '@vuepress/client': 2.0.0-rc.24(typescript@5.9.2) - '@vuepress/core': 2.0.0-rc.24(typescript@5.9.2) + '@vuepress/client': 2.0.0-rc.24(typescript@5.9.3) + '@vuepress/core': 2.0.0-rc.24(typescript@5.9.3) '@vuepress/shared': 2.0.0-rc.24 '@vuepress/utils': 2.0.0-rc.24 - vue: 3.5.21(typescript@5.9.2) - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - supports-color - typescript - '@vuepress/cli@2.0.0-rc.24(typescript@5.9.2)': + '@vuepress/cli@2.0.0-rc.24(typescript@5.9.3)': dependencies: - '@vuepress/core': 2.0.0-rc.24(typescript@5.9.2) + '@vuepress/core': 2.0.0-rc.24(typescript@5.9.3) '@vuepress/shared': 2.0.0-rc.24 '@vuepress/utils': 2.0.0-rc.24 cac: 6.7.14 @@ -9445,44 +9528,44 @@ snapshots: - supports-color - typescript - '@vuepress/client@2.0.0-rc.24(typescript@5.9.2)': + '@vuepress/client@2.0.0-rc.24(typescript@5.9.3)': dependencies: '@vue/devtools-api': 7.7.7 '@vue/devtools-kit': 7.7.7 '@vuepress/shared': 2.0.0-rc.24 - vue: 3.5.21(typescript@5.9.2) - vue-router: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vue-router: 4.5.1(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/core@2.0.0-rc.24(typescript@5.9.2)': + '@vuepress/core@2.0.0-rc.24(typescript@5.9.3)': dependencies: - '@vuepress/client': 2.0.0-rc.24(typescript@5.9.2) + '@vuepress/client': 2.0.0-rc.24(typescript@5.9.3) '@vuepress/markdown': 2.0.0-rc.24 '@vuepress/shared': 2.0.0-rc.24 '@vuepress/utils': 2.0.0-rc.24 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - '@vuepress/helper@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/helper@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@vue/shared': 3.5.18 - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) cheerio: 1.1.2 fflate: 0.8.2 gray-matter: 4.0.3 - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/highlighter-helper@2.0.0-rc.112(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/highlighter-helper@2.0.0-rc.112(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3)))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) optionalDependencies: - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) '@vuepress/markdown@2.0.0-rc.24': dependencies: @@ -9505,41 +9588,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@vuepress/plugin-cache@2.0.0-rc.112(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-cache@2.0.0-rc.112(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: ci-info: 4.3.0 - lru-cache: 11.1.0 - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + lru-cache: 11.2.1 + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) - '@vuepress/plugin-comment@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-comment@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) giscus: 1.6.0 - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-copy-code@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-copy-code@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-docsearch@2.0.0-rc.112(@algolia/client-search@5.35.0)(search-insights@2.17.3)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-docsearch@2.0.0-rc.112(@algolia/client-search@5.35.0)(search-insights@2.17.3)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@docsearch/css': 3.9.0 '@docsearch/js': 3.9.0(@algolia/client-search@5.35.0)(search-insights@2.17.3) '@docsearch/react': 3.9.0(@algolia/client-search@5.35.0)(search-insights@2.17.3) - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) ts-debounce: 4.0.0 - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -9548,42 +9631,42 @@ snapshots: - search-insights - typescript - '@vuepress/plugin-git@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-git@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) rehype-parse: 9.0.1 rehype-sanitize: 6.0.0 rehype-stringify: 10.0.1 unified: 11.0.5 - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-llms@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-llms@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) byte-size: 9.0.1 gray-matter: 4.0.3 millify: 6.1.0 remark: 15.0.1 tokenx: 1.1.0 unist-util-remove: 4.0.0 - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@75lb/nature' - supports-color - typescript - '@vuepress/plugin-markdown-chart@2.0.0-rc.112(chart.js@4.5.0)(flowchart.ts@3.0.1)(markdown-it@14.1.0)(markmap-lib@0.18.12(markmap-common@0.18.9))(markmap-toolbar@0.18.12(markmap-common@0.18.9))(markmap-view@0.18.12(markmap-common@0.18.9))(mermaid@11.12.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-markdown-chart@2.0.0-rc.112(chart.js@4.5.0)(flowchart.ts@3.0.1)(markdown-it@14.1.0)(markmap-lib@0.18.12(markmap-common@0.18.9))(markmap-toolbar@0.18.12(markmap-common@0.18.9))(markmap-view@0.18.12(markmap-common@0.18.9))(mermaid@11.12.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@mdit/plugin-container': 0.22.1(markdown-it@14.1.0) '@mdit/plugin-plantuml': 0.22.2(markdown-it@14.1.0) - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) optionalDependencies: chart.js: 4.5.0 flowchart.ts: 3.0.1 @@ -9595,128 +9678,128 @@ snapshots: - markdown-it - typescript - '@vuepress/plugin-markdown-hint@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-markdown-hint@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@mdit/plugin-alert': 0.22.2(markdown-it@14.1.0) '@mdit/plugin-container': 0.22.1(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - markdown-it - typescript - vue - '@vuepress/plugin-markdown-image@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-markdown-image@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@mdit/plugin-figure': 0.22.1(markdown-it@14.1.0) '@mdit/plugin-img-lazyload': 0.22.1(markdown-it@14.1.0) '@mdit/plugin-img-mark': 0.22.1(markdown-it@14.1.0) '@mdit/plugin-img-size': 0.22.2(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-include@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-markdown-include@2.0.0-rc.112(markdown-it@14.1.0)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@mdit/plugin-include': 0.22.1(markdown-it@14.1.0) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-markdown-math@2.0.0-rc.112(katex@0.16.22)(markdown-it@14.1.0)(mathjax-full@3.2.2)(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-markdown-math@2.0.0-rc.112(katex@0.16.23)(markdown-it@14.1.0)(mathjax-full@3.2.2)(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@mdit/plugin-katex-slim': 0.23.1(katex@0.16.22)(markdown-it@14.1.0) + '@mdit/plugin-katex-slim': 0.23.1(katex@0.16.23)(markdown-it@14.1.0) '@mdit/plugin-mathjax-slim': 0.23.1(markdown-it@14.1.0)(mathjax-full@3.2.2) '@types/markdown-it': 14.1.2 - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) optionalDependencies: - katex: 0.16.22 + katex: 0.16.23 mathjax-full: 3.2.2 transitivePeerDependencies: - markdown-it - typescript - '@vuepress/plugin-nprogress@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-nprogress@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-photo-swipe@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-photo-swipe@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) photoswipe: 5.4.4 - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-reading-time@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-reading-time@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-replace-assets@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-replace-assets@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) magic-string: 0.30.17 unplugin: 2.3.5 - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-seo@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-seo@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-shiki@2.0.0-rc.112(@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))))(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-shiki@2.0.0-rc.112(@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))))(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: '@shikijs/transformers': 3.9.2 - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vuepress/highlighter-helper': 2.0.0-rc.112(@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2)))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - nanoid: 5.1.5 + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vuepress/highlighter-helper': 2.0.0-rc.112(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3)))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + nanoid: 5.1.6 shiki: 3.12.2 synckit: 0.11.11 - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) optionalDependencies: - '@vuepress/shiki-twoslash': 2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + '@vuepress/shiki-twoslash': 2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) transitivePeerDependencies: - '@vueuse/core' - typescript - '@vuepress/plugin-sitemap@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-sitemap@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) sitemap: 8.0.0 - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - typescript - '@vuepress/plugin-watermark@2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/plugin-watermark@2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) watermark-js-plus: 1.6.3 transitivePeerDependencies: - typescript @@ -9725,17 +9808,17 @@ snapshots: dependencies: '@mdit-vue/types': 2.1.4 - '@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)))': + '@vuepress/shiki-twoslash@2.0.0-rc.112(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)))': dependencies: - '@shikijs/twoslash': 3.9.2(typescript@5.9.2) - '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.2)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) - floating-vue: 5.2.2(patch_hash=c8e9cd61468e959201bb251258241870423ca2ca7ae2e8a184210e0f20619fd5)(vue@3.5.21(typescript@5.9.2)) + '@shikijs/twoslash': 3.9.2(typescript@5.9.3) + '@vuepress/helper': 2.0.0-rc.112(typescript@5.9.3)(vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3))) + floating-vue: 5.2.2(patch_hash=c8e9cd61468e959201bb251258241870423ca2ca7ae2e8a184210e0f20619fd5)(vue@3.5.22(typescript@5.9.3)) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-to-hast: 13.2.0 - twoslash: 0.3.3(typescript@5.9.2) - twoslash-vue: 0.3.3(typescript@5.9.2) - vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + twoslash: 0.3.3(typescript@5.9.3) + twoslash-vue: 0.3.3(typescript@5.9.3) + vuepress: 2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - '@nuxt/kit' - supports-color @@ -9758,18 +9841,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@vueuse/core@13.9.0(vue@3.5.21(typescript@5.9.2))': + '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 13.9.0 - '@vueuse/shared': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) - '@vueuse/integrations@13.9.0(axios@1.12.2)(change-case@5.4.4)(focus-trap@7.6.5)(vue@3.5.21(typescript@5.9.2))': + '@vueuse/integrations@13.9.0(axios@1.12.2)(change-case@5.4.4)(focus-trap@7.6.5)(vue@3.5.22(typescript@5.9.3))': dependencies: - '@vueuse/core': 13.9.0(vue@3.5.21(typescript@5.9.2)) - '@vueuse/shared': 13.9.0(vue@3.5.21(typescript@5.9.2)) - vue: 3.5.21(typescript@5.9.2) + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) optionalDependencies: axios: 1.12.2 change-case: 5.4.4 @@ -9777,9 +9860,9 @@ snapshots: '@vueuse/metadata@13.9.0': {} - '@vueuse/shared@13.9.0(vue@3.5.21(typescript@5.9.2))': + '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.9.3))': dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) '@xmldom/xmldom@0.9.8': {} @@ -9851,7 +9934,7 @@ snapshots: ansi-styles@6.2.1: {} - ansis@4.1.0: {} + ansis@4.2.0: {} anymatch@3.1.3: dependencies: @@ -10033,11 +10116,11 @@ snapshots: builtin-modules@5.0.0: {} - bumpp@10.2.3(magicast@0.3.5): + bumpp@10.3.1(magicast@0.3.5): dependencies: - ansis: 4.1.0 + ansis: 4.2.0 args-tokenizer: 0.3.0 - c12: 3.2.0(magicast@0.3.5) + c12: 3.3.0(magicast@0.3.5) cac: 6.7.14 escalade: 3.2.0 jsonc-parser: 3.3.1 @@ -10051,19 +10134,19 @@ snapshots: byte-size@9.0.1: {} - c12@3.2.0(magicast@0.3.5): + c12@3.3.0(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.2.2 defu: 6.1.4 - dotenv: 17.2.1 + dotenv: 17.2.3 exsolve: 1.0.7 giget: 2.0.0 jiti: 2.5.1 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.2.0 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 rc9: 2.1.2 optionalDependencies: magicast: 0.3.5 @@ -10226,10 +10309,10 @@ snapshots: cli-spinners@2.9.2: {} - cli-truncate@4.0.0: + cli-truncate@5.1.0: dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + slice-ansi: 7.1.0 + string-width: 8.1.0 cli-width@3.0.0: {} @@ -10269,7 +10352,7 @@ snapshots: commander@13.1.0: {} - commander@14.0.0: {} + commander@14.0.1: {} commander@7.2.0: {} @@ -10277,10 +10360,10 @@ snapshots: comment-parser@1.4.1: {} - commitizen@4.3.1(@types/node@24.5.2)(typescript@5.9.2): + commitizen@4.3.1(@types/node@24.7.0)(typescript@5.9.3): dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@24.5.2)(typescript@5.9.2) + cz-conventional-changelog: 3.3.0(@types/node@24.7.0)(typescript@5.9.3) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -10434,21 +10517,21 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig-typescript-loader@6.1.0(@types/node@24.5.2)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2): + cosmiconfig-typescript-loader@6.1.0(@types/node@24.7.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): dependencies: - '@types/node': 24.5.2 - cosmiconfig: 9.0.0(typescript@5.9.2) + '@types/node': 24.7.0 + cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.5.1 - typescript: 5.9.2 + typescript: 5.9.3 - cosmiconfig@9.0.0(typescript@5.9.2): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 cpx2@8.0.0: dependencies: @@ -10468,10 +10551,6 @@ snapshots: transitivePeerDependencies: - supports-color - create-filter@1.1.0: - dependencies: - picomatch: 4.0.3 - cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 @@ -10515,16 +10594,16 @@ snapshots: cytoscape@3.33.0: {} - cz-conventional-changelog@3.3.0(@types/node@24.5.2)(typescript@5.9.2): + cz-conventional-changelog@3.3.0(@types/node@24.7.0)(typescript@5.9.3): dependencies: chalk: 2.4.2 - commitizen: 4.3.1(@types/node@24.5.2)(typescript@5.9.2) + commitizen: 4.3.1(@types/node@24.7.0)(typescript@5.9.3) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.8.1(@types/node@24.5.2)(typescript@5.9.2) + '@commitlint/load': 19.8.1(@types/node@24.7.0)(typescript@5.9.3) transitivePeerDependencies: - '@types/node' - typescript @@ -10799,6 +10878,8 @@ snapshots: dependencies: dequal: 2.0.3 + diff-sequences@27.5.1: {} + diff@8.0.2: {} dir-glob@3.0.1: @@ -10831,7 +10912,7 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@17.2.1: {} + dotenv@17.2.3: {} dts-resolver@2.1.2: {} @@ -11012,90 +11093,93 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.36.0(jiti@2.5.1)): + eslint-compat-utils@0.5.1(eslint@9.37.0(jiti@2.5.1)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) semver: 7.7.2 - eslint-compat-utils@0.6.5(eslint@9.36.0(jiti@2.5.1)): + eslint-compat-utils@0.6.5(eslint@9.37.0(jiti@2.5.1)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) semver: 7.7.2 - eslint-config-flat-gitignore@2.1.0(eslint@9.36.0(jiti@2.5.1)): + eslint-config-flat-gitignore@2.1.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@eslint/compat': 1.3.2(eslint@9.36.0(jiti@2.5.1)) - eslint: 9.36.0(jiti@2.5.1) + '@eslint/compat': 1.3.2(eslint@9.37.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) - eslint-flat-config-utils@2.1.1: + eslint-flat-config-utils@2.1.4: dependencies: pathe: 2.0.3 - eslint-json-compat-utils@0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.37.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) esquery: 1.6.0 - jsonc-eslint-parser: 2.4.0 + jsonc-eslint-parser: 2.4.1 - eslint-merge-processors@2.0.0(eslint@9.36.0(jiti@2.5.1)): + eslint-merge-processors@2.0.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) - eslint-plugin-antfu@3.1.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-antfu@3.1.1(eslint@9.37.0(jiti@2.5.1)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) - eslint-plugin-command@3.3.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-command@3.3.1(eslint@9.37.0(jiti@2.5.1)): dependencies: '@es-joy/jsdoccomment': 0.50.2 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) - eslint-plugin-es-x@7.8.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.5.1(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.37.0(jiti@2.5.1)) - eslint-plugin-import-lite@0.3.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-import-lite@0.3.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/types': 8.40.0 - eslint: 9.36.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) + '@typescript-eslint/types': 8.44.1 + eslint: 9.37.0(jiti@2.5.1) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - eslint-plugin-jsdoc@54.3.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsdoc@60.8.1(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@es-joy/jsdoccomment': 0.53.0 + '@es-joy/jsdoccomment': 0.68.1 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) espree: 10.4.0 esquery: 1.6.0 + html-entities: 2.6.0 + object-deep-merge: 1.0.5 parse-imports-exports: 0.2.4 semver: 7.7.2 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.20.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsonc@2.21.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) - eslint-json-compat-utils: 0.2.1(eslint@9.36.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) + diff-sequences: 27.5.1 + eslint: 9.37.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.5.1)) + eslint-json-compat-utils: 0.2.1(eslint@9.37.0(jiti@2.5.1))(jsonc-eslint-parser@2.4.1) espree: 10.4.0 graphemer: 1.4.0 - jsonc-eslint-parser: 2.4.0 + jsonc-eslint-parser: 2.4.1 natural-compare: 1.4.0 synckit: 0.11.11 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.37.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -11105,7 +11189,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -11114,77 +11198,77 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-n@17.21.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-n@17.23.1(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) enhanced-resolve: 5.18.3 - eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-es-x: 7.8.0(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.37.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.2 - ts-declaration-location: 1.0.7(typescript@5.9.2) + ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@4.15.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-perfectionist@4.15.1(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.36.0(jiti@2.5.1) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-pnpm@1.1.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-pnpm@1.2.0(eslint@9.37.0(jiti@2.5.1)): dependencies: empathic: 2.0.0 - eslint: 9.36.0(jiti@2.5.1) - jsonc-eslint-parser: 2.4.0 + eslint: 9.37.0(jiti@2.5.1) + jsonc-eslint-parser: 2.4.1 pathe: 2.0.3 - pnpm-workspace-yaml: 1.1.1 + pnpm-workspace-yaml: 1.2.0 tinyglobby: 0.2.15 yaml-eslint-parser: 1.3.0 - eslint-plugin-regexp@2.10.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-regexp@2.10.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.36.0(jiti@2.5.1) - jsdoc-type-pratt-parser: 4.1.0 + eslint: 9.37.0(jiti@2.5.1) + jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-toml@0.12.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-toml@0.12.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - debug: 4.4.1 - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) + debug: 4.4.3 + eslint: 9.37.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.5.1)) lodash: 4.17.21 toml-eslint-parser: 0.10.0 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-unicorn@61.0.2(eslint@9.37.0(jiti@2.5.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.0 - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) esquery: 1.6.0 find-up-simple: 1.0.1 - globals: 16.3.0 + globals: 16.4.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -11194,49 +11278,51 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1)): dependencies: - eslint: 9.36.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.5.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) - eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1))): + eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.5.1)))(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1))): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.36.0(jiti@2.5.1)) - eslint: 9.36.0(jiti@2.5.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.2 - vue-eslint-parser: 10.2.0(eslint@9.36.0(jiti@2.5.1)) + vue-eslint-parser: 10.2.0(eslint@9.37.0(jiti@2.5.1)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.42.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@stylistic/eslint-plugin': 5.4.0(eslint@9.37.0(jiti@2.5.1)) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.5.1))(typescript@5.9.3) - eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-vuejs-accessibility@2.4.1(eslint@9.37.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 emoji-regex: 10.4.0 - eslint: 9.36.0(jiti@2.5.1) - vue-eslint-parser: 9.4.3(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) + vue-eslint-parser: 9.4.3(eslint@9.37.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.18.0(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-yml@1.19.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - debug: 4.4.1 + debug: 4.4.3 + diff-sequences: 27.5.1 escape-string-regexp: 4.0.0 - eslint: 9.36.0(jiti@2.5.1) - eslint-compat-utils: 0.6.5(eslint@9.36.0(jiti@2.5.1)) + eslint: 9.37.0(jiti@2.5.1) + eslint-compat-utils: 0.6.5(eslint@9.37.0(jiti@2.5.1)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.0 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.36.0(jiti@2.5.1)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.37.0(jiti@2.5.1)): dependencies: - '@vue/compiler-sfc': 3.5.21 - eslint: 9.36.0(jiti@2.5.1) + '@vue/compiler-sfc': 3.5.22 + eslint: 9.37.0(jiti@2.5.1) eslint-scope@7.2.2: dependencies: @@ -11252,16 +11338,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.36.0(jiti@2.5.1): + eslint@9.37.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 + '@eslint/config-helpers': 0.4.0 + '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.36.0 - '@eslint/plugin-kit': 0.3.5 + '@eslint/js': 9.37.0 + '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -11270,7 +11356,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -11448,11 +11534,11 @@ snapshots: flatted@3.3.3: {} - floating-vue@5.2.2(patch_hash=c8e9cd61468e959201bb251258241870423ca2ca7ae2e8a184210e0f20619fd5)(vue@3.5.21(typescript@5.9.2)): + floating-vue@5.2.2(patch_hash=c8e9cd61468e959201bb251258241870423ca2ca7ae2e8a184210e0f20619fd5)(vue@3.5.22(typescript@5.9.3)): dependencies: '@floating-ui/dom': 1.1.1 - vue: 3.5.21(typescript@5.9.2) - vue-resize: 2.0.0-alpha.1(vue@3.5.21(typescript@5.9.2)) + vue: 3.5.22(typescript@5.9.3) + vue-resize: 2.0.0-alpha.1(vue@3.5.22(typescript@5.9.3)) flowchart.ts@3.0.1: dependencies: @@ -11664,7 +11750,7 @@ snapshots: globals@15.15.0: {} - globals@16.3.0: {} + globals@16.4.0: {} globalthis@1.0.4: dependencies: @@ -11803,7 +11889,7 @@ snapshots: highlight.js@11.11.1: {} - hls.js@1.6.12: {} + hls.js@1.6.13: {} homedir-polyfill@1.0.3: dependencies: @@ -12033,8 +12119,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.3.0 @@ -12202,6 +12286,8 @@ snapshots: jsdoc-type-pratt-parser@4.8.0: {} + jsdoc-type-pratt-parser@6.3.3: {} + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -12218,7 +12304,7 @@ snapshots: json5@2.2.3: {} - jsonc-eslint-parser@2.4.0: + jsonc-eslint-parser@2.4.1: dependencies: acorn: 8.15.0 eslint-visitor-keys: 3.4.3 @@ -12246,6 +12332,10 @@ snapshots: dependencies: commander: 8.3.0 + katex@0.16.23: + dependencies: + commander: 8.3.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -12286,7 +12376,7 @@ snapshots: dependencies: invert-kv: 3.0.1 - less@4.4.1: + less@4.4.2: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 @@ -12317,24 +12407,19 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@16.1.6: + lint-staged@16.2.3: dependencies: - chalk: 5.6.0 - commander: 14.0.0 - debug: 4.4.1 - lilconfig: 3.1.3 - listr2: 9.0.3 + commander: 14.0.1 + listr2: 9.0.4 micromatch: 4.0.8 - nano-spawn: 1.0.2 + nano-spawn: 1.0.3 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.8.1 - transitivePeerDependencies: - - supports-color - listr2@9.0.3: + listr2@9.0.4: dependencies: - cli-truncate: 4.0.0 + cli-truncate: 5.1.0 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -12427,10 +12512,10 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} - lru-cache@11.2.1: {} + lru-cache@11.2.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -12439,10 +12524,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 - magic-string@0.30.18: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -12678,7 +12759,7 @@ snapshots: mdurl@2.0.0: {} - memfs@4.42.0: + memfs@4.49.0: dependencies: '@jsonjoy.com/json-pack': 1.11.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) @@ -12985,13 +13066,11 @@ snapshots: mute-stream@0.0.8: {} - nano-spawn@1.0.2: {} - nano-spawn@1.0.3: {} nanoid@3.3.11: {} - nanoid@5.1.5: {} + nanoid@5.1.6: {} nanopop@2.4.2: {} @@ -13035,9 +13114,13 @@ snapshots: citty: 0.1.6 consola: 3.4.2 pathe: 2.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 tinyexec: 1.0.1 + object-deep-merge@1.0.5: + dependencies: + type-fest: 4.2.0 + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -13160,6 +13243,8 @@ snapshots: package-manager-detector@1.3.0: {} + package-manager-detector@1.4.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -13223,21 +13308,21 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.1 minipass: 7.1.2 path-type@4.0.0: {} path-type@6.0.0: {} - pathe@1.1.2: {} - pathe@2.0.3: {} pathval@2.0.1: {} perfect-debounce@1.0.0: {} + perfect-debounce@2.0.0: {} + photoswipe@5.4.4: {} picocolors@1.1.1: {} @@ -13257,12 +13342,6 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - pkg-types@2.2.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -13271,7 +13350,7 @@ snapshots: pluralize@8.0.0: {} - pnpm-workspace-yaml@1.1.1: + pnpm-workspace-yaml@1.2.0: dependencies: yaml: 2.8.1 @@ -13361,7 +13440,7 @@ snapshots: punycode@2.3.1: {} - pyodide@0.28.2: + pyodide@0.28.3: dependencies: ws: 8.18.3 transitivePeerDependencies: @@ -13541,7 +13620,7 @@ snapshots: robust-predicates@3.0.2: {} - rolldown-plugin-dts@0.16.6(rolldown@1.0.0-beta.38)(typescript@5.9.2): + rolldown-plugin-dts@0.16.8(rolldown@1.0.0-beta.42)(typescript@5.9.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -13552,33 +13631,33 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.10.1 magic-string: 0.30.19 - rolldown: 1.0.0-beta.38 + rolldown: 1.0.0-beta.42 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.38: + rolldown@1.0.0-beta.42: dependencies: - '@oxc-project/types': 0.89.0 - '@rolldown/pluginutils': 1.0.0-beta.38 - ansis: 4.1.0 + '@oxc-project/types': 0.94.0 + '@rolldown/pluginutils': 1.0.0-beta.42 + ansis: 4.2.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.38 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.38 - '@rolldown/binding-darwin-x64': 1.0.0-beta.38 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.38 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.38 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.38 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.38 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.38 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.38 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.38 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.38 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.38 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.38 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.38 + '@rolldown/binding-android-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-x64': 1.0.0-beta.42 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.42 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 rollup@4.46.2: dependencies: @@ -13650,65 +13729,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.93.0: + sass-embedded-all-unknown@1.93.2: dependencies: - sass: 1.93.0 + sass: 1.93.2 optional: true - sass-embedded-android-arm64@1.93.0: + sass-embedded-android-arm64@1.93.2: optional: true - sass-embedded-android-arm@1.93.0: + sass-embedded-android-arm@1.93.2: optional: true - sass-embedded-android-riscv64@1.93.0: + sass-embedded-android-riscv64@1.93.2: optional: true - sass-embedded-android-x64@1.93.0: + sass-embedded-android-x64@1.93.2: optional: true - sass-embedded-darwin-arm64@1.93.0: + sass-embedded-darwin-arm64@1.93.2: optional: true - sass-embedded-darwin-x64@1.93.0: + sass-embedded-darwin-x64@1.93.2: optional: true - sass-embedded-linux-arm64@1.93.0: + sass-embedded-linux-arm64@1.93.2: optional: true - sass-embedded-linux-arm@1.93.0: + sass-embedded-linux-arm@1.93.2: optional: true - sass-embedded-linux-musl-arm64@1.93.0: + sass-embedded-linux-musl-arm64@1.93.2: optional: true - sass-embedded-linux-musl-arm@1.93.0: + sass-embedded-linux-musl-arm@1.93.2: optional: true - sass-embedded-linux-musl-riscv64@1.93.0: + sass-embedded-linux-musl-riscv64@1.93.2: optional: true - sass-embedded-linux-musl-x64@1.93.0: + sass-embedded-linux-musl-x64@1.93.2: optional: true - sass-embedded-linux-riscv64@1.93.0: + sass-embedded-linux-riscv64@1.93.2: optional: true - sass-embedded-linux-x64@1.93.0: + sass-embedded-linux-x64@1.93.2: optional: true - sass-embedded-unknown-all@1.93.0: + sass-embedded-unknown-all@1.93.2: dependencies: - sass: 1.93.0 + sass: 1.93.2 optional: true - sass-embedded-win32-arm64@1.93.0: + sass-embedded-win32-arm64@1.93.2: optional: true - sass-embedded-win32-x64@1.93.0: + sass-embedded-win32-x64@1.93.2: optional: true - sass-embedded@1.93.0: + sass-embedded@1.93.2: dependencies: '@bufbuild/protobuf': 2.9.0 buffer-builder: 0.2.0 @@ -13719,26 +13798,26 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.93.0 - sass-embedded-android-arm: 1.93.0 - sass-embedded-android-arm64: 1.93.0 - sass-embedded-android-riscv64: 1.93.0 - sass-embedded-android-x64: 1.93.0 - sass-embedded-darwin-arm64: 1.93.0 - sass-embedded-darwin-x64: 1.93.0 - sass-embedded-linux-arm: 1.93.0 - sass-embedded-linux-arm64: 1.93.0 - sass-embedded-linux-musl-arm: 1.93.0 - sass-embedded-linux-musl-arm64: 1.93.0 - sass-embedded-linux-musl-riscv64: 1.93.0 - sass-embedded-linux-musl-x64: 1.93.0 - sass-embedded-linux-riscv64: 1.93.0 - sass-embedded-linux-x64: 1.93.0 - sass-embedded-unknown-all: 1.93.0 - sass-embedded-win32-arm64: 1.93.0 - sass-embedded-win32-x64: 1.93.0 + sass-embedded-all-unknown: 1.93.2 + sass-embedded-android-arm: 1.93.2 + sass-embedded-android-arm64: 1.93.2 + sass-embedded-android-riscv64: 1.93.2 + sass-embedded-android-x64: 1.93.2 + sass-embedded-darwin-arm64: 1.93.2 + sass-embedded-darwin-x64: 1.93.2 + sass-embedded-linux-arm: 1.93.2 + sass-embedded-linux-arm64: 1.93.2 + sass-embedded-linux-musl-arm: 1.93.2 + sass-embedded-linux-musl-arm64: 1.93.2 + sass-embedded-linux-musl-riscv64: 1.93.2 + sass-embedded-linux-musl-x64: 1.93.2 + sass-embedded-linux-riscv64: 1.93.2 + sass-embedded-linux-x64: 1.93.2 + sass-embedded-unknown-all: 1.93.2 + sass-embedded-win32-arm64: 1.93.2 + sass-embedded-win32-x64: 1.93.2 - sass@1.93.0: + sass@1.93.2: dependencies: chokidar: 4.0.3 immutable: 5.1.3 @@ -13877,11 +13956,6 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 @@ -13957,6 +14031,11 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -14019,58 +14098,49 @@ snapshots: style-search@0.1.0: {} - stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.9.2)): + stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)): dependencies: postcss-html: 1.8.0 - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended-scss@15.0.1(postcss@8.5.6)(stylelint@16.24.0(typescript@5.9.2)): + stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.6) - stylelint: 16.24.0(typescript@5.9.2) - stylelint-config-recommended: 16.0.0(stylelint@16.24.0(typescript@5.9.2)) - stylelint-scss: 6.12.1(stylelint@16.24.0(typescript@5.9.2)) + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint-scss: 6.12.1(stylelint@16.25.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-recommended@16.0.0(stylelint@16.24.0(typescript@5.9.2)): + stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended@17.0.0(stylelint@16.24.0(typescript@5.9.2)): + stylelint-config-standard-scss@16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): dependencies: - stylelint: 16.24.0(typescript@5.9.2) - - stylelint-config-standard-scss@15.0.1(postcss@8.5.6)(stylelint@16.24.0(typescript@5.9.2)): - dependencies: - stylelint: 16.24.0(typescript@5.9.2) - stylelint-config-recommended-scss: 15.0.1(postcss@8.5.6)(stylelint@16.24.0(typescript@5.9.2)) - stylelint-config-standard: 38.0.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended-scss: 16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-standard: 39.0.0(stylelint@16.25.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-standard@38.0.0(stylelint@16.24.0(typescript@5.9.2)): + stylelint-config-standard@39.0.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: - stylelint: 16.24.0(typescript@5.9.2) - stylelint-config-recommended: 16.0.0(stylelint@16.24.0(typescript@5.9.2)) + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-standard@39.0.0(stylelint@16.24.0(typescript@5.9.2)): - dependencies: - stylelint: 16.24.0(typescript@5.9.2) - stylelint-config-recommended: 17.0.0(stylelint@16.24.0(typescript@5.9.2)) - - stylelint-define-config@16.22.0(stylelint@16.24.0(typescript@5.9.2)): + stylelint-define-config@16.24.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: csstype: 3.1.3 - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - stylelint-order@7.0.0(stylelint@16.24.0(typescript@5.9.2)): + stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: postcss: 8.5.6 postcss-sorting: 9.1.0(postcss@8.5.6) - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - stylelint-scss@6.12.1(stylelint@16.24.0(typescript@5.9.2)): + stylelint-scss@6.12.1(stylelint@16.25.0(typescript@5.9.3)): dependencies: css-tree: 3.1.0 is-plain-object: 5.0.0 @@ -14080,21 +14150,21 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - stylelint: 16.24.0(typescript@5.9.2) + stylelint: 16.25.0(typescript@5.9.3) - stylelint@16.24.0(typescript@5.9.2): + stylelint@16.25.0(typescript@5.9.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - '@dual-bundle/import-meta-resolve': 4.1.0 + '@dual-bundle/import-meta-resolve': 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) css-functions-list: 3.2.3 css-tree: 3.1.0 - debug: 4.4.1 + debug: 4.4.3 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 file-entry-cache: 10.1.4 @@ -14228,7 +14298,7 @@ snapshots: tinyspy@4.0.3: {} - tm-grammars@1.24.12: {} + tm-grammars@1.24.16: {} tm-themes@1.10.9: {} @@ -14256,39 +14326,39 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-debounce@4.0.0: {} - ts-declaration-location@1.0.7(typescript@5.9.2): + ts-declaration-location@1.0.7(typescript@5.9.3): dependencies: picomatch: 4.0.3 - typescript: 5.9.2 + typescript: 5.9.3 ts-dedent@2.2.0: {} tsconfig-vuepress@7.0.0: {} - tsdown@0.15.3(typescript@5.9.2): + tsdown@0.15.6(typescript@5.9.3): dependencies: - ansis: 4.1.0 + ansis: 4.2.0 cac: 6.7.14 chokidar: 4.0.3 debug: 4.4.3 diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.38 - rolldown-plugin-dts: 0.16.6(rolldown@1.0.0-beta.38)(typescript@5.9.2) + rolldown: 1.0.0-beta.42 + rolldown-plugin-dts: 0.16.8(rolldown@1.0.0-beta.42)(typescript@5.9.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig: 7.3.3 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' @@ -14302,20 +14372,20 @@ snapshots: twoslash-protocol@0.3.3: {} - twoslash-vue@0.3.3(typescript@5.9.2): + twoslash-vue@0.3.3(typescript@5.9.3): dependencies: - '@vue/language-core': 3.0.5(typescript@5.9.2) - twoslash: 0.3.3(typescript@5.9.2) + '@vue/language-core': 3.0.5(typescript@5.9.3) + twoslash: 0.3.3(typescript@5.9.3) twoslash-protocol: 0.3.3 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - twoslash@0.3.3(typescript@5.9.2): + twoslash@0.3.3(typescript@5.9.3): dependencies: - '@typescript/vfs': 1.6.1(typescript@5.9.2) + '@typescript/vfs': 1.6.1(typescript@5.9.3) twoslash-protocol: 0.3.3 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -14325,6 +14395,8 @@ snapshots: type-fest@0.21.3: {} + type-fest@4.2.0: {} + type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -14360,7 +14432,7 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript@5.9.2: {} + typescript@5.9.3: {} ua-parser-js@1.0.40: {} @@ -14385,10 +14457,10 @@ snapshots: jiti: 2.5.1 quansync: 0.2.11 - undici-types@7.10.0: {} - undici-types@7.12.0: {} + undici-types@7.14.0: {} + undici@6.21.3: {} undici@7.13.0: {} @@ -14488,13 +14560,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + vite: 7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -14509,7 +14581,7 @@ snapshots: - tsx - yaml - vite@7.0.6(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1): + vite@7.0.6(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1): dependencies: esbuild: 0.25.10 fdir: 6.4.6(picomatch@4.0.3) @@ -14518,16 +14590,16 @@ snapshots: rollup: 4.46.2 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.5.2 + '@types/node': 24.7.0 fsevents: 2.3.3 jiti: 2.5.1 - less: 4.4.1 - sass: 1.93.0 - sass-embedded: 1.93.0 + less: 4.4.2 + sass: 1.93.2 + sass-embedded: 1.93.2 stylus: 0.64.0 yaml: 2.8.1 - vite@7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1): + vite@7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -14536,20 +14608,20 @@ snapshots: rollup: 4.46.2 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.5.2 + '@types/node': 24.7.0 fsevents: 2.3.3 jiti: 2.5.1 - less: 4.4.1 - sass: 1.93.0 - sass-embedded: 1.93.0 + less: 4.4.2 + sass: 1.93.2 + sass-embedded: 1.93.2 stylus: 0.64.0 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -14567,12 +14639,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.1(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(yaml@2.8.1) + vite: 7.1.1(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.5.2 + '@types/node': 24.7.0 transitivePeerDependencies: - jiti - less @@ -14604,10 +14676,10 @@ snapshots: vscode-uri@3.0.8: {} - vue-eslint-parser@10.2.0(eslint@9.36.0(jiti@2.5.1)): + vue-eslint-parser@10.2.0(eslint@9.37.0(jiti@2.5.1)): dependencies: - debug: 4.4.1 - eslint: 9.36.0(jiti@2.5.1) + debug: 4.4.3 + eslint: 9.37.0(jiti@2.5.1) eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -14616,10 +14688,10 @@ snapshots: transitivePeerDependencies: - supports-color - vue-eslint-parser@9.4.3(eslint@9.36.0(jiti@2.5.1)): + vue-eslint-parser@9.4.3(eslint@9.37.0(jiti@2.5.1)): dependencies: - debug: 4.4.1 - eslint: 9.36.0(jiti@2.5.1) + debug: 4.4.3 + eslint: 9.37.0(jiti@2.5.1) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -14629,41 +14701,41 @@ snapshots: transitivePeerDependencies: - supports-color - vue-resize@2.0.0-alpha.1(vue@3.5.21(typescript@5.9.2)): + vue-resize@2.0.0-alpha.1(vue@3.5.22(typescript@5.9.3)): dependencies: - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) - vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)): + vue-router@4.5.1(vue@3.5.22(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) - vue@3.5.21(typescript@5.9.2): + vue@3.5.22(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.21 - '@vue/compiler-sfc': 3.5.21 - '@vue/runtime-dom': 3.5.21 - '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.9.2)) - '@vue/shared': 3.5.21 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-sfc': 3.5.22 + '@vue/runtime-dom': 3.5.22 + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3)) + '@vue/shared': 3.5.22 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1))(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)): + vuepress@2.0.0-rc.24(@vuepress/bundler-vite@2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1))(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)): dependencies: - '@vuepress/cli': 2.0.0-rc.24(typescript@5.9.2) - '@vuepress/client': 2.0.0-rc.24(typescript@5.9.2) - '@vuepress/core': 2.0.0-rc.24(typescript@5.9.2) + '@vuepress/cli': 2.0.0-rc.24(typescript@5.9.3) + '@vuepress/client': 2.0.0-rc.24(typescript@5.9.3) + '@vuepress/core': 2.0.0-rc.24(typescript@5.9.3) '@vuepress/markdown': 2.0.0-rc.24 '@vuepress/shared': 2.0.0-rc.24 '@vuepress/utils': 2.0.0-rc.24 - vue: 3.5.21(typescript@5.9.2) + vue: 3.5.22(typescript@5.9.3) optionalDependencies: - '@vuepress/bundler-vite': 2.0.0-rc.24(@types/node@24.5.2)(jiti@2.5.1)(less@4.4.1)(sass-embedded@1.93.0)(sass@1.93.0)(stylus@0.64.0)(typescript@5.9.2)(yaml@2.8.1) + '@vuepress/bundler-vite': 2.0.0-rc.24(@types/node@24.7.0)(jiti@2.5.1)(less@4.4.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.64.0)(typescript@5.9.3)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - wait-on@9.0.0: + wait-on@9.0.1: dependencies: axios: 1.12.2 joi: 18.0.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 66b33c0a..5c29539b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,19 +7,19 @@ packages: overrides: '@bufbuild/protobuf': ^2.9.0 - '@typescript-eslint/utils': ^8.44.0 + '@typescript-eslint/utils': ^8.46.0 esbuild: ^0.25.10 - sass-embedded: ^1.93.0 + sass-embedded: ^1.93.2 patchedDependencies: floating-vue: patches/floating-vue.patch catalogs: dev: - '@commitlint/cli': ^19.8.1 - '@commitlint/config-conventional': ^19.8.1 - '@pengzhanbo/eslint-config-vue': ^1.37.0 - '@pengzhanbo/stylelint-config': ^1.37.0 + '@commitlint/cli': ^20.1.0 + '@commitlint/config-conventional': ^20.0.0 + '@pengzhanbo/eslint-config-vue': ^1.38.0 + '@pengzhanbo/stylelint-config': ^1.38.0 '@simonwep/pickr': ^1.9.1 '@types/express': ^5.0.3 '@types/js-yaml': ^4.0.9 @@ -27,45 +27,46 @@ catalogs: '@types/lodash.merge': ^4.6.9 '@types/markdown-it': ^14.1.2 '@types/minimist': ^1.2.5 - '@types/node': ^24.5.2 + '@types/node': ^24.7.0 + '@types/picomatch': ^4.0.2 '@types/stylus': ^0.48.43 '@types/webpack-env': ^1.18.8 '@vitest/coverage-istanbul': ^3.2.4 - bumpp: ^10.2.3 + bumpp: ^10.3.1 commitizen: ^4.3.1 conventional-changelog-cli: ^5.0.0 cpx2: ^8.0.0 cross-env: 7.0.3 cz-conventional-changelog: ^3.3.0 - eslint: ^9.36.0 + eslint: ^9.37.0 http-server: ^14.1.1 husky: ^9.1.7 - less: ^4.4.1 - lint-staged: ^16.1.6 + less: ^4.4.2 + lint-staged: ^16.2.3 markdown-it: ^14.1.0 - memfs: ^4.42.0 + memfs: ^4.49.0 mermaid: ^11.12.0 minimist: ^1.2.8 postcss: ^8.5.6 rimraf: ^6.0.1 - stylelint: ^16.24.0 + stylelint: ^16.25.0 stylus: ^0.64.0 tsconfig-vuepress: ^7.0.0 - tsdown: ^0.15.3 - typescript: ^5.9.2 + tsdown: ^0.15.6 + typescript: ^5.9.3 vitest: ^3.2.4 vue-router: ^4.5.1 - wait-on: ^9.0.0 + wait-on: ^9.0.1 peer: - '@iconify/json': ^2.2.386 + '@iconify/json': ^2.2.392 artplayer: ^5.3.0 dashjs: ^5.0.3 - hls.js: ^1.6.12 + hls.js: ^1.6.13 mathjax-full: ^3.2.2 mpegts.js: 1.7.3 - pyodide: ^0.28.2 - sass: ^1.93.0 - sass-embedded: ^1.93.0 + pyodide: ^0.28.3 + sass: ^1.93.2 + sass-embedded: ^1.93.2 swiper: ^12.0.2 prod: '@clack/prompts': ^0.11.0 @@ -85,20 +86,18 @@ catalogs: cac: ^6.7.14 chart.js: ^4.5.0 chokidar: 4.0.3 - create-filter: ^1.1.0 dayjs: ^1.11.18 echarts: ^6.0.0 esbuild: ^0.25.10 - fast-glob: ^3.3.3 flowchart.ts: ^3.0.1 focus-trap: ^7.6.5 gray-matter: ^4.0.3 handlebars: ^4.7.8 image-size: ^2.0.2 js-yaml: ^4.1.0 - katex: ^0.16.22 + katex: ^0.16.23 local-pkg: ^1.1.2 - lru-cache: ^11.2.1 + lru-cache: ^11.2.2 mark.js: ^8.11.1 markdown-it-container: ^4.0.0 markmap-lib: ^0.18.12 @@ -106,16 +105,17 @@ catalogs: markmap-view: ^0.18.12 minisearch: ^7.2.0 nano-spawn: ^1.0.3 - nanoid: ^5.1.5 + nanoid: ^5.1.6 os-locale: ^6.0.2 p-map: ^7.0.3 - package-manager-detector: ^1.3.0 + package-manager-detector: ^1.4.0 picocolors: ^1.1.1 + picomatch: ^4.0.3 shiki: ^3.13.0 - tinyglobby: ^0.2.13 - tm-grammars: ^1.24.12 + tinyglobby: ^0.2.15 + tm-grammars: ^1.24.16 tm-themes: ^1.10.9 - vue: ^3.5.21 + vue: ^3.5.22 vuepress: '@vuepress/bundler-vite': 2.0.0-rc.24 '@vuepress/helper': 2.0.0-rc.112 diff --git a/theme/package.json b/theme/package.json index 2b3510ac..e2ece73d 100644 --- a/theme/package.json +++ b/theme/package.json @@ -113,16 +113,16 @@ "@vueuse/core": "catalog:prod", "bcrypt-ts": "catalog:prod", "chokidar": "catalog:prod", - "create-filter": "catalog:prod", "dayjs": "catalog:prod", "esbuild": "catalog:prod", - "fast-glob": "catalog:prod", "gray-matter": "catalog:prod", "js-yaml": "catalog:prod", "katex": "catalog:prod", "local-pkg": "catalog:prod", "nanoid": "catalog:prod", + "p-map": "catalog:prod", "package-manager-detector": "catalog:prod", + "picomatch": "catalog:prod", "vue": "catalog:prod", "vuepress-plugin-md-power": "workspace:*" }, diff --git a/theme/src/client/components/Blog/VPBlog.vue b/theme/src/client/components/Blog/VPBlog.vue deleted file mode 100644 index cf437041..00000000 --- a/theme/src/client/components/Blog/VPBlog.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - - - diff --git a/theme/src/client/components/Home/VPHome.vue b/theme/src/client/components/Home/VPHome.vue index fe4e4da6..69dd992d 100644 --- a/theme/src/client/components/Home/VPHome.vue +++ b/theme/src/client/components/Home/VPHome.vue @@ -1,6 +1,5 @@ diff --git a/theme/src/client/components/Blog/VPBlogExtract.vue b/theme/src/client/components/Posts/VPPostsExtract.vue similarity index 78% rename from theme/src/client/components/Blog/VPBlogExtract.vue rename to theme/src/client/components/Posts/VPPostsExtract.vue index be2693ba..6d35f565 100644 --- a/theme/src/client/components/Blog/VPBlogExtract.vue +++ b/theme/src/client/components/Posts/VPPostsExtract.vue @@ -1,19 +1,26 @@