@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
package/dist/x-markdown.es10.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import rehypeKatex from
|
|
2
|
-
import rehypeRaw from
|
|
3
|
-
import remarkBreaks from
|
|
4
|
-
import remarkGfm from
|
|
5
|
-
import remarkMath from
|
|
6
|
-
import { toRefs, computed } from
|
|
7
|
-
import { rehypeAnimatedPlugin } from
|
|
1
|
+
import rehypeKatex from 'rehype-katex';
|
|
2
|
+
import rehypeRaw from 'rehype-raw';
|
|
3
|
+
import remarkBreaks from 'remark-breaks';
|
|
4
|
+
import remarkGfm from 'remark-gfm';
|
|
5
|
+
import remarkMath from 'remark-math';
|
|
6
|
+
import { toRefs, computed } from 'vue';
|
|
7
|
+
import { rehypeAnimatedPlugin } from './x-markdown.es15.js';
|
|
8
|
+
|
|
8
9
|
function usePlugins(props) {
|
|
9
10
|
const {
|
|
10
11
|
allowHtml,
|
|
@@ -43,7 +44,6 @@ function usePlugins(props) {
|
|
|
43
44
|
remarkPlugins: remark
|
|
44
45
|
};
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
47
|
+
|
|
48
|
+
export { usePlugins };
|
|
49
49
|
//# sourceMappingURL=x-markdown.es10.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es10.js","sources":["../src/hooks/usePlugins.ts"],"sourcesContent":["import type { Pluggable } from 'unified'\r\nimport rehypeKatex from 'rehype-katex'\r\nimport rehypeRaw from 'rehype-raw'\r\nimport remarkBreaks from 'remark-breaks'\r\nimport remarkGfm from 'remark-gfm'\r\nimport remarkMath from 'remark-math'\r\nimport { computed, toRefs } from 'vue'\r\nimport { rehypeAnimatedPlugin } from '../plugins/rehypePlugin'\r\n\r\nfunction usePlugins(props: any) {\r\n const {\r\n allowHtml,\r\n enableAnimate,\r\n enableLatex,\r\n enableBreaks,\r\n enableGfm,\r\n rehypePlugins,\r\n remarkPlugins,\r\n rehypePluginsAhead,\r\n remarkPluginsAhead,\r\n } = toRefs(props)\r\n\r\n const rehype = computed(() => {\r\n return [\r\n ...(rehypePluginsAhead.value as Pluggable[]),\r\n allowHtml.value && rehypeRaw,\r\n enableLatex.value && rehypeKatex,\r\n enableAnimate.value && rehypeAnimatedPlugin,\r\n ...(rehypePlugins.value as Pluggable[]),\r\n ].filter(Boolean) as Pluggable[]\r\n })\r\n\r\n const remark = computed(() => {\r\n const base: (Pluggable | { plugins: Pluggable[] })[] = [\r\n enableLatex.value && remarkMath,\r\n enableGfm.value !== false && [remarkGfm, { singleTilde: false }],\r\n enableBreaks.value && remarkBreaks,\r\n ].filter(Boolean) as (Pluggable | { plugins: Pluggable[] })[]\r\n\r\n return [\r\n ...(remarkPluginsAhead.value as (Pluggable | { plugins: Pluggable[] })[]),\r\n ...base,\r\n ...(remarkPlugins.value as (Pluggable | { plugins: Pluggable[] })[]),\r\n ]\r\n })\r\n\r\n return {\r\n rehypePlugins: rehype,\r\n remarkPlugins: remark,\r\n }\r\n}\r\nexport { usePlugins }\r\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es10.js","sources":["../src/hooks/usePlugins.ts"],"sourcesContent":["import type { Pluggable } from 'unified'\r\nimport rehypeKatex from 'rehype-katex'\r\nimport rehypeRaw from 'rehype-raw'\r\nimport remarkBreaks from 'remark-breaks'\r\nimport remarkGfm from 'remark-gfm'\r\nimport remarkMath from 'remark-math'\r\nimport { computed, toRefs } from 'vue'\r\nimport { rehypeAnimatedPlugin } from '../plugins/rehypePlugin'\r\n\r\nfunction usePlugins(props: any) {\r\n const {\r\n allowHtml,\r\n enableAnimate,\r\n enableLatex,\r\n enableBreaks,\r\n enableGfm,\r\n rehypePlugins,\r\n remarkPlugins,\r\n rehypePluginsAhead,\r\n remarkPluginsAhead,\r\n } = toRefs(props)\r\n\r\n const rehype = computed(() => {\r\n return [\r\n ...(rehypePluginsAhead.value as Pluggable[]),\r\n allowHtml.value && rehypeRaw,\r\n enableLatex.value && rehypeKatex,\r\n enableAnimate.value && rehypeAnimatedPlugin,\r\n ...(rehypePlugins.value as Pluggable[]),\r\n ].filter(Boolean) as Pluggable[]\r\n })\r\n\r\n const remark = computed(() => {\r\n const base: (Pluggable | { plugins: Pluggable[] })[] = [\r\n enableLatex.value && remarkMath,\r\n enableGfm.value !== false && [remarkGfm, { singleTilde: false }],\r\n enableBreaks.value && remarkBreaks,\r\n ].filter(Boolean) as (Pluggable | { plugins: Pluggable[] })[]\r\n\r\n return [\r\n ...(remarkPluginsAhead.value as (Pluggable | { plugins: Pluggable[] })[]),\r\n ...base,\r\n ...(remarkPlugins.value as (Pluggable | { plugins: Pluggable[] })[]),\r\n ]\r\n })\r\n\r\n return {\r\n rehypePlugins: rehype,\r\n remarkPlugins: remark,\r\n }\r\n}\r\nexport { usePlugins }\r\n"],"names":[],"mappings":";;;;;;;;AASA,SAAS,WAAW,KAAA,EAAY;AAC9B,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAO,KAAK,CAAA;AAEhB,EAAA,MAAM,MAAA,GAAS,SAAS,MAAM;AAC5B,IAAA,OAAO;AAAA,MACL,GAAI,kBAAA,CAAmB,KAAA;AAAA,MACvB,UAAU,KAAA,IAAS,SAAA;AAAA,MACnB,YAAY,KAAA,IAAS,WAAA;AAAA,MACrB,cAAc,KAAA,IAAS,oBAAA;AAAA,MACvB,GAAI,aAAA,CAAc;AAAA,KACpB,CAAE,OAAO,OAAO,CAAA;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,SAAS,MAAM;AAC5B,IAAA,MAAM,IAAA,GAAiD;AAAA,MACrD,YAAY,KAAA,IAAS,UAAA;AAAA,MACrB,SAAA,CAAU,UAAU,KAAA,IAAS,CAAC,WAAW,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,MAC/D,aAAa,KAAA,IAAS;AAAA,KACxB,CAAE,OAAO,OAAO,CAAA;AAEhB,IAAA,OAAO;AAAA,MACL,GAAI,kBAAA,CAAmB,KAAA;AAAA,MACvB,GAAG,IAAA;AAAA,MACH,GAAI,aAAA,CAAc;AAAA,KACpB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,MAAA;AAAA,IACf,aAAA,EAAe;AAAA,GACjB;AACF;;;;"}
|
package/dist/x-markdown.es11.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ref, isRef, computed } from
|
|
1
|
+
import { ref, isRef, computed } from 'vue';
|
|
2
|
+
|
|
2
3
|
const themeMap = {
|
|
3
4
|
light: "vitesse-light",
|
|
4
5
|
dark: "vitesse-dark"
|
|
@@ -47,8 +48,6 @@ function useTheme(options = {}) {
|
|
|
47
48
|
toggleMode
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
useTheme
|
|
53
|
-
};
|
|
51
|
+
|
|
52
|
+
export { themeMap, useTheme };
|
|
54
53
|
//# sourceMappingURL=x-markdown.es11.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es11.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":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es11.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":[],"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,GAAe,GAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,IAAA,IAAQ,MAAM,CAAA;AAGrG,EAAA,MAAM,OAAO,QAAA,CAAoB;AAAA,IAC/B,GAAA,EAAK,MAAO,KAAA,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,GAAe,IAAI,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,GAAS,SAAS,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,GAAc,SAAyB,MAAM;AAEjD,IAAA,MAAM,WAAA,GAAc,MAAM,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,12 @@
|
|
|
1
|
+
import { provide, inject } from 'vue';
|
|
2
|
+
|
|
3
|
+
const X_MARKDOWN_CONFIG_KEY = Symbol("x-markdown-config");
|
|
4
|
+
function provideXMarkdown(options) {
|
|
5
|
+
provide(X_MARKDOWN_CONFIG_KEY, options);
|
|
6
|
+
}
|
|
7
|
+
function useXMarkdownConfig() {
|
|
8
|
+
return inject(X_MARKDOWN_CONFIG_KEY, {});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { X_MARKDOWN_CONFIG_KEY, provideXMarkdown, useXMarkdownConfig };
|
|
12
|
+
//# sourceMappingURL=x-markdown.es12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-markdown.es12.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":[],"mappings":";;AAyBO,MAAM,qBAAA,GAAwD,OAAO,mBAAmB;AAMxF,SAAS,iBAAiB,OAAA,EAA2B;AAC1D,EAAA,OAAA,CAAQ,uBAAuB,OAAO,CAAA;AACxC;AAKO,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAO,MAAA,CAAO,qBAAA,EAAuB,EAAE,CAAA;AACzC;;;;"}
|
package/dist/x-markdown.es14.js
CHANGED
|
@@ -1,33 +1,89 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import { defineComponent, h, defineAsyncComponent } from 'vue';
|
|
2
|
+
import CodeBlock from './x-markdown.es18.js';
|
|
3
|
+
import CodeLine from './x-markdown.es19.js';
|
|
4
|
+
|
|
5
|
+
const Mermaid = defineAsyncComponent(() => import('./x-markdown.es17.js'));
|
|
6
|
+
const _sfc_main = defineComponent({
|
|
7
|
+
props: {
|
|
8
|
+
raw: { type: Object, default: () => ({}) },
|
|
9
|
+
codeXRender: { type: Object, default: () => ({}) },
|
|
10
|
+
isDark: { type: Boolean, default: false },
|
|
11
|
+
shikiTheme: {
|
|
12
|
+
type: Array,
|
|
13
|
+
default: () => ["vitesse-light", "vitesse-dark"]
|
|
14
|
+
},
|
|
15
|
+
showCodeBlockHeader: { type: Boolean, default: true },
|
|
16
|
+
stickyCodeBlockHeader: { type: Boolean, default: true },
|
|
17
|
+
codeMaxHeight: { type: String, default: void 0 },
|
|
18
|
+
enableAnimate: { type: Boolean, default: false },
|
|
19
|
+
codeBlockActions: { type: Array, default: void 0 },
|
|
20
|
+
mermaidActions: { type: Array, default: void 0 },
|
|
21
|
+
mermaidConfig: { type: Object, default: void 0 }
|
|
22
|
+
},
|
|
23
|
+
setup(props, { slots }) {
|
|
24
|
+
const { codeXRender } = props;
|
|
25
|
+
return () => {
|
|
26
|
+
if (props.raw.inline) {
|
|
27
|
+
if (codeXRender && codeXRender.inline) {
|
|
28
|
+
const renderer = codeXRender.inline;
|
|
29
|
+
if (typeof renderer === "function") {
|
|
30
|
+
return renderer(props);
|
|
23
31
|
}
|
|
32
|
+
return h(renderer, props);
|
|
24
33
|
}
|
|
25
|
-
|
|
34
|
+
return h(CodeLine, {
|
|
35
|
+
raw: props.raw,
|
|
36
|
+
isDark: props.isDark,
|
|
37
|
+
shikiTheme: props.shikiTheme,
|
|
38
|
+
enableAnimate: props.enableAnimate
|
|
39
|
+
});
|
|
26
40
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
41
|
+
const { language } = props.raw;
|
|
42
|
+
if (codeXRender && codeXRender[language]) {
|
|
43
|
+
const renderer = codeXRender[language];
|
|
44
|
+
if (typeof renderer === "function") {
|
|
45
|
+
return renderer(props);
|
|
46
|
+
}
|
|
47
|
+
return h(renderer, props);
|
|
48
|
+
}
|
|
49
|
+
if (language === "mermaid") {
|
|
50
|
+
const mermaidSlots = {};
|
|
51
|
+
Object.keys(slots).forEach((key) => {
|
|
52
|
+
if (key.startsWith("mermaid")) {
|
|
53
|
+
mermaidSlots[key] = slots[key];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return h(
|
|
57
|
+
Mermaid,
|
|
58
|
+
{
|
|
59
|
+
raw: props.raw,
|
|
60
|
+
isDark: props.isDark,
|
|
61
|
+
shikiTheme: props.shikiTheme,
|
|
62
|
+
mermaidActions: props.mermaidActions,
|
|
63
|
+
config: props.mermaidConfig
|
|
64
|
+
},
|
|
65
|
+
mermaidSlots
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return h(
|
|
69
|
+
CodeBlock,
|
|
70
|
+
{
|
|
71
|
+
code: props.raw.content || "",
|
|
72
|
+
language: props.raw.language || "text",
|
|
73
|
+
isDark: props.isDark,
|
|
74
|
+
lightTheme: props.shikiTheme[0],
|
|
75
|
+
darkTheme: props.shikiTheme[1],
|
|
76
|
+
showCodeBlockHeader: props.showCodeBlockHeader,
|
|
77
|
+
stickyCodeBlockHeader: props.stickyCodeBlockHeader,
|
|
78
|
+
codeMaxHeight: props.codeMaxHeight,
|
|
79
|
+
enableAnimate: props.enableAnimate,
|
|
80
|
+
codeBlockActions: props.codeBlockActions
|
|
81
|
+
},
|
|
82
|
+
slots
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
export { _sfc_main as default };
|
|
33
89
|
//# sourceMappingURL=x-markdown.es14.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es14.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"x-markdown.es14.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":[],"mappings":"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"}
|
package/dist/x-markdown.es15.js
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { visit } from 'unist-util-visit';
|
|
2
|
+
|
|
3
|
+
function rehypeAnimatedPlugin() {
|
|
4
|
+
return (tree) => {
|
|
5
|
+
visit(tree, "element", (node) => {
|
|
6
|
+
if (["p", "h1", "h2", "h3", "h4", "h5", "h6", "li", "strong", "th", "td"].includes(node.tagName) && node.children) {
|
|
7
|
+
const newChildren = [];
|
|
8
|
+
for (const child of node.children) {
|
|
9
|
+
if (child.type === "text") {
|
|
10
|
+
const Segmenter = Intl.Segmenter;
|
|
11
|
+
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);
|
|
12
|
+
words.forEach((word) => {
|
|
13
|
+
newChildren.push({
|
|
14
|
+
children: [{ type: "text", value: word }],
|
|
15
|
+
properties: {
|
|
16
|
+
className: "x-md-animated-word"
|
|
17
|
+
},
|
|
18
|
+
tagName: "span",
|
|
19
|
+
type: "element"
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
newChildren.push(child);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
node.children = newChildren;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { rehypeAnimatedPlugin };
|
|
5
33
|
//# sourceMappingURL=x-markdown.es15.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es15.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"x-markdown.es15.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":[],"mappings":";;AAMO,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAO,CAAC,IAAA,KAAe;AACrB,IAAA,KAAA,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.es16.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import _sfc_main from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
1
|
+
import _sfc_main from './x-markdown.es14.js';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export { _sfc_main as default };
|
|
6
6
|
//# sourceMappingURL=x-markdown.es16.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es16.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es16.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/x-markdown.es17.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import _sfc_main from
|
|
1
|
+
import _sfc_main from './x-markdown.es25.js';
|
|
2
2
|
/* empty css */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export { _sfc_main as default };
|
|
8
7
|
//# sourceMappingURL=x-markdown.es17.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es17.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es17.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
package/dist/x-markdown.es18.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import _sfc_main from
|
|
1
|
+
import _sfc_main from './x-markdown.es20.js';
|
|
2
2
|
/* empty css */
|
|
3
|
-
import _export_sfc from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
3
|
+
import _export_sfc from './x-markdown.es22.js';
|
|
4
|
+
|
|
5
|
+
const CodeBlock = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5e8d09a0"]]);
|
|
6
|
+
|
|
7
|
+
export { CodeBlock as default };
|
|
8
8
|
//# sourceMappingURL=x-markdown.es18.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es18.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es18.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/x-markdown.es19.js
CHANGED
|
@@ -1,207 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const _hoisted_5 = { class: "x-md-code-header__right" };
|
|
9
|
-
const _hoisted_6 = ["title", "disabled", "onClick"];
|
|
10
|
-
const _hoisted_7 = {
|
|
11
|
-
key: 0,
|
|
12
|
-
class: "x-md-copy-icon",
|
|
13
|
-
width: "16",
|
|
14
|
-
height: "16",
|
|
15
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
16
|
-
viewBox: "0 0 1024 1024"
|
|
17
|
-
};
|
|
18
|
-
const _hoisted_8 = {
|
|
19
|
-
key: 1,
|
|
20
|
-
class: "x-md-copy-icon",
|
|
21
|
-
width: "16",
|
|
22
|
-
height: "16",
|
|
23
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
24
|
-
viewBox: "0 0 1024 1024"
|
|
25
|
-
};
|
|
26
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
27
|
-
...{
|
|
28
|
-
name: "CodeBlock"
|
|
29
|
-
},
|
|
30
|
-
__name: "index",
|
|
31
|
-
props: {
|
|
32
|
-
code: {},
|
|
33
|
-
language: {},
|
|
34
|
-
lightTheme: { default: "vitesse-light" },
|
|
35
|
-
darkTheme: { default: "vitesse-dark" },
|
|
36
|
-
isDark: { type: Boolean, default: false },
|
|
37
|
-
colorReplacements: {},
|
|
38
|
-
codeMaxHeight: {},
|
|
39
|
-
showCodeBlockHeader: { type: Boolean, default: true },
|
|
40
|
-
enableAnimate: { type: Boolean, default: false },
|
|
41
|
-
codeBlockActions: { default: void 0 },
|
|
42
|
-
stickyCodeBlockHeader: { type: Boolean, default: true }
|
|
43
|
-
},
|
|
44
|
-
setup(__props, { expose: __expose }) {
|
|
45
|
-
const { copy, copied } = useClipboard({ copiedDuring: 2e3 });
|
|
46
|
-
const collapsed = ref(false);
|
|
47
|
-
const syntaxCodeBlockRef = ref(null);
|
|
48
|
-
const toggleCollapse = () => {
|
|
49
|
-
collapsed.value = !collapsed.value;
|
|
50
|
-
};
|
|
51
|
-
const props = __props;
|
|
52
|
-
const code = computed(() => props.code.trim());
|
|
53
|
-
const language = computed(() => props.language || "text");
|
|
54
|
-
const normalizedActions = computed(() => {
|
|
55
|
-
return props.codeBlockActions || [];
|
|
56
|
-
});
|
|
57
|
-
const filteredActions = computed(() => {
|
|
58
|
-
return normalizedActions.value.filter((action) => {
|
|
59
|
-
if (!action.show) return true;
|
|
60
|
-
return action.show(slotProps.value);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
const slotProps = computed(() => ({
|
|
64
|
-
language: language.value,
|
|
65
|
-
code: code.value,
|
|
66
|
-
copy,
|
|
67
|
-
copied: copied.value,
|
|
68
|
-
collapsed: collapsed.value,
|
|
69
|
-
toggleCollapse
|
|
70
|
-
}));
|
|
71
|
-
function renderActionIcon(action) {
|
|
72
|
-
if (!action.icon) return null;
|
|
73
|
-
if (typeof action.icon === "string") {
|
|
74
|
-
return h("span", {
|
|
75
|
-
class: "x-md-action-icon",
|
|
76
|
-
innerHTML: action.icon
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (typeof action.icon === "function") {
|
|
80
|
-
try {
|
|
81
|
-
const result = action.icon(slotProps.value);
|
|
82
|
-
if (result && typeof result === "object" && "__v_isVNode" in result) {
|
|
83
|
-
return result;
|
|
84
|
-
}
|
|
85
|
-
} catch {
|
|
86
|
-
}
|
|
87
|
-
return h(action.icon);
|
|
88
|
-
}
|
|
89
|
-
return h(action.icon);
|
|
90
|
-
}
|
|
91
|
-
function handleActionClick(action) {
|
|
92
|
-
if (action.disabled) return;
|
|
93
|
-
action.onClick?.(slotProps.value);
|
|
94
|
-
}
|
|
95
|
-
__expose({
|
|
96
|
-
copy,
|
|
97
|
-
copied,
|
|
98
|
-
collapsed,
|
|
99
|
-
toggleCollapse,
|
|
100
|
-
syntaxCodeBlockRef
|
|
101
|
-
});
|
|
102
|
-
return (_ctx, _cache) => {
|
|
103
|
-
return openBlock(), createElementBlock("div", {
|
|
104
|
-
class: normalizeClass(["x-md-code-block", { "x-md-code-block--dark": props.isDark }])
|
|
105
|
-
}, [
|
|
106
|
-
__props.showCodeBlockHeader ? (openBlock(), createElementBlock("div", {
|
|
107
|
-
key: 0,
|
|
108
|
-
class: normalizeClass(["x-md-code-header-wrapper", [{ "x-md-code-header-wrapper--sticky": props.stickyCodeBlockHeader }, { "x-md-code-header-wrapper--collapsed": collapsed.value }]])
|
|
109
|
-
}, [
|
|
110
|
-
createElementVNode("div", _hoisted_1, [
|
|
111
|
-
renderSlot(_ctx.$slots, "codeHeader", {
|
|
112
|
-
language: language.value,
|
|
113
|
-
code: code.value,
|
|
114
|
-
copy: unref(copy),
|
|
115
|
-
copied: unref(copied),
|
|
116
|
-
collapsed: collapsed.value,
|
|
117
|
-
toggleCollapse
|
|
118
|
-
}, () => [
|
|
119
|
-
createElementVNode("div", _hoisted_2, [
|
|
120
|
-
createElementVNode("button", {
|
|
121
|
-
class: normalizeClass(["x-md-collapse-btn", { "x-md-collapse-btn--collapsed": collapsed.value }]),
|
|
122
|
-
onClick: toggleCollapse,
|
|
123
|
-
title: collapsed.value ? "展开代码" : "折叠代码"
|
|
124
|
-
}, [..._cache[1] || (_cache[1] = [
|
|
125
|
-
createElementVNode("svg", {
|
|
126
|
-
class: "x-md-collapse-icon",
|
|
127
|
-
viewBox: "0 0 24 24",
|
|
128
|
-
width: "14",
|
|
129
|
-
height: "14",
|
|
130
|
-
fill: "none",
|
|
131
|
-
stroke: "currentColor",
|
|
132
|
-
"stroke-width": "2",
|
|
133
|
-
"stroke-linecap": "round",
|
|
134
|
-
"stroke-linejoin": "round"
|
|
135
|
-
}, [
|
|
136
|
-
createElementVNode("polyline", { points: "6 9 12 15 18 9" })
|
|
137
|
-
], -1)
|
|
138
|
-
])], 10, _hoisted_3),
|
|
139
|
-
createElementVNode("span", _hoisted_4, toDisplayString(language.value), 1)
|
|
140
|
-
]),
|
|
141
|
-
createElementVNode("div", _hoisted_5, [
|
|
142
|
-
renderSlot(_ctx.$slots, "codeActions", {
|
|
143
|
-
code: code.value,
|
|
144
|
-
copy: unref(copy),
|
|
145
|
-
copied: unref(copied)
|
|
146
|
-
}, () => [
|
|
147
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(filteredActions.value, (action) => {
|
|
148
|
-
return openBlock(), createElementBlock("button", {
|
|
149
|
-
key: action.key,
|
|
150
|
-
class: normalizeClass(["x-md-action-btn", [action.class, { "x-md-action-btn--disabled": action.disabled }]]),
|
|
151
|
-
style: normalizeStyle(action.style),
|
|
152
|
-
title: action.title,
|
|
153
|
-
disabled: action.disabled,
|
|
154
|
-
onClick: ($event) => handleActionClick(action)
|
|
155
|
-
}, [
|
|
156
|
-
action.icon ? (openBlock(), createBlock(resolveDynamicComponent(renderActionIcon(action)), { key: 0 })) : createCommentVNode("", true)
|
|
157
|
-
], 14, _hoisted_6);
|
|
158
|
-
}), 128)),
|
|
159
|
-
createElementVNode("button", {
|
|
160
|
-
class: normalizeClass(["x-md-copy-btn", { "x-md-copy-btn--copied": unref(copied) }]),
|
|
161
|
-
onClick: _cache[0] || (_cache[0] = ($event) => unref(copy)(code.value))
|
|
162
|
-
}, [
|
|
163
|
-
unref(copied) ? (openBlock(), createElementBlock("svg", _hoisted_7, [..._cache[2] || (_cache[2] = [
|
|
164
|
-
createElementVNode("path", {
|
|
165
|
-
fill: "currentColor",
|
|
166
|
-
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"
|
|
167
|
-
}, null, -1)
|
|
168
|
-
])])) : (openBlock(), createElementBlock("svg", _hoisted_8, [..._cache[3] || (_cache[3] = [
|
|
169
|
-
createElementVNode("path", {
|
|
170
|
-
fill: "currentColor",
|
|
171
|
-
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"
|
|
172
|
-
}, null, -1),
|
|
173
|
-
createElementVNode("path", {
|
|
174
|
-
fill: "currentColor",
|
|
175
|
-
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"
|
|
176
|
-
}, null, -1)
|
|
177
|
-
])]))
|
|
178
|
-
], 2)
|
|
179
|
-
], true)
|
|
180
|
-
])
|
|
181
|
-
], true)
|
|
182
|
-
])
|
|
183
|
-
], 2)) : createCommentVNode("", true),
|
|
184
|
-
createElementVNode("div", {
|
|
185
|
-
class: normalizeClass(["x-md-code-body", { "x-md-code-body--collapsed": collapsed.value }])
|
|
186
|
-
}, [
|
|
187
|
-
createVNode(SyntaxCodeBlock, {
|
|
188
|
-
ref_key: "syntaxCodeBlockRef",
|
|
189
|
-
ref: syntaxCodeBlockRef,
|
|
190
|
-
code: code.value,
|
|
191
|
-
language: language.value,
|
|
192
|
-
"light-theme": props.lightTheme,
|
|
193
|
-
"dark-theme": props.darkTheme,
|
|
194
|
-
"is-dark": props.isDark,
|
|
195
|
-
"color-replacements": props.colorReplacements,
|
|
196
|
-
"code-max-height": props.codeMaxHeight,
|
|
197
|
-
"enable-animate": props.enableAnimate
|
|
198
|
-
}, null, 8, ["code", "language", "light-theme", "dark-theme", "is-dark", "color-replacements", "code-max-height", "enable-animate"])
|
|
199
|
-
], 2)
|
|
200
|
-
], 2);
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
export {
|
|
205
|
-
_sfc_main as default
|
|
206
|
-
};
|
|
1
|
+
import _sfc_main from './x-markdown.es23.js';
|
|
2
|
+
/* empty css */
|
|
3
|
+
import _export_sfc from './x-markdown.es22.js';
|
|
4
|
+
|
|
5
|
+
const CodeLine = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d2fd90dc"]]);
|
|
6
|
+
|
|
7
|
+
export { CodeLine as default };
|
|
207
8
|
//# sourceMappingURL=x-markdown.es19.js.map
|