@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.es19.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":["_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot","_unref","_toDisplayString","_Fragment","_renderList","_normalizeStyle","_createBlock","_resolveDynamicComponent","_openBlock","_createVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"x-markdown.es19.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/x-markdown.es2.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { defineComponent, toRefs, shallowRef, watch } from
|
|
2
|
-
import { render } from
|
|
3
|
-
import { useMarkdownProcessor } from
|
|
1
|
+
import { defineComponent, toRefs, shallowRef, watch } from 'vue';
|
|
2
|
+
import { render } from './x-markdown.es4.js';
|
|
3
|
+
import { useMarkdownProcessor } from './x-markdown.es5.js';
|
|
4
|
+
|
|
4
5
|
const sharedProps = {
|
|
5
6
|
markdown: {
|
|
6
7
|
type: String,
|
|
@@ -76,8 +77,6 @@ const vueMarkdownAsyncImpl = defineComponent({
|
|
|
76
77
|
});
|
|
77
78
|
const VueMarkdown = vueMarkdownImpl;
|
|
78
79
|
const VueMarkdownAsync = vueMarkdownAsyncImpl;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
VueMarkdownAsync
|
|
82
|
-
};
|
|
80
|
+
|
|
81
|
+
export { VueMarkdown, VueMarkdownAsync };
|
|
83
82
|
//# sourceMappingURL=x-markdown.es2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es2.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":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-markdown.es2.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":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { defineComponent, ref, computed, createElementBlock, openBlock, normalizeClass, createCommentVNode, createElementVNode, renderSlot, unref, toDisplayString, Fragment, renderList, normalizeStyle, createBlock, resolveDynamicComponent, createVNode, h } from 'vue';
|
|
2
|
+
import { useClipboard } from './x-markdown.es27.js';
|
|
3
|
+
import SyntaxCodeBlock from './x-markdown.es30.js';
|
|
4
|
+
|
|
5
|
+
const _hoisted_1 = { class: "x-md-code-header" };
|
|
6
|
+
const _hoisted_2 = { class: "x-md-code-header__left" };
|
|
7
|
+
const _hoisted_3 = ["title"];
|
|
8
|
+
const _hoisted_4 = { class: "x-md-code-lang" };
|
|
9
|
+
const _hoisted_5 = { class: "x-md-code-header__right" };
|
|
10
|
+
const _hoisted_6 = ["title", "disabled", "onClick"];
|
|
11
|
+
const _hoisted_7 = {
|
|
12
|
+
key: 0,
|
|
13
|
+
class: "x-md-copy-icon",
|
|
14
|
+
width: "16",
|
|
15
|
+
height: "16",
|
|
16
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
17
|
+
viewBox: "0 0 1024 1024"
|
|
18
|
+
};
|
|
19
|
+
const _hoisted_8 = {
|
|
20
|
+
key: 1,
|
|
21
|
+
class: "x-md-copy-icon",
|
|
22
|
+
width: "16",
|
|
23
|
+
height: "16",
|
|
24
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
25
|
+
viewBox: "0 0 1024 1024"
|
|
26
|
+
};
|
|
27
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
28
|
+
...{
|
|
29
|
+
name: "CodeBlock"
|
|
30
|
+
},
|
|
31
|
+
__name: "index",
|
|
32
|
+
props: {
|
|
33
|
+
code: {},
|
|
34
|
+
language: {},
|
|
35
|
+
lightTheme: { default: "vitesse-light" },
|
|
36
|
+
darkTheme: { default: "vitesse-dark" },
|
|
37
|
+
isDark: { type: Boolean, default: false },
|
|
38
|
+
colorReplacements: {},
|
|
39
|
+
codeMaxHeight: {},
|
|
40
|
+
showCodeBlockHeader: { type: Boolean, default: true },
|
|
41
|
+
enableAnimate: { type: Boolean, default: false },
|
|
42
|
+
codeBlockActions: { default: void 0 },
|
|
43
|
+
stickyCodeBlockHeader: { type: Boolean, default: true }
|
|
44
|
+
},
|
|
45
|
+
setup(__props, { expose: __expose }) {
|
|
46
|
+
const { copy, copied } = useClipboard({ copiedDuring: 2e3 });
|
|
47
|
+
const collapsed = ref(false);
|
|
48
|
+
const syntaxCodeBlockRef = ref(null);
|
|
49
|
+
const toggleCollapse = () => {
|
|
50
|
+
collapsed.value = !collapsed.value;
|
|
51
|
+
};
|
|
52
|
+
const props = __props;
|
|
53
|
+
const code = computed(() => props.code.trim());
|
|
54
|
+
const language = computed(() => props.language || "text");
|
|
55
|
+
const normalizedActions = computed(() => {
|
|
56
|
+
return props.codeBlockActions || [];
|
|
57
|
+
});
|
|
58
|
+
const filteredActions = computed(() => {
|
|
59
|
+
return normalizedActions.value.filter((action) => {
|
|
60
|
+
if (!action.show) return true;
|
|
61
|
+
return action.show(slotProps.value);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
const slotProps = computed(() => ({
|
|
65
|
+
language: language.value,
|
|
66
|
+
code: code.value,
|
|
67
|
+
copy,
|
|
68
|
+
copied: copied.value,
|
|
69
|
+
collapsed: collapsed.value,
|
|
70
|
+
toggleCollapse
|
|
71
|
+
}));
|
|
72
|
+
function renderActionIcon(action) {
|
|
73
|
+
if (!action.icon) return null;
|
|
74
|
+
if (typeof action.icon === "string") {
|
|
75
|
+
return h("span", {
|
|
76
|
+
class: "x-md-action-icon",
|
|
77
|
+
innerHTML: action.icon
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (typeof action.icon === "function") {
|
|
81
|
+
try {
|
|
82
|
+
const result = action.icon(slotProps.value);
|
|
83
|
+
if (result && typeof result === "object" && "__v_isVNode" in result) {
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
} catch {
|
|
87
|
+
}
|
|
88
|
+
return h(action.icon);
|
|
89
|
+
}
|
|
90
|
+
return h(action.icon);
|
|
91
|
+
}
|
|
92
|
+
function handleActionClick(action) {
|
|
93
|
+
if (action.disabled) return;
|
|
94
|
+
action.onClick?.(slotProps.value);
|
|
95
|
+
}
|
|
96
|
+
__expose({
|
|
97
|
+
copy,
|
|
98
|
+
copied,
|
|
99
|
+
collapsed,
|
|
100
|
+
toggleCollapse,
|
|
101
|
+
syntaxCodeBlockRef
|
|
102
|
+
});
|
|
103
|
+
return (_ctx, _cache) => {
|
|
104
|
+
return openBlock(), createElementBlock("div", {
|
|
105
|
+
class: normalizeClass(["x-md-code-block", { "x-md-code-block--dark": props.isDark }])
|
|
106
|
+
}, [
|
|
107
|
+
__props.showCodeBlockHeader ? (openBlock(), createElementBlock("div", {
|
|
108
|
+
key: 0,
|
|
109
|
+
class: normalizeClass(["x-md-code-header-wrapper", [{ "x-md-code-header-wrapper--sticky": props.stickyCodeBlockHeader }, { "x-md-code-header-wrapper--collapsed": collapsed.value }]])
|
|
110
|
+
}, [
|
|
111
|
+
createElementVNode("div", _hoisted_1, [
|
|
112
|
+
renderSlot(_ctx.$slots, "codeHeader", {
|
|
113
|
+
language: language.value,
|
|
114
|
+
code: code.value,
|
|
115
|
+
copy: unref(copy),
|
|
116
|
+
copied: unref(copied),
|
|
117
|
+
collapsed: collapsed.value,
|
|
118
|
+
toggleCollapse
|
|
119
|
+
}, () => [
|
|
120
|
+
createElementVNode("div", _hoisted_2, [
|
|
121
|
+
createElementVNode("button", {
|
|
122
|
+
class: normalizeClass(["x-md-collapse-btn", { "x-md-collapse-btn--collapsed": collapsed.value }]),
|
|
123
|
+
onClick: toggleCollapse,
|
|
124
|
+
title: collapsed.value ? "展开代码" : "折叠代码"
|
|
125
|
+
}, [..._cache[1] || (_cache[1] = [
|
|
126
|
+
createElementVNode("svg", {
|
|
127
|
+
class: "x-md-collapse-icon",
|
|
128
|
+
viewBox: "0 0 24 24",
|
|
129
|
+
width: "14",
|
|
130
|
+
height: "14",
|
|
131
|
+
fill: "none",
|
|
132
|
+
stroke: "currentColor",
|
|
133
|
+
"stroke-width": "2",
|
|
134
|
+
"stroke-linecap": "round",
|
|
135
|
+
"stroke-linejoin": "round"
|
|
136
|
+
}, [
|
|
137
|
+
createElementVNode("polyline", { points: "6 9 12 15 18 9" })
|
|
138
|
+
], -1)
|
|
139
|
+
])], 10, _hoisted_3),
|
|
140
|
+
createElementVNode("span", _hoisted_4, toDisplayString(language.value), 1)
|
|
141
|
+
]),
|
|
142
|
+
createElementVNode("div", _hoisted_5, [
|
|
143
|
+
renderSlot(_ctx.$slots, "codeActions", {
|
|
144
|
+
code: code.value,
|
|
145
|
+
copy: unref(copy),
|
|
146
|
+
copied: unref(copied)
|
|
147
|
+
}, () => [
|
|
148
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(filteredActions.value, (action) => {
|
|
149
|
+
return openBlock(), createElementBlock("button", {
|
|
150
|
+
key: action.key,
|
|
151
|
+
class: normalizeClass(["x-md-action-btn", [action.class, { "x-md-action-btn--disabled": action.disabled }]]),
|
|
152
|
+
style: normalizeStyle(action.style),
|
|
153
|
+
title: action.title,
|
|
154
|
+
disabled: action.disabled,
|
|
155
|
+
onClick: ($event) => handleActionClick(action)
|
|
156
|
+
}, [
|
|
157
|
+
action.icon ? (openBlock(), createBlock(resolveDynamicComponent(renderActionIcon(action)), { key: 0 })) : createCommentVNode("", true)
|
|
158
|
+
], 14, _hoisted_6);
|
|
159
|
+
}), 128)),
|
|
160
|
+
createElementVNode("button", {
|
|
161
|
+
class: normalizeClass(["x-md-copy-btn", { "x-md-copy-btn--copied": unref(copied) }]),
|
|
162
|
+
onClick: _cache[0] || (_cache[0] = ($event) => unref(copy)(code.value))
|
|
163
|
+
}, [
|
|
164
|
+
unref(copied) ? (openBlock(), createElementBlock("svg", _hoisted_7, [..._cache[2] || (_cache[2] = [
|
|
165
|
+
createElementVNode("path", {
|
|
166
|
+
fill: "currentColor",
|
|
167
|
+
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"
|
|
168
|
+
}, null, -1)
|
|
169
|
+
])])) : (openBlock(), createElementBlock("svg", _hoisted_8, [..._cache[3] || (_cache[3] = [
|
|
170
|
+
createElementVNode("path", {
|
|
171
|
+
fill: "currentColor",
|
|
172
|
+
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"
|
|
173
|
+
}, null, -1),
|
|
174
|
+
createElementVNode("path", {
|
|
175
|
+
fill: "currentColor",
|
|
176
|
+
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"
|
|
177
|
+
}, null, -1)
|
|
178
|
+
])]))
|
|
179
|
+
], 2)
|
|
180
|
+
], true)
|
|
181
|
+
])
|
|
182
|
+
], true)
|
|
183
|
+
])
|
|
184
|
+
], 2)) : createCommentVNode("", true),
|
|
185
|
+
createElementVNode("div", {
|
|
186
|
+
class: normalizeClass(["x-md-code-body", { "x-md-code-body--collapsed": collapsed.value }])
|
|
187
|
+
}, [
|
|
188
|
+
createVNode(SyntaxCodeBlock, {
|
|
189
|
+
ref_key: "syntaxCodeBlockRef",
|
|
190
|
+
ref: syntaxCodeBlockRef,
|
|
191
|
+
code: code.value,
|
|
192
|
+
language: language.value,
|
|
193
|
+
"light-theme": props.lightTheme,
|
|
194
|
+
"dark-theme": props.darkTheme,
|
|
195
|
+
"is-dark": props.isDark,
|
|
196
|
+
"color-replacements": props.colorReplacements,
|
|
197
|
+
"code-max-height": props.codeMaxHeight,
|
|
198
|
+
"enable-animate": props.enableAnimate
|
|
199
|
+
}, null, 8, ["code", "language", "light-theme", "dark-theme", "is-dark", "color-replacements", "code-max-height", "enable-animate"])
|
|
200
|
+
], 2)
|
|
201
|
+
], 2);
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
export { _sfc_main as default };
|
|
207
|
+
//# sourceMappingURL=x-markdown.es20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-markdown.es20.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":["_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot","_unref","_toDisplayString","_Fragment","_renderList","_normalizeStyle","_createBlock","_resolveDynamicComponent","_openBlock","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHA,IAAA,MAAM,EAAE,MAAM,MAAA,EAAO,GAAI,aAAa,EAAE,YAAA,EAAc,KAAM,CAAA;AAE5D,IAAA,MAAM,SAAA,GAAY,IAAI,KAAK,CAAA;AAE3B,IAAA,MAAM,kBAAA,GAAqB,IAAiD,IAAI,CAAA;AAEhF,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAA,SAAA,CAAU,KAAA,GAAQ,CAAC,SAAA,CAAU,KAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA;AAUd,IAAA,MAAM,OAAO,QAAA,CAAS,MAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAE7C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAM,KAAA,CAAM,YAAY,MAAM,CAAA;AAExD,IAAA,MAAM,iBAAA,GAAoB,SAA4B,MAAM;AAC1D,MAAA,OAAO,KAAA,CAAM,oBAAoB,EAAC;AAAA,IACpC,CAAC,CAAA;AAED,IAAA,MAAM,eAAA,GAAkB,SAA4B,MAAM;AACxD,MAAA,OAAO,iBAAA,CAAkB,KAAA,CAAM,MAAA,CAAO,CAAC,MAAA,KAAW;AAChD,QAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAO,IAAA;AACzB,QAAA,OAAO,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAAA,MACpC,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,SAA6B,OAAO;AAAA,MACpD,UAAU,QAAA,CAAS,KAAA;AAAA,MACnB,MAAM,IAAA,CAAK,KAAA;AAAA,MACX,IAAA;AAAA,MACA,QAAQ,MAAA,CAAO,KAAA;AAAA,MACf,WAAW,SAAA,CAAU,KAAA;AAAA,MACrB;AAAA,KACF,CAAE,CAAA;AAEF,IAAA,SAAS,iBAAiB,MAAA,EAAuC;AAC/D,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAO,IAAA;AAEzB,MAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,OAAO,EAAE,MAAA,EAAQ;AAAA,UACf,KAAA,EAAO,kBAAA;AAAA,UACP,WAAW,MAAA,CAAO;AAAA,SACnB,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACrC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAU,MAAA,CAAO,IAAA,CAA8C,SAAA,CAAU,KAAK,CAAA;AACpF,UAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,iBAAiB,MAAA,EAAQ;AACnE,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,OAAO,CAAA,CAAE,OAAO,IAAW,CAAA;AAAA,MAC7B;AAEA,MAAA,OAAO,CAAA,CAAE,OAAO,IAAW,CAAA;AAAA,IAC7B;AAEA,IAAA,SAAS,kBAAkB,MAAA,EAAyB;AAClD,MAAA,IAAI,OAAO,QAAA,EAAU;AACrB,MAAA,MAAA,CAAO,OAAA,GAAU,UAAU,KAAK,CAAA;AAAA,IAClC;AAEA,IAAA,QAAA,CAAa;AAAA,MACX,IAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACD,CAAA;;0BArMCA,kBAAA,CAwGM,KAAA,EAAA;AAAA,QAxGD,KAAA,EAAKC,eAAA,CAAC,iBAAA,EAAiB,EAAA,uBAAA,EAAoC,KAAA,CAAM,MAAA,EAAM,CAAA;AAAA;QAGlE,OAAA,CAAA,mBAAA,iBADRD,mBAwFM,KAAA,EAAA;AAAA;UAtFJ,uBAAM,0BAAA,EAA0B,CAAA,EAAA,kCAAA,EACc,KAAA,CAAM,qBAAA,6CAAkE,SAAA,CAAA,KAAA,EAAS,CAAA,CAAA;AAAA;UAE/HE,kBAAA,CAkFM,OAlFN,UAAA,EAkFM;AAAA,YAjFJC,UAAA,CAgFO,IAAA,CAAA,MAAA,EAAA,YAAA,EAAA;AAAA,cA9EJ,UAAU,QAAA,CAAA,KAAA;AAAA,cACV,MAAM,IAAA,CAAA,KAAA;AAAA,cACN,IAAA,EAAMC,MAAA,IAAA,CAAA;AAAA,cACN,MAAA,EAAQA,MAAA,MAAA,CAAA;AAAA,cACR,WAAW,SAAA,CAAA,KAAA;AAAA,cACX;AAAA,eAPH,MAgFO;AAAA,cAvELF,kBAAA,CAsBM,OAtBN,UAAA,EAsBM;AAAA,gBArBJA,mBAmBS,QAAA,EAAA;AAAA,kBAlBP,KAAA,EAAKD,eAAA,CAAC,mBAAA,EAAmB,EAAA,8BAAA,EACiB,SAAA,CAAA,KAAA,EAAS,CAAA,CAAA;AAAA,kBAClD,OAAA,EAAO,cAAA;AAAA,kBACP,KAAA,EAAO,SAAA,CAAA,KAAA,GAAS,MAAA,GAAA;AAAA;kBAEjBC,mBAYM,KAAA,EAAA;AAAA,oBAXJ,KAAA,EAAM,oBAAA;AAAA,oBACN,OAAA,EAAQ,WAAA;AAAA,oBACR,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,cAAA,EAAa,GAAA;AAAA,oBACb,gBAAA,EAAe,OAAA;AAAA,oBACf,iBAAA,EAAgB;AAAA;oBAEhBA,kBAAA,CAA6C,UAAA,EAAA,EAAnC,MAAA,EAAO,kBAAgB;AAAA;;gBAGrCA,mBAAkD,MAAA,EAAlD,UAAA,EAAkDG,gBAAlB,QAAA,CAAA,KAAQ,GAAA,CAAA;AAAA;cAE1CH,kBAAA,CA+CM,OA/CN,UAAA,EA+CM;AAAA,gBA9CJC,UAAA,CA6CS,IAAA,CAAA,MAAA,EAAA,aAAA,EAAA;AAAA,kBA7CiB,MAAM,IAAA,CAAA,KAAA;AAAA,kBAAO,IAAA,EAAMC,MAAA,IAAA,CAAA;AAAA,kBAAO,MAAA,EAAQA,MAAA,MAAA;AAAA,mBAA5D,MA6CS;AAAA,oCA5CPJ,kBAAA,CAWSM,QAAA,EAAA,MAAAC,UAAA,CAVU,eAAA,CAAA,KAAA,EAAe,CAAzB,MAAA,KAAM;wCADfP,kBAAA,CAWS,QAAA,EAAA;AAAA,sBATN,KAAK,MAAA,CAAO,GAAA;AAAA,sBACb,KAAA,EAAKC,cAAA,CAAA,CAAC,iBAAA,EAAiB,CACd,MAAA,CAAO,KAAA,EAAK,EAAA,2BAAA,EAAiC,MAAA,CAAO,QAAA,EAAQ,CAAA,CAAA,CAAA;AAAA,sBACpE,KAAA,EAAKO,cAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,sBACnB,OAAO,MAAA,CAAO,KAAA;AAAA,sBACd,UAAU,MAAA,CAAO,QAAA;AAAA,sBACjB,OAAA,EAAK,CAAA,MAAA,KAAE,iBAAA,CAAkB,MAAM;AAAA;sBAEgB,OAAO,IAAA,iBAAvDC,WAAA,CAA+DC,wBAA/C,gBAAA,CAAiB,MAAM,CAAA,CAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,CAAA;;;kBAEvCR,mBA+BS,QAAA,EAAA;AAAA,oBA/BD,KAAA,EAAKD,cAAA,CAAA,CAAC,eAAA,EAAe,EAAA,yBAAoCG,KAAA,CAAA,MAAA,CAAA,EAAM,CAAA,CAAA;AAAA,oBAAK,OAAA,EAAK,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAEA,KAAA,CAAA,IAAA,CAAA,CAAK,KAAA,KAAI,CAAA;AAAA;oBAElFA,KAAA,CAAA,MAAA,CAAA,IADRO,SAAA,IAAAX,kBAAA,CAYM,KAAA,EAZN,UAAA,EAYM,CAAA,GAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA;AAAA,sBAJJE,mBAGE,MAAA,EAAA;AAAA,wBAFA,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;6BAGNS,SAAA,IAAAX,kBAAA,CAgBM,KAAA,EAhBN,UAAA,EAgBM,CAAA,GAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA;AAAA,sBARJE,mBAGE,MAAA,EAAA;AAAA,wBAFA,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;sBAEJA,mBAGE,MAAA,EAAA;AAAA,wBAFA,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;;;;;;;;QASpBA,mBAYM,KAAA,EAAA;AAAA,UAZD,KAAA,EAAKD,eAAA,CAAC,gBAAA,EAAgB,EAAA,2BAAA,EAAwC,SAAA,CAAA,KAAA,EAAS,CAAA;AAAA;UAC1EW,YAUE,eAAA,EAAA;AAAA,qBATI,oBAAA;AAAA,YAAJ,GAAA,EAAI,kBAAA;AAAA,YACH,MAAM,IAAA,CAAA,KAAA;AAAA,YACN,UAAU,QAAA,CAAA,KAAA;AAAA,YACV,eAAa,KAAA,CAAM,UAAA;AAAA,YACnB,cAAY,KAAA,CAAM,SAAA;AAAA,YAClB,WAAS,KAAA,CAAM,MAAA;AAAA,YACf,sBAAoB,KAAA,CAAM,iBAAA;AAAA,YAC1B,mBAAiB,KAAA,CAAM,aAAA;AAAA,YACvB,kBAAgB,KAAA,CAAM;AAAA;;;;;;;;;"}
|
package/dist/x-markdown.es22.js
CHANGED
|
@@ -1,75 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
__name: "index",
|
|
6
|
-
props: {
|
|
7
|
-
raw: { default: () => ({}) },
|
|
8
|
-
isDark: { type: Boolean, default: false },
|
|
9
|
-
shikiTheme: { default: () => ["vitesse-light", "vitesse-dark"] },
|
|
10
|
-
enableAnimate: { type: Boolean, default: false }
|
|
11
|
-
},
|
|
12
|
-
setup(__props) {
|
|
13
|
-
let getTokenStyleObjectFn = null;
|
|
14
|
-
onMounted(async () => {
|
|
15
|
-
const mod = await Function(`return import('${SHIKI_CORE_PKG}')`)().catch(() => {
|
|
16
|
-
return { getTokenStyleObject: () => ({}) };
|
|
17
|
-
});
|
|
18
|
-
getTokenStyleObjectFn = mod.getTokenStyleObject;
|
|
19
|
-
});
|
|
20
|
-
const props = __props;
|
|
21
|
-
const content = computed(() => props.raw?.content ?? "");
|
|
22
|
-
const language = computed(() => props.raw?.language || "ts");
|
|
23
|
-
const actualTheme = computed(() => props.isDark ? props.shikiTheme[1] : props.shikiTheme[0]);
|
|
24
|
-
const { lines, preStyle } = useHighlight(content, {
|
|
25
|
-
language,
|
|
26
|
-
theme: actualTheme
|
|
27
|
-
});
|
|
28
|
-
const flatTokens = computed(() => lines.value.flat());
|
|
29
|
-
const codeStyle = computed(() => preStyle.value || {});
|
|
30
|
-
const normalizeStyleKeys = (style) => {
|
|
31
|
-
const normalized = {};
|
|
32
|
-
Object.entries(style).forEach(([key, value]) => {
|
|
33
|
-
const camelKey = key.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
34
|
-
normalized[camelKey] = value;
|
|
35
|
-
});
|
|
36
|
-
return normalized;
|
|
37
|
-
};
|
|
38
|
-
const getTokenStyle = (token) => {
|
|
39
|
-
if (token.htmlStyle) {
|
|
40
|
-
return normalizeStyleKeys(token.htmlStyle);
|
|
41
|
-
}
|
|
42
|
-
if (!getTokenStyleObjectFn) {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
const rawStyle = getTokenStyleObjectFn(token);
|
|
46
|
-
return normalizeStyleKeys(rawStyle);
|
|
47
|
-
};
|
|
48
|
-
return (_ctx, _cache) => {
|
|
49
|
-
return openBlock(), createElementBlock("div", {
|
|
50
|
-
class: normalizeClass(["x-md-inline-code", {
|
|
51
|
-
"x-md-inline-code--dark": props.isDark,
|
|
52
|
-
"x-md-animated-word": props.enableAnimate
|
|
53
|
-
}])
|
|
54
|
-
}, [
|
|
55
|
-
createElementVNode("code", {
|
|
56
|
-
style: normalizeStyle(codeStyle.value)
|
|
57
|
-
}, [
|
|
58
|
-
!flatTokens.value.length ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
59
|
-
createTextVNode(toDisplayString(content.value), 1)
|
|
60
|
-
], 64)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(flatTokens.value, (token, i) => {
|
|
61
|
-
return openBlock(), createElementBlock("span", {
|
|
62
|
-
key: i,
|
|
63
|
-
style: normalizeStyle(getTokenStyle(token)),
|
|
64
|
-
class: normalizeClass({ "x-md-animated-word": props.enableAnimate })
|
|
65
|
-
}, toDisplayString(token.content), 7);
|
|
66
|
-
}), 128))
|
|
67
|
-
], 4)
|
|
68
|
-
], 2);
|
|
69
|
-
};
|
|
1
|
+
const _export_sfc = (sfc, props) => {
|
|
2
|
+
const target = sfc.__vccOpts || sfc;
|
|
3
|
+
for (const [key, val] of props) {
|
|
4
|
+
target[key] = val;
|
|
70
5
|
}
|
|
71
|
-
|
|
72
|
-
export {
|
|
73
|
-
_sfc_main as default
|
|
6
|
+
return target;
|
|
74
7
|
};
|
|
8
|
+
|
|
9
|
+
export { _export_sfc as default };
|
|
75
10
|
//# sourceMappingURL=x-markdown.es22.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-markdown.es22.js","sources":[
|
|
1
|
+
{"version":3,"file":"x-markdown.es22.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { defineComponent, onMounted, computed, createElementBlock, openBlock, normalizeClass, createElementVNode, normalizeStyle, Fragment, createTextVNode, toDisplayString, renderList } from 'vue';
|
|
2
|
+
import { useHighlight } from './x-markdown.es7.js';
|
|
3
|
+
|
|
4
|
+
const SHIKI_CORE_PKG = "@shikijs/core";
|
|
5
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
|
+
__name: "index",
|
|
7
|
+
props: {
|
|
8
|
+
raw: { default: () => ({}) },
|
|
9
|
+
isDark: { type: Boolean, default: false },
|
|
10
|
+
shikiTheme: { default: () => ["vitesse-light", "vitesse-dark"] },
|
|
11
|
+
enableAnimate: { type: Boolean, default: false }
|
|
12
|
+
},
|
|
13
|
+
setup(__props) {
|
|
14
|
+
let getTokenStyleObjectFn = null;
|
|
15
|
+
onMounted(async () => {
|
|
16
|
+
const mod = await Function(`return import('${SHIKI_CORE_PKG}')`)().catch(() => {
|
|
17
|
+
return { getTokenStyleObject: () => ({}) };
|
|
18
|
+
});
|
|
19
|
+
getTokenStyleObjectFn = mod.getTokenStyleObject;
|
|
20
|
+
});
|
|
21
|
+
const props = __props;
|
|
22
|
+
const content = computed(() => props.raw?.content ?? "");
|
|
23
|
+
const language = computed(() => props.raw?.language || "ts");
|
|
24
|
+
const actualTheme = computed(() => props.isDark ? props.shikiTheme[1] : props.shikiTheme[0]);
|
|
25
|
+
const { lines, preStyle } = useHighlight(content, {
|
|
26
|
+
language,
|
|
27
|
+
theme: actualTheme
|
|
28
|
+
});
|
|
29
|
+
const flatTokens = computed(() => lines.value.flat());
|
|
30
|
+
const codeStyle = computed(() => preStyle.value || {});
|
|
31
|
+
const normalizeStyleKeys = (style) => {
|
|
32
|
+
const normalized = {};
|
|
33
|
+
Object.entries(style).forEach(([key, value]) => {
|
|
34
|
+
const camelKey = key.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
35
|
+
normalized[camelKey] = value;
|
|
36
|
+
});
|
|
37
|
+
return normalized;
|
|
38
|
+
};
|
|
39
|
+
const getTokenStyle = (token) => {
|
|
40
|
+
if (token.htmlStyle) {
|
|
41
|
+
return normalizeStyleKeys(token.htmlStyle);
|
|
42
|
+
}
|
|
43
|
+
if (!getTokenStyleObjectFn) {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
const rawStyle = getTokenStyleObjectFn(token);
|
|
47
|
+
return normalizeStyleKeys(rawStyle);
|
|
48
|
+
};
|
|
49
|
+
return (_ctx, _cache) => {
|
|
50
|
+
return openBlock(), createElementBlock("div", {
|
|
51
|
+
class: normalizeClass(["x-md-inline-code", {
|
|
52
|
+
"x-md-inline-code--dark": props.isDark,
|
|
53
|
+
"x-md-animated-word": props.enableAnimate
|
|
54
|
+
}])
|
|
55
|
+
}, [
|
|
56
|
+
createElementVNode("code", {
|
|
57
|
+
style: normalizeStyle(codeStyle.value)
|
|
58
|
+
}, [
|
|
59
|
+
!flatTokens.value.length ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
60
|
+
createTextVNode(toDisplayString(content.value), 1)
|
|
61
|
+
], 64)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(flatTokens.value, (token, i) => {
|
|
62
|
+
return openBlock(), createElementBlock("span", {
|
|
63
|
+
key: i,
|
|
64
|
+
style: normalizeStyle(getTokenStyle(token)),
|
|
65
|
+
class: normalizeClass({ "x-md-animated-word": props.enableAnimate })
|
|
66
|
+
}, toDisplayString(token.content), 7);
|
|
67
|
+
}), 128))
|
|
68
|
+
], 4)
|
|
69
|
+
], 2);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export { _sfc_main as default };
|
|
75
|
+
//# sourceMappingURL=x-markdown.es23.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-markdown.es23.js","sources":["../src/components/CodeLine/index.vue"],"sourcesContent":["<template>\r\n <!-- 行内代码容器 - 支持深浅色主题和语法高亮 -->\r\n <div class=\"x-md-inline-code\" :class=\"{\r\n 'x-md-inline-code--dark': props.isDark,\r\n 'x-md-animated-word': props.enableAnimate,\r\n }\">\r\n <code :style=\"codeStyle\">\r\n <!-- 无高亮时显示纯文本 -->\r\n <template v-if=\"!flatTokens.length\">{{ content }}</template>\r\n<!-- 有高亮时渲染 token -->\r\n<template v-else>\r\n <span\r\n v-for=\"(token, i) in flatTokens\"\r\n :key=\"i\"\r\n :style=\"getTokenStyle(token)\"\r\n :class=\"{ 'x-md-animated-word': props.enableAnimate }\"\r\n >{{ token.content }}</span\r\n >\r\n </template>\r\n</code>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, onMounted, type CSSProperties } from 'vue'\r\nimport { useHighlight, type HighlightToken } from '../../hooks/useHighlight'\r\nimport type { CodeLineProps } from './types'\r\n\r\nconst SHIKI_CORE_PKG = '@shikijs/core'\r\n\r\nlet getTokenStyleObjectFn: any = null\r\n\r\nonMounted(async () => {\r\n const mod = await (Function(`return import('${SHIKI_CORE_PKG}')`)())\r\n .catch(() => {\r\n return { getTokenStyleObject: () => ({}) }\r\n })\r\n getTokenStyleObjectFn = mod.getTokenStyleObject\r\n})\r\n\r\nconst props = withDefaults(defineProps<CodeLineProps>(), {\r\n raw: () => ({}),\r\n isDark: false,\r\n shikiTheme: () => ['vitesse-light', 'vitesse-dark'],\r\n enableAnimate: false,\r\n})\r\n\r\nconst content = computed(() => props.raw?.content ?? '')\r\nconst language = computed(() => props.raw?.language || 'ts')\r\nconst actualTheme = computed(() => (props.isDark ? props.shikiTheme[1] : props.shikiTheme[0]))\r\n\r\nconst { lines, preStyle } = useHighlight(content, {\r\n language,\r\n theme: actualTheme,\r\n})\r\n\r\nconst flatTokens = computed(() => lines.value.flat())\r\nconst codeStyle = computed<CSSProperties>(() => preStyle.value || {})\r\n\r\nconst normalizeStyleKeys = (style: Record<string, string | number>): CSSProperties => {\r\n const normalized: CSSProperties = {}\r\n Object.entries(style).forEach(([key, value]) => {\r\n const camelKey = key.replace(/-([a-z])/g, (_, char) => char.toUpperCase())\r\n ; (normalized as Record<string, string | number>)[camelKey] = value\r\n })\r\n return normalized\r\n}\r\n\r\nconst getTokenStyle = (token: HighlightToken): CSSProperties => {\r\n if (token.htmlStyle) {\r\n return normalizeStyleKeys(token.htmlStyle)\r\n }\r\n\r\n if (!getTokenStyleObjectFn) {\r\n return {}\r\n }\r\n\r\n const rawStyle = getTokenStyleObjectFn(token)\r\n return normalizeStyleKeys(rawStyle)\r\n}\r\n</script>\r\n<style scoped>\r\n.x-md-inline-code {\r\n display: inline-block;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n font-size: 14px;\r\n background: rgba(0, 0, 0, 0.03);\r\n vertical-align: sub;\r\n}\r\n\r\n.x-md-inline-code.x-md-inline-code--dark {\r\n background: rgba(255, 255, 255, 0.13);\r\n}\r\n\r\n.x-md-inline-code code {\r\n background: transparent !important;\r\n}\r\n</style>\r\n"],"names":["_createElementBlock","_createElementVNode","_Fragment","_openBlock","_renderList","_normalizeStyle","_normalizeClass","_toDisplayString"],"mappings":";;;AA4BA,MAAM,cAAA,GAAiB,eAAA;;;;;;;;;;AAEvB,IAAA,IAAI,qBAAA,GAA6B,IAAA;AAEjC,IAAA,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,GAAA,GAAM,MAAO,QAAA,CAAS,CAAA,eAAA,EAAkB,cAAc,CAAA,EAAA,CAAI,CAAA,EAAE,CAC/D,KAAA,CAAM,MAAM;AACX,QAAA,OAAO,EAAE,mBAAA,EAAqB,OAAO,EAAC,CAAA,EAAG;AAAA,MAC3C,CAAC,CAAA;AACH,MAAA,qBAAA,GAAwB,GAAA,CAAI,mBAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,OAAA;AAOd,IAAA,MAAM,UAAU,QAAA,CAAS,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,EAAE,CAAA;AACvD,IAAA,MAAM,WAAW,QAAA,CAAS,MAAM,KAAA,CAAM,GAAA,EAAK,YAAY,IAAI,CAAA;AAC3D,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAO,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,GAAI,KAAA,CAAM,UAAA,CAAW,CAAC,CAAE,CAAA;AAE7F,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,aAAa,OAAA,EAAS;AAAA,MAChD,QAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,MAAM,aAAa,QAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AACpD,IAAA,MAAM,YAAY,QAAA,CAAwB,MAAM,QAAA,CAAS,KAAA,IAAS,EAAE,CAAA;AAEpE,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAA0D;AACpF,MAAA,MAAM,aAA4B,EAAC;AACnC,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC9C,QAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA,EAAG,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AACrE,QAAC,UAAA,CAA+C,QAAQ,CAAA,GAAI,KAAA;AAAA,MAClE,CAAC,CAAA;AACD,MAAA,OAAO,UAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyC;AAC9D,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,OAAO,kBAAA,CAAmB,MAAM,SAAS,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,QAAA,GAAW,sBAAsB,KAAK,CAAA;AAC5C,MAAA,OAAO,mBAAmB,QAAQ,CAAA;AAAA,IACpC,CAAA;;0BA7EEA,kBAAA,CAkBM,KAAA,EAAA;AAAA,QAlBD,KAAA,kBAAM,kBAAA,EAAkB;AAAA,UAA0C,0BAAA,KAAA,CAAM,MAAA;AAAA,UAAmC,sBAAA,KAAA,CAAM;AAAA;;QAIpHC,mBAaG,MAAA,EAAA;AAAA,UAbI,KAAA,iBAAO,SAAA,CAAA,KAAS;AAAA;UAEJ,CAAA,UAAA,CAAA,KAAA,CAAW,MAAA,iBAA5BD,kBAAA,CAA4DE,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;AAAA,4CAArB,OAAA,CAAA,KAAO,GAAA,CAAA;AAAA,qBAG5CC,SAAA,CAAA,IAAA,GAAAH,kBAAA,CAKuCE,QAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAAE,UAAA,CAJhB,WAAA,KAAA,EAAU,CAAvB,OAAO,CAAA,KAAC;gCADlBJ,kBAAA,CAKuC,MAAA,EAAA;AAAA,cAHpC,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAKK,cAAA,CAAE,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,cAC1B,OAAKC,cAAA,CAAA,EAAA,oBAAA,EAA0B,KAAA,CAAM,eAAa;AAAA,aAC/C,EAAAC,eAAA,CAAA,KAAA,CAAM,OAAO,GAAA,CAAA,CAAA;AAAA;;;;;;;;;"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { defineComponent, ref, computed, onMounted, createBlock, createElementBlock, openBlock, normalizeClass, createVNode, withDirectives, Transition, withCtx, createElementVNode, renderSlot, normalizeProps, guardReactiveProps, Fragment, renderList, normalizeStyle, createCommentVNode, resolveDynamicComponent, unref, vShow, h } from
|
|
2
|
-
import { useClipboard } from
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { defineComponent, ref, computed, onMounted, createBlock, createElementBlock, openBlock, normalizeClass, createVNode, withDirectives, Transition, withCtx, createElementVNode, renderSlot, normalizeProps, guardReactiveProps, Fragment, renderList, normalizeStyle, createCommentVNode, resolveDynamicComponent, unref, vShow, h } from 'vue';
|
|
2
|
+
import { useClipboard } from './x-markdown.es27.js';
|
|
3
|
+
import { useXMarkdownConfig } from './x-markdown.es12.js';
|
|
4
|
+
import { checkMermaidAvailable } from './x-markdown.es9.js';
|
|
5
|
+
import _sfc_main$1 from './x-markdown.es28.js';
|
|
5
6
|
/* empty css */
|
|
6
|
-
import CodeBlock from
|
|
7
|
+
import CodeBlock from './x-markdown.es18.js';
|
|
8
|
+
|
|
7
9
|
const _hoisted_1 = { class: "toolbar-container" };
|
|
8
10
|
const _hoisted_2 = { class: "mermaid-toolbar" };
|
|
9
11
|
const _hoisted_3 = { class: "toolbar-left" };
|
|
@@ -36,6 +38,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
36
38
|
},
|
|
37
39
|
setup(__props) {
|
|
38
40
|
const props = __props;
|
|
41
|
+
const config = useXMarkdownConfig();
|
|
39
42
|
const syntaxMermaidRef = ref(null);
|
|
40
43
|
const showSourceCode = ref(false);
|
|
41
44
|
const isDegraded = ref(true);
|
|
@@ -161,7 +164,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
161
164
|
})
|
|
162
165
|
);
|
|
163
166
|
onMounted(async () => {
|
|
164
|
-
const hasMermaid = await checkMermaidAvailable();
|
|
167
|
+
const hasMermaid = await checkMermaidAvailable(config.mermaid);
|
|
165
168
|
isDegraded.value = !hasMermaid;
|
|
166
169
|
});
|
|
167
170
|
return (_ctx, _cache) => {
|
|
@@ -397,7 +400,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
397
400
|
};
|
|
398
401
|
}
|
|
399
402
|
});
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
//# sourceMappingURL=x-markdown.es24.js.map
|
|
403
|
+
|
|
404
|
+
export { _sfc_main as default };
|
|
405
|
+
//# sourceMappingURL=x-markdown.es25.js.map
|