This browser does not support embedding PDFs. Please download the PDF to view it: Download PDF
` +} diff --git a/plugins/plugin-md-power/src/client/composables/setupCanIUse.ts b/plugins/plugin-md-power/src/client/composables/setupCanIUse.ts new file mode 100644 index 00000000..713dac08 --- /dev/null +++ b/plugins/plugin-md-power/src/client/composables/setupCanIUse.ts @@ -0,0 +1,20 @@ +let isBind = false +export function setupCanIUse(): void { + if (isBind) + return + isBind = true + + window.addEventListener('message', (message) => { + const data = message.data + + if (typeof data === 'string' && data.includes('ciu_embed')) { + const [, feature, height] = data.split(':') + const el = document.querySelector(`.ciu_embed[data-feature="${feature}"]:not([data-skip])`) + if (el) { + const h = Number.parseInt(height) + 30 + ; (el.childNodes[0] as any).height = `${h}px` + el.setAttribute('data-skip', 'true') + } + } + }) +} diff --git a/plugins/plugin-md-power/src/client/composables/size.ts b/plugins/plugin-md-power/src/client/composables/size.ts new file mode 100644 index 00000000..1cdd1cdd --- /dev/null +++ b/plugins/plugin-md-power/src/client/composables/size.ts @@ -0,0 +1,55 @@ +import type { MaybeRef } from '@vueuse/core' +import { useEventListener } from '@vueuse/core' +import type { Ref, ShallowRef, ToRefs } from 'vue' +import { computed, isRef, onMounted, ref, shallowRef, toValue, watch } from 'vue' +import type { SizeOptions } from '../../shared/size.js' + +export interface SizeInfo
+
['"])(?.+?)\k )?(?:\s+|$)/ + +export function resolveAttrs(info: string): { + attrs: Record+ rawAttrs: string +} { + info = info.trim() + + if (!info) + return { rawAttrs: '', attrs: {} } + + const attrs: Record = {} + const rawAttrs = info + + let matched: RegExpMatchArray | null + + // eslint-disable-next-line no-cond-assign + while (matched = info.match(RE_ATTR_VALUE)) { + const { attr, value } = matched.groups || {} + attrs[attr] = value ?? true + info = info.slice(matched[0].length) + } + + Object.keys(attrs).forEach((key) => { + let value = attrs[key] + value = typeof value === 'string' ? value.trim() : value + if (value === 'true') + value = true + else if (value === 'false') + value = false + + attrs[key] = value + + if (key.includes('-')) { + const _key = key.replace(/-(\w)/g, (_, c) => c.toUpperCase()) + attrs[_key] = value + } + }) + + return { attrs, rawAttrs } +} diff --git a/plugins/plugin-md-power/src/node/utils/timeToSeconds.ts b/plugins/plugin-md-power/src/node/utils/timeToSeconds.ts new file mode 100644 index 00000000..44538856 --- /dev/null +++ b/plugins/plugin-md-power/src/node/utils/timeToSeconds.ts @@ -0,0 +1,11 @@ +export function timeToSeconds(time: string): number { + if (!time) + return 0 + + if (Number.parseFloat(time) === Number(time)) + return Number(time) + + const [s, m, h] = time.split(':').reverse().map(n => Number(n) || 0) + + return s + m * 60 + h * 3600 +} diff --git a/plugins/plugin-md-power/src/shared/caniuse.ts b/plugins/plugin-md-power/src/shared/caniuse.ts new file mode 100644 index 00000000..8c746dd6 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/caniuse.ts @@ -0,0 +1,20 @@ +export type CanIUseMode = 'embed' | 'image' + +export interface CanIUseTokenMeta { + feature: string + mode: CanIUseMode + versions: string +} + +export interface CanIUseOptions { + /** + * 嵌入模式 + * + * embed 通过iframe嵌入,提供可交互视图 + * + * image 通过图片嵌入,静态 + * + * @default 'embed' + */ + mode?: CanIUseMode +} diff --git a/plugins/plugin-md-power/src/shared/codepen.ts b/plugins/plugin-md-power/src/shared/codepen.ts new file mode 100644 index 00000000..004fdbe1 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/codepen.ts @@ -0,0 +1,11 @@ +import type { SizeOptions } from './size' + +export interface CodepenTokenMeta extends SizeOptions { + title?: string + user?: string + slash?: string + tab?: string + theme?: string + preview?: boolean + editable?: boolean +} diff --git a/plugins/plugin-md-power/src/shared/icons.ts b/plugins/plugin-md-power/src/shared/icons.ts new file mode 100644 index 00000000..93ef6e56 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/icons.ts @@ -0,0 +1,19 @@ +export interface IconsOptions { + /** + * The prefix of the icon className + * @default 'vp-mdi' + */ + prefix?: string + + /** + * The size of the icon + * @default '1em' + */ + size?: string | number + + /** + * The color of the icon + * @default 'currentColor' + */ + color?: string +} diff --git a/plugins/plugin-md-power/src/shared/index.ts b/plugins/plugin-md-power/src/shared/index.ts new file mode 100644 index 00000000..7b449022 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/index.ts @@ -0,0 +1,6 @@ +export * from './caniuse.js' +export * from './pdf.js' +export * from './icons.js' +export * from './video.js' +export * from './codepen.js' +export * from './plugin.js' diff --git a/plugins/plugin-md-power/src/shared/pdf.ts b/plugins/plugin-md-power/src/shared/pdf.ts new file mode 100644 index 00000000..001ca69d --- /dev/null +++ b/plugins/plugin-md-power/src/shared/pdf.ts @@ -0,0 +1,18 @@ +import type { SizeOptions } from './size' + +export type PDFEmbedType = 'iframe' | 'embed' | 'pdfjs' + +export interface PDFTokenMeta extends SizeOptions { + page?: number + noToolbar?: boolean + zoom?: number + src?: string + title?: string +} + +export interface PDFOptions { + /** + * pdfjs url + */ + pdfjsUrl?: string +} diff --git a/plugins/plugin-md-power/src/shared/plugin.ts b/plugins/plugin-md-power/src/shared/plugin.ts new file mode 100644 index 00000000..31575788 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/plugin.ts @@ -0,0 +1,20 @@ +import type { CanIUseOptions } from './caniuse.js' +import type { PDFOptions } from './pdf.js' +import type { IconsOptions } from './icons.js' + +export interface MarkdownPowerPluginOptions { + pdf?: boolean | PDFOptions + + // new syntax + icons?: boolean | IconsOptions + + // video embed + bilibili?: boolean + youtube?: boolean + + // code embed + codepen?: boolean + replit?: boolean + + caniuse?: boolean | CanIUseOptions +} diff --git a/plugins/plugin-md-power/src/shared/replit.ts b/plugins/plugin-md-power/src/shared/replit.ts new file mode 100644 index 00000000..7f8414a5 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/replit.ts @@ -0,0 +1,7 @@ +import type { SizeOptions } from './size' + +export interface ReplitTokenMeta extends SizeOptions { + title?: string + source?: string + theme?: string +} diff --git a/plugins/plugin-md-power/src/shared/size.ts b/plugins/plugin-md-power/src/shared/size.ts new file mode 100644 index 00000000..b679c8e4 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/size.ts @@ -0,0 +1,5 @@ +export interface SizeOptions { + width?: string + height?: string + ratio?: number | string +} diff --git a/plugins/plugin-md-power/src/shared/video.ts b/plugins/plugin-md-power/src/shared/video.ts new file mode 100644 index 00000000..f04fa371 --- /dev/null +++ b/plugins/plugin-md-power/src/shared/video.ts @@ -0,0 +1,25 @@ +import type { SizeOptions } from './size' + +export interface VideoOptions { + bilibili?: boolean + youtube?: boolean +} + +export interface BilibiliTokenMeta extends SizeOptions { + title?: string + bvid?: string + aid?: string + cid?: string + autoplay?: boolean + time?: string | number + page?: number +} + +export interface YoutubeTokenMeta extends SizeOptions { + title?: string + id: string + autoplay?: boolean + loop?: boolean + start?: string | number + end?: string | number +} diff --git a/plugins/plugin-md-power/tsconfig.build.json b/plugins/plugin-md-power/tsconfig.build.json new file mode 100644 index 00000000..6bf67375 --- /dev/null +++ b/plugins/plugin-md-power/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.build.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"] +} diff --git a/plugins/plugin-netlify-functions/package.json b/plugins/plugin-netlify-functions/package.json index 0624aa1c..c005292c 100644 --- a/plugins/plugin-netlify-functions/package.json +++ b/plugins/plugin-netlify-functions/package.json @@ -52,11 +52,11 @@ "dotenv": "^16.4.5", "esbuild": "^0.20.2", "execa": "^8.0.1", - "netlify-cli": "^17.20.1", + "netlify-cli": "^17.21.1", "portfinder": "^1.0.32" }, "devDependencies": { - "@types/node": "^20.11.30" + "@types/node": "^20.12.2" }, "publishConfig": { "access": "public" diff --git a/plugins/plugin-shikiji/package.json b/plugins/plugin-shikiji/package.json index 7a4ef045..3a9e4cd1 100644 --- a/plugins/plugin-shikiji/package.json +++ b/plugins/plugin-shikiji/package.json @@ -36,15 +36,15 @@ "vuepress": "2.0.0-rc.9" }, "dependencies": { - "@shikijs/transformers": "^1.2.0", - "@shikijs/twoslash": "^1.2.0", + "@shikijs/transformers": "^1.2.2", + "@shikijs/twoslash": "^1.2.2", "@types/hast": "^3.0.4", "floating-vue": "^5.2.2", "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm": "^3.0.0", "mdast-util-to-hast": "^13.1.0", "nanoid": "^5.0.6", - "shiki": "^1.2.0", + "shiki": "^1.2.2", "twoslash": "^0.2.5", "twoslash-vue": "^0.2.5" }, diff --git a/plugins/tsconfig.build.json b/plugins/tsconfig.build.json index a3ed6c22..d5791746 100644 --- a/plugins/tsconfig.build.json +++ b/plugins/tsconfig.build.json @@ -15,7 +15,8 @@ { "path": "./plugin-page-collection/tsconfig.build.json" }, { "path": "./plugin-shikiji/tsconfig.build.json" }, { "path": "./plugin-content-update/tsconfig.build.json" }, - { "path": "./plugin-search/tsconfig.build.json" } + { "path": "./plugin-search/tsconfig.build.json" }, + { "path": "./plugin-md-power/tsconfig.build.json" } ], "files": [] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6a69aac..9cb93a6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: version: 1.7.0(@vue/compiler-sfc@3.4.21)(eslint@8.57.0)(typescript@5.4.3) '@pengzhanbo/stylelint-config': specifier: ^1.7.0 - version: 1.7.0(stylelint@16.2.1) + version: 1.7.0(stylelint@16.3.1) '@types/lodash.merge': specifier: ^4.6.9 version: 4.6.9 @@ -65,8 +65,8 @@ importers: specifier: ^5.0.5 version: 5.0.5 stylelint: - specifier: ^16.2.1 - version: 16.2.1(typescript@5.4.3) + specifier: ^16.3.1 + version: 16.3.1(typescript@5.4.3) tsconfig-vuepress: specifier: ^4.5.0 version: 4.5.0 @@ -74,11 +74,14 @@ importers: specifier: ^5.4.3 version: 5.4.3 vite: - specifier: ^5.2.4 - version: 5.2.4(@types/node@20.9.1) + specifier: ^5.2.7 + version: 5.2.7(@types/node@20.9.1) docs: dependencies: + '@iconify/json': + specifier: ^2.2.196 + version: 2.2.196 '@vuepress/bundler-vite': specifier: 2.0.0-rc.9 version: 2.0.0-rc.9(@types/node@20.9.1)(typescript@5.4.3) @@ -202,6 +205,37 @@ importers: specifier: 2.0.0-rc.9 version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.3)(vue@3.4.21) + plugins/plugin-md-power: + dependencies: + '@iconify/utils': + specifier: ^2.1.22 + version: 2.1.22 + '@vueuse/core': + specifier: ^10.9.0 + version: 10.9.0(vue@3.4.21) + local-pkg: + specifier: ^0.5.0 + version: 0.5.0 + markdown-it-container: + specifier: ^4.0.0 + version: 4.0.0 + nanoid: + specifier: ^5.0.6 + version: 5.0.6 + vue: + specifier: ^3.4.21 + version: 3.4.21(typescript@5.4.3) + vuepress: + specifier: 2.0.0-rc.9 + version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.3)(vue@3.4.21) + devDependencies: + '@iconify/json': + specifier: ^2.2.196 + version: 2.2.196 + '@types/markdown-it': + specifier: ^13.0.7 + version: 13.0.7 + plugins/plugin-netlify-functions: dependencies: '@iarna/toml': @@ -229,8 +263,8 @@ importers: specifier: ^8.0.1 version: 8.0.1 netlify-cli: - specifier: ^17.20.1 - version: 17.20.1(@types/node@20.11.30) + specifier: ^17.21.1 + version: 17.21.1(@types/node@20.12.2) portfinder: specifier: ^1.0.32 version: 1.0.32 @@ -239,8 +273,8 @@ importers: version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.3)(vue@3.4.21) devDependencies: '@types/node': - specifier: ^20.11.30 - version: 20.11.30 + specifier: ^20.12.2 + version: 20.12.2 plugins/plugin-notes-data: dependencies: @@ -296,11 +330,11 @@ importers: plugins/plugin-shikiji: dependencies: '@shikijs/transformers': - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.2 + version: 1.2.2 '@shikijs/twoslash': - specifier: ^1.2.0 - version: 1.2.0(typescript@5.4.3) + specifier: ^1.2.2 + version: 1.2.2(typescript@5.4.3) '@types/hast': specifier: ^3.0.4 version: 3.0.4 @@ -320,8 +354,8 @@ importers: specifier: ^5.0.6 version: 5.0.6 shiki: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.2 + version: 1.2.2 twoslash: specifier: ^0.2.5 version: 0.2.5(typescript@5.4.3) @@ -346,9 +380,6 @@ importers: '@vuepress-plume/plugin-blog-data': specifier: workspace:* version: link:../plugins/plugin-blog-data - '@vuepress-plume/plugin-caniuse': - specifier: workspace:* - version: link:../plugins/plugin-caniuse '@vuepress-plume/plugin-content-update': specifier: workspace:* version: link:../plugins/plugin-content-update @@ -419,8 +450,8 @@ importers: specifier: ^3.6.0 version: 3.6.0 katex: - specifier: ^0.16.9 - version: 0.16.9 + specifier: ^0.16.10 + version: 0.16.10 lodash.merge: specifier: ^4.6.2 version: 4.6.2 @@ -438,7 +469,10 @@ importers: version: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.3)(vue@3.4.21) vuepress-plugin-md-enhance: specifier: 2.0.0-rc.32 - version: 2.0.0-rc.32(katex@0.16.9)(markdown-it@14.1.0)(typescript@5.4.3)(vuepress@2.0.0-rc.9) + version: 2.0.0-rc.32(katex@0.16.10)(markdown-it@14.1.0)(typescript@5.4.3)(vuepress@2.0.0-rc.9) + vuepress-plugin-md-power: + specifier: workspace:* + version: link:../plugins/plugin-md-power packages: @@ -586,6 +620,17 @@ packages: engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} dev: true + /@antfu/install-pkg@0.1.1: + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: false + + /@antfu/utils@0.7.7: + resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} + dev: false + /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} @@ -861,11 +906,25 @@ packages: '@csstools/css-tokenizer': 2.2.3 dev: true + /@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.4 + dependencies: + '@csstools/css-tokenizer': 2.2.4 + dev: true + /@csstools/css-tokenizer@2.2.3: resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} engines: {node: ^14 || ^16 || >=18} dev: true + /@csstools/css-tokenizer@2.2.4: + resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==} + engines: {node: ^14 || ^16 || >=18} + dev: true + /@csstools/media-query-list-parser@2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): resolution: {integrity: sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==} engines: {node: ^14 || ^16 || >=18} @@ -877,13 +936,24 @@ packages: '@csstools/css-tokenizer': 2.2.3 dev: true - /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): - resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} + /@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 + dependencies: + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + dev: true + + /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 dependencies: - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true /@dabh/diagnostics@2.0.3: @@ -945,6 +1015,10 @@ packages: - '@algolia/client-search' dev: false + /@dual-bundle/import-meta-resolve@4.0.0: + resolution: {integrity: sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==} + dev: true + /@es-joy/jsdoccomment@0.42.0: resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==} engines: {node: '>=16'} @@ -1705,8 +1779,27 @@ packages: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: false + /@iconify/json@2.2.196: + resolution: {integrity: sha512-hRZ0pq77N+mkAbZvFi/pfsKcspA8PyGSASc6zQoq6n/RSLxb8xAgORatVHyDl0ow7shcS+dvyiZI8xmr6yI2WA==} + dependencies: + '@iconify/types': 2.0.0 + pathe: 1.1.2 + /@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==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.7 + '@iconify/types': 2.0.0 + debug: 4.3.4(supports-color@9.2.2) + kolorist: 1.8.0 + local-pkg: 0.5.0 + mlly: 1.6.1 + transitivePeerDependencies: + - supports-color dev: false /@iconify/vue@4.1.1(vue@3.4.21): @@ -1743,7 +1836,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.11.30 + '@types/node': 20.12.2 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: false @@ -2011,7 +2104,7 @@ packages: upath: 2.0.1 dev: false - /@mdit/plugin-katex@0.8.0(katex@0.16.9)(markdown-it@14.1.0): + /@mdit/plugin-katex@0.8.0(katex@0.16.10)(markdown-it@14.1.0): resolution: {integrity: sha512-u7CX3Xv5nuc2bu2sHrk1nil83/9ETKTBMmy0icbW8zlqBC0ykLo1xTCEBXmdhXtnJtPi9f/wUZVs6iMZrJzbNg==} engines: {node: '>= 18'} peerDependencies: @@ -2026,7 +2119,7 @@ packages: '@mdit/plugin-tex': 0.8.0(markdown-it@14.1.0) '@types/katex': 0.16.7 '@types/markdown-it': 13.0.7 - katex: 0.16.9 + katex: 0.16.10 markdown-it: 14.1.0 dev: false @@ -2165,8 +2258,8 @@ packages: engines: {node: ^14.16.0 || >=16.0.0} dev: false - /@netlify/build-info@7.13.0: - resolution: {integrity: sha512-rVwq9HGp72mLjSzmyHXMwmKBtArbZYdvLMnqIdiTOVJDOC7nL8mce1JQhHC4DI0dNe/3k3xfzceeKPeeNY993A==} + /@netlify/build-info@7.13.2: + resolution: {integrity: sha512-smzhIgcms6Z/v2cct90l8ncBbnA5kvknj5/quhwyM6UHUycgMKFlA22qkB0KLj9shwL1Lkh7iQW751JwhSaP9g==} engines: {node: ^14.16.0 || >=16.0.0} hasBin: true dependencies: @@ -2181,12 +2274,13 @@ packages: yargs: 17.7.2 dev: false - /@netlify/build@29.36.3(@types/node@20.11.30): - resolution: {integrity: sha512-WLJB98MVt1jfHuUZq3dg2RvqbThTtbrs/0zOyjFq0b3TVMic7CyOnVfDOz78pfwLwbojZM0PW+AVBh5hHkRJVA==} + /@netlify/build@29.36.6(@opentelemetry/api@1.8.0)(@types/node@20.12.2): + resolution: {integrity: sha512-crNoY5Vr7tAodBfYdz8weM+NTw5q6W6ArkowNw6QhKXa4iRXT5MY6H0c2ztsge9o5gAYs55bDhBpKiPcZlzDlA==} engines: {node: ^14.16.0 || >=16.0.0} hasBin: true peerDependencies: - '@netlify/opentelemetry-sdk-setup': ^1.0.4 + '@netlify/opentelemetry-sdk-setup': ^1.0.5 + '@opentelemetry/api': ^1.7.0 peerDependenciesMeta: '@netlify/opentelemetry-sdk-setup': optional: true @@ -2196,16 +2290,16 @@ packages: '@netlify/cache-utils': 5.1.5 '@netlify/config': 20.12.1 '@netlify/edge-bundler': 11.3.0(supports-color@9.2.2) - '@netlify/framework-info': 9.8.10 + '@netlify/framework-info': 9.8.11 '@netlify/functions-utils': 5.2.51(supports-color@9.2.2) '@netlify/git-utils': 5.1.1 - '@netlify/opentelemetry-utils': 1.0.2 + '@netlify/opentelemetry-utils': 1.1.0(@opentelemetry/api@1.8.0) '@netlify/plugins-list': 6.75.0 '@netlify/run-utils': 5.1.1 '@netlify/zip-it-and-ship-it': 9.29.2(supports-color@9.2.2) - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 '@sindresorhus/slugify': 2.1.0 - ansi-escapes: 6.2.0 + ansi-escapes: 6.2.1 chalk: 5.3.0 clean-stack: 4.2.0 execa: 6.1.0 @@ -2245,7 +2339,7 @@ packages: strip-ansi: 7.1.0 supports-color: 9.2.2 terminal-link: 3.0.0 - ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.3) + ts-node: 10.9.2(@types/node@20.12.2)(typescript@5.4.3) typescript: 5.4.3 uuid: 9.0.0 yargs: 17.7.2 @@ -2334,8 +2428,8 @@ packages: - supports-color dev: false - /@netlify/framework-info@9.8.10: - resolution: {integrity: sha512-VT8ejAaB/XU2xRpdpQinHUO1YL3+BMx6LJ49wJk2u9Yq/VI1/gYCi5VqbqTHBQXJUlOi84YuiRlrDBsLpPr8eg==} + /@netlify/framework-info@9.8.11: + resolution: {integrity: sha512-8NuvzQQVeU36PRilWqijiIWmjy6JZcqbKooGQ4bNgH/26YNdS+tN5gOWGWVYnRHgdmBUCycyYrM5h1Srwnq3hQ==} engines: {node: ^14.14.0 || >=16.0.0} dependencies: ajv: 8.12.0 @@ -2515,11 +2609,13 @@ packages: engines: {node: '>=14'} dev: false - /@netlify/opentelemetry-utils@1.0.2: - resolution: {integrity: sha512-GeY5z/Af7q7DMSmJbJtrtKQaHCsw/XPdJwnryv/CqRpvg7z6rpGVH6V1UTck1Fe8BVQuB20mrb6qr4MZsAAiyg==} + /@netlify/opentelemetry-utils@1.1.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-VpjyInWRdreD0lPqTmWlxROfjF5mFHo99y9r21v/TvRmPniUbvEeFrtPgbA1VsiXt0YcHXZ9jUi/PrsLjQ5vPg==} engines: {node: '>=18.0.0'} + peerDependencies: + '@opentelemetry/api': ~1.8.0 dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 dev: false /@netlify/plugins-list@6.75.0: @@ -2777,8 +2873,8 @@ packages: '@octokit/openapi-types': 17.2.0 dev: false - /@opentelemetry/api@1.7.0: - resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} + /@opentelemetry/api@1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} dev: false @@ -3012,25 +3108,25 @@ packages: - vue-eslint-parser dev: true - /@pengzhanbo/stylelint-config@1.7.0(stylelint@16.2.1): + /@pengzhanbo/stylelint-config@1.7.0(stylelint@16.3.1): resolution: {integrity: sha512-r31R+k7cTAKBoVzeGDAR5nnyIh4VId6zFnzobyoJS/z40o9v6sFNT7OYHFR9APXJwx4rV2L33t0LPCxlaoupEw==} peerDependencies: stylelint: '>=16.0.0' dependencies: '@pengzhanbo/utils': 1.1.2 - '@stylelint-types/stylelint-order': 6.0.4(stylelint-define-config@1.2.0)(stylelint@16.2.1) - '@stylelint-types/stylelint-scss': 6.1.0(stylelint-define-config@1.2.0)(stylelint@16.2.1) - '@stylelint-types/stylelint-stylistic': 2.1.0(stylelint-define-config@1.2.0)(stylelint@16.2.1) - '@stylistic/stylelint-plugin': 2.1.0(stylelint@16.2.1) + '@stylelint-types/stylelint-order': 6.0.4(stylelint-define-config@1.2.0)(stylelint@16.3.1) + '@stylelint-types/stylelint-scss': 6.1.0(stylelint-define-config@1.2.0)(stylelint@16.3.1) + '@stylelint-types/stylelint-stylistic': 2.1.0(stylelint-define-config@1.2.0)(stylelint@16.3.1) + '@stylistic/stylelint-plugin': 2.1.0(stylelint@16.3.1) local-pkg: 0.5.0 postcss: 8.4.35 postcss-html: 1.6.0 - stylelint: 16.2.1(typescript@5.4.3) - stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.2.1) - stylelint-config-standard: 36.0.0(stylelint@16.2.1) - stylelint-config-standard-scss: 13.0.0(postcss@8.4.35)(stylelint@16.2.1) - stylelint-define-config: 1.2.0(stylelint@16.2.1) - stylelint-order: 6.0.4(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.3.1) + stylelint-config-standard: 36.0.0(stylelint@16.3.1) + stylelint-config-standard-scss: 13.0.0(postcss@8.4.35)(stylelint@16.3.1) + stylelint-define-config: 1.2.0(stylelint@16.3.1) + stylelint-order: 6.0.4(stylelint@16.3.1) dev: true /@pengzhanbo/utils@1.1.2: @@ -3156,20 +3252,20 @@ packages: requiresBuild: true optional: true - /@shikijs/core@1.2.0: - resolution: {integrity: sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==} + /@shikijs/core@1.2.2: + resolution: {integrity: sha512-GXbTyNP6HlxpyWMR4eirW54Cxp84nVuivcV5hGVBgKnIl+UmD4AJgCX1uXuNRcFFAw58lB3HqryuezIc0iCLgw==} dev: false - /@shikijs/transformers@1.2.0: - resolution: {integrity: sha512-xKn7DtA65DQV4FOfYsrvqM80xOy2xuXnxWWKsZmHv1VII/IOuDUDsWDu3KnpeLH6wqNJWp1GRoNUsHR1aw/VhQ==} + /@shikijs/transformers@1.2.2: + resolution: {integrity: sha512-GL03TlMh9oBeBLU5pcYBKpZnZZVdXSJ4ec7EQ/uw9+NrVaHs6qTjVN8F/0mvKd+sXLbBga8XZWDdob5F5tx5lw==} dependencies: - shiki: 1.2.0 + shiki: 1.2.2 dev: false - /@shikijs/twoslash@1.2.0(typescript@5.4.3): - resolution: {integrity: sha512-rVIpuL40tXG5hItVf+4aYTEEwQO6R5pvzqMZa5r6bLMpHK720Op25e/BnCohNIdsUOEaFH9xqRSJo8ubjCiM1w==} + /@shikijs/twoslash@1.2.2(typescript@5.4.3): + resolution: {integrity: sha512-jeKlFxejIj1f8SKNCHqWUyjSmfqsO91iCdiD2aG2fZk49JhesXBwqzEsCoB6DxSnVSNredjYbcnDKzTAjmySmQ==} dependencies: - '@shikijs/core': 1.2.0 + '@shikijs/core': 1.2.2 twoslash: 0.2.5(typescript@5.4.3) transitivePeerDependencies: - supports-color @@ -3202,7 +3298,7 @@ packages: lodash.deburr: 4.1.0 dev: false - /@stylelint-types/stylelint-order@6.0.4(stylelint-define-config@1.2.0)(stylelint@16.2.1): + /@stylelint-types/stylelint-order@6.0.4(stylelint-define-config@1.2.0)(stylelint@16.3.1): resolution: {integrity: sha512-KiwDbjvlFYQm9O1onomzZRLaEZjWZusnXvnEDwFGwN4fs2sq7MwbL6VAVt3UtmsAVt0R20xKEGKbxk0ojzdMmA==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} peerDependencies: @@ -3212,11 +3308,11 @@ packages: stylelint: optional: true dependencies: - stylelint: 16.2.1(typescript@5.4.3) - stylelint-define-config: 1.2.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-define-config: 1.2.0(stylelint@16.3.1) dev: true - /@stylelint-types/stylelint-scss@6.1.0(stylelint-define-config@1.2.0)(stylelint@16.2.1): + /@stylelint-types/stylelint-scss@6.1.0(stylelint-define-config@1.2.0)(stylelint@16.3.1): resolution: {integrity: sha512-wHNxvoh7nqJOdQpjnq05karRvtaYEm+FKVkBLO1VmOORPwZLWCzXNz0D9COU9sLhMtY3cEbqKiuOWjxYzFTRBw==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} peerDependencies: @@ -3226,11 +3322,11 @@ packages: stylelint: optional: true dependencies: - stylelint: 16.2.1(typescript@5.4.3) - stylelint-define-config: 1.2.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-define-config: 1.2.0(stylelint@16.3.1) dev: true - /@stylelint-types/stylelint-stylistic@2.1.0(stylelint-define-config@1.2.0)(stylelint@16.2.1): + /@stylelint-types/stylelint-stylistic@2.1.0(stylelint-define-config@1.2.0)(stylelint@16.3.1): resolution: {integrity: sha512-qCuTESf5N2u6PwPzTVk1SEn63FOeyDJj8a9Ft1t1ojaDzFMOXjjbfL/E1UPUnwJpHdVR/hrU2yhX5i4BSx/8fw==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} peerDependencies: @@ -3240,8 +3336,8 @@ packages: stylelint: optional: true dependencies: - stylelint: 16.2.1(typescript@5.4.3) - stylelint-define-config: 1.2.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-define-config: 1.2.0(stylelint@16.3.1) dev: true /@stylistic/eslint-plugin-js@1.7.0(eslint@8.57.0): @@ -3316,7 +3412,7 @@ packages: - typescript dev: true - /@stylistic/stylelint-plugin@2.1.0(stylelint@16.2.1): + /@stylistic/stylelint-plugin@2.1.0(stylelint@16.3.1): resolution: {integrity: sha512-mUZEW9uImHSbXeyzbFmHb8WPBv56UTaEnWL/3dGdAiJ54C+8GTfDwDVdI6gbqT9wV7zynkPu7tCXc5746H9mZQ==} engines: {node: ^18.12 || >=20.9} peerDependencies: @@ -3329,7 +3425,7 @@ packages: postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 style-search: 0.1.0 - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true /@szmarczak/http-timer@5.0.1: @@ -3368,19 +3464,19 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: true /@types/conventional-commits-parser@5.0.0: resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: true /@types/d3-scale-chromatic@3.0.3: @@ -3416,7 +3512,7 @@ packages: /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -3435,7 +3531,7 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: false /@types/hash-sum@1.0.2: @@ -3459,7 +3555,7 @@ packages: /@types/http-proxy@1.17.9: resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: false /@types/istanbul-lib-coverage@2.0.4: @@ -3485,7 +3581,7 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: false /@types/katex@0.16.7: @@ -3551,8 +3647,8 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false - /@types/node@20.11.30: - resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + /@types/node@20.12.2: + resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==} dependencies: undici-types: 5.26.5 @@ -3587,7 +3683,7 @@ packages: /@types/sax@1.2.4: resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: false /@types/semver@7.5.0: @@ -3598,7 +3694,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: true /@types/serve-static@1.15.5: @@ -3606,7 +3702,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: true /@types/trusted-types@2.0.2: @@ -3642,7 +3738,7 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.2 dev: false optional: true @@ -3958,7 +4054,7 @@ packages: '@vue/shared': 3.4.21 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 /@vue/compiler-dom@3.4.21: resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} @@ -3976,8 +4072,8 @@ packages: '@vue/shared': 3.4.21 estree-walker: 2.0.2 magic-string: 0.30.7 - postcss: 8.4.35 - source-map-js: 1.0.2 + postcss: 8.4.38 + source-map-js: 1.2.0 /@vue/compiler-ssr@3.4.21: resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} @@ -4691,6 +4787,12 @@ packages: engines: {node: '>=14.16'} dependencies: type-fest: 3.8.0 + dev: true + + /ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + dev: false /ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} @@ -6389,7 +6491,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: mdn-data: 2.0.30 - source-map-js: 1.0.2 + source-map-js: 1.2.0 /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} @@ -8360,7 +8462,6 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true /find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} @@ -8589,10 +8690,6 @@ packages: requiresBuild: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false - /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -9103,7 +9200,7 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 dev: false /hasbin@1.2.3: @@ -9339,6 +9436,11 @@ packages: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + /image-meta@0.2.0: resolution: {integrity: sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg==} dev: false @@ -10075,6 +10177,13 @@ packages: resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} dev: false + /katex@0.16.10: + resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + /katex@0.16.9: resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} hasBin: true @@ -10134,6 +10243,14 @@ packages: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} dev: true + /known-css-properties@0.30.0: + resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} + dev: true + + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: false + /kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: false @@ -10320,7 +10437,6 @@ packages: dependencies: mlly: 1.6.1 pkg-types: 1.0.3 - dev: true /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} @@ -10341,7 +10457,6 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true /locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} @@ -10889,8 +11004,8 @@ packages: engines: {node: '>=16.10'} dev: true - /meow@13.1.0: - resolution: {integrity: sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==} + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} dev: true @@ -11498,7 +11613,7 @@ packages: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: acorn: 8.10.0 - pathe: 1.1.1 + pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.3.1 @@ -11634,8 +11749,8 @@ packages: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} dev: false - /netlify-cli@17.20.1(@types/node@20.11.30): - resolution: {integrity: sha512-Hj71m61PGteCk27t8y3O0y8JqFmMuPCitbVfDK1V/Ro+U6zUDsVQUFO3v4sEeoB8s/QOLhXZn/2NHu/sBUlDNQ==} + /netlify-cli@17.21.1(@types/node@20.12.2): + resolution: {integrity: sha512-B8QveV55h2dFCTnk5LInVW1MiXPINTQ61IkEtih15CVYpvVSQy+he8M6hdpucq83VqaF/phaJkb3Si2ligOxxw==} engines: {node: '>=18.14.0'} hasBin: true requiresBuild: true @@ -11643,14 +11758,15 @@ packages: '@bugsnag/js': 7.20.2 '@fastify/static': 6.10.2 '@netlify/blobs': 7.0.1 - '@netlify/build': 29.36.3(@types/node@20.11.30) - '@netlify/build-info': 7.13.0 + '@netlify/build': 29.36.6(@opentelemetry/api@1.8.0)(@types/node@20.12.2) + '@netlify/build-info': 7.13.2 '@netlify/config': 20.12.1 '@netlify/edge-bundler': 11.3.0(supports-color@9.2.2) '@netlify/local-functions-proxy': 1.1.1 '@netlify/zip-it-and-ship-it': 9.30.0 '@octokit/rest': 19.0.13 - ansi-escapes: 6.2.0 + '@opentelemetry/api': 1.8.0 + ansi-escapes: 6.2.1 ansi-styles: 6.2.1 ansi-to-html: 0.7.2 ascii-table: 0.0.9 @@ -12278,7 +12394,6 @@ packages: engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true /p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} @@ -12689,13 +12804,13 @@ packages: postcss: 8.4.35 dev: true - /postcss-safe-parser@7.0.0(postcss@8.4.33): + /postcss-safe-parser@7.0.0(postcss@8.4.38): resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} engines: {node: '>=18.0'} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.33 + postcss: 8.4.38 dev: true /postcss-scss@4.0.9(postcss@8.4.35): @@ -12715,6 +12830,14 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-sorting@8.0.2(postcss@8.4.35): resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} peerDependencies: @@ -12738,15 +12861,6 @@ packages: quote-unquote: 1.0.0 dev: false - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} @@ -12754,6 +12868,7 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} @@ -13632,10 +13747,10 @@ packages: /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - /shiki@1.2.0: - resolution: {integrity: sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==} + /shiki@1.2.2: + resolution: {integrity: sha512-nqazfFgrU+DBLqk4+WjmGQz8sVWkcUcGriHqSM2zGk0GhjirVz4FyJ3AABEx91OpjGiKpuKBg2diYfRfQG3Fbg==} dependencies: - '@shikijs/core': 1.2.0 + '@shikijs/core': 1.2.2 dev: false /side-channel@1.0.4: @@ -13778,6 +13893,7 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} @@ -14077,7 +14193,7 @@ packages: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} dev: true - /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.2.1): + /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.3.1): resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} engines: {node: ^12 || >=14} peerDependencies: @@ -14085,10 +14201,10 @@ packages: stylelint: '>=14.0.0' dependencies: postcss-html: 1.6.0 - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true - /stylelint-config-recommended-scss@14.0.0(postcss@8.4.35)(stylelint@16.2.1): + /stylelint-config-recommended-scss@14.0.0(postcss@8.4.35)(stylelint@16.3.1): resolution: {integrity: sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==} engines: {node: '>=18.12.0'} peerDependencies: @@ -14100,21 +14216,21 @@ packages: dependencies: postcss: 8.4.35 postcss-scss: 4.0.9(postcss@8.4.35) - stylelint: 16.2.1(typescript@5.4.3) - stylelint-config-recommended: 14.0.0(stylelint@16.2.1) - stylelint-scss: 6.0.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-config-recommended: 14.0.0(stylelint@16.3.1) + stylelint-scss: 6.0.0(stylelint@16.3.1) dev: true - /stylelint-config-recommended@14.0.0(stylelint@16.2.1): + /stylelint-config-recommended@14.0.0(stylelint@16.3.1): resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.0.0 dependencies: - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true - /stylelint-config-standard-scss@13.0.0(postcss@8.4.35)(stylelint@16.2.1): + /stylelint-config-standard-scss@13.0.0(postcss@8.4.35)(stylelint@16.3.1): resolution: {integrity: sha512-WaLvkP689qSYUpJQPCo30TFJSSc3VzvvoWnrgp+7PpVby5o8fRUY1cZcP0sePZfjrFl9T8caGhcKg0GO34VDiQ==} engines: {node: '>=18.12.0'} peerDependencies: @@ -14125,42 +14241,42 @@ packages: optional: true dependencies: postcss: 8.4.35 - stylelint: 16.2.1(typescript@5.4.3) - stylelint-config-recommended-scss: 14.0.0(postcss@8.4.35)(stylelint@16.2.1) - stylelint-config-standard: 36.0.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-config-recommended-scss: 14.0.0(postcss@8.4.35)(stylelint@16.3.1) + stylelint-config-standard: 36.0.0(stylelint@16.3.1) dev: true - /stylelint-config-standard@36.0.0(stylelint@16.2.1): + /stylelint-config-standard@36.0.0(stylelint@16.3.1): resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.1.0 dependencies: - stylelint: 16.2.1(typescript@5.4.3) - stylelint-config-recommended: 14.0.0(stylelint@16.2.1) + stylelint: 16.3.1(typescript@5.4.3) + stylelint-config-recommended: 14.0.0(stylelint@16.3.1) dev: true - /stylelint-define-config@1.2.0(stylelint@16.2.1): + /stylelint-define-config@1.2.0(stylelint@16.3.1): resolution: {integrity: sha512-/Ful3xCnFaE3jCiWPRcyVHaT0Cpxe7IK/owtosfMs+EqjPqEt/EkCfB1jeMhotrndL/H6mISvArd82cFQZdEGQ==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} peerDependencies: stylelint: '>=16.0.0' dependencies: csstype: 3.1.3 - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true - /stylelint-order@6.0.4(stylelint@16.2.1): + /stylelint-order@6.0.4(stylelint@16.3.1): resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 dependencies: postcss: 8.4.35 postcss-sorting: 8.0.2(postcss@8.4.35) - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true - /stylelint-scss@6.0.0(stylelint@16.2.1): + /stylelint-scss@6.0.0(stylelint@16.3.1): resolution: {integrity: sha512-N1xV/Ef5PNRQQt9E45unzGvBUN1KZxCI8B4FgN/pMfmyRYbZGVN4y9qWlvOMdScU17c8VVCnjIHTVn38Bb6qSA==} engines: {node: '>=18.12.0'} peerDependencies: @@ -14171,18 +14287,19 @@ packages: postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 - stylelint: 16.2.1(typescript@5.4.3) + stylelint: 16.3.1(typescript@5.4.3) dev: true - /stylelint@16.2.1(typescript@5.4.3): - resolution: {integrity: sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==} + /stylelint@16.3.1(typescript@5.4.3): + resolution: {integrity: sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==} engines: {node: '>=18.12.0'} hasBin: true dependencies: - '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.16) + '@dual-bundle/import-meta-resolve': 4.0.0 balanced-match: 2.0.0 colord: 2.9.3 cosmiconfig: 9.0.0(typescript@5.4.3) @@ -14196,19 +14313,19 @@ packages: globby: 11.1.0 globjoin: 0.1.4 html-tags: 3.3.1 - ignore: 5.3.0 + ignore: 5.3.1 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.29.0 + known-css-properties: 0.30.0 mathml-tag-names: 2.1.3 - meow: 13.1.0 + meow: 13.2.0 micromatch: 4.0.5 normalize-path: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.33 + postcss: 8.4.38 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 7.0.0(postcss@8.4.33) - postcss-selector-parser: 6.0.15 + postcss-safe-parser: 7.0.0(postcss@8.4.38) + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 @@ -14620,7 +14737,7 @@ packages: engines: {node: '>=6.10'} dev: false - /ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.3): + /ts-node@10.9.2(@types/node@20.12.2)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -14639,7 +14756,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.11.30 + '@types/node': 20.12.2 acorn: 8.11.3 acorn-walk: 8.2.0 arg: 4.1.3 @@ -14769,6 +14886,7 @@ packages: /type-fest@3.8.0: resolution: {integrity: sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==} engines: {node: '>=14.16'} + dev: true /type-fest@4.12.0: resolution: {integrity: sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ==} @@ -15209,8 +15327,8 @@ packages: fsevents: 2.3.3 dev: false - /vite@5.2.4(@types/node@20.9.1): - resolution: {integrity: sha512-vjFghvHWidBTinu5TCymJk/lRHlR5ljqB83yugr0HA1xspUPdOZHqbqDLnZ8f9/jINrtFHTCYYyIUi+o+Q5iyg==} + /vite@5.2.7(@types/node@20.9.1): + resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -15318,7 +15436,7 @@ packages: typescript: 5.4.3 dev: false - /vuepress-plugin-md-enhance@2.0.0-rc.32(katex@0.16.9)(markdown-it@14.1.0)(typescript@5.4.3)(vuepress@2.0.0-rc.9): + /vuepress-plugin-md-enhance@2.0.0-rc.32(katex@0.16.10)(markdown-it@14.1.0)(typescript@5.4.3)(vuepress@2.0.0-rc.9): resolution: {integrity: sha512-zZK8aEfbq26J5w8o9xGWXCHHrL3PYk25tloTPcx96nZWYPeD+5fMFAtVpHte0rXBWUf0MBtDQxddSeATteBE7Q==} engines: {node: '>=18.16.0', npm: '>=8', pnpm: '>=7', yarn: '>=2'} peerDependencies: @@ -15381,7 +15499,7 @@ packages: '@mdit/plugin-img-mark': 0.8.0(markdown-it@14.1.0) '@mdit/plugin-img-size': 0.8.0(markdown-it@14.1.0) '@mdit/plugin-include': 0.8.0(markdown-it@14.1.0) - '@mdit/plugin-katex': 0.8.0(katex@0.16.9)(markdown-it@14.1.0) + '@mdit/plugin-katex': 0.8.0(katex@0.16.10)(markdown-it@14.1.0) '@mdit/plugin-mark': 0.8.0(markdown-it@14.1.0) '@mdit/plugin-mathjax': 0.8.0(markdown-it@14.1.0) '@mdit/plugin-stylize': 0.8.0(markdown-it@14.1.0) @@ -15396,7 +15514,7 @@ packages: '@vueuse/core': 10.9.0(vue@3.4.21) balloon-css: 1.2.0 js-yaml: 4.1.0 - katex: 0.16.9 + katex: 0.16.10 vue: 3.4.21(typescript@5.4.3) vuepress: 2.0.0-rc.9(@vuepress/bundler-vite@2.0.0-rc.9)(typescript@5.4.3)(vue@3.4.21) vuepress-plugin-sass-palette: 2.0.0-rc.32(typescript@5.4.3)(vuepress@2.0.0-rc.9) diff --git a/theme/package.json b/theme/package.json index 3ce436d9..96157062 100644 --- a/theme/package.json +++ b/theme/package.json @@ -59,7 +59,6 @@ "@vuepress-plume/plugin-auto-frontmatter": "workspace:*", "@vuepress-plume/plugin-baidu-tongji": "workspace:*", "@vuepress-plume/plugin-blog-data": "workspace:*", - "@vuepress-plume/plugin-caniuse": "workspace:*", "@vuepress-plume/plugin-content-update": "workspace:*", "@vuepress-plume/plugin-copy-code": "workspace:*", "@vuepress-plume/plugin-iconify": "workspace:*", @@ -83,11 +82,12 @@ "@vueuse/core": "^10.9.0", "bcrypt-ts": "^5.0.2", "date-fns": "^3.6.0", - "katex": "^0.16.9", + "katex": "^0.16.10", "lodash.merge": "^4.6.2", "nanoid": "^5.0.6", "vue": "^3.4.21", "vue-router": "4.3.0", - "vuepress-plugin-md-enhance": "2.0.0-rc.32" + "vuepress-plugin-md-enhance": "2.0.0-rc.32", + "vuepress-plugin-md-power": "workspace:*" } } diff --git a/theme/src/client/components/Page.vue b/theme/src/client/components/Page.vue index 4332b59d..83ad2320 100644 --- a/theme/src/client/components/Page.vue +++ b/theme/src/client/components/Page.vue @@ -193,7 +193,7 @@ onContentUpdated(() => zoom?.refresh()) @media (min-width: 1440px) { .plume-page:not(.has-sidebar) .content { - max-width: 784px; + max-width: 884px; } .plume-page:not(.has-sidebar) .container { diff --git a/theme/src/client/composables/darkMode.ts b/theme/src/client/composables/darkMode.ts index c0a7e153..fd3e37f9 100644 --- a/theme/src/client/composables/darkMode.ts +++ b/theme/src/client/composables/darkMode.ts @@ -1,5 +1,5 @@ -import { inject, onMounted, provide, ref } from 'vue' -import type { InjectionKey, Ref } from 'vue' +import { inject, onMounted, ref } from 'vue' +import type { App, InjectionKey, Ref } from 'vue' export type DarkModeRef = Ref @@ -22,10 +22,18 @@ export function useDarkMode(): DarkModeRef { * Create dark mode ref and provide as global computed in setup */ export function setupDarkMode(): void { - const isDark = ref (false) + const isDark = useDarkMode() onMounted(() => { if (document.documentElement.classList.contains('dark')) isDark.value = true }) - provide(darkModeSymbol, isDark) +} + +export function injectDarkMode(app: App): void { + const isDark = ref (false) + app.provide(darkModeSymbol, isDark) + + Object.defineProperty(app.config.globalProperties, '$isDark', { + get: () => isDark, + }) } diff --git a/theme/src/client/composables/page.ts b/theme/src/client/composables/page.ts index e1a1fbb2..249dde84 100644 --- a/theme/src/client/composables/page.ts +++ b/theme/src/client/composables/page.ts @@ -60,8 +60,8 @@ export function useLastUpdated() { const frontmatter = usePageFrontmatter () const lang = usePageLang() - const date = computed(() => new Date(page.value.git?.updatedTime ?? '')) - const isoDatetime = computed(() => date.value.toISOString()) + const date = computed(() => page.value.git?.updatedTime ? new Date(page.value.git.updatedTime) : null) + const isoDatetime = computed(() => date.value?.toISOString()) const datetime = ref('') @@ -76,13 +76,15 @@ export function useLastUpdated() { if (frontmatter.value.lastUpdated === false || theme.value.lastUpdated === false) return - datetime.value = new Intl.DateTimeFormat( - theme.value.lastUpdated?.formatOptions?.forceLocale ? lang.value : undefined, - theme.value.lastUpdated?.formatOptions ?? { - dateStyle: 'short', - timeStyle: 'short', - }, - ).format(date.value) + datetime.value = date.value + ? new Intl.DateTimeFormat( + theme.value.lastUpdated?.formatOptions?.forceLocale ? lang.value : undefined, + theme.value.lastUpdated?.formatOptions ?? { + dateStyle: 'short', + timeStyle: 'short', + }, + ).format(date.value) + : '' }) }) diff --git a/theme/src/client/config.ts b/theme/src/client/config.ts index b2cf7e55..a14301ea 100644 --- a/theme/src/client/config.ts +++ b/theme/src/client/config.ts @@ -5,13 +5,15 @@ import type { ClientConfig } from 'vuepress/client' import { h } from 'vue' import Badge from './components/global/Badge.vue' import ExternalLinkIcon from './components/global/ExternalLinkIcon.vue' -import { setupDarkMode, useScrollPromise } from './composables/index.js' +import { injectDarkMode, setupDarkMode, useScrollPromise } from './composables/index.js' import Layout from './layouts/Layout.vue' import NotFound from './layouts/NotFound.vue' import HomeBox from './components/Home/HomeBox.vue' export default defineClientConfig({ enhance({ app, router }) { + injectDarkMode(app) + // global component app.component('Badge', Badge) diff --git a/theme/src/client/utils/color.ts b/theme/src/client/utils/color.ts deleted file mode 100644 index 0bf7541c..00000000 --- a/theme/src/client/utils/color.ts +++ /dev/null @@ -1,17 +0,0 @@ -const colorList = [ - 'var(--vp-c-brand-1)', - 'var(--vp-c-brand-2)', - 'var(--vp-c-green-1)', - 'var(--vp-c-green-2)', - 'var(--vp-c-green-3)', - 'var(--vp-c-yellow-1)', - 'var(--vp-c-yellow-2)', - 'var(--vp-c-yellow-3)', - 'var(--vp-c-red-1)', - 'var(--vp-c-red-2)', - 'var(--vp-c-red-3)', -] - -export function getRandomColor() { - return colorList[Math.floor(Math.random() * colorList.length)] -} diff --git a/theme/src/node/plugins.ts b/theme/src/node/plugins.ts index e4aec2fe..0df1e038 100644 --- a/theme/src/node/plugins.ts +++ b/theme/src/node/plugins.ts @@ -10,7 +10,6 @@ import { themeDataPlugin } from '@vuepress/plugin-theme-data' import { autoFrontmatterPlugin } from '@vuepress-plume/plugin-auto-frontmatter' import { baiduTongjiPlugin } from '@vuepress-plume/plugin-baidu-tongji' import { blogDataPlugin } from '@vuepress-plume/plugin-blog-data' -import { caniusePlugin } from '@vuepress-plume/plugin-caniuse' import { copyCodePlugin } from '@vuepress-plume/plugin-copy-code' import { iconifyPlugin } from '@vuepress-plume/plugin-iconify' import { notesDataPlugin } from '@vuepress-plume/plugin-notes-data' @@ -22,6 +21,7 @@ import { seoPlugin } from '@vuepress/plugin-seo' import { sitemapPlugin } from '@vuepress/plugin-sitemap' import { contentUpdatePlugin } from '@vuepress-plume/plugin-content-update' import { searchPlugin } from '@vuepress-plume/plugin-search' +import { markdownPowerPlugin } from 'vuepress-plugin-md-power' import type { PlumeThemeEncrypt, PlumeThemeLocaleOptions, @@ -139,9 +139,6 @@ export function setupPlugins( })) } - if (options.caniuse !== false) - plugins.push(caniusePlugin(options.caniuse || { mode: 'embed' })) - if (options.externalLinkIcon !== false) { plugins.push(externalLinkIconPlugin({ locales: Object.entries(localeOptions.locales || {}).reduce( @@ -205,6 +202,13 @@ export function setupPlugins( )) } + if (options.markdownPower !== false) { + plugins.push(markdownPowerPlugin({ + caniuse: options.caniuse, + ...options.markdownPower || {}, + })) + } + if (options.comment) plugins.push(commentPlugin(options.comment)) diff --git a/theme/src/shared/options/plugins.ts b/theme/src/shared/options/plugins.ts index 5b29ff22..33e5b9e6 100644 --- a/theme/src/shared/options/plugins.ts +++ b/theme/src/shared/options/plugins.ts @@ -2,18 +2,20 @@ import type { DocsearchOptions } from '@vuepress/plugin-docsearch' import type { SearchPluginOptions } from '@vuepress-plume/plugin-search' import type { AutoFrontmatterOptions } from '@vuepress-plume/plugin-auto-frontmatter' import type { BaiduTongjiOptions } from '@vuepress-plume/plugin-baidu-tongji' -import type { CanIUsePluginOptions } from '@vuepress-plume/plugin-caniuse' import type { CopyCodeOptions } from '@vuepress-plume/plugin-copy-code' import type { ShikiPluginOptions } from '@vuepress-plume/plugin-shikiji' import type { CommentPluginOptions } from '@vuepress/plugin-comment' import type { MarkdownEnhanceOptions } from 'vuepress-plugin-md-enhance' import type { ReadingTimePluginOptions } from '@vuepress/plugin-reading-time' +import type { MarkdownPowerPluginOptions } from 'vuepress-plugin-md-power' export interface PlumeThemePluginOptions { /** + * @deprecated 迁移至 `plugin-md-power` 插件 + * * 是否启用 can-i-use 插件 */ - caniuse?: false | CanIUsePluginOptions + caniuse?: false /** * 是否启用 external-link-icon 插件 @@ -54,6 +56,8 @@ export interface PlumeThemePluginOptions { markdownEnhance?: false | MarkdownEnhanceOptions + markdownPower?: false | MarkdownPowerPluginOptions + comment?: false | CommentPluginOptions sitemap?: false diff --git a/tsconfig.json b/tsconfig.json index 9fdaa2c3..fb4db8ed 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,9 @@ "@vuepress-plume/*/client": ["./plugins/*/src/client/index.ts"], "vuepress-plugin-netlify-functions": [ "./plugins/plugin-netlify-functions/src/node/index.ts" + ], + "vuepress-plugin-md-power": [ + "./plugins/plugin-md-power/src/node/index.ts" ] }, "types": ["webpack-env", "vite/client"]