Compare commits
247 Commits
v1.0.0-rc.
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d69e0b9765 | ||
|
|
02038f2df0 | ||
|
|
e5126663ef | ||
|
|
402f259086 | ||
|
|
58ea2fc8cb | ||
|
|
6ebb1bda6e | ||
|
|
68f39695c4 | ||
|
|
76787f6530 | ||
|
|
e2b47da532 | ||
|
|
035d521e96 | ||
|
|
bfd0c8409c | ||
|
|
e11c7a8fcd | ||
|
|
1329051536 | ||
|
|
0677f6749e | ||
|
|
28963eb419 | ||
|
|
cfc89adab8 | ||
|
|
e0ba59a6f9 | ||
|
|
352874b29a | ||
|
|
c824ad85f4 | ||
|
|
db2eda82f3 | ||
|
|
e9fe35bc4f | ||
|
|
709ade741c | ||
|
|
d8b79e89e8 | ||
|
|
dbc6f0be0f | ||
|
|
9fe294b9dd | ||
|
|
ecf100cfc6 | ||
|
|
b7ee45642e | ||
|
|
54c05c8cea | ||
|
|
86cb872ce6 | ||
|
|
a6cb3820b1 | ||
|
|
184d1aee76 | ||
|
|
cbc5c55891 | ||
|
|
4f40f8441d | ||
|
|
fe0d4bbc92 | ||
|
|
39a76a35d7 | ||
|
|
a01bc13c66 | ||
|
|
1b213d4c28 | ||
|
|
aede6f5d87 | ||
|
|
7febfbf237 | ||
|
|
7ce4e40521 | ||
|
|
12c4f5b39e | ||
|
|
aa54090b5d | ||
|
|
192b260d2b | ||
|
|
75df783295 | ||
|
|
97a5ba20c3 | ||
|
|
896c7e22df | ||
|
|
77856e36c5 | ||
|
|
552f0f5c32 | ||
|
|
7751e4c798 | ||
|
|
17646708b1 | ||
|
|
f14d663bb5 | ||
|
|
50fa747ec1 | ||
|
|
f6da09df54 | ||
|
|
9b9f8f3f77 | ||
|
|
aa19049f5b | ||
|
|
fd1dd7c695 | ||
|
|
916e9141d9 | ||
|
|
ca51a345fb | ||
|
|
f11e8501d0 | ||
|
|
3f047914d5 | ||
|
|
0a3810be2b | ||
|
|
c541e05997 | ||
|
|
feb69a282e | ||
|
|
c109d54961 | ||
|
|
948c31779b | ||
|
|
09a95b7597 | ||
|
|
ce32605aee | ||
|
|
f7d3546962 | ||
|
|
5980fd81f3 | ||
|
|
f2fe79f923 | ||
|
|
7234eebe7e | ||
|
|
479680bba6 | ||
|
|
cd68f1cdd9 | ||
|
|
97c7a53aed | ||
|
|
03dc9da8dc | ||
|
|
a4c9c85b00 | ||
|
|
1ed3dd9154 | ||
|
|
bfd1d1692f | ||
|
|
6db6a58c27 | ||
|
|
9751059fcd | ||
|
|
fc9984b27c | ||
|
|
5930c60462 | ||
|
|
f173d069bd | ||
|
|
5c201e3ed0 | ||
|
|
77da8a3470 | ||
|
|
9c3899135b | ||
|
|
dc160b3db4 | ||
|
|
84bd873efa | ||
|
|
8d4ce99c16 | ||
|
|
8a873e1e58 | ||
|
|
2780abd782 | ||
|
|
b1f996cb0e | ||
|
|
78a2859398 | ||
|
|
8daddcac5d | ||
|
|
c5759e3a2e | ||
|
|
3e68b44771 | ||
|
|
d2b4654ae3 | ||
|
|
5a73b59297 | ||
|
|
98a969c112 | ||
|
|
8cd08f4f02 | ||
|
|
32e4f92c61 | ||
|
|
d573fada7a | ||
|
|
a13ed1f503 | ||
|
|
07c274cdbf | ||
|
|
ab4ff06756 | ||
|
|
b65529743e | ||
|
|
c46379bc9f | ||
|
|
6cd8066ee0 | ||
|
|
4ad05ad9f5 | ||
|
|
6a41d44322 | ||
|
|
f804ba8420 | ||
|
|
2a5bd30fe3 | ||
|
|
a3d8e225b9 | ||
|
|
f51dff1d58 | ||
|
|
85fc35f119 | ||
|
|
48970dd559 | ||
|
|
1dfbb872f7 | ||
|
|
79397faa65 | ||
|
|
7b17ccf378 | ||
|
|
7a0aee5fb9 | ||
|
|
a94333d9bd | ||
|
|
5217be0bfc | ||
|
|
6420ddf8ba | ||
|
|
6656b3213b | ||
|
|
a74c475d7c | ||
|
|
6d0781b647 | ||
|
|
cc3582c1f9 | ||
|
|
2cadb7d88c | ||
|
|
7ed70230af | ||
|
|
36c0eddd86 | ||
|
|
b242e59bbe | ||
|
|
9bbba1ada6 | ||
|
|
e2c9d50539 | ||
|
|
ed5c53f494 | ||
|
|
fe9ee0dbfc | ||
|
|
2bcf761ef1 | ||
|
|
ccf34d4bc8 | ||
|
|
f7c0fe0dd3 | ||
|
|
3f9422df83 | ||
|
|
46ec0fb123 | ||
|
|
a5f6f991f8 | ||
|
|
eb73f3d3f1 | ||
|
|
a15f4e206d | ||
|
|
ce19b84232 | ||
|
|
b86a121707 | ||
|
|
c0bb6bcc14 | ||
|
|
98684ed66a | ||
|
|
15aa159999 | ||
|
|
956869ab1e | ||
|
|
6e601f9f0e | ||
|
|
f7bc044147 | ||
|
|
a91cdb60d7 | ||
|
|
15e62010c2 | ||
|
|
a350e62645 | ||
|
|
95d345bf6d | ||
|
|
c42a601467 | ||
|
|
46797a0757 | ||
|
|
65da8469ce | ||
|
|
6383347813 | ||
|
|
2c360ac59e | ||
|
|
b128511c28 | ||
|
|
8f2f93ec7e | ||
|
|
8faba7bf10 | ||
|
|
c8ab57e843 | ||
|
|
9a77bf4eef | ||
|
|
157281aec8 | ||
|
|
07710247bb | ||
|
|
9b2b73e05b | ||
|
|
8f3c070d07 | ||
|
|
29b5197c47 | ||
|
|
5f82bdeb67 | ||
|
|
d677fc99de | ||
|
|
4b1cecf2bd | ||
|
|
32f4a8be5a | ||
|
|
3553022597 | ||
|
|
cd37921975 | ||
|
|
78b4b9f572 | ||
|
|
ab4354e648 | ||
|
|
20ebeb5e62 | ||
|
|
4957c8b1de | ||
|
|
3df96e2702 | ||
|
|
3c4985ac1a | ||
|
|
3a907e0ba8 | ||
|
|
db8a46eb4c | ||
|
|
c97a5af473 | ||
|
|
bba98984d6 | ||
|
|
41d2a81a09 | ||
|
|
6a3babcf76 | ||
|
|
f599a4223c | ||
|
|
e0b972c3cb | ||
|
|
2bb5c0e2d5 | ||
|
|
7691cdc9a0 | ||
|
|
c1f59cf451 | ||
|
|
fc3676d6dc | ||
|
|
73f4935ca9 | ||
|
|
f9b8c6adf2 | ||
|
|
8c1d34cb87 | ||
|
|
631188df85 | ||
|
|
a9082dc012 | ||
|
|
1b62b0bf6c | ||
|
|
75c12ba458 | ||
|
|
25c3880ea4 | ||
|
|
ddb77a06a5 | ||
|
|
a4bea8202b | ||
|
|
57617e6658 | ||
|
|
ea54d08a50 | ||
|
|
945cc72860 | ||
|
|
4884b1acce | ||
|
|
532ad960a4 | ||
|
|
ad1f02de62 | ||
|
|
20728f504d | ||
|
|
5b780c28d0 | ||
|
|
e8fa516b2e | ||
|
|
e87ae4fc16 | ||
|
|
5b07f2dd21 | ||
|
|
6fc6385de4 | ||
|
|
ab26dec457 | ||
|
|
4119b67e0b | ||
|
|
05d55e5035 | ||
|
|
f95e7c8412 | ||
|
|
4e7fb91a56 | ||
|
|
cd120220f2 | ||
|
|
a63c094df9 | ||
|
|
336205627e | ||
|
|
a5dfef7202 | ||
|
|
87cda0c824 | ||
|
|
b6ee4a4b3d | ||
|
|
2fc6ea5064 | ||
|
|
aa8e774a1b | ||
|
|
606f47a5a6 | ||
|
|
e6daf07456 | ||
|
|
3d48446769 | ||
|
|
802911c179 | ||
|
|
192017b892 | ||
|
|
cfa70320c8 | ||
|
|
d4ad65a1ea | ||
|
|
0e38265f96 | ||
|
|
fbb6ec9a63 | ||
|
|
19868d147e | ||
|
|
73e6b9d5ca | ||
|
|
ca3986917c | ||
|
|
be565baf59 | ||
|
|
aa6168c31d | ||
|
|
51e1f5260c | ||
|
|
441b991b65 | ||
|
|
5fb7b7a216 | ||
|
|
2d40e20f51 |
1
.gitattributes
vendored
@ -4,6 +4,7 @@
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.webp binary
|
||||
*.ico binary
|
||||
*.gif binary
|
||||
*.tff binary
|
||||
|
||||
@ -2,15 +2,25 @@ name: Deploy Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
# 以下文件发生变化时触发部署,这些文件与版本无关,因此可以自动更新
|
||||
- docs/demos.md
|
||||
- docs/sponsor.md
|
||||
- CONTRIBUTING.md
|
||||
- CONTRIBUTING.en-US.md
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
deploy-docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -18,9 +28,9 @@ jobs:
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: Install deps
|
||||
@ -6,11 +6,14 @@ on:
|
||||
- v*
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
deploy-docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -18,9 +21,9 @@ jobs:
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: Install deps
|
||||
@ -6,6 +6,10 @@ on:
|
||||
|
||||
pull_request:
|
||||
branches: [main]
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
@ -13,15 +17,15 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: Install deps
|
||||
55
.github/workflows/release.yaml
vendored
Normal 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
|
||||
22
.github/workflows/release.yml
vendored
@ -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}}
|
||||
@ -6,6 +6,10 @@ on:
|
||||
|
||||
pull_request:
|
||||
branches: [main]
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
unit-test:
|
||||
@ -13,15 +17,15 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: Install deps
|
||||
@ -34,6 +38,6 @@ jobs:
|
||||
|
||||
- name: Upload coverage
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: codecov/codecov-action@v4
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
3
.gitignore
vendored
@ -15,3 +15,6 @@ dist/
|
||||
|
||||
coverage/
|
||||
.idea
|
||||
|
||||
.claude/
|
||||
!.claude/skills/
|
||||
|
||||
3
.npmrc
@ -1,3 +0,0 @@
|
||||
strict-peer-dependencies=false
|
||||
shamefully-hoist=true
|
||||
shell-emulator=true
|
||||
1
.vscode/settings.json
vendored
@ -76,6 +76,7 @@
|
||||
"nprogress",
|
||||
"pnpm",
|
||||
"portfinder",
|
||||
"qrcode",
|
||||
"shiki",
|
||||
"shikiji",
|
||||
"shikijs",
|
||||
|
||||
512
CHANGELOG.md
@ -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
|
||||
|
||||
* **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))
|
||||
* fix security ([e512666](https://github.com/pengzhanbo/vuepress-theme-plume/commit/e5126663ef50b4f720424412b38ad3b22a7178da))
|
||||
* **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
|
||||
|
||||
* 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)
|
||||
|
||||
|
||||
### 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
|
||||
|
||||
* **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:** optimize view transition ([#725](https://github.com/pengzhanbo/vuepress-theme-plume/issues/725)) ([1503a20](https://github.com/pengzhanbo/vuepress-theme-plume/commit/1503a20fbe41f5ba73f975ef16a602583b1d8f35))
|
||||
|
||||
- **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:** 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
|
||||
|
||||
* 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)
|
||||
|
||||
|
||||
### 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 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 `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))
|
||||
|
||||
### 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)
|
||||
|
||||
|
||||
### 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:** 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:** 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:** 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)
|
||||
|
||||
|
||||
### 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)
|
||||
|
||||
|
||||
### 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:** sidebar prefix concat incorrectly ([9f3de6b](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9f3de6b8eadfdf95e9d5f47cfcec1320a8adb38a))
|
||||
|
||||
- **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))
|
||||
|
||||
### 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)
|
||||
|
||||
|
||||
### 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)
|
||||
|
||||
|
||||
### 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
|
||||
|
||||
* **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)
|
||||
|
||||
### 🚨 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 - by @pengzhanbo in https://github.com/pengzhanbo/vuepress-theme-plume/issues/704 [<samp>(4d236)</samp>](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4d2361a7)
|
||||
|
||||
##### [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)
|
||||
|
||||
### 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 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
|
||||
|
||||
@ -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:** 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
|
||||
|
||||
@ -1154,7 +1441,7 @@
|
||||
- **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:** 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 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))
|
||||
@ -1504,12 +1791,6 @@
|
||||
### Performance Improvements
|
||||
|
||||
- **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)
|
||||
|
||||
@ -1568,17 +1849,18 @@
|
||||
|
||||
### Features
|
||||
|
||||
- 调整 plot 语法 为 `!! !!` ([12e607e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/12e607e01cfe18d2fe891a4eab424e06881b7678))
|
||||
- 移除 externalLink插件 ([3d7199f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3d7199fe29f6c85568d41f7409664c424b095dad))
|
||||
- 调整plot 语法 为 `!! !!` ([12e607e](https://github.com/pengzhanbo/vuepress-theme-plume/commit/12e607e01cfe18d2fe891a4eab424e06881b7678))
|
||||
- 移除 externalLink插件,在主题内实现 ([3d7199f](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3d7199fe29f6c85568d41f7409664c424b095dad))
|
||||
- 优化 shiki 插件 ([4cdd51a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4cdd51a2c6bf145be83c43e7e2ffd320e1650596))
|
||||
- 支持友情链接页分组 ([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
|
||||
|
||||
- 优化部分正则校验规则 ([5af709a](https://github.com/pengzhanbo/vuepress-theme-plume/commit/5af709a7623f698a1630054ee8ffda8f1544b753))
|
||||
- **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))
|
||||
- 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)
|
||||
|
||||
@ -1610,7 +1892,7 @@
|
||||
- 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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1622,7 +1904,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1634,7 +1916,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1651,13 +1933,13 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
- **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
|
||||
|
||||
@ -1679,7 +1961,7 @@
|
||||
- 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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1691,7 +1973,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1711,7 +1993,7 @@
|
||||
|
||||
- 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
|
||||
|
||||
@ -1722,7 +2004,7 @@
|
||||
|
||||
- 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
|
||||
|
||||
@ -1738,7 +2020,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1756,7 +2038,7 @@
|
||||
|
||||
- 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
|
||||
|
||||
@ -1765,7 +2047,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1776,7 +2058,7 @@
|
||||
- **theme:** 博客页无博主信息时布局优化 ([9370464](https://github.com/pengzhanbo/vuepress-theme-plume/commit/9370464cc9fed4740f95dd0b7db749966163347c))
|
||||
- **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
|
||||
|
||||
@ -1788,7 +2070,7 @@
|
||||
- 优化代码块、组背景色 ([d0638d5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/d0638d5bf457d0426414fac80c29275a99e44267))
|
||||
- **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
|
||||
|
||||
@ -1802,7 +2084,7 @@
|
||||
- **theme:** 优化分类、标签计算逻辑 ([f2860d9](https://github.com/pengzhanbo/vuepress-theme-plume/commit/f2860d96da519f01491d9b053e55da939209cf9d))
|
||||
- **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
|
||||
|
||||
@ -1833,7 +2115,7 @@
|
||||
|
||||
- **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
|
||||
|
||||
@ -1845,13 +2127,13 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
- **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
|
||||
|
||||
@ -1863,7 +2145,7 @@
|
||||
- **plugin-shikiji:** 优化开发时编译速度 ([4d950b7](https://github.com/pengzhanbo/vuepress-theme-plume/commit/4d950b7618829d61df64687626420ba3800149c3))
|
||||
- **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
|
||||
|
||||
@ -1877,7 +2159,7 @@
|
||||
- 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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1887,13 +2169,13 @@
|
||||
|
||||
- 优化导航栏在不同设备的交互表现 ([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
|
||||
|
||||
- **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
|
||||
|
||||
@ -1911,7 +2193,7 @@
|
||||
- **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))
|
||||
|
||||
# [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
|
||||
|
||||
@ -1933,7 +2215,7 @@
|
||||
- 优化页面细节上的过渡效果 ([526e8d1](https://github.com/pengzhanbo/vuepress-theme-plume/commit/526e8d13c11dac8bab44dac35f2b608bf3d96b92))
|
||||
- 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
|
||||
|
||||
@ -1947,7 +2229,7 @@
|
||||
- 优化文章标签页 UI ([8d56e98](https://github.com/pengzhanbo/vuepress-theme-plume/commit/8d56e989d4c236c43017a62b7b52ef93e012496f))
|
||||
- 优化文章归档页 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
|
||||
|
||||
@ -1960,90 +2242,90 @@
|
||||
- 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))
|
||||
|
||||
# [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
|
||||
|
||||
- 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 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))
|
||||
|
||||
# [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
|
||||
|
||||
- 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
|
||||
|
||||
- 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
|
||||
|
||||
- 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
|
||||
|
||||
- 移动设备下 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
|
||||
|
||||
- 修复在 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
|
||||
|
||||
- (试验性)代码高亮支持 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
|
||||
|
||||
- 修复在最小配置下的预设问题 [#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
|
||||
|
||||
- 修复 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
|
||||
|
||||
- 调整内容容器中代码块在移动设备 UI ([3e5ecad](https://github.com/pengzhanbo/vuepress-theme-plume/commit/3e5ecada8ec48e9833a59e24b79cd4d7cc8dcd78))
|
||||
- 优化默认导航栏生成 ([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
|
||||
|
||||
- 优化在移动设备的 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
|
||||
|
||||
- 优化在移动设备的 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
|
||||
|
||||
- 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
|
||||
|
||||
@ -2054,7 +2336,7 @@
|
||||
|
||||
- 优化开发模式下 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
|
||||
|
||||
@ -2068,7 +2350,7 @@
|
||||
- 优化 文章列表页侧边栏 UI ([a268b84](https://github.com/pengzhanbo/vuepress-theme-plume/commit/a268b84849a8ed8989c91a5887e97c9a492aaaf1))
|
||||
- 优化多语言下自动生成页面路径 ([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
|
||||
|
||||
@ -2080,20 +2362,20 @@
|
||||
|
||||
- 优化博客列表页数据逻辑 ([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
|
||||
|
||||
- **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
|
||||
|
||||
- 优化内容容器在移动端的表现效果 ([75c59c5](https://github.com/pengzhanbo/vuepress-theme-plume/commit/75c59c588ccaa7eea5d38e99e335d1928c85277b))
|
||||
- 优化页面打印布局排版 ([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
|
||||
|
||||
|
||||
111
CLAUDE.md
Normal 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`
|
||||
@ -19,7 +19,7 @@ In the `plugins` directory:
|
||||
|
||||
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+
|
||||
|
||||
Clone the repository and install dependencies:
|
||||
|
||||
@ -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+
|
||||
|
||||
克隆代码仓库,并安装依赖:
|
||||
|
||||
@ -4,8 +4,8 @@
|
||||
|
||||
| Version | Supported |
|
||||
| ---------------- | ------------------ |
|
||||
| >= 1.0.0-rc.170 | :white_check_mark: |
|
||||
| < 1.0.0-rc.170 | :x: |
|
||||
| >= 1.0.0-rc.190 | :white_check_mark: |
|
||||
| < 1.0.0-rc.190 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "create-vuepress-theme-plume",
|
||||
"type": "module",
|
||||
"version": "1.0.0-rc.173",
|
||||
"version": "1.0.0-rc.196",
|
||||
"description": "The cli for create vuepress-theme-plume's project",
|
||||
"author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo/)",
|
||||
"license": "MIT",
|
||||
@ -27,7 +27,7 @@
|
||||
"templates"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsdown"
|
||||
"build": "tsdown --config-loader unrun"
|
||||
},
|
||||
"dependencies": {
|
||||
"@clack/prompts": "catalog:prod",
|
||||
@ -40,9 +40,13 @@
|
||||
"sort-package-json": "catalog:prod"
|
||||
},
|
||||
"plume-deps": {
|
||||
"vuepress": "2.0.0-rc.26",
|
||||
"vue": "^3.5.22",
|
||||
"vuepress": "2.0.0-rc.28",
|
||||
"vue": "^3.5.32",
|
||||
"http-server": "^14.1.1",
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"provenance": true
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,27 +1,86 @@
|
||||
import type { Bundler, Langs, Options } from './types.js'
|
||||
|
||||
/**
|
||||
* Language options for VuePress configuration
|
||||
*
|
||||
* 语言选项,用于 VuePress 配置
|
||||
*/
|
||||
export const languageOptions: Options<Langs> = [
|
||||
{ label: 'English', value: 'en-US' },
|
||||
{ label: '简体中文', value: 'zh-CN' },
|
||||
]
|
||||
|
||||
/**
|
||||
* Bundler options for VuePress build tool
|
||||
*
|
||||
* 构建器选项,用于 VuePress 构建工具
|
||||
*/
|
||||
export const bundlerOptions: Options<Bundler> = [
|
||||
{ label: 'Vite', value: 'vite' },
|
||||
{ label: 'Webpack', value: 'webpack' },
|
||||
]
|
||||
|
||||
/**
|
||||
* Operation mode for VuePress CLI
|
||||
*
|
||||
* VuePress CLI 操作模式
|
||||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
export enum Mode {
|
||||
/**
|
||||
* Initialize existing directory
|
||||
*
|
||||
* 初始化现有目录
|
||||
*/
|
||||
init,
|
||||
/**
|
||||
* Create new project
|
||||
*
|
||||
* 创建新项目
|
||||
*/
|
||||
create,
|
||||
}
|
||||
|
||||
/**
|
||||
* Deployment type for VuePress site
|
||||
*
|
||||
* VuePress 站点部署类型
|
||||
* @readonly
|
||||
* @enum {string}
|
||||
*/
|
||||
export enum DeployType {
|
||||
/**
|
||||
* GitHub Pages deployment
|
||||
*
|
||||
* GitHub Pages 部署
|
||||
*/
|
||||
github = 'github',
|
||||
/**
|
||||
* Vercel deployment
|
||||
*
|
||||
* Vercel 部署
|
||||
*/
|
||||
vercel = 'vercel',
|
||||
/**
|
||||
* Netlify deployment
|
||||
*
|
||||
* Netlify 部署
|
||||
*/
|
||||
netlify = 'netlify',
|
||||
/**
|
||||
* Custom deployment
|
||||
*
|
||||
* 自定义部署
|
||||
*/
|
||||
custom = 'custom',
|
||||
}
|
||||
|
||||
/**
|
||||
* Deployment options for hosting platforms
|
||||
*
|
||||
* 部署选项,用于托管平台
|
||||
*/
|
||||
export const deployOptions: Options<DeployType> = [
|
||||
{ label: 'Custom', value: DeployType.custom },
|
||||
{ label: 'GitHub Pages', value: DeployType.github },
|
||||
|
||||
@ -8,6 +8,15 @@ import { createPackageJson } from './packageJson.js'
|
||||
import { createRender } from './render.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(
|
||||
mode: Mode,
|
||||
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[]> {
|
||||
const fileList: File[] = []
|
||||
if (data.multiLanguage) {
|
||||
@ -131,6 +148,15 @@ async function createDocsFiles(data: ResolvedData): Promise<File[]> {
|
||||
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[] {
|
||||
return fileList.map(({ filepath, content }) => ({
|
||||
filepath: path.join(target, filepath),
|
||||
|
||||
@ -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 { version } from '../package.json'
|
||||
import { Mode } from './constants.js'
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
import type { Locale } from '../types.js'
|
||||
|
||||
/**
|
||||
* English locale configuration for CLI prompts and messages.
|
||||
*
|
||||
* CLI 提示和消息的英语本地化配置。
|
||||
*/
|
||||
export const en: Locale = {
|
||||
'question.root': 'Where would you want to initialize VuePress?',
|
||||
'question.site.name': 'Site Name:',
|
||||
|
||||
@ -2,6 +2,15 @@ import type { Langs, Locale } from '../types.js'
|
||||
import { en } from './en.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> = {
|
||||
'zh-CN': zh,
|
||||
'en-US': en,
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
import type { Locale } from '../types.js'
|
||||
|
||||
/**
|
||||
* Chinese (Simplified) locale configuration for CLI prompts and messages.
|
||||
*
|
||||
* CLI 提示和消息的简体中文本地化配置。
|
||||
*/
|
||||
export const zh: Locale = {
|
||||
'question.root': '您想在哪里初始化 VuePress?',
|
||||
'question.site.name': '站点名称:',
|
||||
|
||||
@ -1,16 +1,41 @@
|
||||
import type { File, ResolvedData } from './types.js'
|
||||
import { kebabCase } from '@pengzhanbo/utils'
|
||||
import { attemptAsync, kebabCase } from '@pengzhanbo/utils'
|
||||
import spawn from 'nano-spawn'
|
||||
import _sortPackageJson from 'sort-package-json'
|
||||
import { Mode } from './constants.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>) {
|
||||
return _sortPackageJson(json, {
|
||||
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(
|
||||
mode: Mode,
|
||||
pkg: Record<string, any>,
|
||||
@ -21,7 +46,6 @@ export async function createPackageJson(
|
||||
siteDescription,
|
||||
bundler,
|
||||
injectNpmScripts,
|
||||
useTs,
|
||||
}: ResolvedData,
|
||||
): Promise<File> {
|
||||
if (mode === Mode.create) {
|
||||
@ -31,7 +55,7 @@ export async function createPackageJson(
|
||||
pkg.description = siteDescription
|
||||
|
||||
if (packageManager !== 'npm') {
|
||||
let version = await getPackageManagerVersion(packageManager)
|
||||
let [, version] = await attemptAsync(getPackageManagerVersion, packageManager)
|
||||
if (version) {
|
||||
if (packageManager === 'yarn' && version.startsWith('1')) {
|
||||
version = '4.10.3'
|
||||
@ -47,12 +71,12 @@ export async function createPackageJson(
|
||||
}
|
||||
}
|
||||
|
||||
const userInfo = await getUserInfo()
|
||||
const [, userInfo] = await attemptAsync(getUserInfo)
|
||||
if (userInfo) {
|
||||
pkg.author = userInfo.username + (userInfo.email ? ` <${userInfo.email}>` : '')
|
||||
}
|
||||
pkg.license = 'MIT'
|
||||
pkg.engines = { node: '^20.6.0 || >=22.0.0' }
|
||||
pkg.engines = { node: '^20.19.0 || >=22.0.0' }
|
||||
}
|
||||
|
||||
if (injectNpmScripts) {
|
||||
@ -84,8 +108,7 @@ export async function createPackageJson(
|
||||
if (!hasDep('vue'))
|
||||
deps.push('vue')
|
||||
|
||||
if (useTs)
|
||||
deps.push('typescript')
|
||||
deps.push('typescript')
|
||||
|
||||
for (const dep of deps)
|
||||
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() {
|
||||
try {
|
||||
const { output: username } = await spawn('git', ['config', '--global', 'user.name'])
|
||||
const { output: email } = await spawn('git', ['config', '--global', 'user.email'])
|
||||
console.log('userInfo', username, email)
|
||||
return { username, email }
|
||||
}
|
||||
catch {
|
||||
return null
|
||||
}
|
||||
const { output: username } = await spawn('git', ['config', '--global', 'user.name'])
|
||||
const { output: email } = await spawn('git', ['config', '--global', 'user.email'])
|
||||
return { username, email }
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
try {
|
||||
const { output } = await spawn(pkg, ['--version'])
|
||||
return output
|
||||
}
|
||||
catch {
|
||||
return null
|
||||
}
|
||||
const { output } = await spawn(pkg, ['--version'])
|
||||
return output
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ import type { Bundler, Langs, PromptResult } from './types.js'
|
||||
import { createRequire } from 'node:module'
|
||||
import process from 'node:process'
|
||||
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 { setLang, t } from './translate.js'
|
||||
|
||||
@ -10,6 +10,15 @@ const require = createRequire(process.cwd())
|
||||
|
||||
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> {
|
||||
let hasTs = false
|
||||
if (mode === Mode.init) {
|
||||
@ -21,7 +30,7 @@ export async function prompt(mode: Mode, root?: string): Promise<PromptResult> {
|
||||
|
||||
const result: PromptResult = await group({
|
||||
displayLang: async () => {
|
||||
const locale = await osLocale()
|
||||
const locale = osLocale()
|
||||
|
||||
if (locale === 'zh-CN' || locale === 'zh-Hans') {
|
||||
setLang('zh-CN')
|
||||
|
||||
@ -2,16 +2,33 @@ import type { ResolvedData } from './types.js'
|
||||
import { kebabCase } from '@pengzhanbo/utils'
|
||||
import handlebars from 'handlebars'
|
||||
|
||||
/**
|
||||
* Extended resolved data with additional rendering information
|
||||
*
|
||||
* 扩展的解析数据,包含额外的渲染信息
|
||||
*/
|
||||
export interface RenderData extends ResolvedData {
|
||||
/** Project name in kebab-case / 项目名称(kebab-case 格式) */
|
||||
name: string
|
||||
/** Site name / 网站名称 */
|
||||
siteName: string
|
||||
/** Locale configuration array / 语言配置数组 */
|
||||
locales: { path: string, lang: string, isEn: boolean, prefix: string }[]
|
||||
/** Whether default language is English / 默认语言是否为英语 */
|
||||
isEN: boolean
|
||||
}
|
||||
|
||||
handlebars.registerHelper('removeLeadingSlash', (path: string) => path.replace(/^\//, ''))
|
||||
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) {
|
||||
const data: RenderData = {
|
||||
...result,
|
||||
|
||||
@ -11,6 +11,14 @@ import { prompt } from './prompt.js'
|
||||
import { t } from './translate.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> {
|
||||
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 {
|
||||
return {
|
||||
...result,
|
||||
|
||||
@ -6,6 +6,14 @@ interface Translate {
|
||||
t: (key: keyof Locale) => string
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a translate instance with specified language
|
||||
*
|
||||
* 创建指定语言的翻译实例
|
||||
*
|
||||
* @param lang - Language code / 语言代码
|
||||
* @returns Translate interface / 翻译接口
|
||||
*/
|
||||
function createTranslate(lang?: Langs): Translate {
|
||||
let current: Langs = lang || 'en-US'
|
||||
|
||||
@ -19,5 +27,21 @@ function createTranslate(lang?: Langs): Translate {
|
||||
|
||||
const translate = createTranslate()
|
||||
|
||||
/**
|
||||
* Get translated string by key
|
||||
*
|
||||
* 根据键获取翻译后的字符串
|
||||
*
|
||||
* @param key - Locale key / 本地化键名
|
||||
* @returns Translated string / 翻译后的字符串
|
||||
*/
|
||||
export const t: Translate['t'] = translate.t
|
||||
|
||||
/**
|
||||
* Set current language
|
||||
*
|
||||
* 设置当前语言
|
||||
*
|
||||
* @param lang - Language code to set / 要设置的语言代码
|
||||
*/
|
||||
export const setLang: Translate['setLang'] = translate.setLang
|
||||
|
||||
221
cli/src/types.ts
@ -1,57 +1,276 @@
|
||||
import type { DeployType } from './constants.js'
|
||||
|
||||
/**
|
||||
* Supported language codes for VuePress site
|
||||
*
|
||||
* VuePress 站点支持的语言代码
|
||||
*/
|
||||
export type Langs = 'zh-CN' | 'en-US'
|
||||
|
||||
/**
|
||||
* Locale configuration for CLI prompts and messages
|
||||
*
|
||||
* CLI 提示和消息的国际化配置
|
||||
*/
|
||||
export interface Locale {
|
||||
/**
|
||||
* Question: Project root directory name
|
||||
*
|
||||
* 问题:项目根目录名称
|
||||
*/
|
||||
'question.root': string
|
||||
/**
|
||||
* Question: Site name
|
||||
*
|
||||
* 问题:站点名称
|
||||
*/
|
||||
'question.site.name': string
|
||||
/**
|
||||
* Question: Site description
|
||||
*
|
||||
* 问题:站点描述
|
||||
*/
|
||||
'question.site.description': string
|
||||
/**
|
||||
* Question: Enable multi-language support
|
||||
*
|
||||
* 问题:启用多语言支持
|
||||
*/
|
||||
'question.multiLanguage': string
|
||||
/**
|
||||
* Question: Default language
|
||||
*
|
||||
* 问题:默认语言
|
||||
*/
|
||||
'question.defaultLanguage': string
|
||||
/**
|
||||
* Question: Build tool bundler
|
||||
*
|
||||
* 问题:构建工具
|
||||
*/
|
||||
'question.bundler': string
|
||||
/**
|
||||
* Question: Use TypeScript
|
||||
*
|
||||
* 问题:使用 TypeScript
|
||||
*/
|
||||
'question.useTs': string
|
||||
/**
|
||||
* Question: Inject npm scripts
|
||||
*
|
||||
* 问题:注入 npm 脚本
|
||||
*/
|
||||
'question.injectNpmScripts': string
|
||||
/**
|
||||
* Question: Initialize git repository
|
||||
*
|
||||
* 问题:初始化 git 仓库
|
||||
*/
|
||||
'question.git': string
|
||||
/**
|
||||
* Question: Deployment type
|
||||
*
|
||||
* 问题:部署类型
|
||||
*/
|
||||
'question.deploy': string
|
||||
/**
|
||||
* Question: Install dependencies
|
||||
*
|
||||
* 问题:安装依赖
|
||||
*/
|
||||
'question.installDeps': string
|
||||
|
||||
/**
|
||||
* Spinner: Start message
|
||||
*
|
||||
* 加载动画:开始消息
|
||||
*/
|
||||
'spinner.start': string
|
||||
/**
|
||||
* Spinner: Stop message
|
||||
*
|
||||
* 加载动画:停止消息
|
||||
*/
|
||||
'spinner.stop': string
|
||||
/**
|
||||
* Spinner: Git init message
|
||||
*
|
||||
* 加载动画:Git 初始化消息
|
||||
*/
|
||||
'spinner.git': string
|
||||
/**
|
||||
* Spinner: Install message
|
||||
*
|
||||
* 加载动画:安装消息
|
||||
*/
|
||||
'spinner.install': string
|
||||
/**
|
||||
* Spinner: Command hint message
|
||||
*
|
||||
* 加载动画:命令提示消息
|
||||
*/
|
||||
'spinner.command': string
|
||||
|
||||
/**
|
||||
* Hint: Cancel operation
|
||||
*
|
||||
* 提示:取消操作
|
||||
*/
|
||||
'hint.cancel': string
|
||||
/**
|
||||
* Hint: Root directory
|
||||
*
|
||||
* 提示:根目录
|
||||
*/
|
||||
'hint.root': string
|
||||
/**
|
||||
* Hint: Illegal root directory name
|
||||
*
|
||||
* 提示:非法的根目录名称
|
||||
*/
|
||||
'hint.root.illegal': string
|
||||
}
|
||||
|
||||
/**
|
||||
* Package manager types
|
||||
*
|
||||
* 包管理器类型
|
||||
*/
|
||||
export type PackageManager = 'npm' | 'yarn' | 'pnpm'
|
||||
|
||||
/**
|
||||
* Build tool bundler types
|
||||
*
|
||||
* 构建工具类型
|
||||
*/
|
||||
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 }[]
|
||||
|
||||
/**
|
||||
* File structure for generated project
|
||||
*
|
||||
* 生成项目的文件结构
|
||||
*/
|
||||
export interface File {
|
||||
/**
|
||||
* File path relative to project root
|
||||
*
|
||||
* 相对于项目根目录的文件路径
|
||||
*/
|
||||
filepath: string
|
||||
/**
|
||||
* File content
|
||||
*
|
||||
* 文件内容
|
||||
*/
|
||||
content: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Result from CLI prompts
|
||||
*
|
||||
* CLI 提示结果
|
||||
*/
|
||||
export interface PromptResult {
|
||||
displayLang: string // cli display language
|
||||
/**
|
||||
* CLI display language
|
||||
*
|
||||
* CLI 显示语言
|
||||
*/
|
||||
displayLang: string
|
||||
/**
|
||||
* Project root directory name
|
||||
*
|
||||
* 项目根目录名称
|
||||
*/
|
||||
root: string
|
||||
/**
|
||||
* Site name
|
||||
*
|
||||
* 站点名称
|
||||
*/
|
||||
siteName: string
|
||||
/**
|
||||
* Site description
|
||||
*
|
||||
* 站点描述
|
||||
*/
|
||||
siteDescription: string
|
||||
/**
|
||||
* Build tool bundler
|
||||
*
|
||||
* 构建工具
|
||||
*/
|
||||
bundler: Bundler
|
||||
/**
|
||||
* Enable multi-language support
|
||||
*
|
||||
* 启用多语言支持
|
||||
*/
|
||||
multiLanguage: boolean
|
||||
/**
|
||||
* Default language
|
||||
*
|
||||
* 默认语言
|
||||
*/
|
||||
defaultLanguage: Langs
|
||||
/**
|
||||
* Use TypeScript
|
||||
*
|
||||
* 使用 TypeScript
|
||||
*/
|
||||
useTs: boolean
|
||||
/**
|
||||
* Inject npm scripts
|
||||
*
|
||||
* 注入 npm 脚本
|
||||
*/
|
||||
injectNpmScripts: boolean
|
||||
/**
|
||||
* Deployment type
|
||||
*
|
||||
* 部署类型
|
||||
*/
|
||||
deploy: DeployType
|
||||
/**
|
||||
* Initialize git repository
|
||||
*
|
||||
* 初始化 git 仓库
|
||||
*/
|
||||
git: boolean
|
||||
/**
|
||||
* Install dependencies
|
||||
*
|
||||
* 安装依赖
|
||||
*/
|
||||
install: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolved data after processing prompts
|
||||
*
|
||||
* 处理提示后的解析数据
|
||||
*/
|
||||
export interface ResolvedData extends PromptResult {
|
||||
/**
|
||||
* Selected package manager
|
||||
*
|
||||
* 选择的包管理器
|
||||
*/
|
||||
packageManager: PackageManager
|
||||
/**
|
||||
* Documentation directory name
|
||||
*
|
||||
* 文档目录名称
|
||||
*/
|
||||
docsDir: string
|
||||
}
|
||||
|
||||
@ -2,6 +2,14 @@ import type { File } from '../types.js'
|
||||
import fs from 'node:fs/promises'
|
||||
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[]> {
|
||||
const filepaths = await fs.readdir(root, { recursive: true })
|
||||
const files: File[] = []
|
||||
@ -18,6 +26,15 @@ export async function readFiles(root: string): Promise<File[]> {
|
||||
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(
|
||||
files: File[],
|
||||
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> {
|
||||
try {
|
||||
const content = await fs.readFile(filepath, 'utf-8')
|
||||
|
||||
@ -1,6 +1,19 @@
|
||||
import type { PackageManager } from '../types.js'
|
||||
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 {
|
||||
const name = process.env?.npm_config_user_agent || 'npm'
|
||||
return name.split('/')[0] as PackageManager
|
||||
|
||||
@ -3,8 +3,24 @@ import { fileURLToPath } from 'node: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)
|
||||
|
||||
/**
|
||||
* 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 * from './fs.js'
|
||||
|
||||
@ -117,7 +117,7 @@ const demoDoc = defineCollection({
|
||||
* (blog 为博客示例,如果不需要博客功能,请删除)
|
||||
* (demoDoc 为参考示例,如果不需要它,请删除)
|
||||
*/
|
||||
export default defineCollection([
|
||||
export default defineCollections([
|
||||
blog,
|
||||
demoDoc,
|
||||
])
|
||||
|
||||
@ -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',
|
||||
|
||||
/**
|
||||
* 为 markdown 文件自动添加 frontmatter 配置
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#autofrontmatter
|
||||
* @see https://theme-plume.vuejs.press/config/theme/#autofrontmatter
|
||||
*/
|
||||
// autoFrontmatter: {
|
||||
// permalink: true, // 是否生成永久链接
|
||||
@ -82,7 +82,7 @@ export default defineUserConfig({
|
||||
// provider: 'algolia',
|
||||
// appId: '',
|
||||
// apiKey: '',
|
||||
// indexName: '',
|
||||
// indices: [''],
|
||||
// },
|
||||
|
||||
/**
|
||||
@ -120,6 +120,7 @@ export default defineUserConfig({
|
||||
// jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id)
|
||||
// npmTo: true, // 启用 npm-to 容器 ::: npm-to
|
||||
// demo: true, // 启用 demo 容器 ::: demo
|
||||
// collapse: true, // 启用折叠容器 ::: collapse
|
||||
// repl: { // 启用 代码演示容器
|
||||
// go: true, // ::: go-repl
|
||||
// rust: true, // ::: rust-repl
|
||||
@ -176,5 +177,18 @@ export default defineUserConfig({
|
||||
* @see https://theme-plume.vuejs.press/guide/features/encryption/
|
||||
*/
|
||||
// encrypt: {},
|
||||
|
||||
/**
|
||||
* 启用 llmstxt 插件,用于为大语言模型提供更友好的内容
|
||||
* @see https://theme-plume.vuejs.press/guide/features/llmstxt/
|
||||
*/
|
||||
// llmstxt: {
|
||||
{{#if multiLanguage}}
|
||||
// locale: '/', // 默认仅为主语言生成 llms 友好内容
|
||||
// locale: 'all', // 为所有语言生成 llms 友好内容
|
||||
{{else}}
|
||||
// locale: '/', // 默认仅为主语言生成 llms 友好内容
|
||||
{{/if}}
|
||||
// }
|
||||
}),
|
||||
})
|
||||
|
||||
@ -20,7 +20,7 @@ import collections from './collections'
|
||||
{{/if}}
|
||||
|
||||
/**
|
||||
* @see https://theme-plume.vuejs.press/config/basic/
|
||||
* @see https://theme-plume.vuejs.press/config/theme/
|
||||
*/
|
||||
export default defineThemeConfig({
|
||||
logo: 'https://theme-plume.vuejs.press/plume.png',
|
||||
@ -52,7 +52,7 @@ export default defineThemeConfig({
|
||||
|
||||
{{#unless multiLanguage}}
|
||||
/**
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#profile
|
||||
* @see https://theme-plume.vuejs.press/config/theme/#profile
|
||||
*/
|
||||
profile: {
|
||||
avatar: 'https://theme-plume.vuejs.press/plume.png',
|
||||
@ -78,7 +78,7 @@ export default defineThemeConfig({
|
||||
// },
|
||||
|
||||
{{/unless}}
|
||||
/* 过渡动画 @see https://theme-plume.vuejs.press/config/basic/#transition */
|
||||
/* 过渡动画 @see https://theme-plume.vuejs.press/config/theme/#transition */
|
||||
// transition: {
|
||||
// page: true, // 启用 页面间跳转过渡动画
|
||||
// postList: true, // 启用 博客文章列表过渡动画
|
||||
@ -90,7 +90,7 @@ export default defineThemeConfig({
|
||||
{{#each locales}}
|
||||
'{{ path }}': {
|
||||
/**
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#profile
|
||||
* @see https://theme-plume.vuejs.press/config/theme/#profile
|
||||
*/
|
||||
profile: {
|
||||
avatar: 'https://theme-plume.vuejs.press/plume.png',
|
||||
|
||||
@ -56,11 +56,15 @@ jobs:
|
||||
# Run the build script
|
||||
{{#unless (equal packageManager "yarn")}}
|
||||
- name: Build VuePress site
|
||||
env:
|
||||
NODE_OPTIONS: --max_old_space_size=8192
|
||||
run: {{packageManager}} run docs:build
|
||||
{{/unless}}
|
||||
{{#if (equal packageManager "yarn")}}
|
||||
- name: Build VuePress site
|
||||
uses: borales/actions-yarn@v4
|
||||
env:
|
||||
NODE_OPTIONS: --max_old_space_size=8192
|
||||
with:
|
||||
cmd: docs:build
|
||||
{{/if}}
|
||||
|
||||
@ -5,7 +5,8 @@ config:
|
||||
-
|
||||
type: hero
|
||||
full: true
|
||||
background: tint-plate
|
||||
forceDark: true
|
||||
effect: lightning
|
||||
hero:
|
||||
name: Theme Plume
|
||||
tagline: VuePress Next Theme
|
||||
|
||||
@ -81,7 +81,7 @@ content right
|
||||
|
||||
**demo wrapper:**
|
||||
|
||||
::: demo-wrapper title="Demo" no-padding height="200px"
|
||||
::: window title="Demo" height="200px"
|
||||
<style scoped>
|
||||
.open-door {
|
||||
display: flex;
|
||||
|
||||
@ -5,7 +5,8 @@ config:
|
||||
-
|
||||
type: hero
|
||||
full: true
|
||||
background: tint-plate
|
||||
forceDark: true
|
||||
effect: lightning
|
||||
hero:
|
||||
name: Theme Plume
|
||||
tagline: VuePress Next Theme
|
||||
|
||||
@ -95,9 +95,9 @@ H~2~O
|
||||
- vscode - <Icon name="skill-icons:vscode-dark" 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>
|
||||
.open-door {
|
||||
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
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
*.jpeg binary
|
||||
*.ico binary
|
||||
*.gif binary
|
||||
*.webp binary
|
||||
*.tff binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
*.pdf binary
|
||||
|
||||
@ -6,4 +6,5 @@ export default defineConfig({
|
||||
dts: true,
|
||||
format: 'esm',
|
||||
sourcemap: false,
|
||||
fixedExtension: false,
|
||||
})
|
||||
@ -1,8 +1,9 @@
|
||||
import type { ClientConfig } from 'vuepress/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 VPPostItem from 'vuepress-theme-plume/components/Posts/VPPostItem.vue'
|
||||
import PageContextMenu from 'vuepress-theme-plume/features/PageContextMenu.vue'
|
||||
import { defineClientConfig } from 'vuepress/client'
|
||||
import AsideNav from '~/components/AsideNav.vue'
|
||||
import { setupThemeColors } from '~/composables/theme-colors.js'
|
||||
@ -17,6 +18,7 @@ defineMermaidConfig({
|
||||
export default defineClientConfig({
|
||||
enhance({ app }) {
|
||||
app.component('VPPostItem', VPPostItem)
|
||||
app.component('TintPlate', defineAsyncComponent(() => import('vuepress-theme-plume/components/background/TintPlate.vue')))
|
||||
},
|
||||
setup() {
|
||||
setupThemeColors()
|
||||
@ -24,6 +26,7 @@ export default defineClientConfig({
|
||||
layouts: {
|
||||
Layout: h(Layout, null, {
|
||||
'aside-outline-after': () => h(AsideNav),
|
||||
'doc-title-after': () => h(PageContextMenu),
|
||||
}),
|
||||
},
|
||||
}) as ClientConfig
|
||||
|
||||
@ -4,6 +4,9 @@ import { themeGuide } from './theme-guide.js'
|
||||
import { tools } from './tools.js'
|
||||
|
||||
export const enCollections: ThemeCollections = defineCollections([
|
||||
// 博客
|
||||
{ type: 'post', dir: '/blog/', link: '/blog/', title: 'Blog' },
|
||||
// 文档
|
||||
themeGuide,
|
||||
themeConfig,
|
||||
tools,
|
||||
|
||||
@ -40,6 +40,7 @@ export const themeConfig: ThemeCollectionItem = defineCollection({
|
||||
'shiki',
|
||||
'search',
|
||||
'reading-time',
|
||||
'llms',
|
||||
'markdown-enhance',
|
||||
'markdown-power',
|
||||
'markdown-image',
|
||||
|
||||
@ -23,6 +23,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
},
|
||||
'sidebar',
|
||||
'write',
|
||||
'auto-frontmatter',
|
||||
'locales',
|
||||
'deployment',
|
||||
'optimize-build',
|
||||
@ -41,18 +42,24 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
items: [
|
||||
'basic',
|
||||
'extensions',
|
||||
'attrs',
|
||||
'emoji',
|
||||
'math',
|
||||
'table',
|
||||
'icons',
|
||||
'mark',
|
||||
'plot',
|
||||
'abbr',
|
||||
'annotation',
|
||||
'container',
|
||||
'github-alerts',
|
||||
'card',
|
||||
'steps',
|
||||
'file-tree',
|
||||
'code-tree',
|
||||
'field',
|
||||
'tabs',
|
||||
'qrcode',
|
||||
'timeline',
|
||||
'demo-wrapper',
|
||||
'flex',
|
||||
@ -61,6 +68,8 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
'caniuse',
|
||||
'chat',
|
||||
'include',
|
||||
'env',
|
||||
'obsidian',
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -144,6 +153,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
'replace-assets',
|
||||
'seo',
|
||||
'sitemap',
|
||||
'llmstxt',
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -172,7 +182,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
collapsed: false,
|
||||
prefix: 'custom',
|
||||
items: [
|
||||
'home',
|
||||
{ text: 'Custom Homepage', link: 'home', items: ['home-hero-effect'] },
|
||||
'style',
|
||||
'slots',
|
||||
'component-overrides',
|
||||
|
||||
@ -4,6 +4,9 @@ import { themeGuide } from './theme-guide.js'
|
||||
import { tools } from './tools.js'
|
||||
|
||||
export const zhCollections: ThemeCollections = defineCollections([
|
||||
// 博客
|
||||
{ type: 'post', dir: '/blog/', link: '/blog/', title: '博客' },
|
||||
// 文档
|
||||
themeGuide,
|
||||
themeConfig,
|
||||
tools,
|
||||
|
||||
@ -40,6 +40,7 @@ export const themeConfig: ThemeCollectionItem = defineCollection({
|
||||
'shiki',
|
||||
'search',
|
||||
'reading-time',
|
||||
'llms',
|
||||
'markdown-enhance',
|
||||
'markdown-power',
|
||||
'markdown-image',
|
||||
|
||||
@ -23,6 +23,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
},
|
||||
'sidebar',
|
||||
'write',
|
||||
'auto-frontmatter',
|
||||
'locales',
|
||||
'deployment',
|
||||
'optimize-build',
|
||||
@ -41,18 +42,24 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
items: [
|
||||
'basic',
|
||||
'extensions',
|
||||
'attrs',
|
||||
'emoji',
|
||||
'math',
|
||||
'table',
|
||||
'icons',
|
||||
'mark',
|
||||
'plot',
|
||||
'abbr',
|
||||
'annotation',
|
||||
'container',
|
||||
'github-alerts',
|
||||
'card',
|
||||
'steps',
|
||||
'file-tree',
|
||||
'code-tree',
|
||||
'field',
|
||||
'tabs',
|
||||
'qrcode',
|
||||
'timeline',
|
||||
'demo-wrapper',
|
||||
'flex',
|
||||
@ -61,6 +68,8 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
'caniuse',
|
||||
'chat',
|
||||
'include',
|
||||
'env',
|
||||
'obsidian',
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -144,6 +153,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
'replace-assets',
|
||||
'seo',
|
||||
'sitemap',
|
||||
'llmstxt',
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -172,7 +182,7 @@ export const themeGuide: ThemeCollectionItem = defineCollection({
|
||||
collapsed: false,
|
||||
prefix: 'custom',
|
||||
items: [
|
||||
'home',
|
||||
{ text: '自定义首页', link: 'home', items: ['home-hero-effect'] },
|
||||
'style',
|
||||
'slots',
|
||||
'component-overrides',
|
||||
|
||||
@ -3,9 +3,7 @@ import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { viteBundler } from '@vuepress/bundler-vite'
|
||||
import { addViteOptimizeDepsInclude, addViteSsrExternal } from '@vuepress/helper'
|
||||
import { llmsPlugin } from '@vuepress/plugin-llms'
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { tocGetter } from './llmstxtTOC.js'
|
||||
import { theme } from './theme.js'
|
||||
|
||||
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'),
|
||||
},
|
||||
|
||||
plugins: [
|
||||
llmsPlugin({
|
||||
llmsTxtTemplateGetter: {
|
||||
description: '一个简约易用的,功能丰富的 vuepress 文档&博客 主题',
|
||||
details: '',
|
||||
toc: tocGetter,
|
||||
},
|
||||
}),
|
||||
],
|
||||
|
||||
bundler: viteBundler(),
|
||||
shouldPrefetch: false,
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
@ -94,7 +94,7 @@ export const enNavbar: ThemeNavItem[] = defineNavbarConfig([
|
||||
{
|
||||
text: `${version}`,
|
||||
icon: 'codicon:versions',
|
||||
badge: '新',
|
||||
badge: 'New',
|
||||
items: [
|
||||
{ text: 'Changelog', link: '/en/changelog/' },
|
||||
{ text: 'Contributing', link: '/en/contributing/' },
|
||||
|
||||
@ -29,24 +29,12 @@ export default defineThemeConfig({
|
||||
|
||||
locales: {
|
||||
'/': {
|
||||
// notes: zhNotes,
|
||||
navbar: zhNavbar,
|
||||
collections: [
|
||||
// 博客
|
||||
{ type: 'post', dir: '/blog/', link: '/blog/', title: '博客' },
|
||||
// 文档
|
||||
...zhCollections,
|
||||
],
|
||||
collections: zhCollections,
|
||||
},
|
||||
'/en/': {
|
||||
// notes: enNotes,
|
||||
navbar: enNavbar,
|
||||
collections: [
|
||||
// 博客
|
||||
{ type: 'post', dir: '/blog/', link: '/blog/', title: 'Blog' },
|
||||
// 文档
|
||||
...enCollections,
|
||||
],
|
||||
collections: enCollections,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
4
docs/.vuepress/public/_redirects
Normal 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!
|
||||
BIN
docs/.vuepress/public/files/sample-1.pdf
Normal file
|
Before Width: | Height: | Size: 255 KiB |
BIN
docs/.vuepress/public/images/demos/pengzhanbo.webp
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
docs/.vuepress/public/images/hero-effects/beams.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
docs/.vuepress/public/images/hero-effects/dark-veil.png
Normal file
|
After Width: | Height: | Size: 906 KiB |
BIN
docs/.vuepress/public/images/hero-effects/dot-grid.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
docs/.vuepress/public/images/hero-effects/hyper-speed.png
Normal file
|
After Width: | Height: | Size: 689 KiB |
BIN
docs/.vuepress/public/images/hero-effects/iridescence.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/.vuepress/public/images/hero-effects/lightning.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
docs/.vuepress/public/images/hero-effects/liquid-ether.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
docs/.vuepress/public/images/hero-effects/orb.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/.vuepress/public/images/hero-effects/pixel-blast.png
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
docs/.vuepress/public/images/hero-effects/prism.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
docs/.vuepress/public/images/hero-effects/tint-plate.png
Normal file
|
After Width: | Height: | Size: 770 KiB |
@ -18,6 +18,15 @@ export const theme: Theme = plumeTheme({
|
||||
},
|
||||
|
||||
markdown: {
|
||||
icon: {
|
||||
provider: 'iconify',
|
||||
preload: [
|
||||
// used within <AsideNae />
|
||||
'tabler:star',
|
||||
'octicon:issue-opened-16',
|
||||
'ep:milk-tea',
|
||||
],
|
||||
},
|
||||
chartjs: true,
|
||||
echarts: true,
|
||||
markmap: true,
|
||||
@ -36,6 +45,7 @@ export const theme: Theme = plumeTheme({
|
||||
imageSize: 'all',
|
||||
mark: 'lazy',
|
||||
pdf: true,
|
||||
qrcode: true,
|
||||
caniuse: true,
|
||||
acfun: true,
|
||||
bilibili: true,
|
||||
@ -47,6 +57,8 @@ export const theme: Theme = plumeTheme({
|
||||
codeSandbox: true,
|
||||
jsfiddle: true,
|
||||
demo: true,
|
||||
encrypt: true,
|
||||
obsidian: true,
|
||||
npmTo: ['pnpm', 'yarn', 'npm'],
|
||||
repl: {
|
||||
go: true,
|
||||
@ -76,4 +88,16 @@ export const theme: Theme = plumeTheme({
|
||||
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: '',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { VPLink } from 'vuepress-theme-plume/client'
|
||||
import { VPIcon, VPLink } from 'vuepress-theme-plume/client'
|
||||
import { useRouteLocale } from 'vuepress/client'
|
||||
|
||||
interface Locale {
|
||||
@ -21,17 +21,17 @@ const locale = computed(() => locales[lang.value])
|
||||
<template>
|
||||
<div class="aside-nav-wrapper">
|
||||
<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="vpi-arrow-right" />
|
||||
</VPLink>
|
||||
<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="vpi-arrow-right" />
|
||||
</VPLink>
|
||||
<VPLink class="link" href="/sponsor/">
|
||||
<span class="vpi-bubble-tea" />
|
||||
<VPIcon name="ep:milk-tea" />
|
||||
<span class="link-text">{{ locale.sponsor }}</span>
|
||||
<span class="vpi-arrow-right" />
|
||||
</VPLink>
|
||||
@ -65,15 +65,7 @@ const locale = computed(() => locales[lang.value])
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.vpi-github-star {
|
||||
--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");
|
||||
}
|
||||
|
||||
.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");
|
||||
.aside-nav-wrapper :deep([class*=" vpi-"]) {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -35,7 +35,7 @@ const locale = computed(() => LOCALES[routeLocale.value])
|
||||
|
||||
const { feature, featureList, onSelect, isFocus } = useCaniuseFeaturesSearch(inputEl, listEl)
|
||||
const { past, pastList, future, futureList, embedType, embedTypeList } = useCaniuseVersionSelect()
|
||||
const { output, rendered } = useCaniuse({ feature, embedType, past, future })
|
||||
const { output } = useCaniuse({ feature, embedType, past, future })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -63,9 +63,8 @@ const { output, rendered } = useCaniuse({ feature, embedType, past, future })
|
||||
class="feature-list-item"
|
||||
@click="onSelect(item)"
|
||||
@keydown.enter="onSelect(item)"
|
||||
>
|
||||
{{ item.label }}
|
||||
</button>
|
||||
v-html="item.label"
|
||||
/>
|
||||
</li>
|
||||
</ul>
|
||||
</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">
|
||||
<span>{{ item.label }}</span>
|
||||
<Badge v-if="item.value === 'image'" type="warning" :text="locale['no-recommend']" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@ -109,8 +107,7 @@ const { output, rendered } = useCaniuse({ feature, embedType, past, future })
|
||||
<h4>{{ locale.output }}</h4>
|
||||
<CodeViewer lang="md" :content="output" />
|
||||
</div>
|
||||
<div v-if="embedType === 'image'" v-html="rendered" />
|
||||
<CanIUseViewer v-else-if="feature" :feature="feature" :past="past" :future="future" />
|
||||
<CanIUseViewer v-if="feature" :feature="feature" :past="past" :future="future" :baseline="embedType === 'baseline'" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@ -1,12 +1,20 @@
|
||||
<script setup lang="ts">
|
||||
import type { PlumeThemeHomeHeroTintPlate } from 'vuepress-theme-plume/client'
|
||||
import { computed, watch } from 'vue'
|
||||
import InputRange from './InputRange.vue'
|
||||
|
||||
const min = 20
|
||||
const max = 240
|
||||
|
||||
const tintPlate = defineModel<PlumeThemeHomeHeroTintPlate>({
|
||||
interface PlateItem {
|
||||
value: number
|
||||
offset: number
|
||||
}
|
||||
|
||||
const tintPlate = defineModel<{
|
||||
r: PlateItem
|
||||
g: PlateItem
|
||||
b: PlateItem
|
||||
}>({
|
||||
required: true,
|
||||
})
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ defineProps<{
|
||||
<a :href="demo.url" target="_blank" rel="noopener noreferrer" :aria-label="demo.name" :title="demo.name">{{ demo.name }}</a>
|
||||
</span>
|
||||
<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>
|
||||
</h3>
|
||||
<p :title="demo.desc">
|
||||
|
||||
87
docs/.vuepress/themes/components/EmojiList.vue
Normal 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>
|
||||
@ -1,5 +1,4 @@
|
||||
<script setup lang="ts">
|
||||
import type { PlumeThemeHomeHeroTintPlate } from 'vuepress-theme-plume/client'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import VPHomeHero from 'vuepress-theme-plume/components/Home/VPHomeHero.vue'
|
||||
import { useDarkMode } from 'vuepress-theme-plume/composables'
|
||||
@ -10,6 +9,11 @@ import SingleTintPlate from './SingleTintPlate.vue'
|
||||
import TripletTintPlate from './TripletTintPlate.vue'
|
||||
|
||||
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 modeList: { value: Mode, label: string }[] = [
|
||||
@ -21,7 +25,7 @@ const modeList: { value: Mode, label: string }[] = [
|
||||
const mode = ref<Mode>('single')
|
||||
const singleTintPlate = ref<number>(220)
|
||||
const tripletTintPlate = ref<[number, number, number]>([220, 220, 220])
|
||||
const customTintPlate = ref<PlumeThemeHomeHeroTintPlate>({
|
||||
const customTintPlate = ref<HeroTripletTintPlate>({
|
||||
r: { value: 220, offset: 36 },
|
||||
g: { value: 220, offset: 36 },
|
||||
b: { value: 220, offset: 36 },
|
||||
@ -30,13 +34,13 @@ const customTintPlate = ref<PlumeThemeHomeHeroTintPlate>({
|
||||
const tintPlate = computed(() => {
|
||||
switch (mode.value) {
|
||||
case 'single':
|
||||
return singleTintPlate.value
|
||||
return { rgb: singleTintPlate.value }
|
||||
case 'triplet':
|
||||
return tripletTintPlate.value.join(',')
|
||||
return { rgb: tripletTintPlate.value.join(',') }
|
||||
case 'custom':
|
||||
return customTintPlate.value
|
||||
default:
|
||||
return ''
|
||||
return { rgb: '' }
|
||||
}
|
||||
})
|
||||
|
||||
@ -48,11 +52,11 @@ watch(useDarkMode(), (value) => {
|
||||
|
||||
const output = computed(() => {
|
||||
const tint = tintPlate.value
|
||||
let content = `---\nhome: true\nconfig:\n -\n type: hero\n background: tint-plate\n tintPlate:`
|
||||
if (typeof tint === 'number' || typeof tint === 'string')
|
||||
content += ` ${tint}`
|
||||
|
||||
if (typeof tint === 'object') {
|
||||
let content = `---\nhome: true\nconfig:\n -\n type: hero\n effect: tint-plate\n effectConfig:`
|
||||
if ('rgb' in tint) {
|
||||
content += ` ${tint.rgb}`
|
||||
}
|
||||
else if (typeof tint === 'object') {
|
||||
content += `
|
||||
r:
|
||||
value: ${tint.r.value}
|
||||
@ -72,9 +76,9 @@ const output = computed(() => {
|
||||
<template>
|
||||
<div class="hero-tint-plate-wrapper">
|
||||
<h4>效果预览:</h4>
|
||||
<div :class="{ dark: isDark }">
|
||||
<div :data-theme="isDark ? 'dark' : 'light'">
|
||||
<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>
|
||||
</div>
|
||||
<p>
|
||||
|
||||
@ -34,8 +34,8 @@ const locales: LocaleConfig<
|
||||
}
|
||||
|
||||
const embedTypes: SelectItem[] = [
|
||||
{ label: 'iframe', value: '' },
|
||||
{ label: 'image', value: 'image' },
|
||||
{ label: 'caniuse', value: '' },
|
||||
{ label: 'baseline', value: 'baseline' },
|
||||
]
|
||||
|
||||
export function useCaniuseVersionSelect(): {
|
||||
@ -159,18 +159,19 @@ export function useCaniuse({ feature, embedType, past, future }: {
|
||||
future: Ref<string>
|
||||
}): {
|
||||
output: ComputedRef<string>
|
||||
rendered: ComputedRef<string>
|
||||
} {
|
||||
const output = computed(() => {
|
||||
let content = '@[caniuse'
|
||||
if (embedType.value)
|
||||
content += ` ${embedType.value}`
|
||||
|
||||
if (past.value !== '-2' || future.value !== '1') {
|
||||
if (past.value === '0' && future.value === '0')
|
||||
content += '{0}'
|
||||
else
|
||||
content += `{-${past.value},${future.value}}`
|
||||
if (embedType.value !== 'baseline') {
|
||||
if (past.value !== '-2' || future.value !== '1') {
|
||||
if (past.value === '0' && future.value === '0')
|
||||
content += '{0}'
|
||||
else
|
||||
content += `{-${past.value},${future.value}}`
|
||||
}
|
||||
}
|
||||
|
||||
content += ']('
|
||||
@ -181,21 +182,5 @@ export function useCaniuse({ feature, embedType, past, future }: {
|
||||
return `${content})`
|
||||
})
|
||||
|
||||
const rendered = computed(() => {
|
||||
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>`
|
||||
return { output }
|
||||
}
|
||||
|
||||
1925
docs/.vuepress/themes/composables/emoji.ts
Normal file
@ -5,7 +5,8 @@ config:
|
||||
-
|
||||
type: hero
|
||||
full: true
|
||||
background: tint-plate
|
||||
effect: hyper-speed
|
||||
forceDark: true
|
||||
hero:
|
||||
name: Theme Plume
|
||||
tagline: VuePress Next Theme
|
||||
|
||||
@ -401,7 +401,7 @@ end tell
|
||||
在代码块里面, `&` 、 `<` 和 `>` 会自动转成 HTML 实体,这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码,只需要复制粘贴,再加上缩进就可以了,剩下的 Markdown 都会帮你处理,例如:
|
||||
|
||||
````md
|
||||
```
|
||||
```html
|
||||
<div class="footer">
|
||||
© 2004 Foo Corporation
|
||||
</div>
|
||||
|
||||
@ -239,7 +239,7 @@ Shiki 支持多种编程语言。需要做的就是将有效的语言别名附
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js
|
||||
export default {
|
||||
name: 'MyComponent',
|
||||
@ -248,7 +248,7 @@ export default {
|
||||
```
|
||||
````
|
||||
|
||||
````
|
||||
````md
|
||||
```html
|
||||
<ul>
|
||||
<li v-for="todo in todos" :key="todo.id">
|
||||
@ -281,7 +281,7 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js{4}
|
||||
export default {
|
||||
data () {
|
||||
@ -313,7 +313,7 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js{1,4,6-8}
|
||||
export default { // Highlighted
|
||||
data () {
|
||||
@ -349,10 +349,10 @@ export default { // Highlighted
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js
|
||||
export default {
|
||||
data () {
|
||||
data() {
|
||||
return {
|
||||
msg: 'Highlighted!' // [\!code highlight]
|
||||
}
|
||||
@ -381,10 +381,10 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js
|
||||
export default {
|
||||
data () {
|
||||
data() {
|
||||
return {
|
||||
msg: 'Focused!' // [\!code focus]
|
||||
}
|
||||
@ -411,10 +411,10 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js
|
||||
export default {
|
||||
data () {
|
||||
data() {
|
||||
return {
|
||||
remove: 'Removed', // [\!code --]
|
||||
add: 'Added' // [\!code ++]
|
||||
@ -443,10 +443,10 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```js
|
||||
export default {
|
||||
data () {
|
||||
data() {
|
||||
return {
|
||||
error: 'Error', // [\!code error]
|
||||
warning: 'Warning' // [\!code warning]
|
||||
@ -473,7 +473,7 @@ export default {
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```ts
|
||||
export function foo() { // [\!code word:Hello]
|
||||
const msg = 'Hello World'
|
||||
@ -495,7 +495,7 @@ export function foo() { // [!code word:Hello]
|
||||
|
||||
**输入:**
|
||||
|
||||
````
|
||||
````md
|
||||
```ts
|
||||
// [\!code word:options:2]
|
||||
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
|
||||
$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
|
||||
|
||||
@ -711,7 +711,7 @@ vuepress-theme-plume 是一个 ==简洁美观== 的 主题
|
||||
这将为图片添加 一个 名为 `full-width` 的 class 属性,以及一个 `width` 属性,值为 `100%`。
|
||||
|
||||
```md
|
||||
{.full-width width="100%"}
|
||||
{.full-width width="100%"}
|
||||
```
|
||||
|
||||
同时也支持其他属性:
|
||||
|
||||
@ -3,133 +3,3 @@ title: 示例文章9
|
||||
createTime: 2024/03/01 22:56:03
|
||||
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!");
|
||||
}
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
@ -102,9 +102,9 @@ H~2~O
|
||||
- vscode - <Icon name="skill-icons:vscode-dark" 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>
|
||||
.open-door {
|
||||
display: flex;
|
||||
|
||||
@ -266,7 +266,7 @@ books:
|
||||
- 1984:
|
||||
author: *gOrwell
|
||||
- animal-farm:
|
||||
author: *gOrwell
|
||||
author:*gOrwell
|
||||
---
|
||||
```
|
||||
|
||||
|
||||
@ -139,6 +139,30 @@ permalink: /config/frontmatter/basic/
|
||||
|
||||
`'deep'` 与 `[2, 6]` 相同,将显示从 `<h2>` 到 `<h6>` 的所有标题。
|
||||
|
||||
::: tip 小技巧
|
||||
在 markdown 内容的 标题后面,使用属性语法 `{data-outline="level"}` / `{outline="level"}`,
|
||||
可以重新设置当前标题的后代标题的显示的最大级别。
|
||||
|
||||
**例如**:
|
||||
|
||||
```md /{data-outline="5"}/
|
||||
## 标题 1 {data-outline="5"} <!-- 仅影响当前标题后代标题 -->
|
||||
|
||||
### 三级标题
|
||||
#### 四级标题
|
||||
##### 五级标题 <!-- 三四五级标题将显示在侧边栏 -->
|
||||
###### 六级标题 <!-- 此标题不会显示在侧边栏 -->
|
||||
|
||||
## 标题 2 <!-- 同级别的标题不受影响 -->
|
||||
|
||||
### 三级标题 <!-- 默认仅显示到三级标题 -->
|
||||
#### 四级标题 <!-- 四级标题不显示 -->
|
||||
```
|
||||
|
||||
需要注意的是, `level` 的值应该大于当前标题的级别,否则不会生效。
|
||||
|
||||
:::
|
||||
|
||||
### prev
|
||||
|
||||
- 类型: `string | { text: string, link: string, icon?: string }`
|
||||
@ -227,3 +251,11 @@ permalink: /config/frontmatter/basic/
|
||||
当类型为 WatermarkOptions 时,表示当前页面水印配置。
|
||||
|
||||
可以参考 [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/zh/config/) 。
|
||||
|
||||
### footer
|
||||
|
||||
- 类型: `boolean`
|
||||
- 默认值: `true`
|
||||
- 详情:
|
||||
|
||||
当前文章是否 显示 页脚信息。
|
||||
|
||||
@ -14,6 +14,7 @@ permalink: /config/frontmatter/friends/
|
||||
---
|
||||
pageLayout: friends
|
||||
title: 友情链接
|
||||
cols: 2
|
||||
list:
|
||||
-
|
||||
name: pengzhanbo
|
||||
@ -62,13 +63,20 @@ list:
|
||||
|
||||
友情链接页的描述
|
||||
|
||||
### contentPosition <Badge text="新" />
|
||||
### contentPosition
|
||||
|
||||
- 类型: `'before' | 'after'`
|
||||
- 默认值: `'after'`
|
||||
|
||||
markdown 内容在友情链接列表之前还是之后,默认插入到列表之后。
|
||||
|
||||
### cols <Badge text="新" />
|
||||
|
||||
- 类型: `number`
|
||||
- 默认值: `2`
|
||||
|
||||
友情链接列表每行最大显示的列数,一般设置为 `2` / `3` 时最佳。
|
||||
|
||||
### list
|
||||
|
||||
- 类型: `FriendsItem[]`
|
||||
|
||||
@ -82,7 +82,7 @@ export default defineUserConfig({
|
||||
|
||||
主题提供了 `plume.config.ts` 配置文件,==对该文件的修改支持热更新,无需重启服务=={.tip} ::twemoji:confetti-ball::。
|
||||
|
||||
你可以在其中配置支持热更新的字段,如 `navbar`、`profile` 等。
|
||||
您可以在其中配置支持热更新的字段,如 `navbar`、`profile` 等。
|
||||
|
||||
::: tip
|
||||
这些字段仍可在 VuePress 配置文件的 `theme` 中配置,但主题配置文件的设置最终会合并到主配置中。
|
||||
|
||||
@ -6,7 +6,7 @@ permalink: /config/locales/
|
||||
|
||||
这些选项用于配置与语言相关的文本。
|
||||
|
||||
如果你的站点是以非内置语言支持以外的其他语言提供服务的,你应该为每个语言设置这些选项来提供翻译。
|
||||
如果您的站点是以非内置语言支持以外的其他语言提供服务的,您应该为每个语言设置这些选项来提供翻译。
|
||||
|
||||
## 内置语言支持
|
||||
|
||||
|
||||
@ -149,7 +149,7 @@ export default defineUserConfig({
|
||||
- **默认值**: `{ provider: 'iconify' }`
|
||||
- **详情**: 图标配置
|
||||
|
||||
[查看 **icon** 使用说明](../../theme/guide/features/icon.md){.read-more}
|
||||
[查看 **icon** 使用说明](../guide/features/icon.md){.read-more}
|
||||
|
||||
### plot
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ permalink: /config/navigation/
|
||||
|
||||
主题默认会自动生成最简单的导航栏配置,仅包括 **首页** 和 **文章列表页** 。
|
||||
|
||||
你也可以自己配置导航栏,覆盖默认的的导航栏配置。
|
||||
您也可以自己配置导航栏,覆盖默认的导航栏配置。
|
||||
|
||||
默认配置如下:
|
||||
|
||||
|
||||
104
docs/config/plugins/llms.md
Normal 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` 插件,仅当你启用了此插件功能后,才能使用它。
|
||||
|
||||
因此,此组件提供的功能 **仅在构建后的生产包中才可用** 。
|
||||
:::
|
||||
@ -82,6 +82,7 @@ interface SearchBoxLocale {
|
||||
### 启用
|
||||
|
||||
```ts title=".vuepress/config.ts" twoslash
|
||||
// @errors: 2353
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { plumeTheme } from 'vuepress-theme-plume'
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@ permalink: /config/watermark/
|
||||
## 使用
|
||||
|
||||
```ts title=".vuepress/config.ts" twoslash
|
||||
// @errors: 7006
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { plumeTheme } from 'vuepress-theme-plume'
|
||||
|
||||
|
||||
@ -14,8 +14,7 @@ permalink: /config/theme/
|
||||
::: warning 该字段不支持在 [主题配置文件 `plume.config.js`](./intro.md#主题配置文件) 中进行配置。
|
||||
:::
|
||||
|
||||
无以上声明的字段,你可以在 `.vuepress/config.ts` 或者 `.vuepress/plume.config.ts` 的任意一个文件中
|
||||
进行配置,一般情况下建议在 `.vuepress/plume.config.ts` 中进行配置。
|
||||
无以上声明的字段,您可以在 `.vuepress/config.ts` 或者 `.vuepress/plume.config.ts` 的任意一个文件中进行配置,一般情况下建议在 `.vuepress/plume.config.ts` 中进行配置。
|
||||
|
||||
::: warning 已经在一个配置文件中进行配置的字段,尽量不要在另一个配置文件中重复配置
|
||||
:::
|
||||
@ -190,8 +189,11 @@ export default defineThemeConfig({
|
||||
* 是否自动生成 permalink
|
||||
*
|
||||
* @default true
|
||||
* - true: 自动生成 permalink
|
||||
* - false: 不生成 permalink
|
||||
* - 'filepath': 根据文件路径生成 permalink
|
||||
*/
|
||||
permalink?: boolean
|
||||
permalink?: boolean | 'filepath'
|
||||
|
||||
/**
|
||||
* 是否自动生成 createTime
|
||||
@ -392,31 +394,55 @@ export default defineUserConfig({
|
||||
|
||||
将作为 图标链接 展示在 导航栏最右侧。
|
||||
|
||||
图标可选值:
|
||||
- `'github'`
|
||||
- `'gitlab'`
|
||||
- `'npm'`
|
||||
- `'docker'`
|
||||
- `'discord'`
|
||||
- `'telegram'`
|
||||
- `'facebook'`
|
||||
- `'instagram'`
|
||||
- `'linkedin'`
|
||||
- `'mastodon'`
|
||||
- `'slack'`
|
||||
- `'twitter'`
|
||||
- `'x'`
|
||||
- `'youtube'`
|
||||
- `'juejin'`
|
||||
- `'stackoverflow'`
|
||||
- `'qq'`
|
||||
- `'weibo'`
|
||||
- `'bilibili'`
|
||||
- `'zhihu'`
|
||||
- `'douban'`
|
||||
- `'steam'`
|
||||
- `'xbox'`
|
||||
- `{ svg: string, name?: string }`: 自定义图标,传入 svg 源码字符串,可选 `name` 字段,用于配置 [`navbarSocialInclude`](#navbarsocialinclude)
|
||||
支持 [Iconify](https://icon-sets.iconify.design/) 任意图标,直接使用 iconify name 即可自动加载。
|
||||
|
||||
对于 `simple-icons` 集合下的图标,可以省略 `simple-icons:` 前缀,如 `simple-icons:github` 可以简写为 `github`
|
||||
|
||||
常见的社交图标示例:
|
||||
|
||||
::: flex
|
||||
|
||||
<div style="flex: 1">
|
||||
|
||||
- discord ::simple-icons:discord::
|
||||
- telegram ::simple-icons:telegram::
|
||||
- facebook ::simple-icons:facebook::
|
||||
- github ::simple-icons:github::
|
||||
- instagram ::simple-icons:instagram::
|
||||
- linkedin ::simple-icons:linkedin::
|
||||
- mastodon ::simple-icons:mastodon::
|
||||
- npm ::simple-icons:npm::
|
||||
- slack ::simple-icons:slack::
|
||||
- twitter ::simple-icons:twitter::
|
||||
- x ::simple-icons:x::
|
||||
- youtube ::simple-icons:youtube::
|
||||
- bluesky ::simple-icons:bluesky::
|
||||
- tiktok ::simple-icons:tiktok::
|
||||
|
||||
</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({
|
||||
theme: plumeTheme({
|
||||
social: [
|
||||
// 使用 iconify name
|
||||
{ icon: 'github', link: 'https://github.com/zhangsan' },
|
||||
{
|
||||
// 使用自定义图标
|
||||
icon: { svg: '<svg>xxxxx</svg>', name: 'xxx' },
|
||||
link: 'https://xxx.com'
|
||||
},
|
||||
|
||||
@ -14,5 +14,7 @@
|
||||
"SherkeyXD",
|
||||
{ "github": "Kinneyzhang", "name": "Geekinney" },
|
||||
"huyunan",
|
||||
{ "github": "Honahec", "name": "HAO CHEN" }
|
||||
{ "github": "Honahec", "name": "HAO CHEN" },
|
||||
"gnehs",
|
||||
{ "github": "dahaha-365", "name": "Dahaha" }
|
||||
]
|
||||
|
||||
@ -28,9 +28,9 @@ docs:
|
||||
-
|
||||
name: 哦麦 MC
|
||||
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/
|
||||
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
|
||||
desc: NcatBot,一个 QQ 机器人框架项目的使用文档。
|
||||
@ -73,6 +73,32 @@ docs:
|
||||
url: https://python.yxzl.dev/
|
||||
repo: https://github.com/yxzlwz/python-doc-web
|
||||
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:
|
||||
-
|
||||
@ -81,7 +107,7 @@ blog:
|
||||
logo: https://pengzhanbo.cn/images/blogger-fav.png
|
||||
url: https://pengzhanbo.cn/
|
||||
repo: https://github.com/pengzhanbo/pengzhanbo.cn
|
||||
preview: /images/demos/pengzhanbo.jpg
|
||||
preview: /images/demos/pengzhanbo.webp
|
||||
-
|
||||
name: 二猫子
|
||||
desc: 老老实实的二猫子,从不胡说八道
|
||||
@ -188,19 +214,19 @@ blog:
|
||||
repo: https://github.com/XingJi-love/XingJi-blog-plume
|
||||
preview: https://i.p-i.vip/47/20250407-67f3f1eca1983.png
|
||||
-
|
||||
name: Paiad
|
||||
desc: 种一棵树最好的时间是十年前,其次是现在。
|
||||
logo: https://paiad.online/sunflower.png
|
||||
url: https://paiad.online
|
||||
name: 𝑷𝒂𝒊𝒂𝒅
|
||||
desc: 悲观者永远正确,乐观者永远前行。
|
||||
logo: https://blog.paiad.top/sunflower.png
|
||||
url: https://blog.paiad.top
|
||||
repo: https://github.com/paiad
|
||||
preview: https://paiad.online/paiad-blog.png
|
||||
preview: https://blog.paiad.top/paiad-blog.png
|
||||
-
|
||||
name: 𝙆𝙞𝙖𝙣𝙜
|
||||
desc: 坚持热爱,奔赴山海
|
||||
logo: https://haipeng-lin.oss-cn-shenzhen.aliyuncs.com/20250608222708.png
|
||||
url: https://blog.haipeng-lin.cn/
|
||||
repo: https://github.com/haipeng-lin
|
||||
preview: https://haipeng-lin.oss-cn-shenzhen.aliyuncs.com/20250608223536.png
|
||||
name: 𝙁𝙡𝙖𝙨𝙝
|
||||
desc: 路漫漫其修远兮,吾将上下而求索
|
||||
logo: https://haipeng-lin.cn/images/avatar.jpg
|
||||
url: https://blog.haipeng-lin.cn
|
||||
repo: https://gitee.com/linhaipengg
|
||||
preview: https://img.haipeng-lin.cn/index.webp
|
||||
-
|
||||
name: PinkDopeyBug
|
||||
desc: 山难现浮槎,心易陷镜花。
|
||||
@ -218,10 +244,44 @@ blog:
|
||||
-
|
||||
name: 异想之旅
|
||||
desc: 异想之旅のBlog
|
||||
logo: https://blog.yxzl.dev/head.png
|
||||
url: https://blog.yxzl.dev/
|
||||
logo: https://yxzl.dev/head.png
|
||||
url: https://yxzl.dev/
|
||||
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
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
---
|
||||
pageLayout: home
|
||||
title: Vuepress Theme Plume
|
||||
config:
|
||||
-
|
||||
type: hero
|
||||
full: true
|
||||
background: tint-plate
|
||||
effect: hyper-speed
|
||||
forceDark: true
|
||||
hero:
|
||||
name: Theme Plume
|
||||
tagline: VuePress Next Theme
|
||||
@ -36,7 +38,7 @@ config:
|
||||
-
|
||||
title: Multi-language
|
||||
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
|
||||
icon: twemoji:cityscape
|
||||
@ -56,7 +58,7 @@ config:
|
||||
-
|
||||
title: Markdown Enhancement
|
||||
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
|
||||
title: Features
|
||||
@ -68,7 +70,7 @@ config:
|
||||
description: Add tags, categories, word count, reading time, writing date, and other information to articles.
|
||||
-
|
||||
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
|
||||
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.
|
||||
-
|
||||
title: Resource Embedding
|
||||
description: Charts:chart.js/ECharts/Mermaid/flowchart<br>Videos:Bilibili/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
|
||||
title: Blog
|
||||
@ -115,64 +117,48 @@ config:
|
||||
<div style="max-width: 960px;margin:0 auto;" class="home-custom-content">
|
||||
|
||||
::: center
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
{.no-view}
|
||||
{.no-view}
|
||||
{.no-view}
|
||||
{.no-view}
|
||||
{.no-view}
|
||||
|
||||
{.no-view}
|
||||
{.no-view}
|
||||
|
||||
:::
|
||||
|
||||
### Installation
|
||||
### Usage
|
||||
|
||||
:::code-tabs
|
||||
@tab pnpm
|
||||
Use the following command to quickly create a new ==VuePress== project using this theme.
|
||||
|
||||
:::npm-to
|
||||
|
||||
```sh
|
||||
pnpm add vuepress@next vuepress-theme-plume vue
|
||||
```
|
||||
|
||||
@tab npm
|
||||
|
||||
```sh
|
||||
npm install vuepress@next vuepress-theme-plume
|
||||
```
|
||||
|
||||
@tab yarn
|
||||
|
||||
```sh
|
||||
yarn add vuepress@next vuepress-theme-plume
|
||||
npm create vuepress-theme-plume@latest
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Configuration
|
||||
### Start the project
|
||||
|
||||
::: code-tabs
|
||||
@tab .vuepress/config.ts
|
||||
::: npm-to
|
||||
|
||||
```ts :no-line-numbers
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { plumeTheme } from 'vuepress-theme-plume'
|
||||
|
||||
export default defineUserConfig({
|
||||
// vuepress config...
|
||||
theme: plumeTheme({
|
||||
// theme config...
|
||||
})
|
||||
})
|
||||
```sh
|
||||
npm run docs:dev
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Update Log
|
||||
### Changelog
|
||||
|
||||
[Changelog](../changelog)
|
||||
[Changelog](./changelog)
|
||||
|
||||
### Contributors
|
||||
|
||||
Thanks to all contributors!
|
||||
|
||||
<Contributors :contributors="data" />
|
||||
|
||||
</div>
|
||||
|
||||
@ -269,7 +269,7 @@ books:
|
||||
- 1984:
|
||||
author: *gOrwell
|
||||
- animal-farm:
|
||||
author: *gOrwell
|
||||
author:*gOrwell
|
||||
---
|
||||
```
|
||||
|
||||
|
||||
@ -124,8 +124,8 @@ export default defineUserConfig({
|
||||
'/': {
|
||||
// Chinese collection configuration // [!code focus:4]
|
||||
collections: [
|
||||
{ type: 'post', dir: 'blog', title: '博客' },
|
||||
{ type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' }
|
||||
{ type: 'post', dir: 'blog', title: 'Blog' },
|
||||
{ type: 'doc', dir: 'typescript', title: 'TypeScript Notes', sidebar: 'auto' }
|
||||
],
|
||||
},
|
||||
'/en/': {
|
||||
@ -150,8 +150,8 @@ export default defineThemeConfig({
|
||||
'/': {
|
||||
// Chinese collection configuration // [!code focus:4]
|
||||
collections: [
|
||||
{ type: 'post', dir: 'blog', title: '博客' },
|
||||
{ type: 'doc', dir: 'typescript', title: 'TypeScript笔记', sidebar: 'auto' }
|
||||
{ type: 'post', dir: 'blog', title: 'Blog' },
|
||||
{ type: 'doc', dir: 'typescript', title: 'TypeScript Notes', sidebar: 'auto' }
|
||||
],
|
||||
},
|
||||
'/en/': {
|
||||
|
||||
@ -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>`.
|
||||
|
||||
::: 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
|
||||
|
||||
- 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.
|
||||
|
||||
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.
|
||||
|
||||
@ -14,6 +14,7 @@ Example:
|
||||
---
|
||||
pageLayout: friends
|
||||
title: Friends Links
|
||||
cols: 2
|
||||
list:
|
||||
-
|
||||
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.
|
||||
|
||||
### 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
|
||||
|
||||
- Type: `FriendsItem[]`
|
||||
|
||||
@ -159,7 +159,7 @@ The `include` configuration is implemented by the
|
||||
- **Default:** `{ provider: 'iconify' }`
|
||||
- **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
|
||||
|
||||
|
||||