@hejiayue/x-markdown-test 0.0.1-beta.151 → 0.0.1-beta.152
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +438 -1
- package/dist/types/config.d.ts +33 -0
- package/dist/types/hooks/useMermaid.d.ts +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/x-markdown.cjs.js +35 -1
- package/dist/x-markdown.cjs.js.map +1 -1
- package/dist/x-markdown.cjs10.js +52 -1
- package/dist/x-markdown.cjs10.js.map +1 -1
- package/dist/x-markdown.cjs11.js +57 -1
- package/dist/x-markdown.cjs11.js.map +1 -1
- package/dist/x-markdown.cjs12.js +18 -0
- package/dist/x-markdown.cjs12.js.map +1 -0
- package/dist/x-markdown.cjs14.js +92 -1
- package/dist/x-markdown.cjs14.js.map +1 -1
- package/dist/x-markdown.cjs15.js +36 -1
- package/dist/x-markdown.cjs15.js.map +1 -1
- package/dist/x-markdown.cjs16.js +9 -1
- package/dist/x-markdown.cjs16.js.map +1 -1
- package/dist/x-markdown.cjs17.js +10 -1
- package/dist/x-markdown.cjs17.js.map +1 -1
- package/dist/x-markdown.cjs18.js +11 -1
- package/dist/x-markdown.cjs18.js.map +1 -1
- package/dist/x-markdown.cjs19.js +11 -1
- package/dist/x-markdown.cjs19.js.map +1 -1
- package/dist/x-markdown.cjs2.js +86 -1
- package/dist/x-markdown.cjs2.js.map +1 -1
- package/dist/x-markdown.cjs20.js +211 -0
- package/dist/x-markdown.cjs20.js.map +1 -0
- package/dist/x-markdown.cjs22.js +13 -1
- package/dist/x-markdown.cjs22.js.map +1 -1
- package/dist/x-markdown.cjs23.js +79 -0
- package/dist/x-markdown.cjs23.js.map +1 -0
- package/dist/x-markdown.cjs25.js +409 -0
- package/dist/x-markdown.cjs25.js.map +1 -0
- package/dist/x-markdown.cjs27.js +199 -1
- package/dist/x-markdown.cjs27.js.map +1 -1
- package/dist/x-markdown.cjs28.js +135 -1
- package/dist/x-markdown.cjs28.js.map +1 -1
- package/dist/x-markdown.cjs3.js +97 -1
- package/dist/x-markdown.cjs3.js.map +1 -1
- package/dist/x-markdown.cjs30.js +11 -1
- package/dist/x-markdown.cjs30.js.map +1 -1
- package/dist/x-markdown.cjs31.js +122 -1
- package/dist/x-markdown.cjs31.js.map +1 -1
- package/dist/x-markdown.cjs32.js +11 -0
- package/dist/x-markdown.cjs32.js.map +1 -0
- package/dist/x-markdown.cjs33.js +128 -1
- package/dist/x-markdown.cjs33.js.map +1 -1
- package/dist/x-markdown.cjs4.js +153 -1
- package/dist/x-markdown.cjs4.js.map +1 -1
- package/dist/x-markdown.cjs5.js +43 -1
- package/dist/x-markdown.cjs5.js.map +1 -1
- package/dist/x-markdown.cjs6.js +27 -1
- package/dist/x-markdown.cjs6.js.map +1 -1
- package/dist/x-markdown.cjs7.js +310 -1
- package/dist/x-markdown.cjs7.js.map +1 -1
- package/dist/x-markdown.cjs8.js +30 -1
- package/dist/x-markdown.cjs8.js.map +1 -1
- package/dist/x-markdown.cjs9.js +435 -1
- package/dist/x-markdown.cjs9.js.map +1 -1
- package/dist/x-markdown.es.js +11 -28
- package/dist/x-markdown.es10.js +10 -10
- package/dist/x-markdown.es10.js.map +1 -1
- package/dist/x-markdown.es11.js +4 -5
- package/dist/x-markdown.es11.js.map +1 -1
- package/dist/x-markdown.es12.js +12 -0
- package/dist/x-markdown.es12.js.map +1 -0
- package/dist/x-markdown.es14.js +85 -29
- package/dist/x-markdown.es14.js.map +1 -1
- package/dist/x-markdown.es15.js +32 -4
- package/dist/x-markdown.es15.js.map +1 -1
- package/dist/x-markdown.es16.js +5 -5
- package/dist/x-markdown.es16.js.map +1 -1
- package/dist/x-markdown.es17.js +5 -6
- package/dist/x-markdown.es17.js.map +1 -1
- package/dist/x-markdown.es18.js +6 -6
- package/dist/x-markdown.es18.js.map +1 -1
- package/dist/x-markdown.es19.js +7 -206
- package/dist/x-markdown.es19.js.map +1 -1
- package/dist/x-markdown.es2.js +6 -7
- package/dist/x-markdown.es2.js.map +1 -1
- package/dist/x-markdown.es20.js +207 -0
- package/dist/x-markdown.es20.js.map +1 -0
- package/dist/x-markdown.es22.js +7 -72
- package/dist/x-markdown.es22.js.map +1 -1
- package/dist/x-markdown.es23.js +75 -0
- package/dist/x-markdown.es23.js.map +1 -0
- package/dist/{x-markdown.es24.js → x-markdown.es25.js} +12 -10
- package/dist/x-markdown.es25.js.map +1 -0
- package/dist/x-markdown.es27.js +182 -7
- package/dist/x-markdown.es27.js.map +1 -1
- package/dist/x-markdown.es28.js +7 -8
- package/dist/x-markdown.es28.js.map +1 -1
- package/dist/x-markdown.es3.js +7 -8
- package/dist/x-markdown.es3.js.map +1 -1
- package/dist/x-markdown.es30.js +7 -77
- package/dist/x-markdown.es30.js.map +1 -1
- package/dist/x-markdown.es31.js +112 -124
- package/dist/x-markdown.es31.js.map +1 -1
- package/dist/x-markdown.es32.js +7 -0
- package/dist/x-markdown.es32.js.map +1 -0
- package/dist/x-markdown.es33.js +124 -5
- package/dist/x-markdown.es33.js.map +1 -1
- package/dist/x-markdown.es4.js +5 -7
- package/dist/x-markdown.es4.js.map +1 -1
- package/dist/x-markdown.es5.js +9 -10
- package/dist/x-markdown.es5.js.map +1 -1
- package/dist/x-markdown.es6.js +5 -5
- package/dist/x-markdown.es6.js.map +1 -1
- package/dist/x-markdown.es7.js +61 -74
- package/dist/x-markdown.es7.js.map +1 -1
- package/dist/x-markdown.es8.js +4 -5
- package/dist/x-markdown.es8.js.map +1 -1
- package/dist/x-markdown.es9.js +22 -14
- package/dist/x-markdown.es9.js.map +1 -1
- package/package.json +3 -14
- package/dist/types/vite-plugin.d.ts +0 -29
- package/dist/vite-plugin.cjs +0 -128
- package/dist/vite-plugin.cjs.map +0 -1
- package/dist/vite-plugin.js +0 -128
- package/dist/vite-plugin.js.map +0 -1
- package/dist/x-markdown.cjs13.js +0 -2
- package/dist/x-markdown.cjs13.js.map +0 -1
- package/dist/x-markdown.cjs21.js +0 -2
- package/dist/x-markdown.cjs21.js.map +0 -1
- package/dist/x-markdown.cjs24.js +0 -2
- package/dist/x-markdown.cjs24.js.map +0 -1
- package/dist/x-markdown.cjs26.js +0 -2
- package/dist/x-markdown.cjs26.js.map +0 -1
- package/dist/x-markdown.es13.js +0 -89
- package/dist/x-markdown.es13.js.map +0 -1
- package/dist/x-markdown.es21.js +0 -11
- package/dist/x-markdown.es21.js.map +0 -1
- package/dist/x-markdown.es24.js.map +0 -1
- package/dist/x-markdown.es26.js +0 -160
- package/dist/x-markdown.es26.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs11.js","sources":["../src/hooks/useTheme.ts"],"sourcesContent":["import { computed, isRef, ref, type Ref } from 'vue'\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto'\r\nexport type ShikiThemeName = string // Shiki 主题名称(字符串类型,支持动态导入)\r\n\r\n// 内置主题映射\r\nexport const themeMap = {\r\n light: 'vitesse-light',\r\n dark: 'vitesse-dark',\r\n} as const\r\n\r\nexport interface UseThemeOptions {\r\n mode?: ThemeMode | Ref<ThemeMode>\r\n theme?: ShikiThemeName | Ref<ShikiThemeName | undefined>\r\n lightTheme?: ShikiThemeName\r\n darkTheme?: ShikiThemeName\r\n}\r\n\r\nexport interface UseThemeReturn {\r\n mode: Ref<ThemeMode>\r\n isDark: Ref<boolean>\r\n actualTheme: Ref<ShikiThemeName>\r\n setMode: (mode: ThemeMode) => void\r\n toggleMode: () => void\r\n}\r\n\r\n/**\r\n * 主题管理 Hook\r\n * 支持 light/dark/auto 模式切换\r\n */\r\nexport function useTheme(options: UseThemeOptions = {}): UseThemeReturn {\r\n const { lightTheme = themeMap.light, darkTheme = themeMap.dark } = options\r\n\r\n // 内部 mode(用于 setMode/toggleMode 修改)\r\n const internalMode = ref<ThemeMode>(isRef(options.mode) ? options.mode.value : options.mode || 'auto')\r\n\r\n // 实际使用的 mode(优先使用外部传入的响应式值)\r\n const mode = computed<ThemeMode>({\r\n get: () => (isRef(options.mode) ? options.mode.value : internalMode.value),\r\n set: (val) => {\r\n internalMode.value = val\r\n },\r\n })\r\n\r\n // 系统是否为暗色模式\r\n const systemIsDark = ref(false)\r\n\r\n // 监听系统主题变化\r\n if (typeof window !== 'undefined') {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n systemIsDark.value = mediaQuery.matches\r\n\r\n mediaQuery.addEventListener('change', (e) => {\r\n systemIsDark.value = e.matches\r\n })\r\n }\r\n\r\n // 当前是否为暗色模式\r\n const isDark = computed(() => {\r\n if (mode.value === 'auto') {\r\n return systemIsDark.value\r\n }\r\n return mode.value === 'dark'\r\n })\r\n\r\n // 实际使用的 Shiki 主题\r\n const actualTheme = computed<ShikiThemeName>(() => {\r\n // 如果传入了具体的 theme,优先使用\r\n const customTheme = isRef(options.theme) ? options.theme.value : options.theme\r\n if (customTheme) return customTheme\r\n\r\n return isDark.value ? darkTheme : lightTheme\r\n })\r\n\r\n // 设置模式\r\n const setMode = (newMode: ThemeMode) => {\r\n internalMode.value = newMode\r\n }\r\n\r\n // 切换模式 (light -> dark -> auto -> light)\r\n const toggleMode = () => {\r\n const modes: ThemeMode[] = ['light', 'dark', 'auto']\r\n const currentIndex = modes.indexOf(mode.value)\r\n internalMode.value = modes[(currentIndex + 1) % modes.length]\r\n }\r\n\r\n return {\r\n mode,\r\n isDark,\r\n actualTheme,\r\n setMode,\r\n toggleMode,\r\n }\r\n}\r\n"],"names":["
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs11.js","sources":["../src/hooks/useTheme.ts"],"sourcesContent":["import { computed, isRef, ref, type Ref } from 'vue'\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto'\r\nexport type ShikiThemeName = string // Shiki 主题名称(字符串类型,支持动态导入)\r\n\r\n// 内置主题映射\r\nexport const themeMap = {\r\n light: 'vitesse-light',\r\n dark: 'vitesse-dark',\r\n} as const\r\n\r\nexport interface UseThemeOptions {\r\n mode?: ThemeMode | Ref<ThemeMode>\r\n theme?: ShikiThemeName | Ref<ShikiThemeName | undefined>\r\n lightTheme?: ShikiThemeName\r\n darkTheme?: ShikiThemeName\r\n}\r\n\r\nexport interface UseThemeReturn {\r\n mode: Ref<ThemeMode>\r\n isDark: Ref<boolean>\r\n actualTheme: Ref<ShikiThemeName>\r\n setMode: (mode: ThemeMode) => void\r\n toggleMode: () => void\r\n}\r\n\r\n/**\r\n * 主题管理 Hook\r\n * 支持 light/dark/auto 模式切换\r\n */\r\nexport function useTheme(options: UseThemeOptions = {}): UseThemeReturn {\r\n const { lightTheme = themeMap.light, darkTheme = themeMap.dark } = options\r\n\r\n // 内部 mode(用于 setMode/toggleMode 修改)\r\n const internalMode = ref<ThemeMode>(isRef(options.mode) ? options.mode.value : options.mode || 'auto')\r\n\r\n // 实际使用的 mode(优先使用外部传入的响应式值)\r\n const mode = computed<ThemeMode>({\r\n get: () => (isRef(options.mode) ? options.mode.value : internalMode.value),\r\n set: (val) => {\r\n internalMode.value = val\r\n },\r\n })\r\n\r\n // 系统是否为暗色模式\r\n const systemIsDark = ref(false)\r\n\r\n // 监听系统主题变化\r\n if (typeof window !== 'undefined') {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n systemIsDark.value = mediaQuery.matches\r\n\r\n mediaQuery.addEventListener('change', (e) => {\r\n systemIsDark.value = e.matches\r\n })\r\n }\r\n\r\n // 当前是否为暗色模式\r\n const isDark = computed(() => {\r\n if (mode.value === 'auto') {\r\n return systemIsDark.value\r\n }\r\n return mode.value === 'dark'\r\n })\r\n\r\n // 实际使用的 Shiki 主题\r\n const actualTheme = computed<ShikiThemeName>(() => {\r\n // 如果传入了具体的 theme,优先使用\r\n const customTheme = isRef(options.theme) ? options.theme.value : options.theme\r\n if (customTheme) return customTheme\r\n\r\n return isDark.value ? darkTheme : lightTheme\r\n })\r\n\r\n // 设置模式\r\n const setMode = (newMode: ThemeMode) => {\r\n internalMode.value = newMode\r\n }\r\n\r\n // 切换模式 (light -> dark -> auto -> light)\r\n const toggleMode = () => {\r\n const modes: ThemeMode[] = ['light', 'dark', 'auto']\r\n const currentIndex = modes.indexOf(mode.value)\r\n internalMode.value = modes[(currentIndex + 1) % modes.length]\r\n }\r\n\r\n return {\r\n mode,\r\n isDark,\r\n actualTheme,\r\n setMode,\r\n toggleMode,\r\n }\r\n}\r\n"],"names":["ref","isRef","computed"],"mappings":";;;;;;AAMO,MAAM,QAAA,GAAW;AAAA,EACtB,KAAA,EAAO,eAAA;AAAA,EACP,IAAA,EAAM;AACR;AAqBO,SAAS,QAAA,CAAS,OAAA,GAA2B,EAAC,EAAmB;AACtE,EAAA,MAAM,EAAE,UAAA,GAAa,QAAA,CAAS,OAAO,SAAA,GAAY,QAAA,CAAS,MAAK,GAAI,OAAA;AAGnE,EAAA,MAAM,YAAA,GAAeA,OAAA,CAAeC,SAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,IAAA,IAAQ,MAAM,CAAA;AAGrG,EAAA,MAAM,OAAOC,YAAA,CAAoB;AAAA,IAC/B,GAAA,EAAK,MAAOD,SAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,YAAA,CAAa,KAAA;AAAA,IACpE,GAAA,EAAK,CAAC,GAAA,KAAQ;AACZ,MAAA,YAAA,CAAa,KAAA,GAAQ,GAAA;AAAA,IACvB;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,YAAA,GAAeD,QAAI,KAAK,CAAA;AAG9B,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA;AACnE,IAAA,YAAA,CAAa,QAAQ,UAAA,CAAW,OAAA;AAEhC,IAAA,UAAA,CAAW,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA,KAAM;AAC3C,MAAA,YAAA,CAAa,QAAQ,CAAA,CAAE,OAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,MAAA,GAASE,aAAS,MAAM;AAC5B,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAQ;AACzB,MAAA,OAAO,YAAA,CAAa,KAAA;AAAA,IACtB;AACA,IAAA,OAAO,KAAK,KAAA,KAAU,MAAA;AAAA,EACxB,CAAC,CAAA;AAGD,EAAA,MAAM,WAAA,GAAcA,aAAyB,MAAM;AAEjD,IAAA,MAAM,WAAA,GAAcD,UAAM,OAAA,CAAQ,KAAK,IAAI,OAAA,CAAQ,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAA;AACzE,IAAA,IAAI,aAAa,OAAO,WAAA;AAExB,IAAA,OAAO,MAAA,CAAO,QAAQ,SAAA,GAAY,UAAA;AAAA,EACpC,CAAC,CAAA;AAGD,EAAA,MAAM,OAAA,GAAU,CAAC,OAAA,KAAuB;AACtC,IAAA,YAAA,CAAa,KAAA,GAAQ,OAAA;AAAA,EACvB,CAAA;AAGA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,KAAA,GAAqB,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AACnD,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAC7C,IAAA,YAAA,CAAa,KAAA,GAAQ,KAAA,CAAA,CAAO,YAAA,GAAe,CAAA,IAAK,MAAM,MAAM,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const vue = require('vue');
|
|
6
|
+
|
|
7
|
+
const X_MARKDOWN_CONFIG_KEY = Symbol("x-markdown-config");
|
|
8
|
+
function provideXMarkdown(options) {
|
|
9
|
+
vue.provide(X_MARKDOWN_CONFIG_KEY, options);
|
|
10
|
+
}
|
|
11
|
+
function useXMarkdownConfig() {
|
|
12
|
+
return vue.inject(X_MARKDOWN_CONFIG_KEY, {});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.X_MARKDOWN_CONFIG_KEY = X_MARKDOWN_CONFIG_KEY;
|
|
16
|
+
exports.provideXMarkdown = provideXMarkdown;
|
|
17
|
+
exports.useXMarkdownConfig = useXMarkdownConfig;
|
|
18
|
+
//# sourceMappingURL=x-markdown.cjs12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs12.js","sources":["../src/config.ts"],"sourcesContent":["import { type InjectionKey, inject, provide } from 'vue'\n\nexport interface XMarkdownOptions {\n /**\n * Shiki 加载函数\n * @example () => import('shiki')\n */\n shiki?: () => Promise<any>\n /**\n * Shiki Stream 加载函数\n * @example () => import('shiki-stream')\n */\n shikiStream?: () => Promise<any>\n /**\n * Mermaid 加载函数\n * @example () => import('mermaid')\n */\n mermaid?: () => Promise<any>\n /**\n * 是否显示控制台提示\n * @default true\n */\n showConsoleHints?: boolean\n}\n\nexport const X_MARKDOWN_CONFIG_KEY: InjectionKey<XMarkdownOptions> = Symbol('x-markdown-config')\n\n/**\n * 提供 x-markdown 全局配置\n * @param options 配置选项\n */\nexport function provideXMarkdown(options: XMarkdownOptions) {\n provide(X_MARKDOWN_CONFIG_KEY, options)\n}\n\n/**\n * 获取 x-markdown 全局配置\n */\nexport function useXMarkdownConfig() {\n return inject(X_MARKDOWN_CONFIG_KEY, {})\n}\n"],"names":["provide","inject"],"mappings":";;;;;;AAyBO,MAAM,qBAAA,GAAwD,OAAO,mBAAmB;AAMxF,SAAS,iBAAiB,OAAA,EAA2B;AAC1D,EAAAA,WAAA,CAAQ,uBAAuB,OAAO,CAAA;AACxC;AAKO,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAOC,UAAA,CAAO,qBAAA,EAAuB,EAAE,CAAA;AACzC;;;;;;"}
|
package/dist/x-markdown.cjs14.js
CHANGED
|
@@ -1,2 +1,93 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const vue = require('vue');
|
|
6
|
+
const index$1 = require('./x-markdown.cjs18.js');
|
|
7
|
+
const index = require('./x-markdown.cjs19.js');
|
|
8
|
+
|
|
9
|
+
const Mermaid = vue.defineAsyncComponent(() => Promise.resolve().then(() => require('./x-markdown.cjs17.js')));
|
|
10
|
+
const _sfc_main = vue.defineComponent({
|
|
11
|
+
props: {
|
|
12
|
+
raw: { type: Object, default: () => ({}) },
|
|
13
|
+
codeXRender: { type: Object, default: () => ({}) },
|
|
14
|
+
isDark: { type: Boolean, default: false },
|
|
15
|
+
shikiTheme: {
|
|
16
|
+
type: Array,
|
|
17
|
+
default: () => ["vitesse-light", "vitesse-dark"]
|
|
18
|
+
},
|
|
19
|
+
showCodeBlockHeader: { type: Boolean, default: true },
|
|
20
|
+
stickyCodeBlockHeader: { type: Boolean, default: true },
|
|
21
|
+
codeMaxHeight: { type: String, default: void 0 },
|
|
22
|
+
enableAnimate: { type: Boolean, default: false },
|
|
23
|
+
codeBlockActions: { type: Array, default: void 0 },
|
|
24
|
+
mermaidActions: { type: Array, default: void 0 },
|
|
25
|
+
mermaidConfig: { type: Object, default: void 0 }
|
|
26
|
+
},
|
|
27
|
+
setup(props, { slots }) {
|
|
28
|
+
const { codeXRender } = props;
|
|
29
|
+
return () => {
|
|
30
|
+
if (props.raw.inline) {
|
|
31
|
+
if (codeXRender && codeXRender.inline) {
|
|
32
|
+
const renderer = codeXRender.inline;
|
|
33
|
+
if (typeof renderer === "function") {
|
|
34
|
+
return renderer(props);
|
|
35
|
+
}
|
|
36
|
+
return vue.h(renderer, props);
|
|
37
|
+
}
|
|
38
|
+
return vue.h(index.default, {
|
|
39
|
+
raw: props.raw,
|
|
40
|
+
isDark: props.isDark,
|
|
41
|
+
shikiTheme: props.shikiTheme,
|
|
42
|
+
enableAnimate: props.enableAnimate
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const { language } = props.raw;
|
|
46
|
+
if (codeXRender && codeXRender[language]) {
|
|
47
|
+
const renderer = codeXRender[language];
|
|
48
|
+
if (typeof renderer === "function") {
|
|
49
|
+
return renderer(props);
|
|
50
|
+
}
|
|
51
|
+
return vue.h(renderer, props);
|
|
52
|
+
}
|
|
53
|
+
if (language === "mermaid") {
|
|
54
|
+
const mermaidSlots = {};
|
|
55
|
+
Object.keys(slots).forEach((key) => {
|
|
56
|
+
if (key.startsWith("mermaid")) {
|
|
57
|
+
mermaidSlots[key] = slots[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return vue.h(
|
|
61
|
+
Mermaid,
|
|
62
|
+
{
|
|
63
|
+
raw: props.raw,
|
|
64
|
+
isDark: props.isDark,
|
|
65
|
+
shikiTheme: props.shikiTheme,
|
|
66
|
+
mermaidActions: props.mermaidActions,
|
|
67
|
+
config: props.mermaidConfig
|
|
68
|
+
},
|
|
69
|
+
mermaidSlots
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return vue.h(
|
|
73
|
+
index$1.default,
|
|
74
|
+
{
|
|
75
|
+
code: props.raw.content || "",
|
|
76
|
+
language: props.raw.language || "text",
|
|
77
|
+
isDark: props.isDark,
|
|
78
|
+
lightTheme: props.shikiTheme[0],
|
|
79
|
+
darkTheme: props.shikiTheme[1],
|
|
80
|
+
showCodeBlockHeader: props.showCodeBlockHeader,
|
|
81
|
+
stickyCodeBlockHeader: props.stickyCodeBlockHeader,
|
|
82
|
+
codeMaxHeight: props.codeMaxHeight,
|
|
83
|
+
enableAnimate: props.enableAnimate,
|
|
84
|
+
codeBlockActions: props.codeBlockActions
|
|
85
|
+
},
|
|
86
|
+
slots
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
exports.default = _sfc_main;
|
|
2
93
|
//# sourceMappingURL=x-markdown.cjs14.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs14.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs14.js","sources":["../src/components/CodeX/index.vue"],"sourcesContent":["<script lang=\"ts\">\r\nimport { defineComponent, h, type PropType, defineAsyncComponent } from 'vue'\r\nimport type { CodeBlockAction } from '../CodeBlock/types'\r\nimport type { MermaidAction } from '../Mermaid/types'\r\nimport CodeBlock from '../CodeBlock/index.vue'\r\nimport CodeLine from '../CodeLine/index.vue'\r\n// Mermaid 组件改为动态导入,实现按需加载\r\nconst Mermaid = defineAsyncComponent(() => import('../Mermaid/index.vue'))\r\n\r\nexport default defineComponent({\r\n props: {\r\n raw: { type: Object, default: () => ({}) },\r\n codeXRender: { type: Object, default: () => ({}) },\r\n isDark: { type: Boolean, default: false },\r\n shikiTheme: {\r\n type: Array as unknown as PropType<[string, string]>,\r\n default: () => ['vitesse-light', 'vitesse-dark'] as [string, string],\r\n },\r\n showCodeBlockHeader: { type: Boolean, default: true },\r\n stickyCodeBlockHeader: { type: Boolean, default: true },\r\n codeMaxHeight: { type: String, default: undefined },\r\n enableAnimate: { type: Boolean, default: false },\r\n codeBlockActions: { type: Array as PropType<CodeBlockAction[]>, default: undefined },\r\n mermaidActions: { type: Array as PropType<MermaidAction[]>, default: undefined },\r\n mermaidConfig: { type: Object as PropType<Record<string, any>>, default: undefined },\r\n },\r\n setup(props, { slots }) {\r\n const { codeXRender } = props\r\n\r\n return (): ReturnType<typeof h> | null => {\r\n // 处理行内代码\r\n if (props.raw.inline) {\r\n if (codeXRender && codeXRender.inline) {\r\n const renderer = codeXRender.inline\r\n if (typeof renderer === 'function') {\r\n return renderer(props)\r\n }\r\n return h(renderer, props)\r\n }\r\n // 传递完整的配置给 CodeLine,包括主题和动画设置\r\n return h(CodeLine, {\r\n raw: props.raw,\r\n isDark: props.isDark,\r\n shikiTheme: props.shikiTheme,\r\n enableAnimate: props.enableAnimate,\r\n })\r\n }\r\n\r\n const { language } = props.raw\r\n\r\n // 处理自定义渲染器\r\n if (codeXRender && codeXRender[language]) {\r\n const renderer = codeXRender[language]\r\n if (typeof renderer === 'function') {\r\n return renderer(props)\r\n }\r\n return h(renderer, props)\r\n }\r\n\r\n // 处理 Mermaid 图表\r\n if (language === 'mermaid') {\r\n const mermaidSlots: Record<string, any> = {}\r\n Object.keys(slots).forEach((key) => {\r\n if (key.startsWith('mermaid')) {\r\n mermaidSlots[key] = slots[key]\r\n }\r\n })\r\n\r\n return h(\r\n Mermaid,\r\n {\r\n raw: props.raw,\r\n isDark: props.isDark,\r\n shikiTheme: props.shikiTheme,\r\n mermaidActions: props.mermaidActions,\r\n config: props.mermaidConfig,\r\n },\r\n mermaidSlots,\r\n )\r\n }\r\n\r\n // 渲染标准代码块\r\n return h(\r\n CodeBlock,\r\n {\r\n code: props.raw.content || '',\r\n language: props.raw.language || 'text',\r\n isDark: props.isDark,\r\n lightTheme: props.shikiTheme[0],\r\n darkTheme: props.shikiTheme[1],\r\n showCodeBlockHeader: props.showCodeBlockHeader,\r\n stickyCodeBlockHeader: props.stickyCodeBlockHeader,\r\n codeMaxHeight: props.codeMaxHeight,\r\n enableAnimate: props.enableAnimate,\r\n codeBlockActions: props.codeBlockActions,\r\n },\r\n slots,\r\n )\r\n }\r\n },\r\n})\r\n</script>\r\n"],"names":["defineAsyncComponent","defineComponent","h","CodeLine","CodeBlock"],"mappings":"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"}
|
package/dist/x-markdown.cjs15.js
CHANGED
|
@@ -1,2 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const unistUtilVisit = require('unist-util-visit');
|
|
6
|
+
|
|
7
|
+
function rehypeAnimatedPlugin() {
|
|
8
|
+
return (tree) => {
|
|
9
|
+
unistUtilVisit.visit(tree, "element", (node) => {
|
|
10
|
+
if (["p", "h1", "h2", "h3", "h4", "h5", "h6", "li", "strong", "th", "td"].includes(node.tagName) && node.children) {
|
|
11
|
+
const newChildren = [];
|
|
12
|
+
for (const child of node.children) {
|
|
13
|
+
if (child.type === "text") {
|
|
14
|
+
const Segmenter = Intl.Segmenter;
|
|
15
|
+
const words = typeof Segmenter === "function" ? [...new Segmenter("zh", { granularity: "word" }).segment(child.value)].map((segment) => segment.segment).filter(Boolean) : Array.from(child.value).filter(Boolean);
|
|
16
|
+
words.forEach((word) => {
|
|
17
|
+
newChildren.push({
|
|
18
|
+
children: [{ type: "text", value: word }],
|
|
19
|
+
properties: {
|
|
20
|
+
className: "x-md-animated-word"
|
|
21
|
+
},
|
|
22
|
+
tagName: "span",
|
|
23
|
+
type: "element"
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
newChildren.push(child);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
node.children = newChildren;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.rehypeAnimatedPlugin = rehypeAnimatedPlugin;
|
|
2
37
|
//# sourceMappingURL=x-markdown.cjs15.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs15.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs15.js","sources":["../src/plugins/rehypePlugin.ts"],"sourcesContent":["// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\r\n// SPDX-License-Identifier: MIT\r\nimport type { Element, ElementContent, Root } from 'hast'\r\nimport type { BuildVisitor } from 'unist-util-visit'\r\nimport { visit } from 'unist-util-visit'\r\n\r\nexport function rehypeAnimatedPlugin() {\r\n return (tree: Root) => {\r\n visit(tree, 'element', ((node: Element) => {\r\n if (\r\n ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'strong', 'th', 'td'].includes(node.tagName) &&\r\n node.children\r\n ) {\r\n const newChildren: Array<ElementContent> = []\n for (const child of node.children) {\n if (child.type === 'text') {\n const Segmenter = (Intl as any).Segmenter as\n | (new (locales?: string | string[], options?: { granularity?: string }) => {\n segment: (input: string) => Iterable<{ segment: string }>\n })\n | undefined\n\n const words =\n typeof Segmenter === 'function'\n ? [...new Segmenter('zh', { granularity: 'word' }).segment(child.value)]\n .map((segment) => segment.segment)\n .filter(Boolean)\n : Array.from(child.value).filter(Boolean)\n\n words.forEach((word: string) => {\n newChildren.push({\n children: [{ type: 'text', value: word }],\n properties: {\n className: 'x-md-animated-word',\n },\r\n tagName: 'span',\r\n type: 'element',\r\n })\r\n })\r\n } else {\r\n newChildren.push(child)\r\n }\r\n }\r\n node.children = newChildren\r\n }\r\n }) as BuildVisitor<Root, 'element'>)\r\n }\r\n}\r\n"],"names":["visit"],"mappings":";;;;;;AAMO,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAO,CAAC,IAAA,KAAe;AACrB,IAAAA,oBAAA,CAAM,IAAA,EAAM,SAAA,EAAY,CAAC,IAAA,KAAkB;AACzC,MAAA,IACE,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA,CAAE,QAAA,CAAS,KAAK,OAAO,CAAA,IAC3F,KAAK,QAAA,EACL;AACA,QAAA,MAAM,cAAqC,EAAC;AAC5C,QAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,UAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,YAAA,MAAM,YAAa,IAAA,CAAa,SAAA;AAMhC,YAAA,MAAM,KAAA,GACJ,OAAO,SAAA,KAAc,UAAA,GACjB,CAAC,GAAG,IAAI,SAAA,CAAU,IAAA,EAAM,EAAE,WAAA,EAAa,MAAA,EAAQ,CAAA,CAAE,QAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,CAClE,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,OAAO,CAAA,CAChC,MAAA,CAAO,OAAO,CAAA,GACjB,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAE5C,YAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAiB;AAC9B,cAAA,WAAA,CAAY,IAAA,CAAK;AAAA,gBACf,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAAA,gBACxC,UAAA,EAAY;AAAA,kBACV,SAAA,EAAW;AAAA,iBACb;AAAA,gBACA,OAAA,EAAS,MAAA;AAAA,gBACT,IAAA,EAAM;AAAA,eACP,CAAA;AAAA,YACH,CAAC,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,WAAA,CAAY,KAAK,KAAK,CAAA;AAAA,UACxB;AAAA,QACF;AACA,QAAA,IAAA,CAAK,QAAA,GAAW,WAAA;AAAA,MAClB;AAAA,IACF,CAAmC,CAAA;AAAA,EACrC,CAAA;AACF;;;;"}
|
package/dist/x-markdown.cjs16.js
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const index_vue_vue_type_script_lang = require('./x-markdown.cjs14.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.default = index_vue_vue_type_script_lang.default;
|
|
2
10
|
//# sourceMappingURL=x-markdown.cjs16.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs16.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs16.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/x-markdown.cjs17.js
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const index_vue_vue_type_script_setup_true_lang = require('./x-markdown.cjs25.js');
|
|
6
|
+
;/* empty css */
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.default = index_vue_vue_type_script_setup_true_lang.default;
|
|
2
11
|
//# sourceMappingURL=x-markdown.cjs17.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs17.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs17.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
package/dist/x-markdown.cjs18.js
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const index_vue_vue_type_script_setup_true_lang = require('./x-markdown.cjs20.js');
|
|
6
|
+
;/* empty css */
|
|
7
|
+
const _pluginVue_exportHelper = require('./x-markdown.cjs22.js');
|
|
8
|
+
|
|
9
|
+
const CodeBlock = /* @__PURE__ */ _pluginVue_exportHelper.default(index_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-5e8d09a0"]]);
|
|
10
|
+
|
|
11
|
+
exports.default = CodeBlock;
|
|
2
12
|
//# sourceMappingURL=x-markdown.cjs18.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs18.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs18.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/x-markdown.cjs19.js
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const index_vue_vue_type_script_setup_true_lang = require('./x-markdown.cjs23.js');
|
|
6
|
+
;/* empty css */
|
|
7
|
+
const _pluginVue_exportHelper = require('./x-markdown.cjs22.js');
|
|
8
|
+
|
|
9
|
+
const CodeLine = /* @__PURE__ */ _pluginVue_exportHelper.default(index_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-d2fd90dc"]]);
|
|
10
|
+
|
|
11
|
+
exports.default = CodeLine;
|
|
2
12
|
//# sourceMappingURL=x-markdown.cjs19.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs19.js","sources":["../src/components/CodeBlock/index.vue"],"sourcesContent":["<template>\r\n <div class=\"x-md-code-block\" :class=\"{ 'x-md-code-block--dark': props.isDark }\">\r\n <!-- 头部区域:支持完全自定义或默认渲染 -->\r\n <div\r\n v-if=\"showCodeBlockHeader\"\r\n class=\"x-md-code-header-wrapper\"\r\n :class=\"[{'x-md-code-header-wrapper--sticky': props.stickyCodeBlockHeader }, { 'x-md-code-header-wrapper--collapsed': collapsed }]\"\r\n >\r\n <div class=\"x-md-code-header\">\r\n <slot\r\n name=\"codeHeader\"\r\n :language=\"language\"\r\n :code=\"code\"\r\n :copy=\"copy\"\r\n :copied=\"copied\"\r\n :collapsed=\"collapsed\"\r\n :toggleCollapse=\"toggleCollapse\"\r\n >\r\n <div class=\"x-md-code-header__left\">\r\n <button\r\n class=\"x-md-collapse-btn\"\r\n :class=\"{ 'x-md-collapse-btn--collapsed': collapsed }\"\r\n @click=\"toggleCollapse\"\r\n :title=\"collapsed ? '展开代码' : '折叠代码'\"\r\n >\r\n <svg\r\n class=\"x-md-collapse-icon\"\r\n viewBox=\"0 0 24 24\"\r\n width=\"14\"\r\n height=\"14\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </button>\r\n <span class=\"x-md-code-lang\">{{ language }}</span>\r\n </div>\r\n <div class=\"x-md-code-header__right\">\r\n <slot name=\"codeActions\" :code=\"code\" :copy=\"copy\" :copied=\"copied\">\r\n <button\r\n v-for=\"action in filteredActions\"\r\n :key=\"action.key\"\r\n class=\"x-md-action-btn\"\r\n :class=\"[action.class, { 'x-md-action-btn--disabled': action.disabled }]\"\r\n :style=\"action.style\"\r\n :title=\"action.title\"\r\n :disabled=\"action.disabled\"\r\n @click=\"handleActionClick(action)\"\r\n >\r\n <component :is=\"renderActionIcon(action)\" v-if=\"action.icon\" />\r\n </button>\r\n <button class=\"x-md-copy-btn\" :class=\"{ 'x-md-copy-btn--copied': copied }\" @click=\"copy(code)\">\r\n <svg\r\n v-if=\"copied\"\r\n class=\"x-md-copy-icon\"\r\n width=\"16\"\r\n height=\"16\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 1024 1024\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z\"\r\n />\r\n </svg>\r\n <svg\r\n v-else\r\n class=\"x-md-copy-icon\"\r\n width=\"16\"\r\n height=\"16\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 1024 1024\"\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z\"\r\n />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64\"\r\n />\r\n </svg>\r\n </button>\r\n </slot>\r\n </div>\r\n </slot>\r\n </div>\r\n </div>\r\n <div class=\"x-md-code-body\" :class=\"{ 'x-md-code-body--collapsed': collapsed }\">\r\n <SyntaxCodeBlock\r\n ref=\"syntaxCodeBlockRef\"\r\n :code=\"code\"\r\n :language=\"language\"\r\n :light-theme=\"props.lightTheme\"\r\n :dark-theme=\"props.darkTheme\"\r\n :is-dark=\"props.isDark\"\r\n :color-replacements=\"props.colorReplacements\"\r\n :code-max-height=\"props.codeMaxHeight\"\r\n :enable-animate=\"props.enableAnimate\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, h, type VNode } from 'vue'\r\nimport { useClipboard } from '@vueuse/core'\r\nimport type { CodeBlockProps, CodeBlockAction, CodeBlockSlotProps } from './types'\r\nimport SyntaxCodeBlock from './SyntaxCodeBlock.vue'\r\n\r\ndefineOptions({\r\n name: 'CodeBlock',\r\n})\r\n\r\nconst { copy, copied } = useClipboard({ copiedDuring: 2000 })\r\n\r\nconst collapsed = ref(false)\r\n\r\nconst syntaxCodeBlockRef = ref<InstanceType<typeof SyntaxCodeBlock> | null>(null)\r\n\r\nconst toggleCollapse = () => {\r\n collapsed.value = !collapsed.value\r\n}\r\n\r\nconst props = withDefaults(defineProps<CodeBlockProps>(), {\r\n lightTheme: 'vitesse-light',\r\n darkTheme: 'vitesse-dark',\r\n isDark: false,\r\n showCodeBlockHeader: true,\r\n enableAnimate: false,\r\n codeBlockActions: undefined,\r\n stickyCodeBlockHeader: true,\r\n})\r\n\r\nconst code = computed(() => props.code.trim())\r\n\r\nconst language = computed(() => props.language || 'text')\r\n\r\nconst normalizedActions = computed<CodeBlockAction[]>(() => {\r\n return props.codeBlockActions || []\r\n})\r\n\r\nconst filteredActions = computed<CodeBlockAction[]>(() => {\r\n return normalizedActions.value.filter((action) => {\r\n if (!action.show) return true\r\n return action.show(slotProps.value)\r\n })\r\n})\r\n\r\nconst slotProps = computed<CodeBlockSlotProps>(() => ({\r\n language: language.value,\r\n code: code.value,\r\n copy,\r\n copied: copied.value,\r\n collapsed: collapsed.value,\r\n toggleCollapse,\r\n}))\r\n\r\nfunction renderActionIcon(action: CodeBlockAction): VNode | null {\r\n if (!action.icon) return null\r\n\r\n if (typeof action.icon === 'string') {\r\n return h('span', {\r\n class: 'x-md-action-icon',\r\n innerHTML: action.icon,\r\n })\r\n }\r\n\r\n if (typeof action.icon === 'function') {\r\n try {\r\n const result = (action.icon as (props: CodeBlockSlotProps) => VNode)(slotProps.value)\r\n if (result && typeof result === 'object' && '__v_isVNode' in result) {\r\n return result\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n return h(action.icon as any)\r\n }\r\n\r\n return h(action.icon as any)\r\n}\r\n\r\nfunction handleActionClick(action: CodeBlockAction) {\r\n if (action.disabled) return\r\n action.onClick?.(slotProps.value)\r\n}\r\n\r\ndefineExpose({\r\n copy,\r\n copied,\r\n collapsed,\r\n toggleCollapse,\r\n syntaxCodeBlockRef,\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.x-md-code-block {\r\n border-radius: 8px;\r\n overflow: hidden;\r\n font-size: 0;\r\n background: rgba(0, 0, 0, 0.03);\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark {\r\n background: rgba(255, 255, 255, 0.13);\r\n}\r\n\r\n.x-md-code-header-wrapper--sticky {\r\n background: #fff;\r\n position: sticky;\r\n top: 0;\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-code-header-wrapper--sticky {\r\n background: #1a1a1a;\r\n}\r\n\r\n.x-md-code-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 8px 16px;\r\n background: rgba(0, 0, 0, 0.05);\r\n color: #333;\r\n}\r\n\r\n.x-md-code-block .x-md-code-header-wrapper--sticky .x-md-code-header{\r\n background: rgba(235, 235, 235);\r\n border-radius: 8px 8px 0 0;\r\n}\r\n\r\n.x-md-code-block:has(.x-md-code-header-wrapper--sticky) {\r\n overflow: visible;\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-code-header {\r\n background: rgba(0, 0, 0, 0.25);\r\n color: #fff;\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-code-header-wrapper--sticky .x-md-code-header {\r\n background: rgba(44, 44, 44);\r\n}\r\n\r\n.x-md-code-block .x-md-code-header-wrapper--collapsed .x-md-code-header {\r\n border-radius: 8px;\r\n}\r\n\r\n.x-md-code-header__left,\r\n.x-md-code-header__right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.x-md-code-lang {\r\n font-size: 12px;\r\n font-weight: 500;\r\n opacity: 0.6;\r\n text-transform: lowercase;\r\n}\r\n\r\n.x-md-copy-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n padding: 0;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: inherit;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.x-md-copy-btn:hover {\r\n opacity: 1;\r\n background: rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-copy-btn:hover {\r\n background: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.x-md-copy-btn.x-md-copy-btn--copied {\r\n opacity: 1;\r\n color: #22c55e;\r\n}\r\n\r\n.x-md-copy-icon {\r\n flex-shrink: 0;\r\n}\r\n\r\n.x-md-action-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n padding: 0;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: inherit;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.x-md-action-btn:hover {\r\n opacity: 1;\r\n background: rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-action-btn:hover {\r\n background: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.x-md-action-btn.x-md-action-btn--disabled {\r\n opacity: 0.3;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n}\r\n\r\n.x-md-action-icon {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.x-md-action-icon :deep(svg) {\r\n width: 16px;\r\n height: 16px;\r\n flex-shrink: 0;\r\n}\r\n\r\n.x-md-collapse-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 20px;\r\n height: 20px;\r\n padding: 0;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: inherit;\r\n cursor: pointer;\r\n opacity: 0.5;\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.x-md-collapse-btn:hover {\r\n opacity: 1;\r\n background: rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.x-md-code-block.x-md-code-block--dark .x-md-collapse-btn:hover {\r\n background: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.x-md-collapse-icon {\r\n transition: transform 0.2s ease;\r\n}\r\n\r\n.x-md-collapse-btn--collapsed .x-md-collapse-icon {\r\n transform: rotate(-90deg);\r\n}\r\n\r\n.x-md-code-body {\r\n overflow: hidden;\r\n transition:\r\n max-height 0.3s ease,\r\n opacity 0.2s ease;\r\n}\r\n\r\n.x-md-code-body--collapsed {\r\n max-height: 0 !important;\r\n opacity: 0;\r\n}\r\n</style>"],"names":["copy","copied","useClipboard","copiedDuring","collapsed","ref","syntaxCodeBlockRef","toggleCollapse","value","props","__props","code","computed","trim","language","normalizedActions","codeBlockActions","filteredActions","filter","action","show","slotProps","renderActionIcon","icon","h","class","innerHTML","result","__expose","_createElementBlock","_normalizeClass","isDark","showCodeBlockHeader","stickyCodeBlockHeader","_createElementVNode","_hoisted_1","_renderSlot","_ctx","$slots","_unref","_hoisted_2","onClick","title","viewBox","width","height","fill","stroke","points","_hoisted_4","_toDisplayString","_hoisted_5","_Fragment","_renderList","key","disabled","style","_normalizeStyle","$event","handleActionClick","_createBlock","_resolveDynamicComponent","_cache","_openBlock","_hoisted_7","d","_hoisted_8","_createVNode","SyntaxCodeBlock","lightTheme","darkTheme","colorReplacements","codeMaxHeight","enableAnimate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs19.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/x-markdown.cjs2.js
CHANGED
|
@@ -1,2 +1,87 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const vue = require('vue');
|
|
6
|
+
const hastToVnode = require('./x-markdown.cjs4.js');
|
|
7
|
+
const useProcessor = require('./x-markdown.cjs5.js');
|
|
8
|
+
|
|
9
|
+
const sharedProps = {
|
|
10
|
+
markdown: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: ""
|
|
13
|
+
},
|
|
14
|
+
customAttrs: {
|
|
15
|
+
type: Object,
|
|
16
|
+
default: () => ({})
|
|
17
|
+
},
|
|
18
|
+
remarkPlugins: {
|
|
19
|
+
type: Array,
|
|
20
|
+
default: () => []
|
|
21
|
+
},
|
|
22
|
+
rehypePlugins: {
|
|
23
|
+
type: Array,
|
|
24
|
+
default: () => []
|
|
25
|
+
},
|
|
26
|
+
rehypeOptions: {
|
|
27
|
+
type: Object,
|
|
28
|
+
default: () => ({})
|
|
29
|
+
},
|
|
30
|
+
sanitize: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: false
|
|
33
|
+
},
|
|
34
|
+
sanitizeOptions: {
|
|
35
|
+
type: Object,
|
|
36
|
+
default: () => ({})
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const vueMarkdownImpl = vue.defineComponent({
|
|
40
|
+
name: "VueMarkdown",
|
|
41
|
+
props: sharedProps,
|
|
42
|
+
setup(props, { slots, attrs }) {
|
|
43
|
+
const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } = vue.toRefs(props);
|
|
44
|
+
const { processor } = useProcessor.useMarkdownProcessor({
|
|
45
|
+
remarkPlugins,
|
|
46
|
+
rehypePlugins,
|
|
47
|
+
rehypeOptions,
|
|
48
|
+
sanitize,
|
|
49
|
+
sanitizeOptions
|
|
50
|
+
});
|
|
51
|
+
return () => {
|
|
52
|
+
const mdast = processor.value.parse(markdown.value);
|
|
53
|
+
const hast = processor.value.runSync(mdast);
|
|
54
|
+
return hastToVnode.render(hast, attrs, slots, customAttrs.value);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const vueMarkdownAsyncImpl = vue.defineComponent({
|
|
59
|
+
name: "VueMarkdownAsync",
|
|
60
|
+
props: sharedProps,
|
|
61
|
+
async setup(props, { slots, attrs }) {
|
|
62
|
+
const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } = vue.toRefs(props);
|
|
63
|
+
const { processor } = useProcessor.useMarkdownProcessor({
|
|
64
|
+
remarkPlugins,
|
|
65
|
+
rehypePlugins,
|
|
66
|
+
rehypeOptions,
|
|
67
|
+
sanitize,
|
|
68
|
+
sanitizeOptions
|
|
69
|
+
});
|
|
70
|
+
const hast = vue.shallowRef(null);
|
|
71
|
+
const process = async () => {
|
|
72
|
+
const mdast = processor.value.parse(markdown.value);
|
|
73
|
+
hast.value = await processor.value.run(mdast);
|
|
74
|
+
};
|
|
75
|
+
vue.watch(() => [markdown.value, processor.value], process, { flush: "sync" });
|
|
76
|
+
await process();
|
|
77
|
+
return () => {
|
|
78
|
+
return hast.value ? hastToVnode.render(hast.value, attrs, slots, customAttrs.value) : null;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const VueMarkdown = vueMarkdownImpl;
|
|
83
|
+
const VueMarkdownAsync = vueMarkdownAsyncImpl;
|
|
84
|
+
|
|
85
|
+
exports.VueMarkdown = VueMarkdown;
|
|
86
|
+
exports.VueMarkdownAsync = VueMarkdownAsync;
|
|
2
87
|
//# sourceMappingURL=x-markdown.cjs2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.cjs2.js","sources":["../src/core/components.ts"],"sourcesContent":["import type { Root } from 'hast'\r\nimport type { Options as TRehypeOptions } from 'mdast-util-to-hast'\r\nimport type { PluggableList } from 'unified'\r\nimport type { PropType } from 'vue'\r\n\r\nimport type { CustomAttrs, SanitizeOptions, TVueMarkdown } from './types'\r\nimport { defineComponent, shallowRef, toRefs, watch } from 'vue'\r\n// import { useMarkdownContext } from '../components/MarkdownProvider';\r\nimport { render } from './hast-to-vnode'\r\nimport { useMarkdownProcessor } from './useProcessor'\r\n\r\nexport type { CustomAttrs, SanitizeOptions, TVueMarkdown }\r\n\r\nconst sharedProps = {\r\n markdown: {\r\n type: String as PropType<string>,\r\n default: '',\r\n },\r\n customAttrs: {\r\n type: Object as PropType<CustomAttrs>,\r\n default: () => ({}),\r\n },\r\n remarkPlugins: {\r\n type: Array as PropType<PluggableList>,\r\n default: () => [],\r\n },\r\n rehypePlugins: {\r\n type: Array as PropType<PluggableList>,\r\n default: () => [],\r\n },\r\n rehypeOptions: {\r\n type: Object as PropType<Omit<TRehypeOptions, 'file'>>,\r\n default: () => ({}),\r\n },\r\n sanitize: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n sanitizeOptions: {\r\n type: Object as PropType<SanitizeOptions>,\r\n default: () => ({}),\r\n },\r\n}\r\nconst vueMarkdownImpl = defineComponent({\r\n name: 'VueMarkdown',\r\n props: sharedProps,\r\n setup(props, { slots, attrs }) {\r\n const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } =\r\n toRefs(props)\r\n\r\n const { processor } = useMarkdownProcessor({\r\n remarkPlugins,\r\n rehypePlugins,\r\n rehypeOptions,\r\n sanitize,\r\n sanitizeOptions,\r\n })\r\n\r\n return () => {\r\n const mdast = processor.value.parse(markdown.value)\r\n const hast = processor.value.runSync(mdast) as Root\r\n return render(hast, attrs, slots, customAttrs.value)\r\n }\r\n },\r\n})\r\n\r\nconst vueMarkdownAsyncImpl = defineComponent({\r\n name: 'VueMarkdownAsync',\r\n props: sharedProps,\r\n async setup(props, { slots, attrs }) {\r\n const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } =\r\n toRefs(props)\r\n const { processor } = useMarkdownProcessor({\r\n remarkPlugins,\r\n rehypePlugins,\r\n rehypeOptions,\r\n sanitize,\r\n sanitizeOptions,\r\n })\r\n\r\n const hast = shallowRef<Root | null>(null)\r\n const process = async (): Promise<void> => {\r\n const mdast = processor.value.parse(markdown.value)\r\n hast.value = (await processor.value.run(mdast)) as Root\r\n }\r\n\r\n watch(() => [markdown.value, processor.value], process, { flush: 'sync' })\r\n\r\n await process()\r\n\r\n return () => {\r\n return hast.value ? render(hast.value, attrs, slots, customAttrs.value) : null\r\n }\r\n },\r\n})\r\n\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nexport const VueMarkdown: TVueMarkdown = vueMarkdownImpl as any\r\n\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nexport const VueMarkdownAsync: TVueMarkdown = vueMarkdownAsyncImpl as any\r\n"],"names":["
|
|
1
|
+
{"version":3,"file":"x-markdown.cjs2.js","sources":["../src/core/components.ts"],"sourcesContent":["import type { Root } from 'hast'\r\nimport type { Options as TRehypeOptions } from 'mdast-util-to-hast'\r\nimport type { PluggableList } from 'unified'\r\nimport type { PropType } from 'vue'\r\n\r\nimport type { CustomAttrs, SanitizeOptions, TVueMarkdown } from './types'\r\nimport { defineComponent, shallowRef, toRefs, watch } from 'vue'\r\n// import { useMarkdownContext } from '../components/MarkdownProvider';\r\nimport { render } from './hast-to-vnode'\r\nimport { useMarkdownProcessor } from './useProcessor'\r\n\r\nexport type { CustomAttrs, SanitizeOptions, TVueMarkdown }\r\n\r\nconst sharedProps = {\r\n markdown: {\r\n type: String as PropType<string>,\r\n default: '',\r\n },\r\n customAttrs: {\r\n type: Object as PropType<CustomAttrs>,\r\n default: () => ({}),\r\n },\r\n remarkPlugins: {\r\n type: Array as PropType<PluggableList>,\r\n default: () => [],\r\n },\r\n rehypePlugins: {\r\n type: Array as PropType<PluggableList>,\r\n default: () => [],\r\n },\r\n rehypeOptions: {\r\n type: Object as PropType<Omit<TRehypeOptions, 'file'>>,\r\n default: () => ({}),\r\n },\r\n sanitize: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n sanitizeOptions: {\r\n type: Object as PropType<SanitizeOptions>,\r\n default: () => ({}),\r\n },\r\n}\r\nconst vueMarkdownImpl = defineComponent({\r\n name: 'VueMarkdown',\r\n props: sharedProps,\r\n setup(props, { slots, attrs }) {\r\n const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } =\r\n toRefs(props)\r\n\r\n const { processor } = useMarkdownProcessor({\r\n remarkPlugins,\r\n rehypePlugins,\r\n rehypeOptions,\r\n sanitize,\r\n sanitizeOptions,\r\n })\r\n\r\n return () => {\r\n const mdast = processor.value.parse(markdown.value)\r\n const hast = processor.value.runSync(mdast) as Root\r\n return render(hast, attrs, slots, customAttrs.value)\r\n }\r\n },\r\n})\r\n\r\nconst vueMarkdownAsyncImpl = defineComponent({\r\n name: 'VueMarkdownAsync',\r\n props: sharedProps,\r\n async setup(props, { slots, attrs }) {\r\n const { markdown, remarkPlugins, rehypePlugins, rehypeOptions, sanitize, sanitizeOptions, customAttrs } =\r\n toRefs(props)\r\n const { processor } = useMarkdownProcessor({\r\n remarkPlugins,\r\n rehypePlugins,\r\n rehypeOptions,\r\n sanitize,\r\n sanitizeOptions,\r\n })\r\n\r\n const hast = shallowRef<Root | null>(null)\r\n const process = async (): Promise<void> => {\r\n const mdast = processor.value.parse(markdown.value)\r\n hast.value = (await processor.value.run(mdast)) as Root\r\n }\r\n\r\n watch(() => [markdown.value, processor.value], process, { flush: 'sync' })\r\n\r\n await process()\r\n\r\n return () => {\r\n return hast.value ? render(hast.value, attrs, slots, customAttrs.value) : null\r\n }\r\n },\r\n})\r\n\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nexport const VueMarkdown: TVueMarkdown = vueMarkdownImpl as any\r\n\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nexport const VueMarkdownAsync: TVueMarkdown = vueMarkdownAsyncImpl as any\r\n"],"names":["defineComponent","toRefs","useMarkdownProcessor","render","shallowRef","watch"],"mappings":"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"}
|