Compare commits

...

247 Commits

Author SHA1 Message Date
pengzhanbo
d69e0b9765 ci: update workflow permissions 2026-04-22 17:07:34 +08:00
pengzhanbo
02038f2df0 build: publish v1.0.0-rc.196 2026-04-19 14:37:52 +08:00
pengzhanbo
e5126663ef fix: fix security 2026-04-19 14:34:47 +08:00
pengzhanbo
402f259086
refactor(plugin-md-power): refactor obsidian plugins (#893) 2026-04-19 14:10:54 +08:00
pengzhanbo
58ea2fc8cb
fix(theme): remove cwd options from picomatch (#892) 2026-04-19 14:10:40 +08:00
pengzhanbo
6ebb1bda6e
fix(plugin-md-power): fix cell display issue caused by colspan in table (#891) 2026-04-19 14:10:22 +08:00
pengzhanbo
68f39695c4 chore: update tsconfig 2026-04-19 14:09:52 +08:00
pengzhanbo
76787f6530 build: publish v1.0.0-rc.195 2026-04-18 17:13:48 +08:00
pengzhanbo
e2b47da532 chore: tweak 2026-04-18 17:09:26 +08:00
pengzhanbo
035d521e96 chore: update deps to latest 2026-04-18 17:07:12 +08:00
pengzhanbo
bfd0c8409c
feat(plugin-md-power): compat obsidian official markdown syntax (#890)
* feat(plugin-md-power): compat obsidian official markdown syntax

* chore: tweak

* chore: tweak

* chore: tweak

* chore: tweak
2026-04-18 17:01:41 +08:00
pengzhanbo
e11c7a8fcd build: publish v1.0.0-rc.194 2026-04-14 15:37:37 +08:00
pengzhanbo
1329051536 chore: tweak 2026-04-14 15:36:15 +08:00
pengzhanbo
0677f6749e chore: update deps to latest 2026-04-14 15:31:38 +08:00
pengzhanbo
28963eb419
fix(plugin-search): fix search index race condition on pageUpdated, close #888 (#889) 2026-04-14 15:29:58 +08:00
pengzhanbo
cfc89adab8 chore: update security deps 2026-04-04 16:35:48 +08:00
pengzhanbo
e0ba59a6f9 build: update changelog 2026-04-03 02:56:28 +08:00
pengzhanbo
352874b29a build: publish v1.0.0-rc.193 2026-04-03 02:25:46 +08:00
pengzhanbo
c824ad85f4 chore: update gitignore 2026-04-03 02:18:23 +08:00
pengzhanbo
db2eda82f3 build: update clean scripts 2026-04-03 02:18:01 +08:00
pengzhanbo
e9fe35bc4f
fix(theme): fix sidebar items prefix not handled correctly, close #876 (#885) 2026-04-03 02:13:18 +08:00
pengzhanbo
709ade741c chore: improve comment 2026-04-03 02:06:32 +08:00
pengzhanbo
d8b79e89e8
refactor(plugin-search): improve search index update (#884) 2026-04-03 01:58:25 +08:00
pengzhanbo
dbc6f0be0f
fix(theme): fix auto-sidebar group icon error inherit, close #873 (#883) 2026-04-02 22:05:54 +08:00
pengzhanbo
9fe294b9dd fix(theme): fix MarkdownOptions types 2026-04-02 21:15:33 +08:00
pengzhanbo
ecf100cfc6 docs: update security.md 2026-04-02 21:15:08 +08:00
pengzhanbo
b7ee45642e docs: update contributing.md 2026-04-02 21:14:51 +08:00
pengzhanbo
54c05c8cea docs: add claude.md 2026-04-02 21:14:34 +08:00
pengzhanbo
86cb872ce6 refactor: migrate onWatched to onPageUpdated 2026-04-02 21:14:16 +08:00
pengzhanbo
a6cb3820b1 refactor: remove deprecated enhancement 2026-04-02 21:12:59 +08:00
pengzhanbo
184d1aee76 build: improve tsdown bundle config 2026-04-02 20:59:23 +08:00
pengzhanbo
cbc5c55891 perf: update deps to latest 2026-04-02 20:57:51 +08:00
mcenahle
4f40f8441d
docs: add "mcenahle Docs" to demo page (#882)
* Update demos.md

* chore: fix URLs for 哦麦 MC logo and preview images

Updated logo and preview image URLs for 哦麦 MC in demos.md.

---------

Co-authored-by: pengzhanbo <volodymyr@foxmail.com>
2026-04-02 20:54:47 +08:00
pengzhanbo
fe0d4bbc92
feat: improve accessibility features (#869) 2026-04-02 20:49:20 +08:00
pengzhanbo
39a76a35d7
feat(plugin-md-power)!: use # as the comment delimiter (#870) 2026-04-02 20:48:55 +08:00
pengzhanbo
a01bc13c66
fix(plugin-md-power): fix tsdown icon (#878) 2026-04-02 20:48:34 +08:00
pengzhanbo
1b213d4c28
fix(theme): add bulletin to outline ignores (#879) 2026-04-02 20:48:10 +08:00
pengzhanbo
aede6f5d87
fix(theme): twoslash comment error (#881)
* fix(theme): fix incorrect auto-sidebar-link parse

* fix(theme): twoslash comment error
2026-04-02 16:38:33 +08:00
pengzhanbo
7febfbf237
fix(theme): fix incorrect auto-sidebar-link parse (#880) 2026-04-02 16:37:58 +08:00
suixinio
7ce4e40521
docs: update ohmymc img (#877)
docs: update ohmymc img
2026-04-02 14:34:49 +08:00
zhenghaoyang24
12c4f5b39e
docs: fix icon documentation links (#874)
- Update relative paths in markdown config documentation to point
  to correct guide location
- Change sidebar icons link from document.md to quick-start/sidebar.md
  for proper navigation structure
2026-04-02 14:34:14 +08:00
pengzhanbo
aa54090b5d docs: update sponsor 2026-03-19 02:09:31 +08:00
逸燧Esyka
192b260d2b
docs: update repository url for Esyka's blog (#872) 2026-03-15 16:41:38 +08:00
逸燧Esyka
75df783295
docs: add Esyka's Blog to demos (#871)
Added Esyka's Blog with relevant details.
2026-03-14 23:39:00 +08:00
pengzhanbo
97a5ba20c3 docs: fix typo 2026-03-08 21:55:27 +08:00
pengzhanbo
896c7e22df chore: improve theme code comments 2026-03-08 16:59:50 +08:00
pengzhanbo
77856e36c5 chore: improve plugin-md-power code comments 2026-03-08 16:35:52 +08:00
pengzhanbo
552f0f5c32 chore: improve plugin-search code comments 2026-03-08 16:16:04 +08:00
pengzhanbo
7751e4c798 chore: improve cli code comments 2026-03-08 16:15:26 +08:00
pengzhanbo
17646708b1 docs: update skills usage doc 2026-03-06 16:40:02 +08:00
pengzhanbo
f14d663bb5 docs: update skills 2026-03-06 15:54:30 +08:00
pengzhanbo
50fa747ec1 docs: update agent skills 2026-03-06 00:44:21 +08:00
pengzhanbo
f6da09df54 build: publish v1.0.0-rc.192 2026-03-05 15:35:45 +08:00
pengzhanbo
9b9f8f3f77 style: lint fix 2026-03-05 15:34:11 +08:00
pengzhanbo
aa19049f5b perf: update deps to latest 2026-03-05 14:56:16 +08:00
pengzhanbo
fd1dd7c695
feat(theme): add lang switch to update html lang attr (#867) 2026-03-05 14:42:48 +08:00
pengzhanbo
916e9141d9
fix(plugin-md-power): fix potential null pointer exceptions when parsing collapse containers (#866) 2026-03-05 14:41:47 +08:00
pengzhanbo
ca51a345fb
fix(theme): fix the calculation error in the post cover ratio and add link to cover, close #863 (#865) 2026-03-05 14:41:30 +08:00
pengzhanbo
f11e8501d0
fix(theme): fix missing attribute for <VPHomePosts> (#864) 2026-03-05 14:41:11 +08:00
pengzhanbo
3f047914d5 build: publish v1.0.0-rc.191 2026-02-25 22:14:10 +08:00
pengzhanbo
0a3810be2b chore: tweak 2026-02-25 22:12:38 +08:00
pengzhanbo
c541e05997 perf: update deps to latest 2026-02-25 22:04:15 +08:00
pengzhanbo
feb69a282e build: update target Node.js version to 20.19.0 in tsdown.config.mjs files 2026-02-25 22:03:51 +08:00
pengzhanbo
c109d54961
feat: rewrite app.writeTemp to resolve IO race conditions (#862) 2026-02-25 21:50:50 +08:00
pengzhanbo
948c31779b
fix(plugin-search): fix temporary file IO race condition (#861) 2026-02-25 21:50:31 +08:00
pengzhanbo
09a95b7597
fix(plugin-md-power): fix timeout when retrieving remote image size (#860) 2026-02-25 21:50:08 +08:00
pengzhanbo
ce32605aee
feat(plugin-md-power): rename demo-wrapper container to window (#858) 2026-02-25 21:48:39 +08:00
𝙁𝙡𝙖𝙨𝙝
f7d3546962
docs: update 【haipeng-lin】demo (#859) 2026-02-20 00:44:33 +08:00
pengzhanbo
5980fd81f3 build: publish v1.0.0-rc.190 2026-02-15 12:33:55 +08:00
pengzhanbo
f2fe79f923 fix(plugin-md-power): fix timeout issue when retrieving image size 2026-02-15 12:32:33 +08:00
pengzhanbo
7234eebe7e fix(plugin-search): fix incorrect prepare search index 2026-02-15 12:31:46 +08:00
pengzhanbo
479680bba6 docs: update docs 2026-02-15 12:24:31 +08:00
pengzhanbo
cd68f1cdd9 build: publish v1.0.0-rc.189 2026-02-15 11:43:40 +08:00
pengzhanbo
97c7a53aed chore: update deps to latest 2026-02-15 11:41:37 +08:00
pengzhanbo
03dc9da8dc docs: update home page 2026-02-15 11:41:17 +08:00
pengzhanbo
a4c9c85b00
refactor(plugin-md-power): optimize image size (#856) 2026-02-15 11:33:40 +08:00
pengzhanbo
1ed3dd9154
refactor(plugin-search): optimize search data generate (#855) 2026-02-15 11:33:24 +08:00
pengzhanbo
bfd1d1692f
refactor(cli): improve packageJson generate (#854) 2026-02-15 11:33:09 +08:00
pengzhanbo
6db6a58c27
chore: tweak (#857) 2026-02-15 11:32:47 +08:00
pengzhanbo
9751059fcd docs: update readme 2026-02-15 11:23:16 +08:00
pengzhanbo
fc9984b27c test: improve unit test 2026-02-14 20:03:44 +08:00
pengzhanbo
5930c60462 docs: improve docs 2026-02-14 18:14:19 +08:00
pengzhanbo
f173d069bd refactor(theme): fix event listener leaks 2026-02-14 18:14:00 +08:00
pengzhanbo
5c201e3ed0
docs: improve jsdoc (#852) 2026-02-14 14:53:41 +08:00
pengzhanbo
77da8a3470
fix(cli): fix failure to retrieve OS language (#851) 2026-02-14 14:53:23 +08:00
pengzhanbo
9c3899135b docs: update readme 2026-02-14 14:48:01 +08:00
pengzhanbo
dc160b3db4 build: publish v1.0.0-rc.188 2026-02-13 21:12:45 +08:00
pengzhanbo
84bd873efa chore: improve vue-router deps 2026-02-13 21:10:17 +08:00
pengzhanbo
8d4ce99c16 perf: update deps to latest 2026-02-13 20:28:12 +08:00
pengzhanbo
8a873e1e58 style: lint fix 2026-02-13 20:27:38 +08:00
pengzhanbo
2780abd782
feat(plugin-md-power): add copy button for file-tree container, close #835 (#837)
* feat(plugin-md-power): add copy button for file-tree container, close #835

* chore: tweak
2026-02-13 01:16:47 +08:00
pengzhanbo
b1f996cb0e
feat(plugin-md-power): add ::: encrypt container, close #815 (#831)
* feat(plugin-md-power): add `::: encrypt` container

* chore: tweak

* chore: tweak

* chore: tweak
2026-02-12 23:55:21 +08:00
pengzhanbo
78a2859398
perf: optimize memory usage during build time (#850) 2026-02-12 21:11:01 +08:00
pengzhanbo
8daddcac5d chore: update vuepress deps to latest 2026-02-12 01:16:46 +08:00
pengzhanbo
c5759e3a2e chore(theme): add default locale to llmstxt plugin 2026-02-12 01:08:00 +08:00
pengzhanbo
3e68b44771
feat(theme): add sidebar collapse button, close #687 (#839) 2026-02-12 01:02:57 +08:00
pengzhanbo
d2b4654ae3
fix(theme): fix prev/next nav when include sep, close #846 (#849) 2026-02-12 01:01:13 +08:00
pengzhanbo
5a73b59297
fix(theme): broken card a11y, close #841 (#848) 2026-02-12 01:00:52 +08:00
pengzhanbo
98a969c112
fix(theme): fix overflow scrolling in the tab container nav, close #842 (#847) 2026-02-12 01:00:03 +08:00
pengzhanbo
8cd08f4f02
feat(plugin-search): add language-based text segmentation support for search (#838) 2026-02-12 00:59:35 +08:00
pengzhanbo
32e4f92c61
feat(plugin-md-power): add icons about ai (#836) 2026-02-12 00:59:02 +08:00
pengzhanbo
d573fada7a
feat(theme): improve title template (#833)
* feat(theme): improve title template

* chore: tweak
2026-02-12 00:58:33 +08:00
pengzhanbo
a13ed1f503
fix(theme): navbar dropdown renders incorrectly in Safari, close #830 (#832) 2026-02-12 00:57:41 +08:00
pengzhanbo
07c274cdbf
feat: add agent skills (#823)
* feat: add agent skills

* chore: tweak
2026-01-29 15:52:29 +08:00
Konata9
ab4ff06756
docs: add Konata9's Blog (#834)
* chore: Add konata9's blog

* style: lint fix

---------

Co-authored-by: pengzhanbo <volodymyr@foxmail.com>
2026-01-27 11:31:34 +08:00
pengzhanbo
b65529743e docs: update sponsor 2026-01-22 13:17:29 +08:00
pengzhanbo
c46379bc9f docs: update pdf assets 2026-01-20 23:34:40 +08:00
Kairui Liu
6cd8066ee0
docs: add a website demo to the documentation (#827) 2026-01-20 14:41:19 +08:00
pengzhanbo
4ad05ad9f5 build: publish v1.0.0-rc.187 2026-01-19 23:50:07 +08:00
pengzhanbo
6a41d44322 fix(theme): incorrect icon name validation 2026-01-19 23:48:35 +08:00
pengzhanbo
f804ba8420 build: publish v1.0.0-rc.186 2026-01-19 21:56:46 +08:00
pengzhanbo
2a5bd30fe3 perf: update deps to latest 2026-01-19 21:45:42 +08:00
pengzhanbo
a3d8e225b9
feat(theme): add filepath permalink support for auto frontmatter, #815 (#822) 2026-01-19 21:43:41 +08:00
pengzhanbo
f51dff1d58
feat(plugin-md-power): add markdown env presets, #815 (#818) 2026-01-19 21:41:17 +08:00
pengzhanbo
85fc35f119
fix(theme): fix multiple icon provider (#826) 2026-01-19 21:40:47 +08:00
pengzhanbo
48970dd559
fix(theme): fix theme config hmr fail (#820) 2026-01-19 21:40:23 +08:00
pengzhanbo
1dfbb872f7
fix(theme): fix page encrypt password type error (#819) 2026-01-19 21:39:50 +08:00
pengzhanbo
79397faa65
feat(theme): add perplexity to context menu (#817) 2026-01-19 21:38:45 +08:00
来自梦里的一条鱼
7b17ccf378
docs: update haipeng-lin.cn demo (#824) 2026-01-17 17:08:23 +08:00
CuteLittleSky
7a0aee5fb9
docs: add SKYCRAFT server to Demo (#821) 2026-01-15 18:34:59 +08:00
Paiad
a94333d9bd
docs: revise Paiad demo information
Updated the details for the Paiad demo, including name, description, logo, URL, and preview image.
2026-01-13 22:32:39 +08:00
pengzhanbo
5217be0bfc build: publish v1.0.0-rc.185 2026-01-09 15:44:39 +08:00
pengzhanbo
6420ddf8ba chore: update deps to latest 2026-01-09 15:42:08 +08:00
pengzhanbo
6656b3213b docs: add contributor 2026-01-09 15:35:00 +08:00
pengzhanbo
a74c475d7c perf: update deps to latest 2026-01-09 15:33:11 +08:00
pengzhanbo
6d0781b647 chore: tweak 2026-01-09 15:32:49 +08:00
Dahaha
cc3582c1f9
feat(theme): add support for base64 for profile avatars (#808) 2026-01-09 15:22:32 +08:00
pengzhanbo
2cadb7d88c
fix(theme): add slot existence check in VPDocFooter, close #809 (#811) 2026-01-09 15:19:52 +08:00
pengzhanbo
7ed70230af
fix(theme): fix custom social icon rendering misalignment (#812) 2026-01-09 15:19:25 +08:00
pengzhanbo
36c0eddd86 docs: update sponsor 2026-01-03 20:07:24 +08:00
pengzhanbo
b242e59bbe build: publish v1.0.0-rc.184 2025-12-28 15:25:01 +08:00
pengzhanbo
9bbba1ada6
fix(theme): incorrect url convert in PageContextMenu (#807)
* fix(theme): incorrect url convert in `PageContextMenu`

* test: migrate to v8

* perf: update deps to latest
2025-12-28 15:09:32 +08:00
pengzhanbo
e2c9d50539 docs: fix typo 2025-12-28 14:11:59 +08:00
pengzhanbo
ed5c53f494 chore: remove .npmrc 2025-12-28 14:11:36 +08:00
pengzhanbo
fe9ee0dbfc
feat(plugin-md-power): improve caniuse syntax (#806) 2025-12-28 14:00:53 +08:00
pengzhanbo
2bcf761ef1 docs: update sponsor 2025-12-26 23:33:25 +08:00
Lucas
ccf34d4bc8
docs: add demo for Lucas blog (#804) 2025-12-21 23:42:27 +08:00
pengzhanbo
f7c0fe0dd3 docs: update sponsor 2025-12-16 15:15:23 +08:00
only9464
3f9422df83
docs: add HEUOpenResource to demos.md (#803)
Added HEUOpenResource project details to demos.
2025-12-15 19:54:56 +08:00
来自梦里的一条鱼
46ec0fb123
docs: update haipeng-lin site demo (#802) 2025-12-15 11:52:18 +08:00
pengzhanbo
a5f6f991f8 build: publish v1.0.0-rc.183 2025-12-14 01:59:57 +08:00
pengzhanbo
eb73f3d3f1 perf: update deps to latest 2025-12-14 01:57:06 +08:00
pengzhanbo
a15f4e206d
fix: fix incorrect icon rendering, close #799 (#800) 2025-12-14 01:34:50 +08:00
pengzhanbo
ce19b84232
fix(theme): fix incorrect code block rendering within card, close #798 (#801) 2025-12-14 01:34:33 +08:00
pengzhanbo
b86a121707 docs: update component and config 2025-12-14 01:33:46 +08:00
pengzhanbo
c0bb6bcc14 build: publish v1.0.0-rc.182 2025-12-13 16:50:11 +08:00
pengzhanbo
98684ed66a perf: update deps to latest 2025-12-13 16:40:31 +08:00
pengzhanbo
15aa159999 docs: update Demos component 2025-12-13 16:39:40 +08:00
pengzhanbo
956869ab1e
fix(plugin-md-power): fix file-tree container incorrectly rendering in nesting content, close #795 (#797) 2025-12-13 16:18:36 +08:00
pengzhanbo
6e601f9f0e
feat(theme): add meta config support for collection, close #781 (#796) 2025-12-13 15:45:55 +08:00
pengzhanbo
f7bc044147 refactor(theme): improve CodeRepl and DocFooter styles 2025-12-12 20:53:43 +08:00
pengzhanbo
a91cdb60d7 chore: tweak 2025-12-12 20:52:48 +08:00
pengzhanbo
15e62010c2
feat(theme): add cols frontmatter support for friends page, close #781 (#792) 2025-12-12 20:41:30 +08:00
pengzhanbo
a350e62645
fix(plugin-md-power): fix mark lazy animation, close #789 (#791) 2025-12-12 20:41:09 +08:00
pengzhanbo
95d345bf6d
refactor(theme): social icon support all iconify icons, close #781 (#790) 2025-12-12 20:40:50 +08:00
pengzhanbo
c42a601467
refactor(theme): improve post copyright styles, close #780 (#788) 2025-12-12 20:40:30 +08:00
pengzhanbo
46797a0757
fix(theme): fix render overflow of code block within Card on mobile, close #782 (#787) 2025-12-12 20:40:04 +08:00
pengzhanbo
65da8469ce
feat(cli): update lowest version support for nodejs (#786) 2025-12-12 20:39:28 +08:00
pengzhanbo
6383347813
fix(theme): fix boundary detection error for config on home (#785) 2025-12-12 20:39:03 +08:00
pengzhanbo
2c360ac59e
feat(theme): add theme config changed logger (#784) 2025-12-12 20:38:34 +08:00
pengzhanbo
b128511c28 docs: update sponsor 2025-12-10 17:01:56 +08:00
pengzhanbo
8f2f93ec7e build: publish v1.0.0-rc.181 2025-12-05 22:59:22 +08:00
pengzhanbo
8faba7bf10 perf: update deps to latest 2025-12-05 22:57:20 +08:00
pengzhanbo
c8ab57e843 chore: tweak 2025-12-05 22:56:51 +08:00
pengzhanbo
9a77bf4eef docs: update sponsor 2025-12-05 22:25:46 +08:00
pengzhanbo
157281aec8
feat(plugin-md-power): add qrcode syntax plugin for markdown (#777)
* feat(plugin-md-power): add  qrcode syntax plugin for markdown

* chore: tweak
2025-12-05 17:18:13 +08:00
pengzhanbo
07710247bb
fix(theme): fix parsing error for relative path link (#779) 2025-12-05 17:16:48 +08:00
pengzhanbo
9b2b73e05b
fix(theme): fix doc-footer text decoration (#778) 2025-12-05 17:16:30 +08:00
pengzhanbo
8f3c070d07 docs: tweak 2025-12-05 17:07:05 +08:00
pengzhanbo
29b5197c47 test: improve unit test 2025-12-05 17:06:41 +08:00
pengzhanbo
5f82bdeb67
fix(theme): fix home hero background tint-plate rendering fail, close #775 (#776) 2025-12-04 14:10:27 +08:00
pengzhanbo
d677fc99de docs: update sponsor 2025-12-04 14:06:18 +08:00
pengzhanbo
4b1cecf2bd
feat(theme): migrate bcrypt-ts to hash-wasm (#774) 2025-12-03 17:16:14 +08:00
pengzhanbo
32f4a8be5a
feat(plugin-md-power): add markdown-it-cjk-friendly plugin (#773) 2025-12-03 13:41:18 +08:00
pengzhanbo
3553022597
fix(theme): fix navbar horizontal overflow (#772) 2025-12-03 13:35:57 +08:00
pengzhanbo
cd37921975
fix(theme): fix sidebar curtain position-top (#771) 2025-12-03 13:35:12 +08:00
pengzhanbo
78b4b9f572 docs: add tools 2025-12-03 13:34:19 +08:00
pengzhanbo
ab4354e648 docs: add contributor 2025-12-03 13:33:55 +08:00
pengzhanbo
20ebeb5e62
feat(theme): support encryption for all page layouts (#770) 2025-12-03 13:25:16 +08:00
gnehs
4957c8b1de
fix(theme): blockquote icon color in dark mode (#769) 2025-12-03 13:24:55 +08:00
gnehs
3df96e2702
fix(i18n): update Traditional Chinese translations for search and theme locales (#767) 2025-12-02 17:35:21 +08:00
pengzhanbo
3c4985ac1a build: publish v1.0.0-rc.180 2025-12-01 11:38:47 +08:00
pengzhanbo
3a907e0ba8 perf: update deps to latest 2025-12-01 11:37:01 +08:00
pengzhanbo
db8a46eb4c
docs: optimize and completion docs (#766) 2025-12-01 11:30:33 +08:00
pengzhanbo
c97a5af473
feat(cli): optimize template (#765) 2025-12-01 11:30:06 +08:00
pengzhanbo
bba98984d6
fix: support nested ordered lists in collapse plugin (#764) 2025-12-01 11:29:45 +08:00
pengzhanbo
41d2a81a09
fix(theme): fix hybrid mismatch (#763) 2025-12-01 11:29:26 +08:00
pengzhanbo
6a3babcf76
perf(theme): optimize VPFooter and VPFriends layout (#762) 2025-12-01 11:29:05 +08:00
pengzhanbo
f599a4223c
fix(theme): llmstxt should exclude encrypt page (#761) 2025-12-01 11:28:21 +08:00
pengzhanbo
e0b972c3cb
fix(theme): incorrect displaying external link icon (#760) 2025-12-01 11:27:59 +08:00
pengzhanbo
2bb5c0e2d5 ci: update workflow 2025-11-28 22:32:18 +08:00
pengzhanbo
7691cdc9a0 build: publish v1.0.0-rc.179 2025-11-26 01:26:47 +08:00
pengzhanbo
c1f59cf451 perf: update deps to latest 2025-11-26 01:23:22 +08:00
pengzhanbo
fc3676d6dc
feat(theme): add support for {data-outline="level"} attribute syntax for headings, close #757 (#759) 2025-11-26 01:13:24 +08:00
pengzhanbo
73f4935ca9
feat(theme): exclude encrypt page in llmstxt (#758) 2025-11-26 01:13:04 +08:00
pengzhanbo
f9b8c6adf2
refactor(theme): refactor link detector, close #754 (#756)
* refactor(theme): refactor link detector

* chore: tweak
2025-11-26 01:12:42 +08:00
pengzhanbo
8c1d34cb87 chore: tweak 2025-11-26 01:09:57 +08:00
pengzhanbo
631188df85 ci: migrate release publish to github actions 2025-11-26 01:08:30 +08:00
pengzhanbo
a9082dc012 docs: update sponsor 2025-11-25 21:05:53 +08:00
pengzhanbo
1b62b0bf6c docs: update sponsor 2025-11-25 14:55:45 +08:00
yxzlwz
75c12ba458
docs: update demos for YXZL (#755) 2025-11-21 12:56:49 +08:00
pengzhanbo
25c3880ea4 chore: tweak 2025-11-20 21:29:27 +08:00
pengzhanbo
ddb77a06a5 feat(theme): add footer frontmatter 2025-11-20 21:09:26 +08:00
pengzhanbo
a4bea8202b feat(cli): add env config to template 2025-11-20 21:09:06 +08:00
pengzhanbo
57617e6658 docs: update QA 2025-11-20 21:08:43 +08:00
pengzhanbo
ea54d08a50 docs: update demos 2025-11-20 21:08:25 +08:00
pengzhanbo
945cc72860 build: publish v1.0.0-rc.178 2025-11-19 17:02:41 +08:00
pengzhanbo
4884b1acce perf: update deps to latest 2025-11-19 16:59:03 +08:00
pengzhanbo
532ad960a4 docs: add llms redirect 2025-11-19 16:55:00 +08:00
pengzhanbo
ad1f02de62 fix(theme): fix post-list width overflow 2025-11-19 16:54:41 +08:00
pengzhanbo
20728f504d
feat(theme): add plugin-llms and <PageContextMenu /> component (#753) 2025-11-19 16:51:49 +08:00
pengzhanbo
5b780c28d0 docs: update llms config 2025-11-18 21:08:22 +08:00
TinyPiXOS-Dev
e8fa516b2e
docs: update demos.md (#752)
增加TinyPiXOS案例,TinyPiXOS是一款独立可控、架构轻量且高度定制化的嵌入式桌面操作系统,官网和技术文档均采用plume主题构建。
2025-11-18 19:15:24 +08:00
pengzhanbo
e87ae4fc16 build: publish v1.0.0-rc.177 2025-11-14 18:01:17 +08:00
pengzhanbo
5b07f2dd21 perf: update deps to latest 2025-11-14 17:49:51 +08:00
pengzhanbo
6fc6385de4 feat(cli): typescript as a required dependency 2025-11-14 17:45:08 +08:00
pengzhanbo
ab26dec457 feat(theme): when navbar is empty, no preset is applied 2025-11-14 17:43:19 +08:00
pengzhanbo
4119b67e0b fix(theme): fix fixed position failure in Safari 2025-11-14 17:15:48 +08:00
pengzhanbo
05d55e5035 fix(theme): fix table max-width overflow 2025-11-14 17:12:45 +08:00
pengzhanbo
f95e7c8412 feat(theme): optimize VPCollapse styles within Card 2025-11-14 17:09:42 +08:00
pengzhanbo
4e7fb91a56 build: publish v1.0.0-rc.176 2025-11-09 15:05:55 +08:00
pengzhanbo
cd120220f2 build: update tsdown config 2025-11-09 15:00:32 +08:00
pengzhanbo
a63c094df9 fix(theme): fix use admin decrypt page error 2025-11-09 14:59:10 +08:00
pengzhanbo
336205627e perf: update deps to latest 2025-11-09 13:58:48 +08:00
pengzhanbo
a5dfef7202
feat(theme): optimize page encrypt (#750) 2025-11-09 13:48:15 +08:00
pengzhanbo
87cda0c824 test: update vitest config 2025-11-09 13:33:21 +08:00
Hao Chen
b6ee4a4b3d
fix(theme): conditionally render post navigation links on mobile devices (#749) 2025-11-01 22:27:27 +08:00
Hao Chen
2fc6ea5064
fix(cli): corrects function call for defining multiple collections (#748) 2025-11-01 21:46:44 +08:00
pengzhanbo
aa8e774a1b build: publish v1.0.0-rc.175 2025-10-31 20:29:24 +08:00
pengzhanbo
606f47a5a6 perf: update deps to latest 2025-10-31 20:22:59 +08:00
pengzhanbo
e6daf07456 style: lint fix 2025-10-31 20:22:37 +08:00
pengzhanbo
3d48446769
feat(theme): add dark-veil home hero effect (#747) 2025-10-31 18:33:57 +08:00
pengzhanbo
802911c179 perf(theme): cleanup home hero effect when unmounted 2025-10-31 18:08:15 +08:00
pengzhanbo
192017b892
fix(theme): fix auto-sidebar collapsed (#746) 2025-10-31 18:03:06 +08:00
pengzhanbo
cfa70320c8
docs(theme): fix tint-plate tools (#745)
see #742
2025-10-31 17:53:35 +08:00
pengzhanbo
d4ad65a1ea
refactor: use deconstruct syntax to handle component props (#744) 2025-10-31 17:42:28 +08:00
pengzhanbo
0e38265f96
feat(plugin-md-power): add full-width support for table container, close #740 (#741) 2025-10-29 20:45:22 +08:00
pengzhanbo
fbb6ec9a63 feat(theme): optimize local nav 2025-10-26 23:18:44 +08:00
pengzhanbo
19868d147e fix(theme): fix language component not displaying correctly 2025-10-26 23:17:46 +08:00
pengzhanbo
73e6b9d5ca build: publish v1.0.0-rc.174 2025-10-25 12:31:36 +08:00
pengzhanbo
ca3986917c perf: update deps to latest 2025-10-25 12:29:19 +08:00
pengzhanbo
be565baf59 fix(theme): fix ssr compile error 2025-10-25 12:21:44 +08:00
pengzhanbo
aa6168c31d
feat(theme): add home hero effects (#738) 2025-10-25 11:55:17 +08:00
pengzhanbo
51e1f5260c perf: update deps to latest 2025-10-21 16:14:15 +08:00
yxzlwz
441b991b65
fix(plugin-md-power): avoid spellcheck in CodeEditor (#736)
Added spellcheck attribute to textarea for CodeEditor.
2025-10-20 21:47:09 +08:00
HAO CHEN
5fb7b7a216
docs: add Honahec's Blog to demos (#734) 2025-10-19 00:08:32 +08:00
Paiad
2d40e20f51
docs: update Paiad links and logo in demos.md (#733) 2025-10-18 21:39:30 +08:00
672 changed files with 42779 additions and 10185 deletions

1
.gitattributes vendored
View File

@ -4,6 +4,7 @@
*.png binary *.png binary
*.jpg binary *.jpg binary
*.jpeg binary *.jpeg binary
*.webp binary
*.ico binary *.ico binary
*.gif binary *.gif binary
*.tff binary *.tff binary

View File

@ -2,15 +2,25 @@ name: Deploy Docs
on: on:
push: push:
tags: branches:
- v* - main
paths:
# 以下文件发生变化时触发部署,这些文件与版本无关,因此可以自动更新
- docs/demos.md
- docs/sponsor.md
- CONTRIBUTING.md
- CONTRIBUTING.en-US.md
workflow_dispatch: workflow_dispatch:
workflow_call:
permissions:
contents: write
jobs: jobs:
deploy-docs: deploy-docs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
@ -18,9 +28,9 @@ jobs:
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 24
cache: pnpm cache: pnpm
- name: Install deps - name: Install deps

View File

@ -6,11 +6,14 @@ on:
- v* - v*
workflow_dispatch: workflow_dispatch:
permissions:
contents: write
jobs: jobs:
deploy-docs: deploy-docs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
@ -18,9 +21,9 @@ jobs:
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 24
cache: pnpm cache: pnpm
- name: Install deps - name: Install deps

View File

@ -6,6 +6,10 @@ on:
pull_request: pull_request:
branches: [main] branches: [main]
workflow_call:
permissions:
contents: read
jobs: jobs:
lint: lint:
@ -13,15 +17,15 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v6
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 24
cache: pnpm cache: pnpm
- name: Install deps - name: Install deps

55
.github/workflows/release.yaml vendored Normal file
View File

@ -0,0 +1,55 @@
name: Release
on:
push:
tags:
- v*
permissions:
contents: write
id-token: write
jobs:
lint:
uses: ./.github/workflows/lint.yaml
test:
uses: ./.github/workflows/test.yaml
release:
if: github.repository == 'pengzhanbo/vuepress-theme-plume'
needs: [test, lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
node-version: 24
registry-url: https://registry.npmjs.org
cache: pnpm
- name: Install deps
run: pnpm install
- name: Update npm
run: npm i -g npm@latest
- name: Build And Publish
id: publish
run: |
pnpm build
pnpm release:publish --no-git-checks
pnpm release:sync
- run: npx changelogithub
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
deploy:
uses: ./.github/workflows/docs-deploy.yaml

View File

@ -1,22 +0,0 @@
name: Add Release Tag
on:
push:
tags:
- v*
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npx changelogithub
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

View File

@ -6,6 +6,10 @@ on:
pull_request: pull_request:
branches: [main] branches: [main]
workflow_call:
permissions:
contents: read
jobs: jobs:
unit-test: unit-test:
@ -13,15 +17,15 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v6
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 24
cache: pnpm cache: pnpm
- name: Install deps - name: Install deps
@ -34,6 +38,6 @@ jobs:
- name: Upload coverage - name: Upload coverage
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
uses: codecov/codecov-action@v4 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}

3
.gitignore vendored
View File

@ -15,3 +15,6 @@ dist/
coverage/ coverage/
.idea .idea
.claude/
!.claude/skills/

3
.npmrc
View File

@ -1,3 +0,0 @@
strict-peer-dependencies=false
shamefully-hoist=true
shell-emulator=true

View File

@ -76,6 +76,7 @@
"nprogress", "nprogress",
"pnpm", "pnpm",
"portfinder", "portfinder",
"qrcode",
"shiki", "shiki",
"shikiji", "shikiji",
"shikijs", "shikijs",

View File

@ -1,124 +1,411 @@
# [1.0.0-rc.173](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.172...v1.0.0-rc.173) (2025-10-17) # [1.0.0-rc.196](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.195...v1.0.0-rc.196) (2026-04-19)
### Bug Fixes ### Bug Fixes
* **theme:** fix collection type error when the homepage is set as a posts, close [#729](https://github.com/pengzhanbo/vuepress-theme-plume/issues/729) ([#732](https://github.com/pengzhanbo/vuepress-theme-plume/issues/732)) ([0a23b94](https://github.com/pengzhanbo/vuepress-theme-plume/commit/0a23b94232a407eded9cf402702fb81ddd1e1a89)) * fix security ([e512666](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e5126663ef50b4f720424412b38ad3b22a7178da))
* **theme:** fix the layout misalignment of the `<VPButton />` fontawesome icon ([1471547](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1471547bcdce4c6ad4ca2e97422a6627d2876bdc)) * **plugin-md-power:** fix cell display issue caused by colspan in table ([#891](https://github.com/pengzhanbo/vuepress-theme-plume/issues/891)) ([6ebb1bd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6ebb1bda6e4ef379e156e7299c149e10c472d705))
* **theme:** remove `cwd` options from `picomatch` ([#892](https://github.com/pengzhanbo/vuepress-theme-plume/issues/892)) ([58ea2fc](https://github.com/pengzhanbo/vuepress-theme-plume/commit/58ea2fc8cbcef0cb968997ad6dead2f4960d465a))
# [1.0.0-rc.195](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.194...v1.0.0-rc.195) (2026-04-18)
### Features
* **plugin-md-power:** compat obsidian official markdown syntax ([#890](https://github.com/pengzhanbo/vuepress-theme-plume/issues/890)) ([bfd0c84](https://github.com/pengzhanbo/vuepress-theme-plume/commit/bfd0c8409c4c55c82f6c55d681f6b3eaafeaddfb))
# [1.0.0-rc.194](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.193...v1.0.0-rc.194) (2026-04-14)
### Bug Fixes
* **plugin-search:** fix search index race condition on pageUpdated, close [#888](https://github.com/pengzhanbo/vuepress-theme-plume/issues/888) ([#889](https://github.com/pengzhanbo/vuepress-theme-plume/issues/889)) ([28963eb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/28963eb419e9a1707157929fe546dc44d1ef771e))
# [1.0.0-rc.193](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.193...v1.0.0-rc.192) (2026-04-02)
### Bug Fixes
- **plugin-md-power:** fix tsdown icon ([#878](https://github.com/pengzhanbo/vuepress-theme-plume/issues/878)) ([a01bc13](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a01bc13c66266651efe9ee3e9b30ab922c5466cc))
- **theme:** add bulletin to outline ignores ([#879](https://github.com/pengzhanbo/vuepress-theme-plume/issues/879)) ([1b213d4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1b213d4c28a7416e9be48af061f43142533bf387))
- **theme:** fix auto-sidebar group icon error inherit, close [#873](https://github.com/pengzhanbo/vuepress-theme-plume/issues/873) ([#883](https://github.com/pengzhanbo/vuepress-theme-plume/issues/883)) ([dbc6f0b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/dbc6f0be0fe0826770a7b33536d77759e1e89056))
- **theme:** fix incorrect auto-sidebar-link parse ([#880](https://github.com/pengzhanbo/vuepress-theme-plume/issues/880)) ([7febfbf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7febfbf237c1d5b61031d8b4205a1b30bc21519d))
- **theme:** fix MarkdownOptions types ([9fe294b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9fe294b9dd2edb97fb6e8be340ada16328c1bee5))
- **theme:** fix sidebar items prefix not handled correctly, close [#876](https://github.com/pengzhanbo/vuepress-theme-plume/issues/876) ([#885](https://github.com/pengzhanbo/vuepress-theme-plume/issues/885)) ([e9fe35b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e9fe35bc4f172ff6a004e0170b476173cce2e4c1))
- **theme:** twoslash comment error ([#881](https://github.com/pengzhanbo/vuepress-theme-plume/issues/881)) ([aede6f5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/aede6f5d87f836febb8e5bf9fba74ffad197a327))
### Features
- improve accessibility features ([#869](https://github.com/pengzhanbo/vuepress-theme-plume/issues/869)) ([fe0d4bb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fe0d4bbc926eb6f5113707c0bc1535a957ee2304))
### Performance Improvements ### Performance Improvements
* update deps to latest ([ded49c4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ded49c4e8890bcb1bcf920856c72a8ec4a943daf)) - update deps to latest ([cbc5c55](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cbc5c558919f9fcf8ef3e98b000939e3323fdc13))
# [1.0.0-rc.192](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.191...v1.0.0-rc.192) (2026-03-05)
### Bug Fixes
- **plugin-md-power:** fix potential null pointer exceptions when parsing collapse containers ([#866](https://github.com/pengzhanbo/vuepress-theme-plume/issues/866)) ([916e914](https://github.com/pengzhanbo/vuepress-theme-plume/commit/916e9141d9a5a482a40722f80d2cbb64d28651dc))
- **theme:** fix missing attribute for `<VPHomePosts>` ([#864](https://github.com/pengzhanbo/vuepress-theme-plume/issues/864)) ([f11e850](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f11e8501d0e9ebf4805ef8f09f409c68d86126ee))
- **theme:** fix the calculation error in the post cover ratio and add link to cover, close [#863](https://github.com/pengzhanbo/vuepress-theme-plume/issues/863) ([#865](https://github.com/pengzhanbo/vuepress-theme-plume/issues/865)) ([ca51a34](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ca51a345fb8b680804555b4b96fdae1d894c6264))
### Features
- **theme:** add lang switch to update html lang attr ([#867](https://github.com/pengzhanbo/vuepress-theme-plume/issues/867)) ([fd1dd7c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fd1dd7c695bb5b6be9a833b8f7851aa252983022))
### Performance Improvements
- update deps to latest ([aa19049](https://github.com/pengzhanbo/vuepress-theme-plume/commit/aa19049f5b8410838d0d84679e78eabd0f3a47c6))
# [1.0.0-rc.191](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.190...v1.0.0-rc.191) (2026-02-25)
### Bug Fixes
- **plugin-md-power:** fix timeout when retrieving remote image size ([#860](https://github.com/pengzhanbo/vuepress-theme-plume/issues/860)) ([09a95b7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/09a95b7597f18a889ac9fd2189820ce6ea6de9f7))
- **plugin-search:** fix temporary file IO race condition ([#861](https://github.com/pengzhanbo/vuepress-theme-plume/issues/861)) ([948c317](https://github.com/pengzhanbo/vuepress-theme-plume/commit/948c31779b1358be976893d517cbceccb5cc343c))
### Features
- **plugin-md-power:** rename `demo-wrapper` container to `window` ([#858](https://github.com/pengzhanbo/vuepress-theme-plume/issues/858)) ([ce32605](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ce32605aeee40ca873962e21ff8012f320001523))
- rewrite `app.writeTemp` to resolve IO race conditions ([#862](https://github.com/pengzhanbo/vuepress-theme-plume/issues/862)) ([c109d54](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c109d5496152660c436d3fe0ca75b72252808aab))
### Performance Improvements
- update deps to latest ([c541e05](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c541e05997efd03882e92a8f723e91e0fdd01f4f))
# [1.0.0-rc.190](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.189...v1.0.0-rc.190) (2026-02-15)
### Bug Fixes
- **plugin-md-power:** fix timeout issue when retrieving image size ([f2fe79f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f2fe79f923d9bd83f14604e116cdd11d5d66eafe))
- **plugin-search:** fix incorrect prepare search index ([7234eeb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7234eebe7e00c42ccf7d08c95eb617ac274ce049))
# [1.0.0-rc.189](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.188...v1.0.0-rc.189) (2026-02-15)
### Bug Fixes
- **cli:** fix failure to retrieve OS language ([#851](https://github.com/pengzhanbo/vuepress-theme-plume/issues/851)) ([77da8a3](https://github.com/pengzhanbo/vuepress-theme-plume/commit/77da8a347023f2f4b9d2a4a03c9aa3ef306ca456))
# [1.0.0-rc.188](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.187...v1.0.0-rc.188) (2026-02-13)
### Bug Fixes
- **theme:** broken card a11y, close [#841](https://github.com/pengzhanbo/vuepress-theme-plume/issues/841) ([#848](https://github.com/pengzhanbo/vuepress-theme-plume/issues/848)) ([5a73b59](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5a73b59297f50fedce0a4aa4ddd6f209d38d87cc))
- **theme:** fix overflow scrolling in the tab container nav, close [#842](https://github.com/pengzhanbo/vuepress-theme-plume/issues/842) ([#847](https://github.com/pengzhanbo/vuepress-theme-plume/issues/847)) ([98a969c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/98a969c112af90c492e022a706f892461f6923f8))
- **theme:** fix prev/next nav when include sep, close [#846](https://github.com/pengzhanbo/vuepress-theme-plume/issues/846) ([#849](https://github.com/pengzhanbo/vuepress-theme-plume/issues/849)) ([d2b4654](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d2b4654ae361d9ab0adfcb2075cccad7bfccfa48))
- **theme:** navbar dropdown renders incorrectly in Safari, close [#830](https://github.com/pengzhanbo/vuepress-theme-plume/issues/830) ([#832](https://github.com/pengzhanbo/vuepress-theme-plume/issues/832)) ([a13ed1f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a13ed1f50397e65fa4697897138369a8177bbbf2))
### Features
- add agent skills ([#823](https://github.com/pengzhanbo/vuepress-theme-plume/issues/823)) ([07c274c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/07c274cdbf2f55e319fb862a332b0f2cf32a2c18))
- **plugin-md-power:** add `::: encrypt` container, close [#815](https://github.com/pengzhanbo/vuepress-theme-plume/issues/815) ([#831](https://github.com/pengzhanbo/vuepress-theme-plume/issues/831)) ([b1f996c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b1f996cb0ec9ebd9135adf855de4363696f0161e))
- **plugin-md-power:** add copy button for file-tree container, close [#835](https://github.com/pengzhanbo/vuepress-theme-plume/issues/835) ([#837](https://github.com/pengzhanbo/vuepress-theme-plume/issues/837)) ([2780abd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2780abd7824ad670e2f482ca90c24fa53fd110fe))
- **plugin-md-power:** add icons about ai ([#836](https://github.com/pengzhanbo/vuepress-theme-plume/issues/836)) ([32e4f92](https://github.com/pengzhanbo/vuepress-theme-plume/commit/32e4f92c6198672bc45d31a9fcc3e4a47c8bca36))
- **plugin-search:** add language-based text segmentation support for search ([#838](https://github.com/pengzhanbo/vuepress-theme-plume/issues/838)) ([8cd08f4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8cd08f4f02de72f6c02cc07ec1e1ab3103081dd4))
- **theme:** add sidebar collapse button, close [#687](https://github.com/pengzhanbo/vuepress-theme-plume/issues/687) ([#839](https://github.com/pengzhanbo/vuepress-theme-plume/issues/839)) ([3e68b44](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3e68b44771f4c3b0604af312e33e2edc4e8a1e12))
- **theme:** improve title template ([#833](https://github.com/pengzhanbo/vuepress-theme-plume/issues/833)) ([d573fad](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d573fada7a4cdd6e16885f9d0774d25bf4d1759a))
### Performance Improvements
- optimize memory usage during build time ([#850](https://github.com/pengzhanbo/vuepress-theme-plume/issues/850)) ([78a2859](https://github.com/pengzhanbo/vuepress-theme-plume/commit/78a28593987ff7b5032f2eac5674f753d81e68ea))
- update deps to latest ([8d4ce99](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8d4ce99c16d1f67d3352f29de8cab83de225a8cc))
# [1.0.0-rc.187](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.186...v1.0.0-rc.187) (2026-01-19)
### Bug Fixes
- **theme:** incorrect icon name validation ([6a41d44](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6a41d4432221371c58aac0c1326ecd89f23b5d92))
# [1.0.0-rc.186](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.185...v1.0.0-rc.186) (2026-01-19)
### Bug Fixes
- **theme:** fix multiple icon provider ([#826](https://github.com/pengzhanbo/vuepress-theme-plume/issues/826)) ([85fc35f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/85fc35f11916b2e3460dd820a5a6cf38113458cf))
- **theme:** fix page encrypt password type error ([#819](https://github.com/pengzhanbo/vuepress-theme-plume/issues/819)) ([1dfbb87](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1dfbb872f7d3eb79ae907497690e18e4414cc5ea))
- **theme:** fix theme config hmr fail ([#820](https://github.com/pengzhanbo/vuepress-theme-plume/issues/820)) ([48970dd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/48970dd559f3d09e54382cf5e6051cddfb25ebc5))
### Features
- **plugin-md-power:** add markdown env presets, [#815](https://github.com/pengzhanbo/vuepress-theme-plume/issues/815) ([#818](https://github.com/pengzhanbo/vuepress-theme-plume/issues/818)) ([f51dff1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f51dff1d582d7f825ed8a020642a4ec6e9671453))
- **theme:** add filepath permalink support for auto frontmatter, [#815](https://github.com/pengzhanbo/vuepress-theme-plume/issues/815) ([#822](https://github.com/pengzhanbo/vuepress-theme-plume/issues/822)) ([a3d8e22](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a3d8e225b96b8950d72ba6bb1a43cfecd926afd5))
- **theme:** add perplexity to context menu ([#817](https://github.com/pengzhanbo/vuepress-theme-plume/issues/817)) ([79397fa](https://github.com/pengzhanbo/vuepress-theme-plume/commit/79397faa65860591489d34eec92075fdd5d44831))
### Performance Improvements
- update deps to latest ([2a5bd30](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2a5bd30fe3853c8cb722a76a7be5f3426fab03b3))
# [1.0.0-rc.185](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.184...v1.0.0-rc.185) (2026-01-09)
### Bug Fixes
- **theme:** add slot existence check in VPDocFooter, close [#809](https://github.com/pengzhanbo/vuepress-theme-plume/issues/809) ([#811](https://github.com/pengzhanbo/vuepress-theme-plume/issues/811)) ([2cadb7d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2cadb7d88cbdcce1688f1e58cdb9c3a74090057f))
- **theme:** fix custom social icon rendering misalignment ([#812](https://github.com/pengzhanbo/vuepress-theme-plume/issues/812)) ([7ed7023](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7ed70230afd5fa2f388320c529a364dd572481e9))
### Features
- **theme:** add support for base64 for profile avatars ([#808](https://github.com/pengzhanbo/vuepress-theme-plume/issues/808)) ([cc3582c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cc3582c1f9e3bfc96b2a6164dac8e68cea8c0521))
### Performance Improvements
- update deps to latest ([a74c475](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a74c475d7cf93b295dd95f934ca820135e64fb6b))
# [1.0.0-rc.184](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.183...v1.0.0-rc.184) (2025-12-28)
### Bug Fixes
- **theme:** incorrect url convert in `PageContextMenu` ([#807](https://github.com/pengzhanbo/vuepress-theme-plume/issues/807)) ([9bbba1a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9bbba1ada670c2f927414534605b6b3744c246e8))
### Features
- **plugin-md-power:** improve caniuse syntax ([#806](https://github.com/pengzhanbo/vuepress-theme-plume/issues/806)) ([fe9ee0d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fe9ee0dbfce9896fdaea72d8f77e7d065577d97d))
# [1.0.0-rc.183](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.182...v1.0.0-rc.183) (2025-12-13)
### Bug Fixes
- fix incorrect icon rendering, close [#799](https://github.com/pengzhanbo/vuepress-theme-plume/issues/799) ([#800](https://github.com/pengzhanbo/vuepress-theme-plume/issues/800)) ([a15f4e2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a15f4e206df3324de24c7d8ca7654a702b84e871))
- **theme:** fix incorrect code block rendering within card, close [#798](https://github.com/pengzhanbo/vuepress-theme-plume/issues/798) ([#801](https://github.com/pengzhanbo/vuepress-theme-plume/issues/801)) ([ce19b84](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ce19b842327d8cedbc2718cc4a3fc36548d08e4b))
### Performance Improvements
- update deps to latest ([eb73f3d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/eb73f3d3f1d45cc295900bc3b29ac535ca3d379f))
# [1.0.0-rc.182](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.181...v1.0.0-rc.182) (2025-12-13)
### Bug Fixes
- **plugin-md-power:** fix `file-tree` container incorrectly rendering in nesting content, close [#795](https://github.com/pengzhanbo/vuepress-theme-plume/issues/795) ([#797](https://github.com/pengzhanbo/vuepress-theme-plume/issues/797)) ([956869a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/956869ab1eaf9aac7db4c99a7e49457373cf6be2))
- **plugin-md-power:** fix `mark` lazy animation, close [#789](https://github.com/pengzhanbo/vuepress-theme-plume/issues/789) ([#791](https://github.com/pengzhanbo/vuepress-theme-plume/issues/791)) ([a350e62](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a350e62645e5597195766aa88dd8c3469114a3c9))
- **theme:** fix boundary detection error for `config` on home ([#785](https://github.com/pengzhanbo/vuepress-theme-plume/issues/785)) ([6383347](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6383347813353f7b367dca150b1137cf77979b80))
- **theme:** fix render overflow of code block within Card on mobile, close [#782](https://github.com/pengzhanbo/vuepress-theme-plume/issues/782) ([#787](https://github.com/pengzhanbo/vuepress-theme-plume/issues/787)) ([46797a0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/46797a07573b60783e5f4081591d9a60f705b6b8))
### Features
- **cli:** update lowest version support for nodejs ([#786](https://github.com/pengzhanbo/vuepress-theme-plume/issues/786)) ([65da846](https://github.com/pengzhanbo/vuepress-theme-plume/commit/65da8469ce76aaa0679533205d63dd77099336ee))
- **theme:** add `cols` frontmatter support for `friends` page, close [#781](https://github.com/pengzhanbo/vuepress-theme-plume/issues/781) ([#792](https://github.com/pengzhanbo/vuepress-theme-plume/issues/792)) ([15e6201](https://github.com/pengzhanbo/vuepress-theme-plume/commit/15e62010c2ec5d3155068e2e104b756eb4afcaca))
- **theme:** add meta config support for collection, close [#781](https://github.com/pengzhanbo/vuepress-theme-plume/issues/781) ([#796](https://github.com/pengzhanbo/vuepress-theme-plume/issues/796)) ([6e601f9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6e601f9f0e623d85fded8b879982777d0c660691))
- **theme:** add theme config changed logger ([#784](https://github.com/pengzhanbo/vuepress-theme-plume/issues/784)) ([2c360ac](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2c360ac59e845aae9a94c7b54e9928f2f7254399))
### Performance Improvements
- update deps to latest ([98684ed](https://github.com/pengzhanbo/vuepress-theme-plume/commit/98684ed66a442b0a038849c68961d9b30912a4dc))
# [1.0.0-rc.181](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.180...v1.0.0-rc.181) (2025-12-05)
### Bug Fixes
- **i18n:** update Traditional Chinese translations for search and theme locales ([#767](https://github.com/pengzhanbo/vuepress-theme-plume/issues/767)) ([3df96e2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3df96e270287ad091be16db4f94c8656ac01cdb4))
- **theme:** blockquote icon color in dark mode ([#769](https://github.com/pengzhanbo/vuepress-theme-plume/issues/769)) ([4957c8b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4957c8b1de238693a24915c2809de6bd45da9a70))
- **theme:** fix doc-footer text decoration ([#778](https://github.com/pengzhanbo/vuepress-theme-plume/issues/778)) ([9b2b73e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9b2b73e05ba322e169a5953ab14adb673e2248e2))
- **theme:** fix home hero background `tint-plate` rendering fail, close [#775](https://github.com/pengzhanbo/vuepress-theme-plume/issues/775) ([#776](https://github.com/pengzhanbo/vuepress-theme-plume/issues/776)) ([5f82bde](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5f82bdeb6779b462a80377300531575c0c24a245))
- **theme:** fix navbar horizontal overflow ([#772](https://github.com/pengzhanbo/vuepress-theme-plume/issues/772)) ([3553022](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3553022597f5d8b34c5eba23c73b96fcf926a82d))
- **theme:** fix parsing error for relative path link ([#779](https://github.com/pengzhanbo/vuepress-theme-plume/issues/779)) ([0771024](https://github.com/pengzhanbo/vuepress-theme-plume/commit/07710247bbb020cd6b4f2b9604900d1e4015b252))
- **theme:** fix sidebar curtain position-top ([#771](https://github.com/pengzhanbo/vuepress-theme-plume/issues/771)) ([cd37921](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cd3792197506767b64f05cfb8a92e05564d4ec2f))
### Features
- **plugin-md-power:** add qrcode syntax plugin for markdown ([#777](https://github.com/pengzhanbo/vuepress-theme-plume/issues/777)) ([157281a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/157281aec83f9029b7319825a49403ca115729ca))
- **plugin-md-power:** add markdown-it-cjk-friendly plugin ([#773](https://github.com/pengzhanbo/vuepress-theme-plume/issues/773)) ([32f4a8b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/32f4a8be5a237b773f79a9c3cff387975250ec43))
- **theme:** migrate `bcrypt-ts` to `hash-wasm` ([#774](https://github.com/pengzhanbo/vuepress-theme-plume/issues/774)) ([4b1cecf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4b1cecf2bd2b60d5b12f7b04993a0598ad314f5c))
- **theme:** support encryption for all page layouts ([#770](https://github.com/pengzhanbo/vuepress-theme-plume/issues/770)) ([20ebeb5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/20ebeb5e6290d9d9816fd0ea5b84c98fd21c957f))
### Performance Improvements
- update deps to latest ([8faba7b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8faba7bf1057c98fbf327867455f2d3c38d0fcdf))
# [1.0.0-rc.180](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.179...v1.0.0-rc.180) (2025-12-01)
### Bug Fixes
- support nested ordered lists in collapse plugin ([#764](https://github.com/pengzhanbo/vuepress-theme-plume/issues/764)) ([bba9898](https://github.com/pengzhanbo/vuepress-theme-plume/commit/bba98984d6d367f1b1f64f17bc8fbb4143484b67))
- **theme:** fix hybrid mismatch ([#763](https://github.com/pengzhanbo/vuepress-theme-plume/issues/763)) ([41d2a81](https://github.com/pengzhanbo/vuepress-theme-plume/commit/41d2a81a09604f45c32a76b04e784b737525f238))
- **theme:** incorrect displaying external link icon ([#760](https://github.com/pengzhanbo/vuepress-theme-plume/issues/760)) ([e0b972c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e0b972c3cbc51a53563a8255a319e9dbb54d025c))
- **theme:** llmstxt should exclude encrypt page ([#761](https://github.com/pengzhanbo/vuepress-theme-plume/issues/761)) ([f599a42](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f599a4223cc68886ef7c37103437c77bab5493b6))
### Features
- **cli:** optimize template ([#765](https://github.com/pengzhanbo/vuepress-theme-plume/issues/765)) ([c97a5af](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c97a5af473ac7417fffc866a4823dba948ee3ade))
### Performance Improvements
- **theme:** optimize `VPFooter` and `VPFriends` layout ([#762](https://github.com/pengzhanbo/vuepress-theme-plume/issues/762)) ([6a3babc](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6a3babcf76a67ad161aec24c951fabaf257442c2))
- update deps to latest ([3a907e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3a907e0ba8849754bd868b08b67b123d247cdc1d))
# [1.0.0-rc.179](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.178...v1.0.0-rc.179) (2025-11-25)
### Features
- **cli:** add env config to template ([a4bea82](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a4bea8202b96728affdb01887535911d27b9a575))
- **theme:** add `footer` frontmatter ([ddb77a0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ddb77a06a5bea91593d797ee307fcf2f115dd60b))
- **theme:** add support for `{data-outline="level"}` attribute syntax for headings, close [#757](https://github.com/pengzhanbo/vuepress-theme-plume/issues/757) ([#759](https://github.com/pengzhanbo/vuepress-theme-plume/issues/759)) ([fc3676d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fc3676d6dcb89ab4f175c8e54d3b61697e0f9233))
- **theme:** exclude encrypt page in llmstxt ([#758](https://github.com/pengzhanbo/vuepress-theme-plume/issues/758)) ([73f4935](https://github.com/pengzhanbo/vuepress-theme-plume/commit/73f4935ca9656a0ce73005995f896a1602e0a63c))
### Performance Improvements
- update deps to latest ([c1f59cf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c1f59cf4510247eebbfa7d74d4629e9441998928))
# [1.0.0-rc.178](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.177...v1.0.0-rc.178) (2025-11-19)
### Bug Fixes
- **theme:** fix post-list width overflow ([ad1f02d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ad1f02de620d462e59ee832ae224e713772229e8))
### Features
- **theme:** add `plugin-llms` and `<PageContextMenu />` component ([#753](https://github.com/pengzhanbo/vuepress-theme-plume/issues/753)) ([20728f5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/20728f504d2ddba55e4bcca2f7a1b6793fa9ba04))
### Performance Improvements
- update deps to latest ([4884b1a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4884b1acce103c0dc97a2ba204652cb3362b1f42))
# [1.0.0-rc.177](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.176...v1.0.0-rc.177) (2025-11-14)
### Bug Fixes
- **theme:** fix `fixed` position failure in Safari ([4119b67](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4119b67e0bc4adcd88a3b2590debcbcf93dc29bb))
- **theme:** fix table max-width overflow ([05d55e5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/05d55e5035b6f71eca6ef680f68391087960b959))
### Features
- **cli:** typescript as a required dependency ([6fc6385](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6fc6385de4e1eb4ca6477bb08de4fac1dac4fa02))
- **theme:** optimize `VPCollapse` styles within `Card` ([f95e7c8](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f95e7c841270424da23387e3f2283a218052bfba))
- **theme:** when `navbar` is empty, no preset is applied ([ab26dec](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ab26dec4574bf4d280348be5670be6c717ccc159))
### Performance Improvements
- update deps to latest ([5b07f2d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5b07f2dd2132d053de66bc0809bc6838fd78ad77))
# [1.0.0-rc.176](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.175...v1.0.0-rc.176) (2025-11-09)
### Bug Fixes
- **cli:** corrects function call for defining multiple collections ([#748](https://github.com/pengzhanbo/vuepress-theme-plume/issues/748)) ([2fc6ea5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2fc6ea5064031274a7f9e293e507768bc14ec8d4))
- **theme:** conditionally render post navigation links on mobile devices ([#749](https://github.com/pengzhanbo/vuepress-theme-plume/issues/749)) ([b6ee4a4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b6ee4a4b3dc1d70463cb89bd0e3167338fc5b107))
- **theme:** fix use admin decrypt page error ([a63c094](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a63c094df941f198ece32346f9623c282d0f9b6a))
### Features
- **theme:** optimize page encrypt ([#750](https://github.com/pengzhanbo/vuepress-theme-plume/issues/750)) ([a5dfef7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a5dfef7202e2eb3abf34236de4abc8d2eea41638))
### Performance Improvements
- update deps to latest ([3362056](https://github.com/pengzhanbo/vuepress-theme-plume/commit/336205627e517336c66c5a3558a5608ef632754e))
# [1.0.0-rc.175](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.174...v1.0.0-rc.175) (2025-10-31)
### Bug Fixes
- **theme:** fix auto-sidebar collapsed ([#746](https://github.com/pengzhanbo/vuepress-theme-plume/issues/746)) ([192017b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/192017b892198458f028638279b27ead309b232b))
- **theme:** fix language component not displaying correctly ([19868d1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/19868d147e59a74695c73226f8b061dddd96c8ad))
### Features
- **plugin-md-power:** add `full-width` support for table container, close [#740](https://github.com/pengzhanbo/vuepress-theme-plume/issues/740) ([#741](https://github.com/pengzhanbo/vuepress-theme-plume/issues/741)) ([0e38265](https://github.com/pengzhanbo/vuepress-theme-plume/commit/0e38265f961f73a901f2e3fee6e02e2949bca4c8))
- **theme:** add `dark-veil` home hero effect ([#747](https://github.com/pengzhanbo/vuepress-theme-plume/issues/747)) ([3d48446](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3d48446769ec466c96072dc63019c5ffef6a1c40))
- **theme:** optimize local nav ([fbb6ec9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fbb6ec9a634ae7a26c16df2a97ea1c16a3a24d46))
### Performance Improvements
- **theme:** cleanup home hero effect when unmounted ([802911c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/802911c1796b29ca0ee154179c91f8f083b50c5e))
- update deps to latest ([606f47a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/606f47a5a68cd6d2842d2892d180d781c47e1b78))
# [1.0.0-rc.174](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.173...v1.0.0-rc.174) (2025-10-25)
### Bug Fixes
- **plugin-md-power:** avoid spellcheck in CodeEditor ([#736](https://github.com/pengzhanbo/vuepress-theme-plume/issues/736)) ([441b991](https://github.com/pengzhanbo/vuepress-theme-plume/commit/441b991b65ccda884f8fa7da33d8088e594507e4))
- **theme:** fix ssr compile error ([be565ba](https://github.com/pengzhanbo/vuepress-theme-plume/commit/be565baf597c94508f00706e88d9a9ba31c89654))
### Features
- **theme:** add home hero effects ([#738](https://github.com/pengzhanbo/vuepress-theme-plume/issues/738)) ([aa6168c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/aa6168c31dd06d7ebbc2085fae06f037cdd2d0bd))
### Performance Improvements
- update deps to latest ([ca39869](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ca3986917cc4e20ce14e7ed414f002667e48f78f))
- update deps to latest ([51e1f52](https://github.com/pengzhanbo/vuepress-theme-plume/commit/51e1f5260cf9a825146e9fb3abcceeca7dc73b48))
# [1.0.0-rc.173](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.172...v1.0.0-rc.173) (2025-10-17)
### Bug Fixes
- **theme:** fix collection type error when the homepage is set as a posts, close [#729](https://github.com/pengzhanbo/vuepress-theme-plume/issues/729) ([#732](https://github.com/pengzhanbo/vuepress-theme-plume/issues/732)) ([0a23b94](https://github.com/pengzhanbo/vuepress-theme-plume/commit/0a23b94232a407eded9cf402702fb81ddd1e1a89))
- **theme:** fix the layout misalignment of the `<VPButton />` fontawesome icon ([1471547](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1471547bcdce4c6ad4ca2e97422a6627d2876bdc))
### Performance Improvements
- update deps to latest ([ded49c4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ded49c4e8890bcb1bcf920856c72a8ec4a943daf))
# [1.0.0-rc.172](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.171...v1.0.0-rc.172) (2025-10-15) # [1.0.0-rc.172](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.171...v1.0.0-rc.172) (2025-10-15)
### Bug Fixes ### Bug Fixes
* **theme:** fix post category sort error ([#727](https://github.com/pengzhanbo/vuepress-theme-plume/issues/727)) ([707d534](https://github.com/pengzhanbo/vuepress-theme-plume/commit/707d534b9579aca35824a3948d6b9f95515171d6)) - **theme:** fix post category sort error ([#727](https://github.com/pengzhanbo/vuepress-theme-plume/issues/727)) ([707d534](https://github.com/pengzhanbo/vuepress-theme-plume/commit/707d534b9579aca35824a3948d6b9f95515171d6))
### Features ### Features
* **cli:** sort package.json ([d30325d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d30325dd96983df8153f8a521ba8c8eae01ddad4)) - **cli:** sort package.json ([d30325d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d30325dd96983df8153f8a521ba8c8eae01ddad4))
* **theme:** add icon to doc footer prev-next ([#726](https://github.com/pengzhanbo/vuepress-theme-plume/issues/726)) ([4abc1ee](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4abc1eeb5863794f8c729b70c1785a989c021969)) - **theme:** add icon to doc footer prev-next ([#726](https://github.com/pengzhanbo/vuepress-theme-plume/issues/726)) ([4abc1ee](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4abc1eeb5863794f8c729b70c1785a989c021969))
* **theme:** optimize view transition ([#725](https://github.com/pengzhanbo/vuepress-theme-plume/issues/725)) ([1503a20](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1503a20fbe41f5ba73f975ef16a602583b1d8f35)) - **theme:** optimize view transition ([#725](https://github.com/pengzhanbo/vuepress-theme-plume/issues/725)) ([1503a20](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1503a20fbe41f5ba73f975ef16a602583b1d8f35))
### Performance Improvements ### Performance Improvements
* update deps to latest ([74b4ddf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/74b4ddf8f560cde157c29094d630e4ec98a782c2)) - update deps to latest ([74b4ddf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/74b4ddf8f560cde157c29094d630e4ec98a782c2))
# [1.0.0-rc.171](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.170...v1.0.0-rc.171) (2025-10-13) # [1.0.0-rc.171](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.170...v1.0.0-rc.171) (2025-10-13)
### Bug Fixes ### Bug Fixes
* **theme:** fix `fontawesome` icon, close [#720](https://github.com/pengzhanbo/vuepress-theme-plume/issues/720) ([#721](https://github.com/pengzhanbo/vuepress-theme-plume/issues/721)) ([89cb6a5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/89cb6a585aa43b447e35c9c83fc234aa6ef7b368)) - **theme:** fix `fontawesome` icon, close [#720](https://github.com/pengzhanbo/vuepress-theme-plume/issues/720) ([#721](https://github.com/pengzhanbo/vuepress-theme-plume/issues/721)) ([89cb6a5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/89cb6a585aa43b447e35c9c83fc234aa6ef7b368))
* **theme:** fix sidebar link concatenation error ([#722](https://github.com/pengzhanbo/vuepress-theme-plume/issues/722)) ([c476c20](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c476c2059b98590ba2909dcc6186ae656b93e1b9)) - **theme:** fix sidebar link concatenation error ([#722](https://github.com/pengzhanbo/vuepress-theme-plume/issues/722)) ([c476c20](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c476c2059b98590ba2909dcc6186ae656b93e1b9))
### Features ### Features
* **plugin-md-power:** add lazy animation mode for mark highlights ([#718](https://github.com/pengzhanbo/vuepress-theme-plume/issues/718)) ([5c0d211](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5c0d211d8223e64a9186ce5f3c7d887e969bbefc)) - **plugin-md-power:** add lazy animation mode for mark highlights ([#718](https://github.com/pengzhanbo/vuepress-theme-plume/issues/718)) ([5c0d211](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5c0d211d8223e64a9186ce5f3c7d887e969bbefc))
# [1.0.0-rc.170](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.169...v1.0.0-rc.170) (2025-10-12) # [1.0.0-rc.170](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.169...v1.0.0-rc.170) (2025-10-12)
### Bug Fixes ### Bug Fixes
* **theme:** fix page transition flickering ([#717](https://github.com/pengzhanbo/vuepress-theme-plume/issues/717)) ([8cec3f2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8cec3f23e4765560424b160ac17891098c8ee97a)) - **theme:** fix page transition flickering ([#717](https://github.com/pengzhanbo/vuepress-theme-plume/issues/717)) ([8cec3f2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8cec3f23e4765560424b160ac17891098c8ee97a))
* **theme:** incorrect sidebar link prefix, close [#714](https://github.com/pengzhanbo/vuepress-theme-plume/issues/714), [#710](https://github.com/pengzhanbo/vuepress-theme-plume/issues/710) ([#715](https://github.com/pengzhanbo/vuepress-theme-plume/issues/715)) ([3a07f59](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3a07f590cbed071eaaea6f99703e1791a1794550)) - **theme:** incorrect sidebar link prefix, close [#714](https://github.com/pengzhanbo/vuepress-theme-plume/issues/714), [#710](https://github.com/pengzhanbo/vuepress-theme-plume/issues/710) ([#715](https://github.com/pengzhanbo/vuepress-theme-plume/issues/715)) ([3a07f59](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3a07f590cbed071eaaea6f99703e1791a1794550))
* **theme:** optimize post category styles ([338ca4a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/338ca4ad7c3479a4821f53771e485faaecc0d075)) - **theme:** optimize post category styles ([338ca4a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/338ca4ad7c3479a4821f53771e485faaecc0d075))
# [1.0.0-rc.169](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.168...v1.0.0-rc.169) (2025-10-09) # [1.0.0-rc.169](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.168...v1.0.0-rc.169) (2025-10-09)
### Bug Fixes ### Bug Fixes
* **theme:** fix post collection links, close [#709](https://github.com/pengzhanbo/vuepress-theme-plume/issues/709) ([#712](https://github.com/pengzhanbo/vuepress-theme-plume/issues/712)) ([b3843c7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b3843c7d97972acf61840ffc6e2e849da60df814)) - **theme:** fix post collection links, close [#709](https://github.com/pengzhanbo/vuepress-theme-plume/issues/709) ([#712](https://github.com/pengzhanbo/vuepress-theme-plume/issues/712)) ([b3843c7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b3843c7d97972acf61840ffc6e2e849da60df814))
# [1.0.0-rc.168](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.167...v1.0.0-rc.168) (2025-10-08) # [1.0.0-rc.168](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.167...v1.0.0-rc.168) (2025-10-08)
### Bug Fixes ### Bug Fixes
* **theme:** fix I/O race condition causing auto frontmatter not to be written ([3b5e2cc](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3b5e2cc5b3ce11e168c501c3885c4663a5fe49da)) - **theme:** fix I/O race condition causing auto frontmatter not to be written ([3b5e2cc](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3b5e2cc5b3ce11e168c501c3885c4663a5fe49da))
* **theme:** sidebar prefix concat incorrectly ([9f3de6b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9f3de6b8eadfdf95e9d5f47cfcec1320a8adb38a)) - **theme:** sidebar prefix concat incorrectly ([9f3de6b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9f3de6b8eadfdf95e9d5f47cfcec1320a8adb38a))
### Performance Improvements ### Performance Improvements
* update deps to latest ([104370c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/104370ca425ee5478f6485135b2a597abc611f49)) - update deps to latest ([104370c](https://github.com/pengzhanbo/vuepress-theme-plume/commit/104370ca425ee5478f6485135b2a597abc611f49))
# [1.0.0-rc.167](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.166...v1.0.0-rc.167) (2025-10-07) # [1.0.0-rc.167](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.166...v1.0.0-rc.167) (2025-10-07)
### Bug Fixes ### Bug Fixes
* **theme:** incorrect configuration loading and page generation sequence ([2e1ad23](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2e1ad231120a40fba5b38e68d7d46ba367fa85f8)) - **theme:** incorrect configuration loading and page generation sequence ([2e1ad23](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2e1ad231120a40fba5b38e68d7d46ba367fa85f8))
# [1.0.0-rc.166](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.165...v1.0.0-rc.166) (2025-10-07) # [1.0.0-rc.166](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.165...v1.0.0-rc.166) (2025-10-07)
### Bug Fixes ### Bug Fixes
* **theme:** incorrect collection auto complete ([2a8385f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2a8385f3aa1c8c2fa1a6de7b99cdf1ae62d8ca57)) - **theme:** incorrect collection auto complete ([2a8385f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2a8385f3aa1c8c2fa1a6de7b99cdf1ae62d8ca57))
### Features ### Features
* **theme:** add collection breaking change log ([b37af47](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b37af47dca080b3f1d6505602f79c86bde08c57b)) - **theme:** add collection breaking change log ([b37af47](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b37af47dca080b3f1d6505602f79c86bde08c57b))
# [1.0.0-rc.165](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.164...v1.0.0-rc.165) (2025-10-07) # [1.0.0-rc.165](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.164...v1.0.0-rc.165) (2025-10-07)
### &nbsp;&nbsp;&nbsp;🚨 Breaking Changes
- `blog & notes` is deprecated, use `collections` instead. Please refer to the [migration documentation](https://theme-plume.vuejs.press/blog/dk58a4t2/).
### Feature
- **theme**: Add collections support &nbsp;-&nbsp; by @pengzhanbo in https://github.com/pengzhanbo/vuepress-theme-plume/issues/704 [<samp>(4d236)</samp>](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4d2361a7)
##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.164...v1.0.0-rc.165)
# [1.0.0-rc.164](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.163...v1.0.0-rc.164) (2025-09-20) # [1.0.0-rc.164](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.163...v1.0.0-rc.164) (2025-09-20)
### Bug Fixes ### Bug Fixes
@ -846,7 +1133,7 @@
- **theme:** incorrect auto generate sidebar, close [#307](https://github.com/pengzhanbo/vuepress-theme-plume/issues/307) ([#308](https://github.com/pengzhanbo/vuepress-theme-plume/issues/308)) ([b98f46a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b98f46a9145d915437f34b8617ac77afcab08113)) - **theme:** incorrect auto generate sidebar, close [#307](https://github.com/pengzhanbo/vuepress-theme-plume/issues/307) ([#308](https://github.com/pengzhanbo/vuepress-theme-plume/issues/308)) ([b98f46a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/b98f46a9145d915437f34b8617ac77afcab08113))
- **theme:** incorrect layer for `LinkCard` icon, close [#310](https://github.com/pengzhanbo/vuepress-theme-plume/issues/310) ([#313](https://github.com/pengzhanbo/vuepress-theme-plume/issues/313)) ([4237310](https://github.com/pengzhanbo/vuepress-theme-plume/commit/423731056047c59c183f95ac5c545af684ec6039)) - **theme:** incorrect layer for `LinkCard` icon, close [#310](https://github.com/pengzhanbo/vuepress-theme-plume/issues/310) ([#313](https://github.com/pengzhanbo/vuepress-theme-plume/issues/313)) ([4237310](https://github.com/pengzhanbo/vuepress-theme-plume/commit/423731056047c59c183f95ac5c545af684ec6039))
- **theme:** incorrect date format, close [#312](https://github.com/pengzhanbo/vuepress-theme-plume/issues/312) ([#314](https://github.com/pengzhanbo/vuepress-theme-plume/issues/314)) ([97b59bf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/97b59bfc76f050ef39a80a68f8176189021406f6)) - **theme:** incorrect time format, close [#312](https://github.com/pengzhanbo/vuepress-theme-plume/issues/312) ([#314](https://github.com/pengzhanbo/vuepress-theme-plume/issues/314)) ([97b59bf](https://github.com/pengzhanbo/vuepress-theme-plume/commit/97b59bfc76f050ef39a80a68f8176189021406f6))
### Performance Improvements ### Performance Improvements
@ -874,7 +1161,7 @@
- **theme:** blog cover hydration mismatch in mobile ([#290](https://github.com/pengzhanbo/vuepress-theme-plume/issues/290)) ([cb9d7f1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cb9d7f18ede7a0cd4bbc45c5729dd4c8588dc4b7)) - **theme:** blog cover hydration mismatch in mobile ([#290](https://github.com/pengzhanbo/vuepress-theme-plume/issues/290)) ([cb9d7f1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cb9d7f18ede7a0cd4bbc45c5729dd4c8588dc4b7))
- **theme:** incorrect breadcrumb when blog home ([#292](https://github.com/pengzhanbo/vuepress-theme-plume/issues/292)) ([38e6009](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38e6009fda79000f1be351aab4ed1b6dc0f6f2bc)) - **theme:** incorrect breadcrumb when blog home ([#292](https://github.com/pengzhanbo/vuepress-theme-plume/issues/292)) ([38e6009](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38e6009fda79000f1be351aab4ed1b6dc0f6f2bc))
- **theme:** silent sass `[@import](https://github.com/import)` deprecation warning, close [#291](https://github.com/pengzhanbo/vuepress-theme-plume/issues/291) ([#293](https://github.com/pengzhanbo/vuepress-theme-plume/issues/293)) ([f4cc452](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f4cc4529b8e388969d9e4fcb7b142146cfd03545)) - **theme:** silent sass `@import` deprecation warning, close [#291](https://github.com/pengzhanbo/vuepress-theme-plume/issues/291) ([#293](https://github.com/pengzhanbo/vuepress-theme-plume/issues/293)) ([f4cc452](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f4cc4529b8e388969d9e4fcb7b142146cfd03545))
### Performance Improvements ### Performance Improvements
@ -1154,7 +1441,7 @@
- **theme:** breadcrumb ui ([38eb41a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38eb41a48d3cd916d8bd965fbd045fdaaf49a47b)) - **theme:** breadcrumb ui ([38eb41a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38eb41a48d3cd916d8bd965fbd045fdaaf49a47b))
- **theme:** code demo ui ([cc9b5f8](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cc9b5f8a40f502fa4d0fa7400e5807387445ee25)) - **theme:** code demo ui ([cc9b5f8](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cc9b5f8a40f502fa4d0fa7400e5807387445ee25))
- **theme:** hidden code block copy button in mobile ([d9c43b5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d9c43b57388cfae4a993a19b5fe6b6b813f4eab9)) - **theme:** hidden code block copy button in mobile ([d9c43b5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d9c43b57388cfae4a993a19b5fe6b6b813f4eab9))
- **theme:** optimize `<LinkCard />` ui ([220940b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/220940b2a574761d69269d0c76c6db1a4d33af01)) - **theme:** optimize `<LinkCard /> ui ([220940b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/220940b2a574761d69269d0c76c6db1a4d33af01))
- **theme:** optimize auto frontmatter ([4b2739b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4b2739bff0401e94a4122c2a058daa73edb10b0e)) - **theme:** optimize auto frontmatter ([4b2739b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4b2739bff0401e94a4122c2a058daa73edb10b0e))
- **theme:** optimize composables ([c16cf37](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c16cf37dd1724e78a37903a2f2a5c46b3286699a)) - **theme:** optimize composables ([c16cf37](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c16cf37dd1724e78a37903a2f2a5c46b3286699a))
- **theme:** optimize load theme config ([047e052](https://github.com/pengzhanbo/vuepress-theme-plume/commit/047e0527f5cbcfb8f2a38369e98265b625e5b381)) - **theme:** optimize load theme config ([047e052](https://github.com/pengzhanbo/vuepress-theme-plume/commit/047e0527f5cbcfb8f2a38369e98265b625e5b381))
@ -1504,12 +1791,6 @@
### Performance Improvements ### Performance Improvements
- **theme:** 重命名 `avatar``profile` ([7e06520](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7e065208a9ab02f3caad55975482a8a063e5c98b)) - **theme:** 重命名 `avatar``profile` ([7e06520](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7e065208a9ab02f3caad55975482a8a063e5c98b))
- **theme:** 重命名所有组件名为 `VP*`
- **theme:** 支持 命名插槽
- **theme:** 支持 组件覆写
- **theme:** 优化模块导出
- **theme:** 优化布局方案
- **theme:** 优化导航栏样式
# [1.0.0-rc.64](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.63...v1.0.0-rc.64) (2024-06-07) # [1.0.0-rc.64](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.63...v1.0.0-rc.64) (2024-06-07)
@ -1568,17 +1849,18 @@
### Features ### Features
- 调整 plot 语法 为 `!! !!` ([12e607e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/12e607e01cfe18d2fe891a4eab424e06881b7678)) - 调整plot 语法 为 `!! !!` ([12e607e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/12e607e01cfe18d2fe891a4eab424e06881b7678))
- 移除 externalLink插件 ([3d7199f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3d7199fe29f6c85568d41f7409664c424b095dad)) - 移除 externalLink插件,在主题内实现 ([3d7199f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3d7199fe29f6c85568d41f7409664c424b095dad))
- 优化 shiki 插件 ([4cdd51a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4cdd51a2c6bf145be83c43e7e2ffd320e1650596)) - 优化 shiki 插件 ([4cdd51a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4cdd51a2c6bf145be83c43e7e2ffd320e1650596))
- 支持友情链接页分组 ([de404b2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/de404b24db653eda8f706911ed83b21b63bd8050)) - 支持友情链接页分组 ([de404b2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/de404b24db653eda8f706911ed83b21b63bd8050))
- upgrade to `vuepress rc12` ([021f46e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/021f46ef3f9157c8a1d8f6cac4db3ab56ffd2990))
### Performance Improvements ### Performance Improvements
- 优化部分正则校验规则 ([5af709a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5af709a7623f698a1630054ee8ffda8f1544b753)) - 优化部分正则校验规则 ([5af709a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5af709a7623f698a1630054ee8ffda8f1544b753))
- **theme:** 优化多语言配置结构 ([e358224](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e3582242172a7438cf0b14a5a7c1861c4b7e50e0)) - **theme:** 优化多语言配置结构 ([e358224](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e3582242172a7438cf0b14a5a7c1861c4b7e50e0))
- **theme:** blog bottom padding ([ca383cd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ca383cdd7dff1a6888dd18cea31a7d5574e800d5)) - **theme:** blog bottom padding ([ca383cd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ca383cdd7dff1a6888dd18cea31a7d5574e800d5))
- upgrade to `vuepress rc12` ([021f46e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/021f46ef3f9157c8a1d8f6cac4db3ab56ffd2990)) - update vuepress to `rc-11` ([bc38fad](https://github.com/pengzhanbo/vuepress-theme-plume/commit/bc38fad18c3465a778fee976acd9d09c02b740a6))
# [1.0.0-rc.56](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.55...v1.0.0-rc.56) (2024-05-10) # [1.0.0-rc.56](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.55...v1.0.0-rc.56) (2024-05-10)
@ -1610,7 +1892,7 @@
- supplement content MIT protocol ([1182f3e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1182f3edc0ba27b7a6eb4827158c106918c9f38a)) - supplement content MIT protocol ([1182f3e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1182f3edc0ba27b7a6eb4827158c106918c9f38a))
- update non-major deps ([2127ca4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2127ca44a8e97c8b018a4ed65e9bc94f3ef4a633)) - update non-major deps ([2127ca4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2127ca44a8e97c8b018a4ed65e9bc94f3ef4a633))
# [1.0.0-rc.54](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.53...v1.0.0-rc.54) (2024-4-28) # [1.0.0-rc.54](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.53...v1.0.0-rc.54) (2024-04-28)
### Features ### Features
@ -1622,7 +1904,7 @@
- **plugin-md-power:** optimize client config output ([08f0903](https://github.com/pengzhanbo/vuepress-theme-plume/commit/08f090305cb02204dca01650b245a1878aca1b41)) - **plugin-md-power:** optimize client config output ([08f0903](https://github.com/pengzhanbo/vuepress-theme-plume/commit/08f090305cb02204dca01650b245a1878aca1b41))
- update non-major deps ([cd2c5d2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cd2c5d2335085a2621a5e9265f9b3f46c9342ed9)) - update non-major deps ([cd2c5d2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/cd2c5d2335085a2621a5e9265f9b3f46c9342ed9))
# [1.0.0-rc.53](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.52...v1.0.0-rc.53) (2024-4-20) # [1.0.0-rc.53](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.52...v1.0.0-rc.53) (2024-04-20)
### Features ### Features
@ -1634,7 +1916,7 @@
- **theme:** 优化 sidebar 数据解析 ([ba721e7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ba721e72f997a07ffcad7eaf5efc36db43066e87)) - **theme:** 优化 sidebar 数据解析 ([ba721e7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ba721e72f997a07ffcad7eaf5efc36db43066e87))
- update non-major deps to latest ([2eeaf78](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2eeaf78fc53c55a076335b2e466e6156351ac682)) - update non-major deps to latest ([2eeaf78](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2eeaf78fc53c55a076335b2e466e6156351ac682))
# [1.0.0-rc.52](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.51...v1.0.0-rc.52) (2024-4-17) # [1.0.0-rc.52](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.51...v1.0.0-rc.52) (2024-04-17)
### Bug Fixes ### Bug Fixes
@ -1651,13 +1933,13 @@
- **theme:** 优化文章列表翻页效果 ([16f7ed6](https://github.com/pengzhanbo/vuepress-theme-plume/commit/16f7ed699b21459b8976760e5d0e93f063538159)) - **theme:** 优化文章列表翻页效果 ([16f7ed6](https://github.com/pengzhanbo/vuepress-theme-plume/commit/16f7ed699b21459b8976760e5d0e93f063538159))
- update non-major deps to latest ([782f607](https://github.com/pengzhanbo/vuepress-theme-plume/commit/782f607dbb2ba6b3b359cddc4844c0ab77630173)) - update non-major deps to latest ([782f607](https://github.com/pengzhanbo/vuepress-theme-plume/commit/782f607dbb2ba6b3b359cddc4844c0ab77630173))
# [1.0.0-rc.51](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.50...v1.0.0-rc.51) (2024-4-15) # [1.0.0-rc.51](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.50...v1.0.0-rc.51) (2024-04-15)
### Bug Fixes ### Bug Fixes
- **theme:** `base` 导致的 链接跳转错误 [#63](https://github.com/pengzhanbo/vuepress-theme-plume/issues/63) ([9a94890](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9a9489031cb64feb968657b8d4ee1db0794e4ec2)) - **theme:** `base` 导致的 链接跳转错误 [#63](https://github.com/pengzhanbo/vuepress-theme-plume/issues/63) ([9a94890](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9a9489031cb64feb968657b8d4ee1db0794e4ec2))
# [1.0.0-rc.50](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.49...v1.0.0-rc.50) (2024-4-14) # [1.0.0-rc.50](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.49...v1.0.0-rc.50) (2024-04-14)
### Bug Fixes ### Bug Fixes
@ -1679,7 +1961,7 @@
- update deps to latest ([7f7d382](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7f7d382961f89569d0acb98eb62d8dcabb21e735)) - update deps to latest ([7f7d382](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7f7d382961f89569d0acb98eb62d8dcabb21e735))
- update vuepress non-major deps ([75c29c1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/75c29c1d6d589de0ebf3ee1c3fb824d492b1847a)) - update vuepress non-major deps ([75c29c1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/75c29c1d6d589de0ebf3ee1c3fb824d492b1847a))
# [1.0.0-rc.49](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.48...v1.0.0-rc.49) (2024-4-4) # [1.0.0-rc.49](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.48...v1.0.0-rc.49) (2024-04-04)
### Features ### Features
@ -1691,7 +1973,7 @@
- **plugin-md-power:** add Loading ([9124f78](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9124f788a3062a518c15d78ce164350e53fb4c9a)) - **plugin-md-power:** add Loading ([9124f78](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9124f788a3062a518c15d78ce164350e53fb4c9a))
- **plugin-md-power:** codeSandbox button ([20d06c0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/20d06c0de82f54c0b3ffc3161db31c4717a68128)) - **plugin-md-power:** codeSandbox button ([20d06c0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/20d06c0de82f54c0b3ffc3161db31c4717a68128))
# [1.0.0-rc.48](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.47...v1.0.0-rc.48) (2024-3-30) # [1.0.0-rc.48](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.47...v1.0.0-rc.48) (2024-03-30)
### Bug Fixes ### Bug Fixes
@ -1711,7 +1993,7 @@
- update non-major deps ([29ff7bd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/29ff7bdbd8a6d140f025b3cbd75436cd3f2bc7e0)) - update non-major deps ([29ff7bd](https://github.com/pengzhanbo/vuepress-theme-plume/commit/29ff7bdbd8a6d140f025b3cbd75436cd3f2bc7e0))
# [1.0.0-rc.47](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.46...v1.0.0-rc.47) (2024-3-25) # [1.0.0-rc.47](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.46...v1.0.0-rc.47) (2024-03-25)
### Features ### Features
@ -1722,7 +2004,7 @@
- update non-major deps ([6ce7fa6](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6ce7fa6687b36e4299245c58646c0d36dd19f6ab)) - update non-major deps ([6ce7fa6](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6ce7fa6687b36e4299245c58646c0d36dd19f6ab))
# [1.0.0-rc.46](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.45...v1.0.0-rc.46) (2024-3-25) # [1.0.0-rc.46](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.45...v1.0.0-rc.46) (2024-03-25)
### Bug Fixes ### Bug Fixes
@ -1738,7 +2020,7 @@
- **theme:** 优化sidebar 交互 ([6ce9796](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6ce97965a15f33e342bb69d835c814a7b2f044c3)) - **theme:** 优化sidebar 交互 ([6ce9796](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6ce97965a15f33e342bb69d835c814a7b2f044c3))
- update `vuepress` to `rc.9` ([3cada0b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3cada0bfd2c33dc49d3fac7b6c2125d23e1a0cb6)) - update `vuepress` to `rc.9` ([3cada0b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3cada0bfd2c33dc49d3fac7b6c2125d23e1a0cb6))
# [1.0.0-rc.45](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.44...v1.0.0-rc.45) (2024-3-18) # [1.0.0-rc.45](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.44...v1.0.0-rc.45) (2024-03-18)
### Bug Fixes ### Bug Fixes
@ -1756,7 +2038,7 @@
- delete unused types ([8423e6a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8423e6a203b51e2838578c254c8bd14ed80549f6)) - delete unused types ([8423e6a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8423e6a203b51e2838578c254c8bd14ed80549f6))
# [1.0.0-rc.44](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.43...v1.0.0-rc.44) (2024-3-17) # [1.0.0-rc.44](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.43...v1.0.0-rc.44) (2024-03-17)
### Performance Improvements ### Performance Improvements
@ -1765,7 +2047,7 @@
- **theme:** 优化右侧边栏交互表现 ([2e39974](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2e39974c54bdee7f128dda1ec258822e546d5a57)) - **theme:** 优化右侧边栏交互表现 ([2e39974](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2e39974c54bdee7f128dda1ec258822e546d5a57))
- **theme:** notes list filter ([5c9ae41](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5c9ae4138006f0a2079d709c1099fb2f608beb63)) - **theme:** notes list filter ([5c9ae41](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5c9ae4138006f0a2079d709c1099fb2f608beb63))
# [1.0.0-rc.43](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.42...v1.0.0-rc.43) (2024-3-15) # [1.0.0-rc.43](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.42...v1.0.0-rc.43) (2024-03-15)
### Bug Fixes ### Bug Fixes
@ -1776,7 +2058,7 @@
- **theme:** 博客页无博主信息时布局优化 ([9370464](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9370464cc9fed4740f95dd0b7db749966163347c)) - **theme:** 博客页无博主信息时布局优化 ([9370464](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9370464cc9fed4740f95dd0b7db749966163347c))
- **theme:** 优化notes链接生成 ([156e5ae](https://github.com/pengzhanbo/vuepress-theme-plume/commit/156e5aef27ff467d74a770f2b0889d79b2c21bc2)) - **theme:** 优化notes链接生成 ([156e5ae](https://github.com/pengzhanbo/vuepress-theme-plume/commit/156e5aef27ff467d74a770f2b0889d79b2c21bc2))
# [1.0.0-rc.42](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.41...v1.0.0-rc.42) (2024-3-13) # [1.0.0-rc.42](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.41...v1.0.0-rc.42) (2024-03-13)
### Features ### Features
@ -1788,7 +2070,7 @@
- 优化代码块、组背景色 ([d0638d5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d0638d5bf457d0426414fac80c29275a99e44267)) - 优化代码块、组背景色 ([d0638d5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d0638d5bf457d0426414fac80c29275a99e44267))
- **theme:** 优化预设背景交互流畅度 ([a1fa991](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a1fa99188c7a9ae32328671612db3ee405a0be68)) - **theme:** 优化预设背景交互流畅度 ([a1fa991](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a1fa99188c7a9ae32328671612db3ee405a0be68))
# [1.0.0-rc.41](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.40...v1.0.0-rc.41) (2024-3-8) # [1.0.0-rc.41](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.40...v1.0.0-rc.41) (2024-03-08)
### Features ### Features
@ -1802,7 +2084,7 @@
- **theme:** 优化分类、标签计算逻辑 ([f2860d9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f2860d96da519f01491d9b053e55da939209cf9d)) - **theme:** 优化分类、标签计算逻辑 ([f2860d9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f2860d96da519f01491d9b053e55da939209cf9d))
- **theme:** 优化页面布局 ([ee30acb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ee30acbc15a0e2f69edf09dec53ebd8421626018)) - **theme:** 优化页面布局 ([ee30acb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ee30acbc15a0e2f69edf09dec53ebd8421626018))
# [1.0.0-rc.40](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.39...v1.0.0-rc.40) (2024-3-3) # [1.0.0-rc.40](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.39...v1.0.0-rc.40) (2024-03-03)
### Features ### Features
@ -1833,7 +2115,7 @@
- **theme:** 对于已使用该功能的用户,需要手动修改文章中的相关链接,以及 md front matter 中的 `permalink` 字段, 删去 `/note` - **theme:** 对于已使用该功能的用户,需要手动修改文章中的相关链接,以及 md front matter 中的 `permalink` 字段, 删去 `/note`
# [1.0.0-rc.39](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.38...v1.0.0-rc.39) (2024-2-26) # [1.0.0-rc.39](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.38...v1.0.0-rc.39) (2024-02-26)
### Features ### Features
@ -1845,13 +2127,13 @@
- **plugin-shikiji:** add `experiment` type ([205cb13](https://github.com/pengzhanbo/vuepress-theme-plume/commit/205cb1336c2db651390514bc22999d1781adc07b)) - **plugin-shikiji:** add `experiment` type ([205cb13](https://github.com/pengzhanbo/vuepress-theme-plume/commit/205cb1336c2db651390514bc22999d1781adc07b))
- **theme:** 右侧边栏添加 headers 判断控制显示 ([ba899ec](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ba899ec7ca3a454fdf3ca39003a2024080645b76)) - **theme:** 右侧边栏添加 headers 判断控制显示 ([ba899ec](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ba899ec7ca3a454fdf3ca39003a2024080645b76))
# [1.0.0-rc.38](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.37...v1.0.0-rc.38) (2024-2-24) # [1.0.0-rc.38](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.37...v1.0.0-rc.38) (2024-02-24)
### Bug Fixes ### Bug Fixes
- **plugin-shikiji:** 非 twoslash 代码块 添加 `v-pre` 指令 ([ef64ada](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ef64ada12ff3c6e7c4dbfde1b4291bc16b6f4cec)) - **plugin-shikiji:** 非 twoslash 代码块 添加 `v-pre` 指令 ([ef64ada](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ef64ada12ff3c6e7c4dbfde1b4291bc16b6f4cec))
# [1.0.0-rc.37](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.36...v1.0.0-rc.37) (2024-2-24) # [1.0.0-rc.37](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.36...v1.0.0-rc.37) (2024-02-24)
### Features ### Features
@ -1863,7 +2145,7 @@
- **plugin-shikiji:** 优化开发时编译速度 ([4d950b7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4d950b7618829d61df64687626420ba3800149c3)) - **plugin-shikiji:** 优化开发时编译速度 ([4d950b7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4d950b7618829d61df64687626420ba3800149c3))
- **theme:** 优化文章页在大屏幕下的表现 ([4adc786](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4adc7862b57a67d129c9e9fc0ea0cf5091769b8c)) - **theme:** 优化文章页在大屏幕下的表现 ([4adc786](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4adc7862b57a67d129c9e9fc0ea0cf5091769b8c))
# [1.0.0-rc.36](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.35...v1.0.0-rc.36) (2024-2-21) # [1.0.0-rc.36](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.35...v1.0.0-rc.36) (2024-02-21)
### Features ### Features
@ -1877,7 +2159,7 @@
- bump `vuepress` to `rc.8` ([96166b2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/96166b2a4da31b3318635a2cb17992b186fa4634)) - bump `vuepress` to `rc.8` ([96166b2](https://github.com/pengzhanbo/vuepress-theme-plume/commit/96166b2a4da31b3318635a2cb17992b186fa4634))
- bump shiki to latest ([89c8a0e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/89c8a0e1d5946c769036901fd3649c03fa1fb77a)) - bump shiki to latest ([89c8a0e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/89c8a0e1d5946c769036901fd3649c03fa1fb77a))
# [1.0.0-rc.35](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.34...v1.0.0-rc.35) (2024-2-17) # [1.0.0-rc.35](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.34...v1.0.0-rc.35) (2024-02-17)
### Bug Fixes ### Bug Fixes
@ -1887,13 +2169,13 @@
- 优化导航栏在不同设备的交互表现 ([16c65da](https://github.com/pengzhanbo/vuepress-theme-plume/commit/16c65daea9812c632872c69e52fe1ed9710e2554)) - 优化导航栏在不同设备的交互表现 ([16c65da](https://github.com/pengzhanbo/vuepress-theme-plume/commit/16c65daea9812c632872c69e52fe1ed9710e2554))
# [1.0.0-rc.34](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.33...v1.0.0-rc.34) (2024-2-16) # [1.0.0-rc.34](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.33...v1.0.0-rc.34) (2024-02-16)
### Bug Fixes ### Bug Fixes
- **plugin-baidu-tongji:** 修复错误的在`enhance`中使用 composable api ([040de83](https://github.com/pengzhanbo/vuepress-theme-plume/commit/040de83f5bbc37394fb10a300dbb06de6480662f)) - **plugin-baidu-tongji:** 修复错误的在`enhance`中使用 composable api ([040de83](https://github.com/pengzhanbo/vuepress-theme-plume/commit/040de83f5bbc37394fb10a300dbb06de6480662f))
# [1.0.0-rc.33](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.32...v1.0.0-rc.33) (2024-2-16) # [1.0.0-rc.33](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.32...v1.0.0-rc.33) (2024-02-16)
### Features ### Features
@ -1911,7 +2193,7 @@
- **theme:** use vuepress virtual routes ([24261ab](https://github.com/pengzhanbo/vuepress-theme-plume/commit/24261ab269f24bc718beeb686a19f34541fcf251)) - **theme:** use vuepress virtual routes ([24261ab](https://github.com/pengzhanbo/vuepress-theme-plume/commit/24261ab269f24bc718beeb686a19f34541fcf251))
- upgrade vuepress to `rc.7` ([e707e9a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e707e9a057953232190f2963e6ed95c4c4a020be)) - upgrade vuepress to `rc.7` ([e707e9a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e707e9a057953232190f2963e6ed95c4c4a020be))
# [1.0.0-rc.32](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.31...v1.0.0-rc.32) (2024-2-5) # [1.0.0-rc.32](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.31...v1.0.0-rc.32) (2024-02-05)
### Features ### Features
@ -1933,7 +2215,7 @@
- 优化页面细节上的过渡效果 ([526e8d1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/526e8d13c11dac8bab44dac35f2b608bf3d96b92)) - 优化页面细节上的过渡效果 ([526e8d1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/526e8d13c11dac8bab44dac35f2b608bf3d96b92))
- bump `shiki` ([5210925](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5210925f87b183fbd2cd6012776c84461685fb67)) - bump `shiki` ([5210925](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5210925f87b183fbd2cd6012776c84461685fb67))
# [1.0.0-rc.31](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.30...v1.0.0-rc.31) (2024-2-2) # [1.0.0-rc.31](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.30...v1.0.0-rc.31) (2024-02-02)
### Features ### Features
@ -1947,7 +2229,7 @@
- 优化文章标签页 UI ([8d56e98](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8d56e989d4c236c43017a62b7b52ef93e012496f)) - 优化文章标签页 UI ([8d56e98](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8d56e989d4c236c43017a62b7b52ef93e012496f))
- 优化文章归档页 UI ([c1e0c85](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c1e0c854f675ede733c042146c141f72a2efa384)) - 优化文章归档页 UI ([c1e0c85](https://github.com/pengzhanbo/vuepress-theme-plume/commit/c1e0c854f675ede733c042146c141f72a2efa384))
# [1.0.0-rc.30](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.29...v1.0.0-rc.30) (2024-1-31) # [1.0.0-rc.30](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.29...v1.0.0-rc.30) (2024-01-31)
### Features ### Features
@ -1960,90 +2242,90 @@
- bump comment plugin to latest ([28cfb04](https://github.com/pengzhanbo/vuepress-theme-plume/commit/28cfb044906eaa429fad435fbf20b605a8fc23f6)) - bump comment plugin to latest ([28cfb04](https://github.com/pengzhanbo/vuepress-theme-plume/commit/28cfb044906eaa429fad435fbf20b605a8fc23f6))
- rename `shikiji` to `shiki` ([d087249](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d08724984056510ed2a78f615a2015f80dd48e21)) - rename `shikiji` to `shiki` ([d087249](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d08724984056510ed2a78f615a2015f80dd48e21))
# [1.0.0-rc.29](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.28...v1.0.0-rc.29) (2024-1-26) # [1.0.0-rc.29](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.28...v1.0.0-rc.29) (2024-01-26)
### Performance Improvements ### Performance Improvements
- bump `shikiji` to `0.10` ([38bfad7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38bfad7513a4e16d19de2cdce514fb33adb2894a)) - bump `shikiji` to `0.10` ([38bfad7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/38bfad7513a4e16d19de2cdce514fb33adb2894a))
- bump twoslash to `0.10.0` ([1beacde](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1beacde1218e02fa484cee49a453017ea02d7b27)) - bump twoslash to `0.10.0` ([1beacde](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1beacde1218e02fa484cee49a453017ea02d7b27))
- bump vuepress to `2.0.0-rc.2` ([81870e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/81870e0c23a2b711abe263b4b3a2674a926b7f6d)) - bump vuepress to `2.0.0-rc.2` ([81870e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/81870e0c23a2b711abe263b4b3a2674a926b7f6d))
- bump `husky` to `v9` ([87e0c39](https://github.com/pengzhanbo/vuepress-theme-plume/commit/87e0c3936259e63c15bc8311dc3acb801159a700)) - update `husky` to `v9` ([87e0c39](https://github.com/pengzhanbo/vuepress-theme-plume/commit/87e0c3936259e63c15bc8311dc3acb801159a700))
- update content style ([afb88ee](https://github.com/pengzhanbo/vuepress-theme-plume/commit/afb88ee4be00673905c9d731fd42dba29decd4cd)) - update content style ([afb88ee](https://github.com/pengzhanbo/vuepress-theme-plume/commit/afb88ee4be00673905c9d731fd42dba29decd4cd))
# [1.0.0-rc.28](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.27...v1.0.0-rc.28) (2024-1-21) # [1.0.0-rc.28](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.27...v1.0.0-rc.28) (2024-01-21)
### Features ### Features
- update `demo-wrapper` container ([0f8acc3](https://github.com/pengzhanbo/vuepress-theme-plume/commit/0f8acc37dcf28cc1aebc7681880ad0afe77d02e7)) - update `demo-wrapper` container ([0f8acc3](https://github.com/pengzhanbo/vuepress-theme-plume/commit/0f8acc37dcf28cc1aebc7681880ad0afe77d02e7))
# [1.0.0-rc.27](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.26...v1.0.0-rc.27) (2024-1-16) # [1.0.0-rc.27](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.26...v1.0.0-rc.27) (2024-01-16)
### Features ### Features
- add `demo-wrapper` container support ([7784600](https://github.com/pengzhanbo/vuepress-theme-plume/commit/77846006a54915ac788643328a6b002005cd9d21)) - add `demo-wrapper` container support ([7784600](https://github.com/pengzhanbo/vuepress-theme-plume/commit/77846006a54915ac788643328a6b002005cd9d21))
# [1.0.0-rc.26](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.25...v1.0.0-rc.26) (2024-1-16) # [1.0.0-rc.26](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.25...v1.0.0-rc.26) (2024-01-16)
### Features ### Features
- add `demo-wrapper` container support ([7b946d7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7b946d7b4947401475d911a5593c60b03a839f52)) - add `demo-wrapper` container support ([7b946d7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/7b946d7b4947401475d911a5593c60b03a839f52))
# [1.0.0-rc.25](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.24...v1.0.0-rc.25) (2024-1-15) # [1.0.0-rc.25](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.24...v1.0.0-rc.25) (2024-01-15)
### Bug Fixes ### Bug Fixes
- 移动设备下 twoslash 样式兼容问题 ([fd78015](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fd7801518e7996c8b054627c277a775df24869c4)) - 移动设备下 twoslash 样式兼容问题 ([fd78015](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fd7801518e7996c8b054627c277a775df24869c4))
# [1.0.0-rc.24](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.23...v1.0.0-rc.24) (2024-1-12) # [1.0.0-rc.24](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.23...v1.0.0-rc.24) (2024-01-12)
### Bug Fixes ### Bug Fixes
- 修复在 windows 下的路径拼接错误 ([e2305cb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e2305cb337f88b2565851a1155791f658562f3ff)) - 修复在 windows 下的路径拼接错误 ([e2305cb](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e2305cb337f88b2565851a1155791f658562f3ff))
# [1.0.0-rc.23](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.22...v1.0.0-rc.23) (2024-1-11) # [1.0.0-rc.23](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.22...v1.0.0-rc.23) (2024-01-11)
### Features ### Features
- (试验性)代码高亮支持 twoslash ([d0fdf79](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d0fdf794774d126ab7f5d24fa6de5865498105b2)) - (试验性)代码高亮支持 twoslash ([d0fdf79](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d0fdf794774d126ab7f5d24fa6de5865498105b2))
# [1.0.0-rc.22](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.21...v1.0.0-rc.22) (2024-1-8) # [1.0.0-rc.22](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.21...v1.0.0-rc.22) (2024-01-08)
### Bug Fixes ### Bug Fixes
- 修复在最小配置下的预设问题 [#40](https://github.com/pengzhanbo/vuepress-theme-plume/issues/40) ([2dbbc79](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2dbbc79a757a6ea21a01a239414ead137314dcf6)) - 修复在最小配置下的预设问题 [#40](https://github.com/pengzhanbo/vuepress-theme-plume/issues/40) ([2dbbc79](https://github.com/pengzhanbo/vuepress-theme-plume/commit/2dbbc79a757a6ea21a01a239414ead137314dcf6))
# [1.0.0-rc.21](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.20...v1.0.0-rc.21) (2024-1-8) # [1.0.0-rc.21](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.20...v1.0.0-rc.21) (2024-01-08)
### Bug Fixes ### Bug Fixes
- 修复 notes data 插件 路径解析 ([ab798d4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ab798d4234f912d98da455ecc68793af5ce92cb8)) - 修复 notes data 插件 路径解析 ([ab798d4](https://github.com/pengzhanbo/vuepress-theme-plume/commit/ab798d4234f912d98da455ecc68793af5ce92cb8))
# [1.0.0-rc.20](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.19...v1.0.0-rc.20) (2024-1-7) # [1.0.0-rc.20](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.19...v1.0.0-rc.20) (2024-01-07)
### Performance Improvements ### Performance Improvements
- 调整内容容器中代码块在移动设备 UI ([3e5ecad](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3e5ecada8ec48e9833a59e24b79cd4d7cc8dcd78)) - 调整内容容器中代码块在移动设备 UI ([3e5ecad](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3e5ecada8ec48e9833a59e24b79cd4d7cc8dcd78))
- 优化默认导航栏生成 ([6b5fd5d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6b5fd5d427c0c49ae30a1a5b729ff429481c6cbf)) - 优化默认导航栏生成 ([6b5fd5d](https://github.com/pengzhanbo/vuepress-theme-plume/commit/6b5fd5d427c0c49ae30a1a5b729ff429481c6cbf))
# [1.0.0-rc.19](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.18...v1.0.0-rc.19) (2024-1-6) # [1.0.0-rc.19](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.18...v1.0.0-rc.19) (2024-01-06)
### Performance Improvements ### Performance Improvements
- 优化在移动设备的 UI 表现 ([33aaf36](https://github.com/pengzhanbo/vuepress-theme-plume/commit/33aaf369cfb0a621fcbd8705f18f334596fe295b)) - 优化在移动设备的 UI 表现 ([33aaf36](https://github.com/pengzhanbo/vuepress-theme-plume/commit/33aaf369cfb0a621fcbd8705f18f334596fe295b))
# [1.0.0-rc.18](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.17...v1.0.0-rc.18) (2024-1-6) # [1.0.0-rc.18](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.17...v1.0.0-rc.18) (2024-01-06)
### Performance Improvements ### Performance Improvements
- 优化在移动设备的 UI 表现 ([bc4100e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/bc4100e4a1c9eb52102da6862c44e681f551fa26)) - 优化在移动设备的 UI 表现 ([bc4100e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/bc4100e4a1c9eb52102da6862c44e681f551fa26))
# [1.0.0-rc.17](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.16...v1.0.0-rc.17) (2024-1-6) # [1.0.0-rc.17](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.16...v1.0.0-rc.17) (2024-01-06)
### Bug Fixes ### Bug Fixes
- docs search ui ([fcbd562](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fcbd562dc3f20e302242c9af122f963582e9d79b)) - docs search ui ([fcbd562](https://github.com/pengzhanbo/vuepress-theme-plume/commit/fcbd562dc3f20e302242c9af122f963582e9d79b))
# [1.0.0-rc.16](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.15...v1.0.0-rc.16) (2024-1-6) # [1.0.0-rc.16](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.15...v1.0.0-rc.16) (2024-01-06)
### Features ### Features
@ -2054,7 +2336,7 @@
- 优化开发模式下 devtools 主题数据预览 ([36aa6c9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/36aa6c99b527e3f90641f770d9c349bda99d805e)) - 优化开发模式下 devtools 主题数据预览 ([36aa6c9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/36aa6c99b527e3f90641f770d9c349bda99d805e))
# [1.0.0-rc.15](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.14...v1.0.0-rc.15) (2024-1-5) # [1.0.0-rc.15](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.14...v1.0.0-rc.15) (2024-01-05)
### Features ### Features
@ -2068,7 +2350,7 @@
- 优化 文章列表页侧边栏 UI ([a268b84](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a268b84849a8ed8989c91a5887e97c9a492aaaf1)) - 优化 文章列表页侧边栏 UI ([a268b84](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a268b84849a8ed8989c91a5887e97c9a492aaaf1))
- 优化多语言下自动生成页面路径 ([e4e03e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e4e03e0ae2a23ce04de84d829777ea21e5aae60f)) - 优化多语言下自动生成页面路径 ([e4e03e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e4e03e0ae2a23ce04de84d829777ea21e5aae60f))
# [1.0.0-rc.14](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.13...v1.0.0-rc.14) (2024-1-4) # [1.0.0-rc.14](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.13...v1.0.0-rc.14) (2024-01-04)
### Features ### Features
@ -2080,20 +2362,20 @@
- 优化博客列表页数据逻辑 ([689bde3](https://github.com/pengzhanbo/vuepress-theme-plume/commit/689bde34bbe586b3e2b936093658ae50ac3d05ee)) - 优化博客列表页数据逻辑 ([689bde3](https://github.com/pengzhanbo/vuepress-theme-plume/commit/689bde34bbe586b3e2b936093658ae50ac3d05ee))
# [1.0.0-rc.13](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.12...v1.0.0-rc.13) (2024-1-3) # [1.0.0-rc.13](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.12...v1.0.0-rc.13) (2024-01-03)
### Bug Fixes ### Bug Fixes
- **theme:** build html fail ([8625c68](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8625c6820293b98a6464b1237fc9e3ba108ac6b4)) - **theme:** build html fail ([8625c68](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8625c6820293b98a6464b1237fc9e3ba108ac6b4))
# [1.0.0-rc.12](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.11...v1.0.0-rc.12) (2024-1-1) # [1.0.0-rc.12](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.11...v1.0.0-rc.12) (2024-01-01)
### Performance Improvements ### Performance Improvements
- 优化内容容器在移动端的表现效果 ([75c59c5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/75c59c588ccaa7eea5d38e99e335d1928c85277b)) - 优化内容容器在移动端的表现效果 ([75c59c5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/75c59c588ccaa7eea5d38e99e335d1928c85277b))
- 优化页面打印布局排版 ([aac83e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/aac83e0c14cfd5e4e01ee342125bfebe451fe570)) - 优化页面打印布局排版 ([aac83e0](https://github.com/pengzhanbo/vuepress-theme-plume/commit/aac83e0c14cfd5e4e01ee342125bfebe451fe570))
# [1.0.0-rc.11](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.10...v1.0.0-rc.11) (2024-1-1) # [1.0.0-rc.11](https://github.com/pengzhanbo/vuepress-theme-plume/compare/v1.0.0-rc.10...v1.0.0-rc.11) (2024-01-01)
### Features ### Features

111
CLAUDE.md Normal file
View File

@ -0,0 +1,111 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
vuepress-theme-plume is a VuePress 2 theme monorepo for building blogs, documentation, and knowledge bases.
It includes a main theme, several plugins, a CLI tool, and example implementations.
## Commands
```bash
# Install dependencies
pnpm install
# Build all packages (required after clone, outputs to lib/)
pnpm build
# Development - runs theme + docs dev servers concurrently
pnpm dev
# Lint (eslint + stylelint)
pnpm lint
pnpm lint:fix # auto-fix
# Run tests (vitest)
pnpm test
# Run a single test file
pnpm test src/path/to/file.spec.ts
# Run tests related to changed files (for pre-commit)
cross-env TZ=Etc/UTC vitest related --run
# Build docs only
pnpm docs:build
# Serve docs locally
pnpm docs:serve
# Release workflow
pnpm release # runs lint + build + version bump + changelog + git commit
```
## Monorepo Structure
```txt
├── theme/ # Main VuePress theme (vuepress-theme-plume)
├── plugins/ # VuePress plugins
│ ├── plugin-search/ # Full-text fuzzy search
│ ├── plugin-md-power/ # Markdown enhancements
│ └── plugin-fonts/ # Special character font support
├── cli/ # CLI tool (create project scaffolding)
├── docs/ # Documentation site
└── examples/ # Example implementations
├── pure-blog/
└── layout-slots/
```
## Theme Architecture
The theme is organized into three layers:
- **`src/node/`** - Build-time code (runs during `vuepress build/dev`)
- `prepare/` - Content preparation (frontmatter parsing, collection resolution)
- `plugins/` - VuePress plugin registration
- `config/` - Theme configuration handling
- `autoFrontmatter/` - Automatic frontmatter generation
- **`src/client/`** - Client-side code (runs in browser)
- `components/` - Vue components
- `composables/` - Vue composables (outline, search, etc.)
- `styles/` - CSS/SCSS styles
- `features/` - Feature-specific components and logic
- **`src/shared/`** - Shared code (used by both node and client)
- `frontmatter/` - Frontmatter schemas and utilities
- `locale/` - i18n translations
- `options.ts` - Theme options types
- `features/` - Feature flags and shared feature logic
## Build Output
Each package uses [tsdown](https://tsdown.dev/) to compile TypeScript. Build output goes to `lib/`:
- `lib/node/` - Node-side exports
- `lib/client/` - Client-side exports
- `lib/shared/` - Shared exports
The `lib/` directory is gitignored and must be built with `pnpm build`.
## Testing
Tests use Vitest with coverage enabled. Test files are located at `**/__test__/**/*.spec.ts` and are excluded from coverage reports. Run tests with timezone fixed to UTC to ensure consistent results.
## Key Dependencies
- **VuePress**: v2.0.0-rc.28 with @vuepress/bundler-vite
- **Vue**: ^3.5.30
- **Shiki**: ^4.x for syntax highlighting
- **VueUse**: ^14.x for composables
- **markdown-it**: ^14.x for Markdown processing
## Development Notes
- Node.js 20.19.0+ required
- pnpm catalogs are used for dependency management (`dev`, `peer`, `prod`, `vuepress`)
- The theme depends on `vuepress-plugin-md-power` and `@vuepress-plume/plugin-search` as workspace dependencies
- Some peer dependencies are optional (e.g., artplayer, dashjs, three.js)
- Plugins (`plugins/*`) do not have dev commands — changes require `pnpm build` to take effect
- The `lib/` directory is gitignored and must be rebuilt after `pnpm install`

View File

@ -19,7 +19,7 @@ In the `plugins` directory:
Development requirements: Development requirements:
- [Node.js](http://nodejs.org/) version 20.6.0+ - [Node.js](http://nodejs.org/) version 20.19.0+
- [pnpm](https://pnpm.io/zh/) version 9+ - [pnpm](https://pnpm.io/zh/) version 9+
Clone the repository and install dependencies: Clone the repository and install dependencies:

View File

@ -19,7 +19,7 @@
开发要求: 开发要求:
- [Node.js](http://nodejs.org/) version 20.6.0+ - [Node.js](http://nodejs.org/) version 20.19.0+
- [pnpm](https://pnpm.io/zh/) version 9+ - [pnpm](https://pnpm.io/zh/) version 9+
克隆代码仓库,并安装依赖: 克隆代码仓库,并安装依赖:

View File

@ -4,8 +4,8 @@
| Version | Supported | | Version | Supported |
| ---------------- | ------------------ | | ---------------- | ------------------ |
| >= 1.0.0-rc.170 | :white_check_mark: | | >= 1.0.0-rc.190 | :white_check_mark: |
| < 1.0.0-rc.170 | :x: | | < 1.0.0-rc.190 | :x: |
## Reporting a Vulnerability ## Reporting a Vulnerability

View File

@ -1,7 +1,7 @@
{ {
"name": "create-vuepress-theme-plume", "name": "create-vuepress-theme-plume",
"type": "module", "type": "module",
"version": "1.0.0-rc.173", "version": "1.0.0-rc.196",
"description": "The cli for create vuepress-theme-plume's project", "description": "The cli for create vuepress-theme-plume's project",
"author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo/)", "author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo/)",
"license": "MIT", "license": "MIT",
@ -27,7 +27,7 @@
"templates" "templates"
], ],
"scripts": { "scripts": {
"build": "tsdown" "build": "tsdown --config-loader unrun"
}, },
"dependencies": { "dependencies": {
"@clack/prompts": "catalog:prod", "@clack/prompts": "catalog:prod",
@ -40,9 +40,13 @@
"sort-package-json": "catalog:prod" "sort-package-json": "catalog:prod"
}, },
"plume-deps": { "plume-deps": {
"vuepress": "2.0.0-rc.26", "vuepress": "2.0.0-rc.28",
"vue": "^3.5.22", "vue": "^3.5.32",
"http-server": "^14.1.1", "http-server": "^14.1.1",
"typescript": "^5.9.3" "typescript": "^5.9.3"
},
"publishConfig": {
"access": "public",
"provenance": true
} }
} }

View File

@ -1,27 +1,86 @@
import type { Bundler, Langs, Options } from './types.js' import type { Bundler, Langs, Options } from './types.js'
/**
* Language options for VuePress configuration
*
* VuePress
*/
export const languageOptions: Options<Langs> = [ export const languageOptions: Options<Langs> = [
{ label: 'English', value: 'en-US' }, { label: 'English', value: 'en-US' },
{ label: '简体中文', value: 'zh-CN' }, { label: '简体中文', value: 'zh-CN' },
] ]
/**
* Bundler options for VuePress build tool
*
* VuePress
*/
export const bundlerOptions: Options<Bundler> = [ export const bundlerOptions: Options<Bundler> = [
{ label: 'Vite', value: 'vite' }, { label: 'Vite', value: 'vite' },
{ label: 'Webpack', value: 'webpack' }, { label: 'Webpack', value: 'webpack' },
] ]
/**
* Operation mode for VuePress CLI
*
* VuePress CLI
* @readonly
* @enum {number}
*/
export enum Mode { export enum Mode {
/**
* Initialize existing directory
*
*
*/
init, init,
/**
* Create new project
*
*
*/
create, create,
} }
/**
* Deployment type for VuePress site
*
* VuePress
* @readonly
* @enum {string}
*/
export enum DeployType { export enum DeployType {
/**
* GitHub Pages deployment
*
* GitHub Pages
*/
github = 'github', github = 'github',
/**
* Vercel deployment
*
* Vercel
*/
vercel = 'vercel', vercel = 'vercel',
/**
* Netlify deployment
*
* Netlify
*/
netlify = 'netlify', netlify = 'netlify',
/**
* Custom deployment
*
*
*/
custom = 'custom', custom = 'custom',
} }
/**
* Deployment options for hosting platforms
*
*
*/
export const deployOptions: Options<DeployType> = [ export const deployOptions: Options<DeployType> = [
{ label: 'Custom', value: DeployType.custom }, { label: 'Custom', value: DeployType.custom },
{ label: 'GitHub Pages', value: DeployType.github }, { label: 'GitHub Pages', value: DeployType.github },

View File

@ -8,6 +8,15 @@ import { createPackageJson } from './packageJson.js'
import { createRender } from './render.js' import { createRender } from './render.js'
import { getTemplate, readFiles, readJsonFile, writeFiles } from './utils/index.js' import { getTemplate, readFiles, readJsonFile, writeFiles } from './utils/index.js'
/**
* Generate VuePress project files
*
* VuePress
*
* @param mode - Operation mode (init or create) /
* @param data - Resolved configuration data /
* @param cwd - Current working directory /
*/
export async function generate( export async function generate(
mode: Mode, mode: Mode,
data: ResolvedData, data: ResolvedData,
@ -106,6 +115,14 @@ export async function generate(
}) })
} }
/**
* Create documentation files based on configuration
*
*
*
* @param data - Resolved configuration data /
* @returns Array of file objects /
*/
async function createDocsFiles(data: ResolvedData): Promise<File[]> { async function createDocsFiles(data: ResolvedData): Promise<File[]> {
const fileList: File[] = [] const fileList: File[] = []
if (data.multiLanguage) { if (data.multiLanguage) {
@ -131,6 +148,15 @@ async function createDocsFiles(data: ResolvedData): Promise<File[]> {
return updateFileListTarget(fileList, data.docsDir) return updateFileListTarget(fileList, data.docsDir)
} }
/**
* Update file list target path
*
*
*
* @param fileList - Array of files /
* @param target - Target directory path /
* @returns Updated file array /
*/
function updateFileListTarget(fileList: File[], target: string): File[] { function updateFileListTarget(fileList: File[], target: string): File[] {
return fileList.map(({ filepath, content }) => ({ return fileList.map(({ filepath, content }) => ({
filepath: path.join(target, filepath), filepath: path.join(target, filepath),

View File

@ -1,3 +1,15 @@
/**
* VuePress Theme Plume CLI Entry Point
*
* VuePress Theme Plume CLI
*
* This module provides command-line interface for creating and initializing
* VuePress projects with vuepress-theme-plume.
*
* VuePress
*
* @module cli
*/
import cac from 'cac' import cac from 'cac'
import { version } from '../package.json' import { version } from '../package.json'
import { Mode } from './constants.js' import { Mode } from './constants.js'

View File

@ -1,5 +1,10 @@
import type { Locale } from '../types.js' import type { Locale } from '../types.js'
/**
* English locale configuration for CLI prompts and messages.
*
* CLI
*/
export const en: Locale = { export const en: Locale = {
'question.root': 'Where would you want to initialize VuePress?', 'question.root': 'Where would you want to initialize VuePress?',
'question.site.name': 'Site Name:', 'question.site.name': 'Site Name:',

View File

@ -2,6 +2,15 @@ import type { Langs, Locale } from '../types.js'
import { en } from './en.js' import { en } from './en.js'
import { zh } from './zh.js' import { zh } from './zh.js'
/**
* Locale configurations for different languages.
*
*
*
* Maps language codes to their respective locale strings.
*
*
*/
export const locales: Record<Langs, Locale> = { export const locales: Record<Langs, Locale> = {
'zh-CN': zh, 'zh-CN': zh,
'en-US': en, 'en-US': en,

View File

@ -1,5 +1,10 @@
import type { Locale } from '../types.js' import type { Locale } from '../types.js'
/**
* Chinese (Simplified) locale configuration for CLI prompts and messages.
*
* CLI
*/
export const zh: Locale = { export const zh: Locale = {
'question.root': '您想在哪里初始化 VuePress', 'question.root': '您想在哪里初始化 VuePress',
'question.site.name': '站点名称:', 'question.site.name': '站点名称:',

View File

@ -1,16 +1,41 @@
import type { File, ResolvedData } from './types.js' import type { File, ResolvedData } from './types.js'
import { kebabCase } from '@pengzhanbo/utils' import { attemptAsync, kebabCase } from '@pengzhanbo/utils'
import spawn from 'nano-spawn' import spawn from 'nano-spawn'
import _sortPackageJson from 'sort-package-json' import _sortPackageJson from 'sort-package-json'
import { Mode } from './constants.js' import { Mode } from './constants.js'
import { readJsonFile, resolve } from './utils/index.js' import { readJsonFile, resolve } from './utils/index.js'
/**
* Sort package.json fields in a consistent order.
*
* package.json
*
* @param json - Package.json object to sort / package.json
* @returns Sorted package.json object / package.json
*/
function sortPackageJson(json: Record<any, any>) { function sortPackageJson(json: Record<any, any>) {
return _sortPackageJson(json, { return _sortPackageJson(json, {
sortOrder: ['name', 'type', 'version', 'private', 'description', 'packageManager', 'author', 'license', 'scripts', 'devDependencies', 'dependencies', 'pnpm'], sortOrder: ['name', 'type', 'version', 'private', 'description', 'packageManager', 'author', 'license', 'scripts', 'devDependencies', 'dependencies', 'pnpm'],
}) })
} }
/**
* Create package.json file for VuePress project
*
* VuePress package.json
*
* @param mode - Operation mode (init or create) /
* @param pkg - Existing package.json data / package.json
* @param data - Resolved configuration data /
* @param data.packageManager - Package manager to use / 使
* @param data.siteName - Site name /
* @param data.siteDescription - Site description /
* @param data.docsDir - Documentation directory path /
* @param data.bundler - Bundler to use / 使
* @param data.injectNpmScripts - Whether to inject npm scripts / npm
*
* @returns File object with package.json content / package.json
*/
export async function createPackageJson( export async function createPackageJson(
mode: Mode, mode: Mode,
pkg: Record<string, any>, pkg: Record<string, any>,
@ -21,7 +46,6 @@ export async function createPackageJson(
siteDescription, siteDescription,
bundler, bundler,
injectNpmScripts, injectNpmScripts,
useTs,
}: ResolvedData, }: ResolvedData,
): Promise<File> { ): Promise<File> {
if (mode === Mode.create) { if (mode === Mode.create) {
@ -31,7 +55,7 @@ export async function createPackageJson(
pkg.description = siteDescription pkg.description = siteDescription
if (packageManager !== 'npm') { if (packageManager !== 'npm') {
let version = await getPackageManagerVersion(packageManager) let [, version] = await attemptAsync(getPackageManagerVersion, packageManager)
if (version) { if (version) {
if (packageManager === 'yarn' && version.startsWith('1')) { if (packageManager === 'yarn' && version.startsWith('1')) {
version = '4.10.3' version = '4.10.3'
@ -47,12 +71,12 @@ export async function createPackageJson(
} }
} }
const userInfo = await getUserInfo() const [, userInfo] = await attemptAsync(getUserInfo)
if (userInfo) { if (userInfo) {
pkg.author = userInfo.username + (userInfo.email ? ` <${userInfo.email}>` : '') pkg.author = userInfo.username + (userInfo.email ? ` <${userInfo.email}>` : '')
} }
pkg.license = 'MIT' pkg.license = 'MIT'
pkg.engines = { node: '^20.6.0 || >=22.0.0' } pkg.engines = { node: '^20.19.0 || >=22.0.0' }
} }
if (injectNpmScripts) { if (injectNpmScripts) {
@ -84,8 +108,7 @@ export async function createPackageJson(
if (!hasDep('vue')) if (!hasDep('vue'))
deps.push('vue') deps.push('vue')
if (useTs) deps.push('typescript')
deps.push('typescript')
for (const dep of deps) for (const dep of deps)
pkg.devDependencies[dep] = meta[dep] pkg.devDependencies[dep] = meta[dep]
@ -96,24 +119,30 @@ export async function createPackageJson(
} }
} }
/**
* Get user information from git global configuration.
*
* git
*
* @returns User information object with username and email /
* @throws Error if git command fails / git
*/
async function getUserInfo() { async function getUserInfo() {
try { const { output: username } = await spawn('git', ['config', '--global', 'user.name'])
const { output: username } = await spawn('git', ['config', '--global', 'user.name']) const { output: email } = await spawn('git', ['config', '--global', 'user.email'])
const { output: email } = await spawn('git', ['config', '--global', 'user.email']) return { username, email }
console.log('userInfo', username, email)
return { username, email }
}
catch {
return null
}
} }
/**
* Get the version of a package manager.
*
*
*
* @param pkg - Package manager name (npm, yarn, pnpm) /
* @returns Version string of the package manager /
* @throws Error if package manager command fails /
*/
async function getPackageManagerVersion(pkg: string) { async function getPackageManagerVersion(pkg: string) {
try { const { output } = await spawn(pkg, ['--version'])
const { output } = await spawn(pkg, ['--version']) return output
return output
}
catch {
return null
}
} }

View File

@ -2,7 +2,7 @@ import type { Bundler, Langs, PromptResult } from './types.js'
import { createRequire } from 'node:module' import { createRequire } from 'node:module'
import process from 'node:process' import process from 'node:process'
import { cancel, confirm, group, select, text } from '@clack/prompts' import { cancel, confirm, group, select, text } from '@clack/prompts'
import { osLocale } from 'os-locale' import osLocale from 'os-locale'
import { bundlerOptions, deployOptions, DeployType, languageOptions, Mode } from './constants.js' import { bundlerOptions, deployOptions, DeployType, languageOptions, Mode } from './constants.js'
import { setLang, t } from './translate.js' import { setLang, t } from './translate.js'
@ -10,6 +10,15 @@ const require = createRequire(process.cwd())
const REG_DIR_CHAR = /[<>:"\\|?*[\]]/ const REG_DIR_CHAR = /[<>:"\\|?*[\]]/
/**
* Prompt user for project configuration
*
*
*
* @param mode - Operation mode (init or create) /
* @param root - Optional root directory path /
* @returns Resolved prompt result /
*/
export async function prompt(mode: Mode, root?: string): Promise<PromptResult> { export async function prompt(mode: Mode, root?: string): Promise<PromptResult> {
let hasTs = false let hasTs = false
if (mode === Mode.init) { if (mode === Mode.init) {
@ -21,7 +30,7 @@ export async function prompt(mode: Mode, root?: string): Promise<PromptResult> {
const result: PromptResult = await group({ const result: PromptResult = await group({
displayLang: async () => { displayLang: async () => {
const locale = await osLocale() const locale = osLocale()
if (locale === 'zh-CN' || locale === 'zh-Hans') { if (locale === 'zh-CN' || locale === 'zh-Hans') {
setLang('zh-CN') setLang('zh-CN')

View File

@ -2,16 +2,33 @@ import type { ResolvedData } from './types.js'
import { kebabCase } from '@pengzhanbo/utils' import { kebabCase } from '@pengzhanbo/utils'
import handlebars from 'handlebars' import handlebars from 'handlebars'
/**
* Extended resolved data with additional rendering information
*
*
*/
export interface RenderData extends ResolvedData { export interface RenderData extends ResolvedData {
/** Project name in kebab-case / 项目名称kebab-case 格式) */
name: string name: string
/** Site name / 网站名称 */
siteName: string siteName: string
/** Locale configuration array / 语言配置数组 */
locales: { path: string, lang: string, isEn: boolean, prefix: string }[] locales: { path: string, lang: string, isEn: boolean, prefix: string }[]
/** Whether default language is English / 默认语言是否为英语 */
isEN: boolean isEN: boolean
} }
handlebars.registerHelper('removeLeadingSlash', (path: string) => path.replace(/^\//, '')) handlebars.registerHelper('removeLeadingSlash', (path: string) => path.replace(/^\//, ''))
handlebars.registerHelper('equal', (a: string, b: string) => a === b) handlebars.registerHelper('equal', (a: string, b: string) => a === b)
/**
* Create render function with Handlebars template engine
*
* 使 Handlebars
*
* @param result - Resolved configuration data /
* @returns Render function that processes Handlebars templates / Handlebars
*/
export function createRender(result: ResolvedData) { export function createRender(result: ResolvedData) {
const data: RenderData = { const data: RenderData = {
...result, ...result,

View File

@ -11,6 +11,14 @@ import { prompt } from './prompt.js'
import { t } from './translate.js' import { t } from './translate.js'
import { getPackageManager } from './utils/index.js' import { getPackageManager } from './utils/index.js'
/**
* Run the CLI workflow for VuePress project initialization or creation
*
* VuePress CLI
*
* @param mode - Operation mode (init or create) /
* @param root - Root directory path /
*/
export async function run(mode: Mode, root?: string): Promise<void> { export async function run(mode: Mode, root?: string): Promise<void> {
intro(colors.cyan('Welcome to VuePress and vuepress-theme-plume !')) intro(colors.cyan('Welcome to VuePress and vuepress-theme-plume !'))
@ -70,6 +78,15 @@ export async function run(mode: Mode, root?: string): Promise<void> {
} }
} }
/**
* Resolve prompt result into final configuration data.
*
*
*
* @param result - Prompt result from user input /
* @param mode - Operation mode (init or create) /
* @returns Resolved configuration data /
*/
function resolveData(result: PromptResult, mode: Mode): ResolvedData { function resolveData(result: PromptResult, mode: Mode): ResolvedData {
return { return {
...result, ...result,

View File

@ -6,6 +6,14 @@ interface Translate {
t: (key: keyof Locale) => string t: (key: keyof Locale) => string
} }
/**
* Create a translate instance with specified language
*
*
*
* @param lang - Language code /
* @returns Translate interface /
*/
function createTranslate(lang?: Langs): Translate { function createTranslate(lang?: Langs): Translate {
let current: Langs = lang || 'en-US' let current: Langs = lang || 'en-US'
@ -19,5 +27,21 @@ function createTranslate(lang?: Langs): Translate {
const translate = createTranslate() const translate = createTranslate()
/**
* Get translated string by key
*
*
*
* @param key - Locale key /
* @returns Translated string /
*/
export const t: Translate['t'] = translate.t export const t: Translate['t'] = translate.t
/**
* Set current language
*
*
*
* @param lang - Language code to set /
*/
export const setLang: Translate['setLang'] = translate.setLang export const setLang: Translate['setLang'] = translate.setLang

View File

@ -1,57 +1,276 @@
import type { DeployType } from './constants.js' import type { DeployType } from './constants.js'
/**
* Supported language codes for VuePress site
*
* VuePress
*/
export type Langs = 'zh-CN' | 'en-US' export type Langs = 'zh-CN' | 'en-US'
/**
* Locale configuration for CLI prompts and messages
*
* CLI
*/
export interface Locale { export interface Locale {
/**
* Question: Project root directory name
*
*
*/
'question.root': string 'question.root': string
/**
* Question: Site name
*
*
*/
'question.site.name': string 'question.site.name': string
/**
* Question: Site description
*
*
*/
'question.site.description': string 'question.site.description': string
/**
* Question: Enable multi-language support
*
*
*/
'question.multiLanguage': string 'question.multiLanguage': string
/**
* Question: Default language
*
*
*/
'question.defaultLanguage': string 'question.defaultLanguage': string
/**
* Question: Build tool bundler
*
*
*/
'question.bundler': string 'question.bundler': string
/**
* Question: Use TypeScript
*
* 使 TypeScript
*/
'question.useTs': string 'question.useTs': string
/**
* Question: Inject npm scripts
*
* npm
*/
'question.injectNpmScripts': string 'question.injectNpmScripts': string
/**
* Question: Initialize git repository
*
* git
*/
'question.git': string 'question.git': string
/**
* Question: Deployment type
*
*
*/
'question.deploy': string 'question.deploy': string
/**
* Question: Install dependencies
*
*
*/
'question.installDeps': string 'question.installDeps': string
/**
* Spinner: Start message
*
*
*/
'spinner.start': string 'spinner.start': string
/**
* Spinner: Stop message
*
*
*/
'spinner.stop': string 'spinner.stop': string
/**
* Spinner: Git init message
*
* Git
*/
'spinner.git': string 'spinner.git': string
/**
* Spinner: Install message
*
*
*/
'spinner.install': string 'spinner.install': string
/**
* Spinner: Command hint message
*
*
*/
'spinner.command': string 'spinner.command': string
/**
* Hint: Cancel operation
*
*
*/
'hint.cancel': string 'hint.cancel': string
/**
* Hint: Root directory
*
*
*/
'hint.root': string 'hint.root': string
/**
* Hint: Illegal root directory name
*
*
*/
'hint.root.illegal': string 'hint.root.illegal': string
} }
/**
* Package manager types
*
*
*/
export type PackageManager = 'npm' | 'yarn' | 'pnpm' export type PackageManager = 'npm' | 'yarn' | 'pnpm'
/**
* Build tool bundler types
*
*
*/
export type Bundler = 'vite' | 'webpack' export type Bundler = 'vite' | 'webpack'
/**
* Generic options type for CLI prompts
*
* CLI
*
* @template Value - The value type for options
* @template Label - The label type for options
*/
export type Options<Value = string, Label = string> = { label: Label, value: Value }[] export type Options<Value = string, Label = string> = { label: Label, value: Value }[]
/**
* File structure for generated project
*
*
*/
export interface File { export interface File {
/**
* File path relative to project root
*
*
*/
filepath: string filepath: string
/**
* File content
*
*
*/
content: string content: string
} }
/**
* Result from CLI prompts
*
* CLI
*/
export interface PromptResult { export interface PromptResult {
displayLang: string // cli display language /**
* CLI display language
*
* CLI
*/
displayLang: string
/**
* Project root directory name
*
*
*/
root: string root: string
/**
* Site name
*
*
*/
siteName: string siteName: string
/**
* Site description
*
*
*/
siteDescription: string siteDescription: string
/**
* Build tool bundler
*
*
*/
bundler: Bundler bundler: Bundler
/**
* Enable multi-language support
*
*
*/
multiLanguage: boolean multiLanguage: boolean
/**
* Default language
*
*
*/
defaultLanguage: Langs defaultLanguage: Langs
/**
* Use TypeScript
*
* 使 TypeScript
*/
useTs: boolean useTs: boolean
/**
* Inject npm scripts
*
* npm
*/
injectNpmScripts: boolean injectNpmScripts: boolean
/**
* Deployment type
*
*
*/
deploy: DeployType deploy: DeployType
/**
* Initialize git repository
*
* git
*/
git: boolean git: boolean
/**
* Install dependencies
*
*
*/
install: boolean install: boolean
} }
/**
* Resolved data after processing prompts
*
*
*/
export interface ResolvedData extends PromptResult { export interface ResolvedData extends PromptResult {
/**
* Selected package manager
*
*
*/
packageManager: PackageManager packageManager: PackageManager
/**
* Documentation directory name
*
*
*/
docsDir: string docsDir: string
} }

View File

@ -2,6 +2,14 @@ import type { File } from '../types.js'
import fs from 'node:fs/promises' import fs from 'node:fs/promises'
import path from 'node:path' import path from 'node:path'
/**
* Read all files from a directory recursively
*
*
*
* @param root - Root directory path to read from /
* @returns Array of file objects /
*/
export async function readFiles(root: string): Promise<File[]> { export async function readFiles(root: string): Promise<File[]> {
const filepaths = await fs.readdir(root, { recursive: true }) const filepaths = await fs.readdir(root, { recursive: true })
const files: File[] = [] const files: File[] = []
@ -18,6 +26,15 @@ export async function readFiles(root: string): Promise<File[]> {
return files return files
} }
/**
* Write files to target directory
*
*
*
* @param files - Array of file objects to write /
* @param target - Target directory path /
* @param rewrite - Optional function to rewrite file paths /
*/
export async function writeFiles( export async function writeFiles(
files: File[], files: File[],
target: string, target: string,
@ -32,6 +49,14 @@ export async function writeFiles(
} }
} }
/**
* Read and parse JSON file
*
* JSON
*
* @param filepath - Path to JSON file / JSON
* @returns Parsed JSON object or null if parsing fails / JSON null
*/
export async function readJsonFile<T extends Record<string, any> = Record<string, any>>(filepath: string): Promise<T | null> { export async function readJsonFile<T extends Record<string, any> = Record<string, any>>(filepath: string): Promise<T | null> {
try { try {
const content = await fs.readFile(filepath, 'utf-8') const content = await fs.readFile(filepath, 'utf-8')

View File

@ -1,6 +1,19 @@
import type { PackageManager } from '../types.js' import type { PackageManager } from '../types.js'
import process from 'node:process' import process from 'node:process'
/**
* Detect the current package manager from environment variables.
*
* 使
*
* @returns The detected package manager name /
* @example
* // When using pnpm
* const pm = getPackageManager() // returns 'pnpm'
*
* // When using npm
* const pm = getPackageManager() // returns 'npm'
*/
export function getPackageManager(): PackageManager { export function getPackageManager(): PackageManager {
const name = process.env?.npm_config_user_agent || 'npm' const name = process.env?.npm_config_user_agent || 'npm'
return name.split('/')[0] as PackageManager return name.split('/')[0] as PackageManager

View File

@ -3,8 +3,24 @@ import { fileURLToPath } from 'node:url'
export const __dirname: string = path.dirname(fileURLToPath(import.meta.url)) export const __dirname: string = path.dirname(fileURLToPath(import.meta.url))
/**
* Resolve path relative to the project root
*
*
*
* @param args - Path segments to resolve /
* @returns Resolved absolute path /
*/
export const resolve = (...args: string[]): string => path.resolve(__dirname, '../', ...args) export const resolve = (...args: string[]): string => path.resolve(__dirname, '../', ...args)
/**
* Get template directory path
*
*
*
* @param dir - Subdirectory name within templates / templates
* @returns Resolved template directory path /
*/
export const getTemplate = (dir: string): string => resolve('templates', dir) export const getTemplate = (dir: string): string => resolve('templates', dir)
export * from './fs.js' export * from './fs.js'

View File

@ -117,7 +117,7 @@ const demoDoc = defineCollection({
* (blog 为博客示例,如果不需要博客功能,请删除) * (blog 为博客示例,如果不需要博客功能,请删除)
* (demoDoc 为参考示例,如果不需要它,请删除) * (demoDoc 为参考示例,如果不需要它,请删除)
*/ */
export default defineCollection([ export default defineCollections([
blog, blog,
demoDoc, demoDoc,
]) ])

View File

@ -56,13 +56,13 @@ export default defineUserConfig({
/** /**
* 编译缓存,加快编译速度 * 编译缓存,加快编译速度
* @see https://theme-plume.vuejs.press/config/basic/#cache * @see https://theme-plume.vuejs.press/config/theme/#cache
*/ */
cache: 'filesystem', cache: 'filesystem',
/** /**
* 为 markdown 文件自动添加 frontmatter 配置 * 为 markdown 文件自动添加 frontmatter 配置
* @see https://theme-plume.vuejs.press/config/basic/#autofrontmatter * @see https://theme-plume.vuejs.press/config/theme/#autofrontmatter
*/ */
// autoFrontmatter: { // autoFrontmatter: {
// permalink: true, // 是否生成永久链接 // permalink: true, // 是否生成永久链接
@ -82,7 +82,7 @@ export default defineUserConfig({
// provider: 'algolia', // provider: 'algolia',
// appId: '', // appId: '',
// apiKey: '', // apiKey: '',
// indexName: '', // indices: [''],
// }, // },
/** /**
@ -120,6 +120,7 @@ export default defineUserConfig({
// jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id) // jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id)
// npmTo: true, // 启用 npm-to 容器 ::: npm-to // npmTo: true, // 启用 npm-to 容器 ::: npm-to
// demo: true, // 启用 demo 容器 ::: demo // demo: true, // 启用 demo 容器 ::: demo
// collapse: true, // 启用折叠容器 ::: collapse
// repl: { // 启用 代码演示容器 // repl: { // 启用 代码演示容器
// go: true, // ::: go-repl // go: true, // ::: go-repl
// rust: true, // ::: rust-repl // rust: true, // ::: rust-repl
@ -176,5 +177,18 @@ export default defineUserConfig({
* @see https://theme-plume.vuejs.press/guide/features/encryption/ * @see https://theme-plume.vuejs.press/guide/features/encryption/
*/ */
// encrypt: {}, // encrypt: {},
/**
* 启用 llmstxt 插件,用于为大语言模型提供更友好的内容
* @see https://theme-plume.vuejs.press/guide/features/llmstxt/
*/
// llmstxt: {
{{#if multiLanguage}}
// locale: '/', // 默认仅为主语言生成 llms 友好内容
// locale: 'all', // 为所有语言生成 llms 友好内容
{{else}}
// locale: '/', // 默认仅为主语言生成 llms 友好内容
{{/if}}
// }
}), }),
}) })

View File

@ -20,7 +20,7 @@ import collections from './collections'
{{/if}} {{/if}}
/** /**
* @see https://theme-plume.vuejs.press/config/basic/ * @see https://theme-plume.vuejs.press/config/theme/
*/ */
export default defineThemeConfig({ export default defineThemeConfig({
logo: 'https://theme-plume.vuejs.press/plume.png', logo: 'https://theme-plume.vuejs.press/plume.png',
@ -52,7 +52,7 @@ export default defineThemeConfig({
{{#unless multiLanguage}} {{#unless multiLanguage}}
/** /**
* @see https://theme-plume.vuejs.press/config/basic/#profile * @see https://theme-plume.vuejs.press/config/theme/#profile
*/ */
profile: { profile: {
avatar: 'https://theme-plume.vuejs.press/plume.png', avatar: 'https://theme-plume.vuejs.press/plume.png',
@ -78,7 +78,7 @@ export default defineThemeConfig({
// }, // },
{{/unless}} {{/unless}}
/* 过渡动画 @see https://theme-plume.vuejs.press/config/basic/#transition */ /* 过渡动画 @see https://theme-plume.vuejs.press/config/theme/#transition */
// transition: { // transition: {
// page: true, // 启用 页面间跳转过渡动画 // page: true, // 启用 页面间跳转过渡动画
// postList: true, // 启用 博客文章列表过渡动画 // postList: true, // 启用 博客文章列表过渡动画
@ -90,7 +90,7 @@ export default defineThemeConfig({
{{#each locales}} {{#each locales}}
'{{ path }}': { '{{ path }}': {
/** /**
* @see https://theme-plume.vuejs.press/config/basic/#profile * @see https://theme-plume.vuejs.press/config/theme/#profile
*/ */
profile: { profile: {
avatar: 'https://theme-plume.vuejs.press/plume.png', avatar: 'https://theme-plume.vuejs.press/plume.png',

View File

@ -56,11 +56,15 @@ jobs:
# Run the build script # Run the build script
{{#unless (equal packageManager "yarn")}} {{#unless (equal packageManager "yarn")}}
- name: Build VuePress site - name: Build VuePress site
env:
NODE_OPTIONS: --max_old_space_size=8192
run: {{packageManager}} run docs:build run: {{packageManager}} run docs:build
{{/unless}} {{/unless}}
{{#if (equal packageManager "yarn")}} {{#if (equal packageManager "yarn")}}
- name: Build VuePress site - name: Build VuePress site
uses: borales/actions-yarn@v4 uses: borales/actions-yarn@v4
env:
NODE_OPTIONS: --max_old_space_size=8192
with: with:
cmd: docs:build cmd: docs:build
{{/if}} {{/if}}

View File

@ -5,7 +5,8 @@ config:
- -
type: hero type: hero
full: true full: true
background: tint-plate forceDark: true
effect: lightning
hero: hero:
name: Theme Plume name: Theme Plume
tagline: VuePress Next Theme tagline: VuePress Next Theme

View File

@ -81,7 +81,7 @@ content right
**demo wrapper** **demo wrapper**
::: demo-wrapper title="Demo" no-padding height="200px" ::: window title="Demo" height="200px"
<style scoped> <style scoped>
.open-door { .open-door {
display: flex; display: flex;

View File

@ -5,7 +5,8 @@ config:
- -
type: hero type: hero
full: true full: true
background: tint-plate forceDark: true
effect: lightning
hero: hero:
name: Theme Plume name: Theme Plume
tagline: VuePress Next Theme tagline: VuePress Next Theme

View File

@ -95,9 +95,9 @@ H~2~O
- vscode - <Icon name="skill-icons:vscode-dark" size="2em" /> - vscode - <Icon name="skill-icons:vscode-dark" size="2em" />
- twitter - <Icon name="skill-icons:twitter" size="2em" /> - twitter - <Icon name="skill-icons:twitter" size="2em" />
**demo wrapper** **示例容器**
::: demo-wrapper title="示例" no-padding height="200px" ::: window title="示例" height="200px"
<style scoped> <style scoped>
.open-door { .open-door {
display: flex; display: flex;
@ -137,68 +137,6 @@ const obj = {
} }
``` ```
**Code Blocks TwoSlash**
```ts twoslash
// @errors: 2339
const welcome = 'Tudo bem gente?'
const words = welcome.contains(' ')
```
```ts twoslash
import express from 'express'
const app = express()
app.get('/', (req, res) => {
res.send
})
app.listen(3000)
```
```ts twoslash
import { createHighlighter } from 'shiki'
const highlighter = await createHighlighter({ themes: ['nord'], langs: ['javascript'] })
// @log: Custom log message
const a = 1
// @error: Custom error message
const b = 1
// @warn: Custom warning message
const c = 1
// @annotate: Custom annotation message
```
```ts twoslash
// @errors: 2540
interface Todo {
title: string
}
const todo: Readonly<Todo> = {
title: 'Delete inactive users'.toUpperCase(),
// ^?
}
todo.title = 'Hello'
Number.parseInt('123', 10)
// ^|
//
//
```
```vue twoslash
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<p>{{ count }}</p>
</template>
```
**代码分组:** **代码分组:**
::: code-tabs ::: code-tabs

View File

@ -6,6 +6,8 @@
*.jpeg binary *.jpeg binary
*.ico binary *.ico binary
*.gif binary *.gif binary
*.webp binary
*.tff binary *.tff binary
*.woff binary *.woff binary
*.woff2 binary *.woff2 binary
*.pdf binary

View File

@ -6,4 +6,5 @@ export default defineConfig({
dts: true, dts: true,
format: 'esm', format: 'esm',
sourcemap: false, sourcemap: false,
fixedExtension: false,
}) })

View File

@ -1,8 +1,9 @@
import type { ClientConfig } from 'vuepress/client' import type { ClientConfig } from 'vuepress/client'
import { defineMermaidConfig } from '@vuepress/plugin-markdown-chart/client' import { defineMermaidConfig } from '@vuepress/plugin-markdown-chart/client'
import { h } from 'vue' import { defineAsyncComponent, h } from 'vue'
import { Layout } from 'vuepress-theme-plume/client' import { Layout } from 'vuepress-theme-plume/client'
import VPPostItem from 'vuepress-theme-plume/components/Posts/VPPostItem.vue' import VPPostItem from 'vuepress-theme-plume/components/Posts/VPPostItem.vue'
import PageContextMenu from 'vuepress-theme-plume/features/PageContextMenu.vue'
import { defineClientConfig } from 'vuepress/client' import { defineClientConfig } from 'vuepress/client'
import AsideNav from '~/components/AsideNav.vue' import AsideNav from '~/components/AsideNav.vue'
import { setupThemeColors } from '~/composables/theme-colors.js' import { setupThemeColors } from '~/composables/theme-colors.js'
@ -17,6 +18,7 @@ defineMermaidConfig({
export default defineClientConfig({ export default defineClientConfig({
enhance({ app }) { enhance({ app }) {
app.component('VPPostItem', VPPostItem) app.component('VPPostItem', VPPostItem)
app.component('TintPlate', defineAsyncComponent(() => import('vuepress-theme-plume/components/background/TintPlate.vue')))
}, },
setup() { setup() {
setupThemeColors() setupThemeColors()
@ -24,6 +26,7 @@ export default defineClientConfig({
layouts: { layouts: {
Layout: h(Layout, null, { Layout: h(Layout, null, {
'aside-outline-after': () => h(AsideNav), 'aside-outline-after': () => h(AsideNav),
'doc-title-after': () => h(PageContextMenu),
}), }),
}, },
}) as ClientConfig }) as ClientConfig

View File

@ -4,6 +4,9 @@ import { themeGuide } from './theme-guide.js'
import { tools } from './tools.js' import { tools } from './tools.js'
export const enCollections: ThemeCollections = defineCollections([ export const enCollections: ThemeCollections = defineCollections([
// 博客
{ type: 'post', dir: '/blog/', link: '/blog/', title: 'Blog' },
// 文档
themeGuide, themeGuide,
themeConfig, themeConfig,
tools, tools,

View File

@ -40,6 +40,7 @@ export const themeConfig: ThemeCollectionItem = defineCollection({
'shiki', 'shiki',
'search', 'search',
'reading-time', 'reading-time',
'llms',
'markdown-enhance', 'markdown-enhance',
'markdown-power', 'markdown-power',
'markdown-image', 'markdown-image',

View File

@ -23,6 +23,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
}, },
'sidebar', 'sidebar',
'write', 'write',
'auto-frontmatter',
'locales', 'locales',
'deployment', 'deployment',
'optimize-build', 'optimize-build',
@ -41,18 +42,24 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
items: [ items: [
'basic', 'basic',
'extensions', 'extensions',
'attrs',
'emoji',
'math',
'table', 'table',
'icons', 'icons',
'mark', 'mark',
'plot', 'plot',
'abbr', 'abbr',
'annotation', 'annotation',
'container',
'github-alerts',
'card', 'card',
'steps', 'steps',
'file-tree', 'file-tree',
'code-tree', 'code-tree',
'field', 'field',
'tabs', 'tabs',
'qrcode',
'timeline', 'timeline',
'demo-wrapper', 'demo-wrapper',
'flex', 'flex',
@ -61,6 +68,8 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
'caniuse', 'caniuse',
'chat', 'chat',
'include', 'include',
'env',
'obsidian',
], ],
}, },
{ {
@ -144,6 +153,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
'replace-assets', 'replace-assets',
'seo', 'seo',
'sitemap', 'sitemap',
'llmstxt',
], ],
}, },
{ {
@ -172,7 +182,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
collapsed: false, collapsed: false,
prefix: 'custom', prefix: 'custom',
items: [ items: [
'home', { text: 'Custom Homepage', link: 'home', items: ['home-hero-effect'] },
'style', 'style',
'slots', 'slots',
'component-overrides', 'component-overrides',

View File

@ -4,6 +4,9 @@ import { themeGuide } from './theme-guide.js'
import { tools } from './tools.js' import { tools } from './tools.js'
export const zhCollections: ThemeCollections = defineCollections([ export const zhCollections: ThemeCollections = defineCollections([
// 博客
{ type: 'post', dir: '/blog/', link: '/blog/', title: '博客' },
// 文档
themeGuide, themeGuide,
themeConfig, themeConfig,
tools, tools,

View File

@ -40,6 +40,7 @@ export const themeConfig: ThemeCollectionItem = defineCollection({
'shiki', 'shiki',
'search', 'search',
'reading-time', 'reading-time',
'llms',
'markdown-enhance', 'markdown-enhance',
'markdown-power', 'markdown-power',
'markdown-image', 'markdown-image',

View File

@ -23,6 +23,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
}, },
'sidebar', 'sidebar',
'write', 'write',
'auto-frontmatter',
'locales', 'locales',
'deployment', 'deployment',
'optimize-build', 'optimize-build',
@ -41,18 +42,24 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
items: [ items: [
'basic', 'basic',
'extensions', 'extensions',
'attrs',
'emoji',
'math',
'table', 'table',
'icons', 'icons',
'mark', 'mark',
'plot', 'plot',
'abbr', 'abbr',
'annotation', 'annotation',
'container',
'github-alerts',
'card', 'card',
'steps', 'steps',
'file-tree', 'file-tree',
'code-tree', 'code-tree',
'field', 'field',
'tabs', 'tabs',
'qrcode',
'timeline', 'timeline',
'demo-wrapper', 'demo-wrapper',
'flex', 'flex',
@ -61,6 +68,8 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
'caniuse', 'caniuse',
'chat', 'chat',
'include', 'include',
'env',
'obsidian',
], ],
}, },
{ {
@ -144,6 +153,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
'replace-assets', 'replace-assets',
'seo', 'seo',
'sitemap', 'sitemap',
'llmstxt',
], ],
}, },
{ {
@ -172,7 +182,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
collapsed: false, collapsed: false,
prefix: 'custom', prefix: 'custom',
items: [ items: [
'home', { text: '自定义首页', link: 'home', items: ['home-hero-effect'] },
'style', 'style',
'slots', 'slots',
'component-overrides', 'component-overrides',

View File

@ -3,9 +3,7 @@ import fs from 'node:fs'
import path from 'node:path' import path from 'node:path'
import { viteBundler } from '@vuepress/bundler-vite' import { viteBundler } from '@vuepress/bundler-vite'
import { addViteOptimizeDepsInclude, addViteSsrExternal } from '@vuepress/helper' import { addViteOptimizeDepsInclude, addViteSsrExternal } from '@vuepress/helper'
import { llmsPlugin } from '@vuepress/plugin-llms'
import { defineUserConfig } from 'vuepress' import { defineUserConfig } from 'vuepress'
import { tocGetter } from './llmstxtTOC.js'
import { theme } from './theme.js' import { theme } from './theme.js'
const pnpmWorkspace = fs.readFileSync(path.resolve(__dirname, '../../pnpm-workspace.yaml'), 'utf-8') const pnpmWorkspace = fs.readFileSync(path.resolve(__dirname, '../../pnpm-workspace.yaml'), 'utf-8')
@ -47,16 +45,6 @@ export default defineUserConfig({
'~/composables': path.resolve(__dirname, './themes/composables'), '~/composables': path.resolve(__dirname, './themes/composables'),
}, },
plugins: [
llmsPlugin({
llmsTxtTemplateGetter: {
description: '一个简约易用的,功能丰富的 vuepress 文档&博客 主题',
details: '',
toc: tocGetter,
},
}),
],
bundler: viteBundler(), bundler: viteBundler(),
shouldPrefetch: false, shouldPrefetch: false,

View File

@ -1,104 +0,0 @@
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 { zhCollections } from './collections/zh/index.js'
function normalizePath(prefix: string, path = ''): string {
if (path.startsWith('/'))
return path
return `${ensureEndingSlash(prefix)}${path}`
}
export function tocGetter(llmPages: LLMPage[], llmState: LLMState): string {
let tableOfContent = ''
const usagePages: LLMPage[] = []
// Blog
tableOfContent += `### 博客\n\n`
const blogList: string[] = []
llmPages.forEach((page) => {
if (page.path.startsWith('/article/') || page.path.startsWith('/blog/')) {
usagePages.push(page)
blogList.push(rawGenerateTOCLink(page, llmState))
}
})
tableOfContent += `${blogList.filter(Boolean).join('')}\n`
const generateTOCLink = (path: string): string => {
const filepath = path.endsWith('/') ? `${path}README.md` : path.endsWith('.md') ? path : `${path || 'README'}.md`
const link = path.endsWith('/') ? `${path}index.html` : `${path}.html`
const page = llmPages.find((item) => {
return ensureLeadingSlash(item.filePathRelative || '') === filepath || link === item.path
})
if (page) {
usagePages.push(page)
return rawGenerateTOCLink(page, llmState)
}
return ''
}
const processAutoSidebar = (prefix: string): string[] => {
const list: string[] = []
llmPages.forEach((page) => {
if (ensureLeadingSlash(page.filePathRelative || '').startsWith(prefix)) {
usagePages.push(page)
list.push(rawGenerateTOCLink(page, llmState))
}
})
return list.filter(Boolean)
}
const processSidebar = (items: (string | ThemeSidebarItem)[], prefix: string): string[] => {
const result: string[] = []
items.forEach((item) => {
if (typeof item === 'string') {
result.push(generateTOCLink(normalizePath(prefix, item)))
}
else {
if (item.link) {
result.push(generateTOCLink(normalizePath(prefix, item.link)))
}
if (item.items === 'auto') {
result.push(...processAutoSidebar(normalizePath(prefix, item.prefix)))
}
else if (item.items?.length) {
result.push(...processSidebar(item.items, normalizePath(prefix, item.prefix)))
}
}
})
return result
}
// Notes
zhCollections
.filter(collection => collection.type === 'doc')
.forEach(({ dir, title, sidebar = [] }) => {
tableOfContent += `### ${title}\n\n`
const prefix = normalizePath(ensureLeadingSlash(dir))
if (sidebar === 'auto') {
tableOfContent += `${processAutoSidebar(prefix).join('')}\n`
}
else if (sidebar.length) {
const home = generateTOCLink(ensureEndingSlash(prefix))
const list = processSidebar(sidebar, prefix)
if (home && !list.includes(home)) {
list.unshift(home)
}
tableOfContent += `${list.join('')}\n`
}
})
// Others
const unUsagePages = llmPages.filter(page => !usagePages.includes(page))
if (unUsagePages.length) {
tableOfContent += '### Others\n\n'
tableOfContent += unUsagePages
.map(page => rawGenerateTOCLink(page, llmState))
.join('')
}
return tableOfContent
}

View File

@ -94,7 +94,7 @@ export const enNavbar: ThemeNavItem[] = defineNavbarConfig([
{ {
text: `${version}`, text: `${version}`,
icon: 'codicon:versions', icon: 'codicon:versions',
badge: '', badge: 'New',
items: [ items: [
{ text: 'Changelog', link: '/en/changelog/' }, { text: 'Changelog', link: '/en/changelog/' },
{ text: 'Contributing', link: '/en/contributing/' }, { text: 'Contributing', link: '/en/contributing/' },

View File

@ -29,24 +29,12 @@ export default defineThemeConfig({
locales: { locales: {
'/': { '/': {
// notes: zhNotes,
navbar: zhNavbar, navbar: zhNavbar,
collections: [ collections: zhCollections,
// 博客
{ type: 'post', dir: '/blog/', link: '/blog/', title: '博客' },
// 文档
...zhCollections,
],
}, },
'/en/': { '/en/': {
// notes: enNotes,
navbar: enNavbar, navbar: enNavbar,
collections: [ collections: enCollections,
// 博客
{ type: 'post', dir: '/blog/', link: '/blog/', title: 'Blog' },
// 文档
...enCollections,
],
}, },
}, },

View File

@ -0,0 +1,4 @@
/llms.md /llms.txt 200!
/llms-full.md /llms-full.txt 200!
/en/llms.md /en/llms.txt 200!
/en/llms-full.md /en/llms-full.txt 200!

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 KiB

View File

@ -18,6 +18,15 @@ export const theme: Theme = plumeTheme({
}, },
markdown: { markdown: {
icon: {
provider: 'iconify',
preload: [
// used within <AsideNae />
'tabler:star',
'octicon:issue-opened-16',
'ep:milk-tea',
],
},
chartjs: true, chartjs: true,
echarts: true, echarts: true,
markmap: true, markmap: true,
@ -36,6 +45,7 @@ export const theme: Theme = plumeTheme({
imageSize: 'all', imageSize: 'all',
mark: 'lazy', mark: 'lazy',
pdf: true, pdf: true,
qrcode: true,
caniuse: true, caniuse: true,
acfun: true, acfun: true,
bilibili: true, bilibili: true,
@ -47,6 +57,8 @@ export const theme: Theme = plumeTheme({
codeSandbox: true, codeSandbox: true,
jsfiddle: true, jsfiddle: true,
demo: true, demo: true,
encrypt: true,
obsidian: true,
npmTo: ['pnpm', 'yarn', 'npm'], npmTo: ['pnpm', 'yarn', 'npm'],
repl: { repl: {
go: true, go: true,
@ -76,4 +88,16 @@ export const theme: Theme = plumeTheme({
content: 'vuepress-theme-plume', content: 'vuepress-theme-plume',
}, },
}, },
llmstxt: {
locale: 'all',
llmsTxtTemplateGetter: {
description: (_, { currentLocale }) => {
return currentLocale === '/'
? '一个简约易用的,功能丰富的 vuepress 文档&博客 主题'
: 'An easy-to-use and feature-rich vuepress documentation and blog theme'
},
details: '',
},
},
}) })

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue' import { computed } from 'vue'
import { VPLink } from 'vuepress-theme-plume/client' import { VPIcon, VPLink } from 'vuepress-theme-plume/client'
import { useRouteLocale } from 'vuepress/client' import { useRouteLocale } from 'vuepress/client'
interface Locale { interface Locale {
@ -21,17 +21,17 @@ const locale = computed(() => locales[lang.value])
<template> <template>
<div class="aside-nav-wrapper"> <div class="aside-nav-wrapper">
<VPLink class="link" no-icon href="https://github.com/pengzhanbo/vuepress-theme-plume"> <VPLink class="link" no-icon href="https://github.com/pengzhanbo/vuepress-theme-plume">
<span class="vpi-github-star" /> <VPIcon name="tabler:star" />
<span class="link-text">{{ locale.star }}</span> <span class="link-text">{{ locale.star }}</span>
<span class="vpi-arrow-right" /> <span class="vpi-arrow-right" />
</VPLink> </VPLink>
<VPLink class="link" no-icon href="https://github.com/pengzhanbo/vuepress-theme-plume/issues/new/choose"> <VPLink class="link" no-icon href="https://github.com/pengzhanbo/vuepress-theme-plume/issues/new/choose">
<span class="vpi-github-issue" /> <VPIcon name="octicon:issue-opened-16" />
<span class="link-text">{{ locale.issue }}</span> <span class="link-text">{{ locale.issue }}</span>
<span class="vpi-arrow-right" /> <span class="vpi-arrow-right" />
</VPLink> </VPLink>
<VPLink class="link" href="/sponsor/"> <VPLink class="link" href="/sponsor/">
<span class="vpi-bubble-tea" /> <VPIcon name="ep:milk-tea" />
<span class="link-text">{{ locale.sponsor }}</span> <span class="link-text">{{ locale.sponsor }}</span>
<span class="vpi-arrow-right" /> <span class="vpi-arrow-right" />
</VPLink> </VPLink>
@ -65,15 +65,7 @@ const locale = computed(() => locales[lang.value])
font-size: 12px; font-size: 12px;
} }
.vpi-github-star { .aside-nav-wrapper :deep([class*=" vpi-"]) {
--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m12 1.5l3.1 6.3l6.9 1l-5 4.8l1.2 6.9l-6.2-3.2l-6.2 3.2L7 13.6L2 8.8l6.9-1z'/%3E%3C/svg%3E"); margin: 0;
}
.vpi-github-issue {
--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='%23000' d='M8 9.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3'/%3E%3Cpath fill='%23000' d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M1.5 8a6.5 6.5 0 1 0 13 0a6.5 6.5 0 0 0-13 0'/%3E%3C/svg%3E");
}
.vpi-bubble-tea {
--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m17.95 9l-1.478 8.69c-.25 1.463-.374 2.195-.936 2.631c-1.2.931-6.039.88-7.172 0c-.562-.436-.687-1.168-.936-2.632L5.95 9M6 9l.514-1.286a5.908 5.908 0 0 1 10.972 0L18 9M5 9h14m-7 0l4-7m-5.99 12h.01m1 4h.01m1.99-2h.01'/%3E%3C/svg%3E");
} }
</style> </style>

View File

@ -35,7 +35,7 @@ const locale = computed(() => LOCALES[routeLocale.value])
const { feature, featureList, onSelect, isFocus } = useCaniuseFeaturesSearch(inputEl, listEl) const { feature, featureList, onSelect, isFocus } = useCaniuseFeaturesSearch(inputEl, listEl)
const { past, pastList, future, futureList, embedType, embedTypeList } = useCaniuseVersionSelect() const { past, pastList, future, futureList, embedType, embedTypeList } = useCaniuseVersionSelect()
const { output, rendered } = useCaniuse({ feature, embedType, past, future }) const { output } = useCaniuse({ feature, embedType, past, future })
</script> </script>
<template> <template>
@ -63,9 +63,8 @@ const { output, rendered } = useCaniuse({ feature, embedType, past, future })
class="feature-list-item" class="feature-list-item"
@click="onSelect(item)" @click="onSelect(item)"
@keydown.enter="onSelect(item)" @keydown.enter="onSelect(item)"
> v-html="item.label"
{{ item.label }} />
</button>
</li> </li>
</ul> </ul>
</div> </div>
@ -80,7 +79,6 @@ const { output, rendered } = useCaniuse({ feature, embedType, past, future })
> >
<input :id="`caniuse-embed-${id}-${index}`" v-model="embedType" type="radio" name="embedType" :value="item.value"> <input :id="`caniuse-embed-${id}-${index}`" v-model="embedType" type="radio" name="embedType" :value="item.value">
<span>{{ item.label }}</span> <span>{{ item.label }}</span>
<Badge v-if="item.value === 'image'" type="warning" :text="locale['no-recommend']" />
</label> </label>
</div> </div>
</div> </div>
@ -109,8 +107,7 @@ const { output, rendered } = useCaniuse({ feature, embedType, past, future })
<h4>{{ locale.output }}</h4> <h4>{{ locale.output }}</h4>
<CodeViewer lang="md" :content="output" /> <CodeViewer lang="md" :content="output" />
</div> </div>
<div v-if="embedType === 'image'" v-html="rendered" /> <CanIUseViewer v-if="feature" :feature="feature" :past="past" :future="future" :baseline="embedType === 'baseline'" />
<CanIUseViewer v-else-if="feature" :feature="feature" :past="past" :future="future" />
</div> </div>
</template> </template>

View File

@ -1,12 +1,20 @@
<script setup lang="ts"> <script setup lang="ts">
import type { PlumeThemeHomeHeroTintPlate } from 'vuepress-theme-plume/client'
import { computed, watch } from 'vue' import { computed, watch } from 'vue'
import InputRange from './InputRange.vue' import InputRange from './InputRange.vue'
const min = 20 const min = 20
const max = 240 const max = 240
const tintPlate = defineModel<PlumeThemeHomeHeroTintPlate>({ interface PlateItem {
value: number
offset: number
}
const tintPlate = defineModel<{
r: PlateItem
g: PlateItem
b: PlateItem
}>({
required: true, required: true,
}) })

View File

@ -28,7 +28,7 @@ defineProps<{
<a :href="demo.url" target="_blank" rel="noopener noreferrer" :aria-label="demo.name" :title="demo.name">{{ demo.name }}</a> <a :href="demo.url" target="_blank" rel="noopener noreferrer" :aria-label="demo.name" :title="demo.name">{{ demo.name }}</a>
</span> </span>
<a v-if="demo.repo" :href="demo.repo" class="github" target="_blank" rel="noopener noreferrer" :aria-label="`Link to GitHub: ${demo.name}`"> <a v-if="demo.repo" :href="demo.repo" class="github" target="_blank" rel="noopener noreferrer" :aria-label="`Link to GitHub: ${demo.name}`">
<span class="vpi-social-github" /> <span class="vpi-simple-icons-github" />
</a> </a>
</h3> </h3>
<p :title="demo.desc"> <p :title="demo.desc">

View File

@ -0,0 +1,87 @@
<script setup lang="ts">
import { useClipboard } from '@vueuse/core'
import { computed } from 'vue'
const { list } = defineProps<{
list: Record<string, string>
}>()
const emojiList = computed(() => {
return Object.entries(list).map(([key, value]) => ({
source: `:${key}:`,
rendered: value,
}))
})
const { copy, copied, text } = useClipboard()
</script>
<template>
<div class="emoji-wrapper">
<ul>
<li
v-for="{ source, rendered } in emojiList" :key="source"
:class="{ copied: copied && text === source }"
>
<Abbreviation @click="copy(source)">
{{ rendered }}
<template #tooltip>
{{ source }}
</template>
</Abbreviation>
</li>
</ul>
</div>
</template>
<style scoped>
.emoji-wrapper ul {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
justify-content: flex-start;
padding: 0;
list-style: none;
}
.emoji-wrapper ul li {
display: flex;
align-items: center;
justify-content: center;
width: 54px;
height: 54px;
margin: 0;
font-size: 28px;
cursor: pointer;
border: solid 1px var(--vp-c-divider);
border-radius: 4px;
transition: border-color var(--vp-t-color);
}
.emoji-wrapper ul li.copied {
position: relative;
border-color: var(--vp-c-brand);
}
.emoji-wrapper ul li.copied::after {
position: absolute;
right: 0;
bottom: 0;
display: inline-block;
width: 14px;
height: 14px;
font-size: 14px;
line-height: 14px;
color: var(--vp-c-success-1);
text-align: center;
vertical-align: -0.125em;
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M21 7L9 19l-5.5-5.5l1.41-1.41L9 16.17L19.59 5.59z'/%3E%3C/svg%3E");
background-color: var(--vp-c-success-soft);
}
.emoji-wrapper ul li .vp-abbr {
text-decoration: none;
cursor: inherit;
}
</style>

View File

@ -1,5 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
import type { PlumeThemeHomeHeroTintPlate } from 'vuepress-theme-plume/client'
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import VPHomeHero from 'vuepress-theme-plume/components/Home/VPHomeHero.vue' import VPHomeHero from 'vuepress-theme-plume/components/Home/VPHomeHero.vue'
import { useDarkMode } from 'vuepress-theme-plume/composables' import { useDarkMode } from 'vuepress-theme-plume/composables'
@ -10,6 +9,11 @@ import SingleTintPlate from './SingleTintPlate.vue'
import TripletTintPlate from './TripletTintPlate.vue' import TripletTintPlate from './TripletTintPlate.vue'
type Mode = 'single' | 'triplet' | 'custom' type Mode = 'single' | 'triplet' | 'custom'
interface HeroTripletTintPlate {
r: { value: number, offset: number }
g: { value: number, offset: number }
b: { value: number, offset: number }
}
const hero = { name: 'Theme Plume', tagline: 'Next Theme', text: '简约的,功能丰富', actions: [] } const hero = { name: 'Theme Plume', tagline: 'Next Theme', text: '简约的,功能丰富', actions: [] }
const modeList: { value: Mode, label: string }[] = [ const modeList: { value: Mode, label: string }[] = [
@ -21,7 +25,7 @@ const modeList: { value: Mode, label: string }[] = [
const mode = ref<Mode>('single') const mode = ref<Mode>('single')
const singleTintPlate = ref<number>(220) const singleTintPlate = ref<number>(220)
const tripletTintPlate = ref<[number, number, number]>([220, 220, 220]) const tripletTintPlate = ref<[number, number, number]>([220, 220, 220])
const customTintPlate = ref<PlumeThemeHomeHeroTintPlate>({ const customTintPlate = ref<HeroTripletTintPlate>({
r: { value: 220, offset: 36 }, r: { value: 220, offset: 36 },
g: { value: 220, offset: 36 }, g: { value: 220, offset: 36 },
b: { value: 220, offset: 36 }, b: { value: 220, offset: 36 },
@ -30,13 +34,13 @@ const customTintPlate = ref<PlumeThemeHomeHeroTintPlate>({
const tintPlate = computed(() => { const tintPlate = computed(() => {
switch (mode.value) { switch (mode.value) {
case 'single': case 'single':
return singleTintPlate.value return { rgb: singleTintPlate.value }
case 'triplet': case 'triplet':
return tripletTintPlate.value.join(',') return { rgb: tripletTintPlate.value.join(',') }
case 'custom': case 'custom':
return customTintPlate.value return customTintPlate.value
default: default:
return '' return { rgb: '' }
} }
}) })
@ -48,11 +52,11 @@ watch(useDarkMode(), (value) => {
const output = computed(() => { const output = computed(() => {
const tint = tintPlate.value const tint = tintPlate.value
let content = `---\nhome: true\nconfig:\n -\n type: hero\n background: tint-plate\n tintPlate:` let content = `---\nhome: true\nconfig:\n -\n type: hero\n effect: tint-plate\n effectConfig:`
if (typeof tint === 'number' || typeof tint === 'string') if ('rgb' in tint) {
content += ` ${tint}` content += ` ${tint.rgb}`
}
if (typeof tint === 'object') { else if (typeof tint === 'object') {
content += ` content += `
r: r:
value: ${tint.r.value} value: ${tint.r.value}
@ -72,9 +76,9 @@ const output = computed(() => {
<template> <template>
<div class="hero-tint-plate-wrapper"> <div class="hero-tint-plate-wrapper">
<h4>效果预览</h4> <h4>效果预览</h4>
<div :class="{ dark: isDark }"> <div :data-theme="isDark ? 'dark' : 'light'">
<DemoWrapper> <DemoWrapper>
<VPHomeHero type="hero" background="tint-plate" :tint-plate="tintPlate" :hero="hero" /> <VPHomeHero type="hero" effect="TintPlate" :effect-config="tintPlate" :hero="hero" :index="0" />
</DemoWrapper> </DemoWrapper>
</div> </div>
<p> <p>

View File

@ -34,8 +34,8 @@ const locales: LocaleConfig<
} }
const embedTypes: SelectItem[] = [ const embedTypes: SelectItem[] = [
{ label: 'iframe', value: '' }, { label: 'caniuse', value: '' },
{ label: 'image', value: 'image' }, { label: 'baseline', value: 'baseline' },
] ]
export function useCaniuseVersionSelect(): { export function useCaniuseVersionSelect(): {
@ -159,18 +159,19 @@ export function useCaniuse({ feature, embedType, past, future }: {
future: Ref<string> future: Ref<string>
}): { }): {
output: ComputedRef<string> output: ComputedRef<string>
rendered: ComputedRef<string>
} { } {
const output = computed(() => { const output = computed(() => {
let content = '@[caniuse' let content = '@[caniuse'
if (embedType.value) if (embedType.value)
content += ` ${embedType.value}` content += ` ${embedType.value}`
if (past.value !== '-2' || future.value !== '1') { if (embedType.value !== 'baseline') {
if (past.value === '0' && future.value === '0') if (past.value !== '-2' || future.value !== '1') {
content += '{0}' if (past.value === '0' && future.value === '0')
else content += '{0}'
content += `{-${past.value},${future.value}}` else
content += `{-${past.value},${future.value}}`
}
} }
content += '](' content += ']('
@ -181,21 +182,5 @@ export function useCaniuse({ feature, embedType, past, future }: {
return `${content})` return `${content})`
}) })
const rendered = computed(() => { return { output }
if (!feature.value || !embedType.value)
return ''
return resolveCanIUse(feature.value)
})
return { output, rendered }
}
function resolveCanIUse(feature: string): string {
const link = 'https://caniuse.bitsofco.de/image/'
const alt = `Data on support for the ${feature} feature across the major browsers from caniuse.com`
return `<p><picture>
<source type="image/webp" srcset="${link}${feature}.webp">
<source type="image/png" srcset="${link}${feature}.png">
<img src="${link}${feature}.jpg" alt="${alt}" width="100%">
</picture></p>`
} }

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,8 @@ config:
- -
type: hero type: hero
full: true full: true
background: tint-plate effect: hyper-speed
forceDark: true
hero: hero:
name: Theme Plume name: Theme Plume
tagline: VuePress Next Theme tagline: VuePress Next Theme

View File

@ -401,7 +401,7 @@ end tell
在代码块里面, `&``<``>` 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制粘贴,再加上缩进就可以了,剩下的 Markdown 都会帮你处理,例如: 在代码块里面, `&``<``>` 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制粘贴,再加上缩进就可以了,剩下的 Markdown 都会帮你处理,例如:
````md ````md
``` ```html
<div class="footer"> <div class="footer">
&copy; 2004 Foo Corporation &copy; 2004 Foo Corporation
</div> </div>

View File

@ -239,7 +239,7 @@ Shiki 支持多种编程语言。需要做的就是将有效的语言别名附
**输入:** **输入:**
```` ````md
```js ```js
export default { export default {
name: 'MyComponent', name: 'MyComponent',
@ -248,7 +248,7 @@ export default {
``` ```
```` ````
```` ````md
```html ```html
<ul> <ul>
<li v-for="todo in todos" :key="todo.id"> <li v-for="todo in todos" :key="todo.id">
@ -281,7 +281,7 @@ export default {
**输入:** **输入:**
```` ````md
```js{4} ```js{4}
export default { export default {
data () { data () {
@ -313,7 +313,7 @@ export default {
**输入:** **输入:**
```` ````md
```js{1,4,6-8} ```js{1,4,6-8}
export default { // Highlighted export default { // Highlighted
data () { data () {
@ -349,10 +349,10 @@ export default { // Highlighted
**输入:** **输入:**
```` ````md
```js ```js
export default { export default {
data () { data() {
return { return {
msg: 'Highlighted!' // [\!code highlight] msg: 'Highlighted!' // [\!code highlight]
} }
@ -381,10 +381,10 @@ export default {
**输入:** **输入:**
```` ````md
```js ```js
export default { export default {
data () { data() {
return { return {
msg: 'Focused!' // [\!code focus] msg: 'Focused!' // [\!code focus]
} }
@ -411,10 +411,10 @@ export default {
**输入:** **输入:**
```` ````md
```js ```js
export default { export default {
data () { data() {
return { return {
remove: 'Removed', // [\!code --] remove: 'Removed', // [\!code --]
add: 'Added' // [\!code ++] add: 'Added' // [\!code ++]
@ -443,10 +443,10 @@ export default {
**输入:** **输入:**
```` ````md
```js ```js
export default { export default {
data () { data() {
return { return {
error: 'Error', // [\!code error] error: 'Error', // [\!code error]
warning: 'Warning' // [\!code warning] warning: 'Warning' // [\!code warning]
@ -473,7 +473,7 @@ export default {
**输入:** **输入:**
```` ````md
```ts ```ts
export function foo() { // [\!code word:Hello] export function foo() { // [\!code word:Hello]
const msg = 'Hello World' const msg = 'Hello World'
@ -495,7 +495,7 @@ export function foo() { // [!code word:Hello]
**输入:** **输入:**
```` ````md
```ts ```ts
// [\!code word:options:2] // [\!code word:options:2]
const options = { foo: 'bar' } const options = { foo: 'bar' }
@ -613,7 +613,7 @@ export default config
**输入:** **输入:**
```` ````md
When $a \ne 0$, there are two solutions to $(ax^2 + bx + c = 0)$ and they are When $a \ne 0$, there are two solutions to $(ax^2 + bx + c = 0)$ and they are
$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$ $$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
@ -711,7 +711,7 @@ vuepress-theme-plume 是一个 ==简洁美观== 的 主题
这将为图片添加 一个 名为 `full-width` 的 class 属性,以及一个 `width` 属性,值为 `100%` 这将为图片添加 一个 名为 `full-width` 的 class 属性,以及一个 `width` 属性,值为 `100%`
```md ```md
![](/plume.png){.full-width width="100%"} ![alt text](/plume.png){.full-width width="100%"}
``` ```
同时也支持其他属性: 同时也支持其他属性:

View File

@ -3,133 +3,3 @@ title: 示例文章9
createTime: 2024/03/01 22:56:03 createTime: 2024/03/01 22:56:03
permalink: /article/z8zvx0ru/ permalink: /article/z8zvx0ru/
--- ---
:::go-repl
```go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
```
:::
:::go-repl
```go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
for i := 0; i < 10; i++ {
dur := time.Duration(rand.Intn(1000)) * time.Millisecond
fmt.Printf("Sleeping for %v\n", dur)
// Sleep for a random duration between 0-1000ms
time.Sleep(dur)
}
fmt.Println("Done!")
}
```
:::
::: go-repl
```go
package main
import (
"fmt"
"io"
"log"
"net"
"net/http"
"os"
)
func main() {
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello, playground")
})
log.Println("Starting server...")
l, err := net.Listen("tcp", "localhost:8080")
if err != nil {
log.Fatal(err)
}
go func() {
log.Fatal(http.Serve(l, nil))
}()
log.Println("Sending request...")
res, err := http.Get("http://localhost:8080/hello")
if err != nil {
log.Fatal(err)
}
log.Println("Reading response...")
if _, err := io.Copy(os.Stdout, res.Body); err != nil {
log.Fatal(err)
}
}
```
:::
::: kotlin-repl
```kotlin
class Contact(val id: Int, var email: String)
fun main(args: Array<String>) {
val contact = Contact(1, "mary@gmail.com")
println(contact.id)
}
```
:::
::: kotlin-repl
```kotlin
fun mul(a: Int, b: Int): Int {
return a * b
}
fun main(args: Array<String>) {
print(mul(-2, 4))
}
```
:::
::: rust-repl
```rust
fn main() {
println!("Hello, world!");
}
```
:::
::: rust-repl
```rust
fn main() {
printlnl!("Hello, world!");
}
```
:::

View File

@ -102,9 +102,9 @@ H~2~O
- vscode - <Icon name="skill-icons:vscode-dark" size="2em" /> - vscode - <Icon name="skill-icons:vscode-dark" size="2em" />
- twitter - <Icon name="skill-icons:twitter" size="2em" /> - twitter - <Icon name="skill-icons:twitter" size="2em" />
**demo wrapper** **示例容器**
::: demo-wrapper title="示例" no-padding height="200px" ::: window title="示例" height="200px"
<style scoped> <style scoped>
.open-door { .open-door {
display: flex; display: flex;

View File

@ -266,7 +266,7 @@ books:
- 1984: - 1984:
author: *gOrwell author: *gOrwell
- animal-farm: - animal-farm:
author: *gOrwell author:*gOrwell
--- ---
``` ```

View File

@ -139,6 +139,30 @@ permalink: /config/frontmatter/basic/
`'deep'``[2, 6]` 相同,将显示从 `<h2>``<h6>` 的所有标题。 `'deep'``[2, 6]` 相同,将显示从 `<h2>``<h6>` 的所有标题。
::: tip 小技巧
在 markdown 内容的 标题后面,使用属性语法 `{data-outline="level"}` / `{outline="level"}`
可以重新设置当前标题的后代标题的显示的最大级别。
**例如**:
```md /{data-outline="5"}/
## 标题 1 {data-outline="5"} <!-- 仅影响当前标题后代标题 -->
### 三级标题
#### 四级标题
##### 五级标题 <!-- 三四五级标题将显示在侧边栏 -->
###### 六级标题 <!-- 此标题不会显示在侧边栏 -->
## 标题 2 <!-- 同级别的标题不受影响 -->
### 三级标题 <!-- 默认仅显示到三级标题 -->
#### 四级标题 <!-- 四级标题不显示 -->
```
需要注意的是, `level` 的值应该大于当前标题的级别,否则不会生效。
:::
### prev ### prev
- 类型: `string | { text: string, link: string, icon?: string }` - 类型: `string | { text: string, link: string, icon?: string }`
@ -227,3 +251,11 @@ permalink: /config/frontmatter/basic/
当类型为 WatermarkOptions 时,表示当前页面水印配置。 当类型为 WatermarkOptions 时,表示当前页面水印配置。
可以参考 [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/zh/config/) 。 可以参考 [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/zh/config/) 。
### footer
- 类型: `boolean`
- 默认值: `true`
- 详情:
当前文章是否 显示 页脚信息。

View File

@ -14,6 +14,7 @@ permalink: /config/frontmatter/friends/
--- ---
pageLayout: friends pageLayout: friends
title: 友情链接 title: 友情链接
cols: 2
list: list:
- -
name: pengzhanbo name: pengzhanbo
@ -62,13 +63,20 @@ list:
友情链接页的描述 友情链接页的描述
### contentPosition <Badge text="新" /> ### contentPosition
- 类型: `'before' | 'after'` - 类型: `'before' | 'after'`
- 默认值: `'after'` - 默认值: `'after'`
markdown 内容在友情链接列表之前还是之后,默认插入到列表之后。 markdown 内容在友情链接列表之前还是之后,默认插入到列表之后。
### cols <Badge text="新" />
- 类型: `number`
- 默认值: `2`
友情链接列表每行最大显示的列数,一般设置为 `2` / `3` 时最佳。
### list ### list
- 类型: `FriendsItem[]` - 类型: `FriendsItem[]`

View File

@ -82,7 +82,7 @@ export default defineUserConfig({
主题提供了 `plume.config.ts` 配置文件,==对该文件的修改支持热更新,无需重启服务=={.tip} ::twemoji:confetti-ball::。 主题提供了 `plume.config.ts` 配置文件,==对该文件的修改支持热更新,无需重启服务=={.tip} ::twemoji:confetti-ball::。
可以在其中配置支持热更新的字段,如 `navbar``profile` 等。 可以在其中配置支持热更新的字段,如 `navbar``profile` 等。
::: tip ::: tip
这些字段仍可在 VuePress 配置文件的 `theme` 中配置,但主题配置文件的设置最终会合并到主配置中。 这些字段仍可在 VuePress 配置文件的 `theme` 中配置,但主题配置文件的设置最终会合并到主配置中。

View File

@ -6,7 +6,7 @@ permalink: /config/locales/
这些选项用于配置与语言相关的文本。 这些选项用于配置与语言相关的文本。
如果你的站点是以非内置语言支持以外的其他语言提供服务的,你应该为每个语言设置这些选项来提供翻译。 如果您的站点是以非内置语言支持以外的其他语言提供服务的,您应该为每个语言设置这些选项来提供翻译。
## 内置语言支持 ## 内置语言支持

View File

@ -149,7 +149,7 @@ export default defineUserConfig({
- **默认值**: `{ provider: 'iconify' }` - **默认值**: `{ provider: 'iconify' }`
- **详情**: 图标配置 - **详情**: 图标配置
[查看 **icon** 使用说明](../../theme/guide/features/icon.md){.read-more} [查看 **icon** 使用说明](../guide/features/icon.md){.read-more}
### plot ### plot

View File

@ -11,7 +11,7 @@ permalink: /config/navigation/
主题默认会自动生成最简单的导航栏配置,仅包括 **首页****文章列表页** 主题默认会自动生成最简单的导航栏配置,仅包括 **首页****文章列表页**
你也可以自己配置导航栏,覆盖默认的的导航栏配置。 您也可以自己配置导航栏,覆盖默认的导航栏配置。
默认配置如下: 默认配置如下:

104
docs/config/plugins/llms.md Normal file
View File

@ -0,0 +1,104 @@
---
title: LLMs txt
createTime: 2025/11/19 14:48:35
permalink: /config/plugins/llmstxt/
---
## 概述
为站点添加 [llms.txt](https://llmstxt.org/),以提供对 LLM 友好的内容。
**关联插件** [@vuepress/plugin-llms](https://ecosystem.vuejs.press/zh/plugins/ai/llms.html)
## 为什么需要 llms.txt
大型语言模型越来越依赖网站信息,但面临一个关键限制:上下文窗口太小,无法完整处理大多数网站。将包含导航、广告和 JavaScript 的复杂 HTML 页面转换为适合 LLM 的纯文本既困难又不精确。
虽然网站同时为人类读者和 LLM 服务,但后者受益于在一个可访问的位置收集的更简洁、专家级的信息。这对于开发环境等使用案例尤其重要,因为 LLM 需要快速访问编程文档和 API。
向网站添加 `/llms.txt` Markdown 文件,以提供对 LLM 友好的内容。此文件提供了简短的背景信息、指南和指向详细 Markdown 文件的链接。
## 功能
插件通过检索你的文档源目录中的所有 Markdown 文件,并将其转换为 LLM 友好的纯文本文件。
::: file-tree
- .vuepress/dist
- llms.txt
- llms-full.txt
- markdown-examples.html
- markdown-examples.md
- …
:::
点击以下链接查看本文档站点的 llms.txt 文件:
- [llms.txt](/llms.txt){.no-icon}
- [llms-full.txt](/llms-full.txt){.no-icon}
::: tip
插件仅在生产构建时,即执行 `vuepress build` 命令时,生成 `llms.txt` 文件,以及其它 LLM 友好的文档文件,并将它们输出到 `.vuepress/dist` 目录中。
:::
[完整功能说明请查看 **插件官方文档**](https://ecosystem.vuejs.press/zh/plugins/ai/llms.html#%E6%8F%92%E4%BB%B6%E5%8A%9F%E8%83%BD){.read-more}
## 配置
主题默认不启用此功能,你可以通过 `llmstxt` 配置项启用它:
```ts title=".vuepress/config.ts"
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
// 使用主题内置的默认配置
// llmstxt: true,
// 使用自定义配置
llmstxt: {
locale: '/',
// ...其它配置
},
// 也可以在 `plugins.llmstxt` 配置,但不推荐
plugins: {
llmstxt: true
}
}),
})
```
[完整配置项说明请查看 **插件官方文档**](https://ecosystem.vuejs.press/zh/plugins/ai/llms.html#options){.read-more}
## 组件
为进一步增强 文档站点 与 LLMs 的互动,你可以在文档站点中添加 `<PageContextMenu />` 组件。
该组件不作为内置组件,而是主题额外的 `features` 实现,因此你需要手动引入它,
并在合适的位置,通过 [组件插槽](../../guide/custom/slots.md) 添加到文档站点中:
```ts title=".vuepress/client.ts"
import { defineAsyncComponent, h } from 'vue'
import { Layout } from 'vuepress-theme-plume/client'
import PageContextMenu from 'vuepress-theme-plume/features/PageContextMenu.vue' // [!code ++]
import { defineClientConfig } from 'vuepress/client'
export default defineClientConfig({
layouts: {
Layout: h(Layout, null, {
// 将 PageContextMenu 添加到 doc-title-after 插槽,即文章标题的右侧
'doc-title-after': () => h(PageContextMenu), // [!code ++]
}),
},
})
```
你可以在当前页面的标题的右侧,体验该组件的功能。
::: important
此组件完全依赖于 `@vuepress/plugin-llms` 插件,仅当你启用了此插件功能后,才能使用它。
因此,此组件提供的功能 **仅在构建后的生产包中才可用**
:::

View File

@ -82,6 +82,7 @@ interface SearchBoxLocale {
### 启用 ### 启用
```ts title=".vuepress/config.ts" twoslash ```ts title=".vuepress/config.ts" twoslash
// @errors: 2353
import { defineUserConfig } from 'vuepress' import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume' import { plumeTheme } from 'vuepress-theme-plume'

View File

@ -13,6 +13,7 @@ permalink: /config/watermark/
## 使用 ## 使用
```ts title=".vuepress/config.ts" twoslash ```ts title=".vuepress/config.ts" twoslash
// @errors: 7006
import { defineUserConfig } from 'vuepress' import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume' import { plumeTheme } from 'vuepress-theme-plume'

View File

@ -14,8 +14,7 @@ permalink: /config/theme/
::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。 ::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。
::: :::
无以上声明的字段,你可以在 `.vuepress/config.ts` 或者 `.vuepress/plume.config.ts` 的任意一个文件中 无以上声明的字段,您可以在 `.vuepress/config.ts` 或者 `.vuepress/plume.config.ts` 的任意一个文件中进行配置,一般情况下建议在 `.vuepress/plume.config.ts` 中进行配置。
进行配置,一般情况下建议在 `.vuepress/plume.config.ts` 中进行配置。
::: warning 已经在一个配置文件中进行配置的字段,尽量不要在另一个配置文件中重复配置 ::: warning 已经在一个配置文件中进行配置的字段,尽量不要在另一个配置文件中重复配置
::: :::
@ -190,8 +189,11 @@ export default defineThemeConfig({
* 是否自动生成 permalink * 是否自动生成 permalink
* *
* @default true * @default true
* - true: 自动生成 permalink
* - false: 不生成 permalink
* - 'filepath': 根据文件路径生成 permalink
*/ */
permalink?: boolean permalink?: boolean | 'filepath'
/** /**
* 是否自动生成 createTime * 是否自动生成 createTime
@ -392,31 +394,55 @@ export default defineUserConfig({
将作为 图标链接 展示在 导航栏最右侧。 将作为 图标链接 展示在 导航栏最右侧。
图标可选值: 支持 [Iconify](https://icon-sets.iconify.design/) 任意图标,直接使用 iconify name 即可自动加载。
- `'github'`
- `'gitlab'` 对于 `simple-icons` 集合下的图标,可以省略 `simple-icons:` 前缀,如 `simple-icons:github` 可以简写为 `github`
- `'npm'`
- `'docker'` 常见的社交图标示例:
- `'discord'`
- `'telegram'` ::: flex
- `'facebook'`
- `'instagram'` <div style="flex: 1">
- `'linkedin'`
- `'mastodon'` - discord ::simple-icons:discord::
- `'slack'` - telegram ::simple-icons:telegram::
- `'twitter'` - facebook ::simple-icons:facebook::
- `'x'` - github ::simple-icons:github::
- `'youtube'` - instagram ::simple-icons:instagram::
- `'juejin'` - linkedin ::simple-icons:linkedin::
- `'stackoverflow'` - mastodon ::simple-icons:mastodon::
- `'qq'` - npm ::simple-icons:npm::
- `'weibo'` - slack ::simple-icons:slack::
- `'bilibili'` - twitter ::simple-icons:twitter::
- `'zhihu'` - x ::simple-icons:x::
- `'douban'` - youtube ::simple-icons:youtube::
- `'steam'` - bluesky ::simple-icons:bluesky::
- `'xbox'` - tiktok ::simple-icons:tiktok::
- `{ svg: string, name?: string }`: 自定义图标,传入 svg 源码字符串,可选 `name` 字段,用于配置 [`navbarSocialInclude`](#navbarsocialinclude)
</div><div style="flex: 1">
- qq ::simple-icons:qq::
- weibo ::simple-icons:sinaweibo::
- bilibili ::simple-icons:bilibili::
- gitlab ::simple-icons:gitlab::
- docker ::simple-icons:docker::
- juejin ::simple-icons:juejin::
- zhihu ::simple-icons:zhihu::
- douban ::simple-icons:douban::
- steam ::simple-icons:steam::
- stackoverflow ::simple-icons:stackoverflow::
- xbox ::simple-icons:xbox::
- kuaishou ::simple-icons:kuaishou::
- twitch ::simple-icons:twitch::
- xiaohongshu ::simple-icons:xiaohongshu::
</div>
:::
[您可以在这里查看 **simple-icons** 所有可用图标](https://icon-sets.iconify.design/simple-icons/){.readmore}
如果 **Iconify** 无法满足您的需求,可以传入 `{ svg: string, name?: string }` 格式使用自定义图标,传入 SVG 源码字符串,可选 `name` 字段用于配置 [`navbarSocialInclude`](#navbarsocialinclude)
示例: 示例:
@ -424,8 +450,10 @@ export default defineUserConfig({
export default defineUserConfig({ export default defineUserConfig({
theme: plumeTheme({ theme: plumeTheme({
social: [ social: [
// 使用 iconify name
{ icon: 'github', link: 'https://github.com/zhangsan' }, { icon: 'github', link: 'https://github.com/zhangsan' },
{ {
// 使用自定义图标
icon: { svg: '<svg>xxxxx</svg>', name: 'xxx' }, icon: { svg: '<svg>xxxxx</svg>', name: 'xxx' },
link: 'https://xxx.com' link: 'https://xxx.com'
}, },

View File

@ -14,5 +14,7 @@
"SherkeyXD", "SherkeyXD",
{ "github": "Kinneyzhang", "name": "Geekinney" }, { "github": "Kinneyzhang", "name": "Geekinney" },
"huyunan", "huyunan",
{ "github": "Honahec", "name": "HAO CHEN" } { "github": "Honahec", "name": "HAO CHEN" },
"gnehs",
{ "github": "dahaha-365", "name": "Dahaha" }
] ]

View File

@ -28,9 +28,9 @@ docs:
- -
name: 哦麦 MC name: 哦麦 MC
desc: 我的世界教学文档。 desc: 我的世界教学文档。
logo: https://static.ohmymc.com/img/minecraft-154749_1280.png?max_width=1920&max_height=1920 logo: https://s.xc.life/img/img/minecraft-154749_1280.png
url: https://ohmymc.com/ url: https://ohmymc.com/
preview: https://static.ohmymc.com/img/20241228225159139.png?max_width=1920&max_height=1920 preview: https://s.xc.life/img/img/20241228225159139.png
- -
name: NcatBotDocs name: NcatBotDocs
desc: NcatBot一个 QQ 机器人框架项目的使用文档。 desc: NcatBot一个 QQ 机器人框架项目的使用文档。
@ -73,6 +73,32 @@ docs:
url: https://python.yxzl.dev/ url: https://python.yxzl.dev/
repo: https://github.com/yxzlwz/python-doc-web repo: https://github.com/yxzlwz/python-doc-web
preview: https://python.yxzl.dev/screenshot.png preview: https://python.yxzl.dev/screenshot.png
-
name: TinyPiXOS
desc: 一款国产自主可控、架构轻量且高度定制化的嵌入式移动设备桌面操作系统!
logo: https://file.tinypixos.com/tinypixos/tplogo.svg
url: https://www.tinypixos.com/
repo: https://github.com/TinyPiXOS/TinyPiXOS
preview: https://file.tinypixos.com/tinypixos/plume_theme_case.jpg
-
name: HEUOpenResource
desc: 哈尔滨工程大学资源共享计划
logo: https://cdn.jsdelivr.net/gh/HEUOpenResource/HEUOpenResource.github.io@main/docs/.vuepress/public/avatar.jpg
url: https://heu.us.kg/
repo: https://github.com/HEUOpenResource/HEUOpenResource.github.io
preview: https://cdn.jsdelivr.net/gh/HEUOpenResource/HEUOpenResource.github.io@main/docs/.vuepress/public/intro.png
-
name: SKYCRAFT 服务器文档
desc: Minecraft服务器SKYCRAFT的文档。
logo: https://official.skycraft.cn/i/3.jpg
url: https://docs.skycraft.cn/
preview: https://bbsimage.skycraft.cn/docs-preview.jpg
-
name: mcenahle Docs
desc: mcenahle 的文档网站。
logo: https://d.mcenahle.cn/images/logo.png
url: https://d.mcenahle.cn/
preview: https://mcenahle.cn/resources/docs-site-preview.jpg
blog: blog:
- -
@ -81,7 +107,7 @@ blog:
logo: https://pengzhanbo.cn/images/blogger-fav.png logo: https://pengzhanbo.cn/images/blogger-fav.png
url: https://pengzhanbo.cn/ url: https://pengzhanbo.cn/
repo: https://github.com/pengzhanbo/pengzhanbo.cn repo: https://github.com/pengzhanbo/pengzhanbo.cn
preview: /images/demos/pengzhanbo.jpg preview: /images/demos/pengzhanbo.webp
- -
name: 二猫子 name: 二猫子
desc: 老老实实的二猫子,从不胡说八道 desc: 老老实实的二猫子,从不胡说八道
@ -188,19 +214,19 @@ blog:
repo: https://github.com/XingJi-love/XingJi-blog-plume repo: https://github.com/XingJi-love/XingJi-blog-plume
preview: https://i.p-i.vip/47/20250407-67f3f1eca1983.png preview: https://i.p-i.vip/47/20250407-67f3f1eca1983.png
- -
name: Paiad name: 𝑷𝒂𝒊𝒂𝒅
desc: 种一棵树最好的时间是十年前,其次是现在 desc: 悲观者永远正确,乐观者永远前行
logo: https://paiad.online/sunflower.png logo: https://blog.paiad.top/sunflower.png
url: https://paiad.online url: https://blog.paiad.top
repo: https://github.com/paiad repo: https://github.com/paiad
preview: https://paiad.online/paiad-blog.png preview: https://blog.paiad.top/paiad-blog.png
- -
name: 𝙆𝙞𝙖𝙣𝙜 name: 𝙁𝙡𝙖𝙨𝙝
desc: 坚持热爱,奔赴山海 desc: 路漫漫其修远兮,吾将上下而求索
logo: https://haipeng-lin.oss-cn-shenzhen.aliyuncs.com/20250608222708.png logo: https://haipeng-lin.cn/images/avatar.jpg
url: https://blog.haipeng-lin.cn/ url: https://blog.haipeng-lin.cn
repo: https://github.com/haipeng-lin repo: https://gitee.com/linhaipengg
preview: https://haipeng-lin.oss-cn-shenzhen.aliyuncs.com/20250608223536.png preview: https://img.haipeng-lin.cn/index.webp
- -
name: PinkDopeyBug name: PinkDopeyBug
desc: 山难现浮槎,心易陷镜花。 desc: 山难现浮槎,心易陷镜花。
@ -218,10 +244,44 @@ blog:
- -
name: 异想之旅 name: 异想之旅
desc: 异想之旅のBlog desc: 异想之旅のBlog
logo: https://blog.yxzl.dev/head.png logo: https://yxzl.dev/head.png
url: https://blog.yxzl.dev/ url: https://yxzl.dev/
repo: https://github.com/yxzlwz/blog repo: https://github.com/yxzlwz/blog
preview: https://blog.yxzl.dev/screenshot.png preview: https://yxzl.dev/screenshot.png
-
name: Honahec
desc: Honahec's Blog
logo: https://image.honahec.cc/avatar-circle.png
url: https://blog.honahec.cc/
repo: https://github.com/Honahec/blog
preview: https://image.honahec.cc/20251018223321710.png
-
name: Lucas
desc: Ad astra abyssosque.
logo: https://static.lucas04.top/static/favicon/favicon-64.png
url: https://blog.lucas04.top/
repo: https://github.com/lucas0-nhr/lucas04-nhr.github.io
preview: https://static.lucas04.top/static/blog_preview.png
-
name: Kairui's Website
desc: 数学是精确表达思想的艺术。
logo: https://kairui.ca/uoft.svg
url: https://kairui.ca
repo: https://github.com/orderization
preview: https://kairui.ca/img/homepage_demo.png
-
name: 此方的秘密基地
desc: 记录技术与生活的自留地
logo: https://raw.githubusercontent.com/Konata9/pic-base/main/pics/20260126223726455.png
url: https://konata9.cc/
preview: https://raw.githubusercontent.com/Konata9/pic-base/main/pics/20260125225910673.webp
-
name: Esyka
desc: Esyka's Blog
logo: https://www.esyka.top/images/logo.png
url: https://www.esyka.top/
repo: https://github.com/esyka114514
preview: https://www.esyka.top/images/preview.png
--- ---
:::important :::important

View File

@ -1,10 +1,12 @@
--- ---
pageLayout: home pageLayout: home
title: Vuepress Theme Plume
config: config:
- -
type: hero type: hero
full: true full: true
background: tint-plate effect: hyper-speed
forceDark: true
hero: hero:
name: Theme Plume name: Theme Plume
tagline: VuePress Next Theme tagline: VuePress Next Theme
@ -36,7 +38,7 @@ config:
- -
title: Multi-language title: Multi-language
icon: twemoji:balance-scale icon: twemoji:balance-scale
details: Built-in support for Chinese/English, and you can customize and add more language support details: Built-in support for 7 languages including Chinese and English, and you can customize and add more language support
- -
title: Dual Color Theme title: Dual Color Theme
icon: twemoji:cityscape icon: twemoji:cityscape
@ -56,7 +58,7 @@ config:
- -
title: Markdown Enhancement title: Markdown Enhancement
icon: twemoji:writing-hand-light-skin-tone icon: twemoji:writing-hand-light-skin-tone
details: Supports Markdown syntax, code block grouping, hint containers, task lists, mathematical formulas, code demonstrations, etc. details: Based on regular markdown syntax, adds dozens of enhanced syntaxes such as custom containers, file trees, code groups, etc.
- -
type: image-text type: image-text
title: Features title: Features
@ -68,7 +70,7 @@ config:
description: Add tags, categories, word count, reading time, writing date, and other information to articles. description: Add tags, categories, word count, reading time, writing date, and other information to articles.
- -
title: Comments title: Comments
description: Supports 4 comment systems Giscus, Waline, Twikoo, Artalk<br>You can freely choose the comment system that suits your needs. description: "Supports 4 comment systems: Giscus, Waline, Twikoo, Artalk<br>You can freely choose the comment system that suits your needs."
- -
title: Search title: Search
description: Supports local search based on minisearch, and also supports Algolia search. description: Supports local search based on minisearch, and also supports Algolia search.
@ -80,7 +82,7 @@ config:
description: Code copying, CodePen demonstration, JSFiddle demonstration, CodeSandbox demonstration, code groups, line highlighting, line focusing, line warnings, difference comparison, code block folding, etc. description: Code copying, CodePen demonstration, JSFiddle demonstration, CodeSandbox demonstration, code groups, line highlighting, line focusing, line warnings, difference comparison, code block folding, etc.
- -
title: Resource Embedding title: Resource Embedding
description: Chartschart.js/ECharts/Mermaid/flowchart<br>VideosBilibili/Youtube/ArtPlayer<br>PDF, 200K+ Iconify icons description: "Charts: chart.js/ECharts/Mermaid/flowchart<br>Videos: Bilibili/Youtube/ArtPlayer<br>PDF, 200K+ Iconify icons"
- -
type: text-image type: text-image
title: Blog title: Blog
@ -115,64 +117,48 @@ config:
<div style="max-width: 960px;margin:0 auto;" class="home-custom-content"> <div style="max-width: 960px;margin:0 auto;" class="home-custom-content">
::: center ::: center
![GitHub Repo stars](https://img.shields.io/github/stars/pengzhanbo/vuepress-theme-plume)
![npm version](https://img.shields.io/npm/v/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=npm)
![npm downloads](https://img.shields.io/npm/dm/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=downloads)
![npm downloads](https://img.shields.io/npm/dt/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=downloads)
![github license](https://img.shields.io/github/license/pengzhanbo/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A)
![peer dependency](https://img.shields.io/npm/dependency-version/vuepress-theme-plume/peer/vuepress?color=32A9C3&labelColor=1B3C4A) ![GitHub Repo stars](https://img.shields.io/github/stars/pengzhanbo/vuepress-theme-plume){.no-view}
![codecov](https://codecov.io/gh/pengzhanbo/vuepress-theme-plume/graph/badge.svg?token=W6KYBX7WO5) ![npm version](https://img.shields.io/npm/v/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=npm){.no-view}
![npm downloads](https://img.shields.io/npm/dm/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=downloads){.no-view}
![npm downloads](https://img.shields.io/npm/dt/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A&label=downloads){.no-view}
![github license](https://img.shields.io/github/license/pengzhanbo/vuepress-theme-plume?color=32A9C3&labelColor=1B3C4A){.no-view}
![peer dependency](https://img.shields.io/npm/dependency-version/vuepress-theme-plume/peer/vuepress?color=32A9C3&labelColor=1B3C4A){.no-view}
![codecov](https://codecov.io/gh/pengzhanbo/vuepress-theme-plume/graph/badge.svg?token=W6KYBX7WO5){.no-view}
::: :::
### Installation ### Usage
:::code-tabs Use the following command to quickly create a new ==VuePress== project using this theme.
@tab pnpm
:::npm-to
```sh ```sh
pnpm add vuepress@next vuepress-theme-plume vue npm create vuepress-theme-plume@latest
```
@tab npm
```sh
npm install vuepress@next vuepress-theme-plume
```
@tab yarn
```sh
yarn add vuepress@next vuepress-theme-plume
``` ```
::: :::
### Configuration ### Start the project
::: code-tabs ::: npm-to
@tab .vuepress/config.ts
```ts :no-line-numbers ```sh
import { defineUserConfig } from 'vuepress' npm run docs:dev
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
// vuepress config...
theme: plumeTheme({
// theme config...
})
})
``` ```
::: :::
### Update Log ### Changelog
[Changelog](../changelog) [Changelog](./changelog)
### Contributors ### Contributors
Thanks to all contributors!
<Contributors :contributors="data" /> <Contributors :contributors="data" />
</div> </div>

View File

@ -269,7 +269,7 @@ books:
- 1984: - 1984:
author: *gOrwell author: *gOrwell
- animal-farm: - animal-farm:
author: *gOrwell author:*gOrwell
--- ---
``` ```

View File

@ -124,8 +124,8 @@ export default defineUserConfig({
'/': { '/': {
// Chinese collection configuration // [!code focus:4] // Chinese collection configuration // [!code focus:4]
collections: [ collections: [
{ type: 'post', dir: 'blog', title: '博客' }, { type: 'post', dir: 'blog', title: 'Blog' },
{ type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } { type: 'doc', dir: 'typescript', title: 'TypeScript Notes', sidebar: 'auto' }
], ],
}, },
'/en/': { '/en/': {
@ -150,8 +150,8 @@ export default defineThemeConfig({
'/': { '/': {
// Chinese collection configuration // [!code focus:4] // Chinese collection configuration // [!code focus:4]
collections: [ collections: [
{ type: 'post', dir: 'blog', title: '博客' }, { type: 'post', dir: 'blog', title: 'Blog' },
{ type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' } { type: 'doc', dir: 'typescript', title: 'TypeScript Notes', sidebar: 'auto' }
], ],
}, },
'/en/': { '/en/': {

View File

@ -138,6 +138,30 @@ Display a badge on the right side of the article title.
`'deep'` is the same as `[2, 6]`, which displays all headings from `<h2>` to `<h6>`. `'deep'` is the same as `[2, 6]`, which displays all headings from `<h2>` to `<h6>`.
::: tip Tips
In markdown content, using the attribute syntax `{data-outline="level"}` / `{outline="level"}`
after a heading allows you to reset the maximum display level for descendant headings under the current heading.
**For example**:
```md /{data-outline="5"}/
## Heading 1 {data-outline="5"} <!-- Only affects descendant headings of the current heading -->
### Level 3 Heading
#### Level 4 Heading
##### Level 5 Heading <!-- Level 3, 4, and 5 headings will appear in the sidebar -->
###### Level 6 Heading <!-- This heading will NOT appear in the sidebar -->
## Heading 2 <!-- Headings at the same level are not affected -->
### Level 3 Heading <!-- By default, only up to level 3 headings are shown -->
#### Level 4 Heading <!-- Level 4 headings are not shown -->
```
Note that the value of `level` should be greater than the level of the current heading; otherwise, it will not take effect.
:::
### prev ### prev
- Type: `string | { text: string, link: string, icon?: string }` - Type: `string | { text: string, link: string, icon?: string }`
@ -228,3 +252,11 @@ Display a badge on the right side of the article title.
When the type is WatermarkOptions, it represents the watermark configuration for the current page. When the type is WatermarkOptions, it represents the watermark configuration for the current page.
You can refer to [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/zh/config/). You can refer to [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/zh/config/).
### footer
- Type: `boolean`
- Default: `true`
- Details:
Whether to display the footer for the current article.

View File

@ -14,6 +14,7 @@ Example:
--- ---
pageLayout: friends pageLayout: friends
title: Friends Links title: Friends Links
cols: 2
list: list:
- -
name: pengzhanbo name: pengzhanbo
@ -69,6 +70,13 @@ The description of the friends links page.
Whether the markdown content is placed before or after the friends links list. By default, it is inserted after the list. Whether the markdown content is placed before or after the friends links list. By default, it is inserted after the list.
### cols
- Type: `number`
- Default: `1`
The maximum number of columns displayed per line in the friends link list is generally best set to `2` / `3`.
### list ### list
- Type: `FriendsItem[]` - Type: `FriendsItem[]`

View File

@ -159,7 +159,7 @@ The `include` configuration is implemented by the
- **Default:** `{ provider: 'iconify' }` - **Default:** `{ provider: 'iconify' }`
- **Details:** Icon configuration. - **Details:** Icon configuration.
[View **icon** usage instructions](../../theme/guide/features/icon.md){.read-more} [View **icon** usage instructions](../guide/features/icon.md){.read-more}
### plot ### plot

Some files were not shown because too many files have changed in this diff Show More