feat(theme): 新增首页背景色板色调配置

This commit is contained in:
pengzhanbo 2024-04-17 12:08:11 +08:00
parent 782f607dbb
commit 837237c118
7 changed files with 325 additions and 163 deletions

View File

@ -5,7 +5,7 @@ config:
-
type: hero
full: true
background: filter-blur
background: tint-plate
hero:
name: Theme Plume
tagline: VuePress Next Theme

351
pnpm-lock.yaml generated
View File

@ -74,14 +74,14 @@ importers:
specifier: ^5.4.5
version: 5.4.5
vite:
specifier: ^5.2.8
version: 5.2.8(@types/node@20.9.1)
specifier: ^5.2.9
version: 5.2.9(@types/node@20.9.1)
docs:
dependencies:
'@iconify/json':
specifier: ^2.2.200
version: 2.2.200
specifier: ^2.2.201
version: 2.2.201
'@vuepress/bundler-vite':
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@types/node@20.9.1)(typescript@5.4.5)
@ -101,11 +101,11 @@ importers:
specifier: ^10.9.0
version: 10.9.0
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
vuepress-theme-plume:
specifier: workspace:*
version: link:../theme
@ -133,13 +133,13 @@ importers:
version: 1.1.0
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-baidu-tongji:
dependencies:
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-blog-data:
dependencies:
@ -153,11 +153,11 @@ importers:
specifier: ^1.0.1
version: 1.0.1
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-caniuse:
dependencies:
@ -166,7 +166,7 @@ importers:
version: 4.0.0
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
devDependencies:
'@types/markdown-it':
specifier: ^14.0.1
@ -175,11 +175,11 @@ importers:
plugins/plugin-content-update:
dependencies:
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-copy-code:
dependencies:
@ -187,32 +187,32 @@ importers:
specifier: workspace:*
version: link:../plugin-content-update
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-iconify:
dependencies:
'@iconify/vue':
specifier: ^4.1.1
version: 4.1.1(vue@3.4.21)
version: 4.1.1(vue@3.4.22)
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-md-power:
dependencies:
'@iconify/utils':
specifier: ^2.1.22
version: 2.1.22
specifier: ^2.1.23
version: 2.1.23
'@vueuse/core':
specifier: ^10.9.0
version: 10.9.0(vue@3.4.21)
version: 10.9.0(vue@3.4.22)
local-pkg:
specifier: ^0.5.0
version: 0.5.0
@ -223,15 +223,15 @@ importers:
specifier: ^5.0.7
version: 5.0.7
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
devDependencies:
'@iconify/json':
specifier: ^2.2.200
version: 2.2.200
specifier: ^2.2.201
version: 2.2.201
'@types/markdown-it':
specifier: ^14.0.1
version: 14.0.1
@ -270,7 +270,7 @@ importers:
version: 1.0.32
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
devDependencies:
'@types/node':
specifier: ^20.12.7
@ -288,11 +288,11 @@ importers:
specifier: ^1.0.1
version: 1.0.1
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-search:
dependencies:
@ -301,10 +301,10 @@ importers:
version: 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
'@vueuse/core':
specifier: ^10.9.0
version: 10.9.0(vue@3.4.21)
version: 10.9.0(vue@3.4.22)
'@vueuse/integrations':
specifier: ^10.9.0
version: 10.9.0(focus-trap@7.5.4)(vue@3.4.21)
version: 10.9.0(focus-trap@7.5.4)(vue@3.4.22)
chokidar:
specifier: ^3.6.0
version: 3.6.0
@ -321,11 +321,11 @@ importers:
specifier: ^7.0.2
version: 7.0.2
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
plugins/plugin-shikiji:
dependencies:
@ -340,7 +340,7 @@ importers:
version: 3.0.4
floating-vue:
specifier: ^5.2.2
version: 5.2.2(vue@3.4.21)
version: 5.2.2(vue@3.4.22)
mdast-util-from-markdown:
specifier: ^2.0.0
version: 2.0.0
@ -364,7 +364,7 @@ importers:
version: 0.2.5(typescript@5.4.5)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
theme:
dependencies:
@ -445,7 +445,7 @@ importers:
version: 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
'@vueuse/core':
specifier: ^10.9.0
version: 10.9.0(vue@3.4.21)
version: 10.9.0(vue@3.4.22)
bcrypt-ts:
specifier: ^5.0.2
version: 5.0.2
@ -462,14 +462,14 @@ importers:
specifier: ^5.0.7
version: 5.0.7
vue:
specifier: ^3.4.21
version: 3.4.21(typescript@5.4.5)
specifier: ^3.4.22
version: 3.4.22(typescript@5.4.5)
vue-router:
specifier: 4.3.0
version: 4.3.0(vue@3.4.21)
version: 4.3.0(vue@3.4.22)
vuepress:
specifier: 2.0.0-rc.9
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
vuepress-plugin-md-enhance:
specifier: 2.0.0-rc.32
version: 2.0.0-rc.32(katex@0.16.10)(markdown-it@14.1.0)(typescript@5.4.5)(vuepress@2.0.0-rc.9)
@ -523,9 +523,6 @@ packages:
peerDependencies:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
peerDependenciesMeta:
'@algolia/client-search':
optional: true
dependencies:
'@algolia/client-search': 4.20.0
algoliasearch: 4.20.0
@ -668,6 +665,14 @@ packages:
dependencies:
'@babel/types': 7.23.6
/@babel/parser@7.24.4:
resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.23.6
dev: false
/@babel/runtime@7.21.5:
resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==}
engines: {node: '>=6.9.0'}
@ -1771,8 +1776,8 @@ packages:
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
dev: false
/@iconify/json@2.2.200:
resolution: {integrity: sha512-hnGvv2qeQD+DYhbCZSjnIlSi63dPFNmnMWCqLh0cL0kOqQBYsL61ViMjiusjVHKgBWf+fI4Sp6/bsoFuEWbhQg==}
/@iconify/json@2.2.201:
resolution: {integrity: sha512-5jM9TAa55YSEfx2WX1/GsHL9FSSH1PsA38V3p26SDmnOSmfb3V7r5yBgO8oIFkXdFQFk59MgESEOziapNtTGkw==}
dependencies:
'@iconify/types': 2.0.0
pathe: 1.1.2
@ -1780,8 +1785,8 @@ packages:
/@iconify/types@2.0.0:
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
/@iconify/utils@2.1.22:
resolution: {integrity: sha512-6UHVzTVXmvO8uS6xFF+L/QTSpTzA/JZxtgU+KYGFyDYMEObZ1bu/b5l+zNJjHy+0leWjHI+C0pXlzGvv3oXZMA==}
/@iconify/utils@2.1.23:
resolution: {integrity: sha512-YGNbHKM5tyDvdWZ92y2mIkrfvm5Fvhe6WJSkWu7vvOFhMtYDP0casZpoRz0XEHZCrYsR4stdGT3cZ52yp5qZdQ==}
dependencies:
'@antfu/install-pkg': 0.1.1
'@antfu/utils': 0.7.7
@ -1794,13 +1799,13 @@ packages:
- supports-color
dev: false
/@iconify/vue@4.1.1(vue@3.4.21):
/@iconify/vue@4.1.1(vue@3.4.22):
resolution: {integrity: sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg==}
peerDependencies:
vue: '>=3'
dependencies:
'@iconify/types': 2.0.0
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
dev: false
/@import-maps/resolve@1.0.1:
@ -4033,7 +4038,7 @@ packages:
- supports-color
dev: false
/@vitejs/plugin-vue@5.0.4(vite@5.2.2)(vue@3.4.21):
/@vitejs/plugin-vue@5.0.4(vite@5.2.2)(vue@3.4.22):
resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
@ -4041,7 +4046,7 @@ packages:
vue: ^3.2.25
dependencies:
vite: 5.2.2(@types/node@20.9.1)
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
dev: false
/@volar/language-core@1.11.1:
@ -4065,12 +4070,29 @@ packages:
estree-walker: 2.0.2
source-map-js: 1.2.0
/@vue/compiler-core@3.4.22:
resolution: {integrity: sha512-FBDRCBE/rFPA8OfTUrARx2c49N7zoImlGT7hsFikv0pZxQlFhffQwewpEXaLynZW0/DspVXmNA+QQ9dXINpWmg==}
dependencies:
'@babel/parser': 7.24.4
'@vue/shared': 3.4.22
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.0
dev: false
/@vue/compiler-dom@3.4.21:
resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==}
dependencies:
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
/@vue/compiler-dom@3.4.22:
resolution: {integrity: sha512-YkAS+jZc6Ip360kT3lZbMQZteiYBbHDSVKr94Jdd8Zjr7VjSkkXKAFFR/FW+2tNtBYXOps6xrWlOquy3GeYB0w==}
dependencies:
'@vue/compiler-core': 3.4.22
'@vue/shared': 3.4.22
dev: false
/@vue/compiler-sfc@3.4.21:
resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==}
dependencies:
@ -4083,12 +4105,35 @@ packages:
magic-string: 0.30.7
postcss: 8.4.38
source-map-js: 1.2.0
dev: true
/@vue/compiler-sfc@3.4.22:
resolution: {integrity: sha512-Pncp5Vc8E2Ef1o5uveO8WA1IqM7rt0R1jN8D4qitQYOUxC97iITGYA8oMInQ3UcDS7ip+SegyA2HbAEB4V6NMQ==}
dependencies:
'@babel/parser': 7.24.4
'@vue/compiler-core': 3.4.22
'@vue/compiler-dom': 3.4.22
'@vue/compiler-ssr': 3.4.22
'@vue/shared': 3.4.22
estree-walker: 2.0.2
magic-string: 0.30.9
postcss: 8.4.38
source-map-js: 1.2.0
dev: false
/@vue/compiler-ssr@3.4.21:
resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==}
dependencies:
'@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.21
dev: true
/@vue/compiler-ssr@3.4.22:
resolution: {integrity: sha512-ycb2sL0SW6AkgVMrvaU/TIAEk7FQWyv/oYya44E/V9xURM+ij9Oev5bVobSS7GLJzkUieWW3SrYcK/PZpb5i4A==}
dependencies:
'@vue/compiler-dom': 3.4.22
'@vue/shared': 3.4.22
dev: false
/@vue/devtools-api@6.5.1:
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
@ -4118,44 +4163,48 @@ packages:
vue-template-compiler: 2.7.16
dev: false
/@vue/reactivity@3.4.21:
resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==}
/@vue/reactivity@3.4.22:
resolution: {integrity: sha512-+golHRRfcGoahBrhoTauFNIIAhxntRV3BI8HHqVvCdsuWivxW1MI0E9AOXVsz4H/ZlWM1ahudWTX6PhUrNR2yQ==}
dependencies:
'@vue/shared': 3.4.21
'@vue/shared': 3.4.22
dev: false
/@vue/runtime-core@3.4.21:
resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==}
/@vue/runtime-core@3.4.22:
resolution: {integrity: sha512-cbA8lcL4g1907EdY1a1KmP5IRWfbqjgBRcgJPkF//yn96XSC1/VAJBZiAGLiyw0P77Rw2Ao7d9U51vU1GC6yUQ==}
dependencies:
'@vue/reactivity': 3.4.21
'@vue/shared': 3.4.21
'@vue/reactivity': 3.4.22
'@vue/shared': 3.4.22
dev: false
/@vue/runtime-dom@3.4.21:
resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==}
/@vue/runtime-dom@3.4.22:
resolution: {integrity: sha512-AXxRHrFkLX1y2+70CO2wDKRxW0WZcQKTOXS31AK+jZ1RLPtI6sEHVpYNfyE9WgbgXOqPtX4gfIfuoFYi8iCu2w==}
dependencies:
'@vue/runtime-core': 3.4.21
'@vue/shared': 3.4.21
'@vue/runtime-core': 3.4.22
'@vue/shared': 3.4.22
csstype: 3.1.3
dev: false
/@vue/server-renderer@3.4.21(vue@3.4.21):
resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==}
/@vue/server-renderer@3.4.22(vue@3.4.22):
resolution: {integrity: sha512-okiNxiCOhJlx6IOrTZvhIVwf2UYKay0hnIPqWu4h19bkNv1gmG4Ic6U3zXY287AWF26lQuFMa515Qzc+R0aAYg==}
peerDependencies:
vue: 3.4.21
vue: 3.4.22
dependencies:
'@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21
vue: 3.4.21(typescript@5.4.5)
'@vue/compiler-ssr': 3.4.22
'@vue/shared': 3.4.22
vue: 3.4.22(typescript@5.4.5)
dev: false
/@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
/@vue/shared@3.4.22:
resolution: {integrity: sha512-cg7R9XNk4ovV3bKka/1a464O2oY0l5Fyt0rwGR4hSJRPjUJ0WVjrPdsr4W0JbUriwiM8EKcCcCjeKN5pRMs2Zg==}
dev: false
/@vuepress/bundler-vite@2.0.0-rc.9(@types/node@20.9.1)(typescript@5.4.5):
resolution: {integrity: sha512-GcM2eSqW2mPY5xXX4i5kuZujvwUeiTpsLX5kgau9LzPox+FdA3SMUkppCY3hsou2o2RxXPTfjocE7OlYQrUqvA==}
dependencies:
'@vitejs/plugin-vue': 5.0.4(vite@5.2.2)(vue@3.4.21)
'@vitejs/plugin-vue': 5.0.4(vite@5.2.2)(vue@3.4.22)
'@vuepress/client': 2.0.0-rc.9(typescript@5.4.5)
'@vuepress/core': 2.0.0-rc.9(typescript@5.4.5)
'@vuepress/shared': 2.0.0-rc.9
@ -4166,8 +4215,8 @@ packages:
postcss-load-config: 5.0.3(postcss@8.4.38)
rollup: 4.13.0
vite: 5.2.2(@types/node@20.9.1)
vue: 3.4.21(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.22)
transitivePeerDependencies:
- '@types/node'
- jiti
@ -4202,8 +4251,8 @@ packages:
dependencies:
'@vue/devtools-api': 6.6.1
'@vuepress/shared': 2.0.0-rc.9
vue: 3.4.21(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4215,7 +4264,7 @@ packages:
'@vuepress/markdown': 2.0.0-rc.9(patch_hash=f3on36z73gmvj4jugj25dg7wje)
'@vuepress/shared': 2.0.0-rc.9
'@vuepress/utils': 2.0.0-rc.9
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
transitivePeerDependencies:
- supports-color
- typescript
@ -4230,8 +4279,8 @@ packages:
cheerio: 1.0.0-rc.12
fflate: 0.8.2
gray-matter: 4.0.3
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4245,8 +4294,8 @@ packages:
cheerio: 1.0.0-rc.12
fflate: 0.8.2
gray-matter: 4.0.3
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4280,9 +4329,9 @@ packages:
peerDependencies:
vuepress: 2.0.0-rc.9
dependencies:
'@vueuse/core': 10.9.0(vue@3.4.21)
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
'@vueuse/core': 10.9.0(vue@3.4.22)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- '@vue/composition-api'
- typescript
@ -4308,8 +4357,8 @@ packages:
dependencies:
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
giscus: 1.5.0
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4322,7 +4371,7 @@ packages:
'@types/markdown-it': 13.0.7
markdown-it: 14.1.0
markdown-it-container: 4.0.0
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
dev: false
/@vuepress/plugin-docsearch@2.0.0-rc.24(@algolia/client-search@4.20.0)(search-insights@2.7.0)(typescript@5.4.5)(vuepress@2.0.0-rc.9):
@ -4334,10 +4383,10 @@ packages:
'@docsearch/js': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.7.0)
'@docsearch/react': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.7.0)
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
'@vueuse/core': 10.9.0(vue@3.4.21)
'@vueuse/core': 10.9.0(vue@3.4.22)
ts-debounce: 4.0.0
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/react'
@ -4353,8 +4402,8 @@ packages:
peerDependencies:
vuepress: 2.0.0-rc.9
dependencies:
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4365,7 +4414,7 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
execa: 8.0.1
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
dev: false
/@vuepress/plugin-medium-zoom@2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9):
@ -4375,8 +4424,8 @@ packages:
dependencies:
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
medium-zoom: 1.1.0
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4386,8 +4435,8 @@ packages:
peerDependencies:
vuepress: 2.0.0-rc.9
dependencies:
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4398,7 +4447,7 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
chokidar: 3.6.0
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
dev: false
/@vuepress/plugin-reading-time@2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9):
@ -4407,8 +4456,8 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4419,7 +4468,7 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4431,7 +4480,7 @@ packages:
dependencies:
'@vuepress/helper': 2.0.0-rc.24(typescript@5.4.5)(vuepress@2.0.0-rc.9)
sitemap: 7.1.1
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4442,8 +4491,8 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
'@vue/devtools-api': 6.6.1
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4453,9 +4502,9 @@ packages:
peerDependencies:
vuepress: 2.0.0-rc.9
dependencies:
vue: 3.4.21(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vue-router: 4.3.0(vue@3.4.22)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- typescript
dev: false
@ -4484,19 +4533,19 @@ packages:
- supports-color
dev: false
/@vueuse/core@10.9.0(vue@3.4.21):
/@vueuse/core@10.9.0(vue@3.4.22):
resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==}
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.9.0
'@vueuse/shared': 10.9.0(vue@3.4.21)
vue-demi: 0.14.7(vue@3.4.21)
'@vueuse/shared': 10.9.0(vue@3.4.22)
vue-demi: 0.14.7(vue@3.4.22)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
/@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.21):
/@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.22):
resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==}
peerDependencies:
async-validator: '*'
@ -4537,10 +4586,10 @@ packages:
universal-cookie:
optional: true
dependencies:
'@vueuse/core': 10.9.0(vue@3.4.21)
'@vueuse/shared': 10.9.0(vue@3.4.21)
'@vueuse/core': 10.9.0(vue@3.4.22)
'@vueuse/shared': 10.9.0(vue@3.4.22)
focus-trap: 7.5.4
vue-demi: 0.14.7(vue@3.4.21)
vue-demi: 0.14.7(vue@3.4.22)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -4550,10 +4599,10 @@ packages:
resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==}
dev: false
/@vueuse/shared@10.9.0(vue@3.4.21):
/@vueuse/shared@10.9.0(vue@3.4.22):
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==}
dependencies:
vue-demi: 0.14.7(vue@3.4.21)
vue-demi: 0.14.7(vue@3.4.22)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -8503,7 +8552,7 @@ packages:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
dev: true
/floating-vue@5.2.2(vue@3.4.21):
/floating-vue@5.2.2(vue@3.4.22):
resolution: {integrity: sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==}
peerDependencies:
'@nuxt/kit': ^3.2.0
@ -8513,8 +8562,8 @@ packages:
optional: true
dependencies:
'@floating-ui/dom': 1.1.1
vue: 3.4.21(typescript@5.4.5)
vue-resize: 2.0.0-alpha.1(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vue-resize: 2.0.0-alpha.1(vue@3.4.22)
dev: false
/flowchart.ts@3.0.0:
@ -10656,6 +10705,14 @@ packages:
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
/magic-string@0.30.9:
resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==}
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
dev: false
/make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
@ -15284,8 +15341,8 @@ packages:
fsevents: 2.3.3
dev: false
/vite@5.2.8(@types/node@20.9.1):
resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==}
/vite@5.2.9(@types/node@20.9.1):
resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -15320,7 +15377,7 @@ packages:
fsevents: 2.3.3
dev: true
/vue-demi@0.14.7(vue@3.4.21):
/vue-demi@0.14.7(vue@3.4.22):
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'}
hasBin: true
@ -15332,7 +15389,7 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
dev: false
/vue-eslint-parser@9.4.2(eslint@9.0.0):
@ -15353,21 +15410,21 @@ packages:
- supports-color
dev: true
/vue-resize@2.0.0-alpha.1(vue@3.4.21):
/vue-resize@2.0.0-alpha.1(vue@3.4.22):
resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==}
peerDependencies:
vue: ^3.0.0
dependencies:
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
dev: false
/vue-router@4.3.0(vue@3.4.21):
/vue-router@4.3.0(vue@3.4.22):
resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.5.1
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
dev: false
/vue-template-compiler@2.7.16:
@ -15377,19 +15434,19 @@ packages:
he: 1.2.0
dev: false
/vue@3.4.21(typescript@5.4.5):
resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==}
/vue@3.4.22(typescript@5.4.5):
resolution: {integrity: sha512-CIx7NiP+n5WHBCG/fDNaUPP4qbQ5CIa8XIHZE3HpfS/rb2vmSIsp74BxsZyrrGKF0vHW3GoToqP3l0hzrMTecw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
'@vue/runtime-dom': 3.4.21
'@vue/server-renderer': 3.4.21(vue@3.4.21)
'@vue/shared': 3.4.21
'@vue/compiler-dom': 3.4.22
'@vue/compiler-sfc': 3.4.22
'@vue/runtime-dom': 3.4.22
'@vue/server-renderer': 3.4.22(vue@3.4.22)
'@vue/shared': 3.4.22
typescript: 5.4.5
dev: false
@ -15468,12 +15525,12 @@ packages:
'@mdit/plugin-uml': 0.8.0(markdown-it@14.1.0)
'@types/markdown-it': 13.0.7
'@vuepress/helper': 2.0.0-rc.21(typescript@5.4.5)(vuepress@2.0.0-rc.9)
'@vueuse/core': 10.9.0(vue@3.4.21)
'@vueuse/core': 10.9.0(vue@3.4.22)
balloon-css: 1.2.0
js-yaml: 4.1.0
katex: 0.16.10
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
vuepress-plugin-sass-palette: 2.0.0-rc.32(typescript@5.4.5)(vuepress@2.0.0-rc.9)
vuepress-shared: 2.0.0-rc.32(typescript@5.4.5)(vuepress@2.0.0-rc.9)
transitivePeerDependencies:
@ -15495,7 +15552,7 @@ packages:
'@vuepress/helper': 2.0.0-rc.21(typescript@5.4.5)(vuepress@2.0.0-rc.9)
chokidar: 3.6.0
sass: 1.72.0
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
vuepress-shared: 2.0.0-rc.32(typescript@5.4.5)(vuepress@2.0.0-rc.9)
transitivePeerDependencies:
- '@vue/composition-api'
@ -15509,21 +15566,21 @@ packages:
vuepress: 2.0.0-rc.9
dependencies:
'@vuepress/helper': 2.0.0-rc.21(typescript@5.4.5)(vuepress@2.0.0-rc.9)
'@vueuse/core': 10.9.0(vue@3.4.21)
'@vueuse/core': 10.9.0(vue@3.4.22)
cheerio: 1.0.0-rc.12
dayjs: 1.11.10
execa: 8.0.1
fflate: 0.8.2
gray-matter: 4.0.3
semver: 7.6.0
vue: 3.4.21(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21)
vue: 3.4.22(typescript@5.4.5)
vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22)
transitivePeerDependencies:
- '@vue/composition-api'
- typescript
dev: false
/vuepress@2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.21):
/vuepress@2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.5)(vue@3.4.22):
resolution: {integrity: sha512-jT1ln2lawdph+vVI6n2JfEUhQIcyc1RQWDdQu9DffhJGywJunFcumnUJudpqd1SNIES2Fz1hVCD6gdrE/rVKOQ==}
engines: {node: '>=18.16.0'}
hasBin: true
@ -15544,7 +15601,7 @@ packages:
'@vuepress/markdown': 2.0.0-rc.9(patch_hash=f3on36z73gmvj4jugj25dg7wje)
'@vuepress/shared': 2.0.0-rc.9
'@vuepress/utils': 2.0.0-rc.9
vue: 3.4.21(typescript@5.4.5)
vue: 3.4.22(typescript@5.4.5)
transitivePeerDependencies:
- supports-color
- typescript

View File

@ -1,6 +1,6 @@
<script lang="ts" setup>
import { usePageFrontmatter } from 'vuepress/client'
import { type Component, computed, resolveComponent } from 'vue'
import { type Component, computed, nextTick, onUnmounted, resolveComponent, watch } from 'vue'
import type { PlumeThemeHomeFrontmatter } from '../../../shared/index.js'
import HomeBanner from './HomeBanner.vue'
import HomeHero from './HomeHero.vue'
@ -46,7 +46,7 @@ const config = computed(() => {
return [{
type: 'hero',
full: true,
background: 'filter',
background: 'tint-plate',
hero: matter.value.hero ?? DEFAULT_HERO,
}]
})
@ -56,6 +56,19 @@ const onlyOnce = computed(() => config.value.length === 1)
function resolveComponentName(type: string) {
return components[type] ?? resolveComponent(type)
}
let el: HTMLDivElement | null = null
watch(() => onlyOnce.value, value => nextTick(() => {
if (typeof document !== 'undefined') {
el ??= document.querySelector('#LayoutContent')
el?.classList.toggle('footer-no-border', value)
}
}), { immediate: true })
onUnmounted(() => {
el?.classList.remove('footer-no-border')
})
</script>
<template>

View File

@ -4,7 +4,7 @@ import { isLinkHttp } from 'vuepress/shared'
import { computed, ref } from 'vue'
import VButton from '../VButton.vue'
import { useDarkMode } from '../../composables/index.js'
import { useHomeHeroFilterBackground } from '../../composables/home.js'
import { useHomeHeroTintPlate } from '../../composables/home.js'
import type { PlumeThemeHomeFrontmatter, PlumeThemeHomeHero } from '../../../shared/index.js'
const props = defineProps<PlumeThemeHomeHero>()
@ -13,7 +13,7 @@ const matter = usePageFrontmatter<PlumeThemeHomeFrontmatter>()
const isDark = useDarkMode()
const heroBackground = computed(() => {
if (props.background === 'filter-blur')
if (props.background === 'tint-plate')
return null
const image = props.backgroundImage
? typeof props.backgroundImage === 'string'
@ -37,14 +37,18 @@ const hero = computed(() => props.hero ?? matter.value.hero ?? {})
const actions = computed(() => hero.value.actions ?? [])
const canvas = ref<HTMLCanvasElement>()
useHomeHeroFilterBackground(canvas, computed(() => props.background === 'filter-blur'))
useHomeHeroTintPlate(
canvas,
computed(() => props.background === 'tint-plate'),
computed(() => props.tintPlate),
)
</script>
<template>
<div class="home-hero" :class="{ full: props.full, once: props.onlyOnce }">
<div v-if="heroBackground" class="home-hero-bg" :style="heroBackground" />
<div v-if="background === 'filter-blur'" class="bg-filter">
<div v-if="background === 'tint-plate'" class="bg-filter">
<canvas ref="canvas" width="32" height="32" />
</div>
@ -188,9 +192,9 @@ useHomeHeroFilterBackground(canvas, computed(() => props.background === 'filter-
top: 0;
left: 0;
width: 100%;
height: 20%;
height: 100%;
content: "";
background: linear-gradient(var(--vp-c-bg) 0, transparent 100%);
background: linear-gradient(to bottom, var(--vp-c-bg) 0, transparent 40%, transparent 60%, var(--vp-c-bg) 140%);
}
.bg-filter canvas {

View File

@ -1,10 +1,30 @@
import type { Ref } from 'vue'
import { computed, onMounted, onUnmounted } from 'vue'
import type { PlumeThemeHomeHero } from '../../shared/index.js'
import { useDarkMode } from './darkMode.js'
export function useHomeHeroFilterBackground(
export interface TintPlate {
r: { value: number, offset: number }
g: { value: number, offset: number }
b: { value: number, offset: number }
}
const lightTint = {
r: { value: 200, offset: 36 },
g: { value: 200, offset: 36 },
b: { value: 200, offset: 36 },
}
const darkTint = {
r: { value: 32, offset: 36 },
g: { value: 32, offset: 36 },
b: { value: 32, offset: 36 },
}
export function useHomeHeroTintPlate(
canvas: Ref<HTMLCanvasElement | undefined>,
enable: Ref<boolean>,
tintPlate: Ref<PlumeThemeHomeHero['tintPlate']>,
) {
const isDark = useDarkMode()
@ -12,7 +32,61 @@ export function useHomeHeroFilterBackground(
let t = 0
let timer: number
const F = computed(() => isDark.value ? 32 : 220)
const plate = computed<TintPlate>(() => {
const defaultTint = isDark.value ? darkTint : lightTint
if (!tintPlate.value)
return defaultTint
const plate = tintPlate.value
if (typeof plate === 'string' || typeof plate === 'number') {
if (isDark.value)
return darkTint
const values = toPlate(plate)
return values.length !== 3 ? lightTint : toTint(values)
}
if (typeof plate === 'object') {
if ('r' in plate) {
if (isDark.value)
return darkTint
return toNumber({ ...lightTint, ...plate })
}
const key = isDark.value ? 'dark' : 'light'
if (key in plate) {
const _plate = plate[key]
if (typeof _plate === 'string' || typeof _plate === 'number') {
const values = toPlate(_plate)
return values.length !== 3 ? lightTint : toTint(values)
}
return toNumber({ ...defaultTint, ...plate })
}
}
return defaultTint
})
function toPlate(plate: number | string) {
return typeof plate === 'number' || Number(plate) === Number.parseInt(plate)
? [plate, plate, plate].map(n => Number(n))
: plate.includes(',') ? plate.replace(/\s/g, '').split(',').map(n => Number(n)) : []
}
function toTint([r, g, b]: number[]) {
return { r: toColor(r), g: toColor(g), b: toColor(b) }
}
function toColor(num: number) {
const offset = 256 - num
return { value: num, offset: offset > 64 ? 64 : offset }
}
function toNumber(tint: TintPlate): TintPlate {
Object.keys(tint).forEach((key) => {
const p = tint[key]
p.value = Number(p.value)
p.offset = Number(p.offset)
})
return tint
}
onMounted(() => {
if (canvas.value && enable.value) {
@ -43,14 +117,17 @@ export function useHomeHeroFilterBackground(
}
function R(x: number, y: number, t: number) {
return (Math.floor(F.value + 36 * Math.cos((x * x - y * y) / 300 + t)))
const r = plate.value.r
return (Math.floor(r.value + r.offset * Math.cos((x * x - y * y) / 300 + t)))
}
function G(x: number, y: number, t: number) {
return (Math.floor(F.value + 36 * Math.sin((x * x * Math.cos(t / 4) + y * y * Math.sin(t / 3)) / 300)))
const g = plate.value.g
return (Math.floor(g.value + g.offset * Math.sin((x * x * Math.cos(t / 4) + y * y * Math.sin(t / 3)) / 300)))
}
function B(x: number, y: number, t: number) {
return (Math.floor(F.value + 36 * Math.sin(5 * Math.sin(t / 9) + ((x - 100) * (x - 100) + (y - 100) * (y - 100)) / 1100)))
const b = plate.value.b
return (Math.floor(b.value + b.offset * Math.sin(5 * Math.sin(t / 9) + ((x - 100) * (x - 100) + (y - 100) * (y - 100)) / 1100)))
}
}

View File

@ -36,11 +36,22 @@ export interface PlumeThemeHomeBanner extends Pick<PlumeHomeConfigBase, 'type' |
hero: PlumeThemeHero
}
export interface PlumeThemeHomeHeroTintPlate {
r: { value: number, offset: number }
g: { value: number, offset: number }
b: { value: number, offset: number }
}
export interface PlumeThemeHomeHero extends PlumeHomeConfigBase {
type: 'hero'
hero: PlumeThemeHero
full?: boolean
background?: 'filter-blur' | (string & { zz_IGNORE?: never })
background?: 'tint-plate' | (string & { zz_IGNORE?: never })
tintPlate?:
| string | number
| { light?: string | number, dark?: string | number }
| PlumeThemeHomeHeroTintPlate
| { light?: PlumeThemeHomeHeroTintPlate, dark?: PlumeThemeHomeHeroTintPlate }
filter?: string
}

View File

@ -30,5 +30,5 @@
"docs/.vuepress/**/*",
"scripts/**/*"
],
"exclude": ["node_modules", ".cache", "lib", "dist"]
"exclude": ["node_modules", ".cache", ".temp", "lib", "dist"]
}