@hejiayue/x-markdown-test 0.0.1-beta.107
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/LICENSE +21 -0
- package/README.md +1090 -0
- package/dist/index-BjeepIV6.js +529 -0
- package/dist/index-BjeepIV6.js.map +1 -0
- package/dist/index-CgG50XSZ.cjs +2 -0
- package/dist/index-CgG50XSZ.cjs.map +1 -0
- package/dist/index-DtKeGkdv.cjs +2 -0
- package/dist/index-DtKeGkdv.cjs.map +1 -0
- package/dist/index-Ys7-7uFi.js +1856 -0
- package/dist/index-Ys7-7uFi.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/MarkdownRender/index.d.ts +441 -0
- package/dist/types/core/components.d.ts +4 -0
- package/dist/types/core/hast-to-vnode.d.ts +13 -0
- package/dist/types/core/index.d.ts +6 -0
- package/dist/types/core/useProcessor.d.ts +23 -0
- package/dist/types/hooks/index.d.ts +6 -0
- package/dist/types/hooks/useComponents.d.ts +21 -0
- package/dist/types/hooks/useHighlight.d.ts +26 -0
- package/dist/types/hooks/useMarkdown.d.ts +2 -0
- package/dist/types/hooks/useMermaid.d.ts +22 -0
- package/dist/types/hooks/usePlugins.d.ts +8 -0
- package/dist/types/hooks/useTheme.d.ts +25 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/plugins/rehypePlugin.d.ts +2 -0
- package/dist/x-markdown.cjs.js +2 -0
- package/dist/x-markdown.cjs.js.map +1 -0
- package/dist/x-markdown.es.js +20 -0
- package/dist/x-markdown.es.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CgG50XSZ.cjs","sources":["../src/components/Mermaid/SyntaxMermaid.vue","../src/components/Mermaid/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, nextTick, ref, watch, onMounted } from 'vue'\r\nimport { debounce } from 'lodash-es'\r\nimport { useMermaid, useMermaidZoom, downloadSvgAsPng } from '../../hooks'\r\n\r\ninterface SyntaxMermaidProps {\r\n content: string\r\n id?: string\r\n isDark?: boolean\r\n config?: Record<string, any>\r\n}\r\n\r\nconst props = withDefaults(defineProps<SyntaxMermaidProps>(), {\r\n content: '',\r\n id: 'mermaid-default',\r\n isDark: false,\r\n config: () => ({}),\r\n})\r\n\r\nconst emit = defineEmits<{\r\n degraded: []\r\n ready: []\r\n}>()\r\n\r\nconst renderContainerRef = ref<HTMLElement | null>(null)\r\n\r\nconst mermaidContent = computed(() => props.content)\r\nconst mermaidOptions = computed(() => ({\r\n id: props.id,\r\n theme: props.isDark ? 'dark' : 'default',\r\n config: props.config,\r\n container: renderContainerRef.value,\r\n}))\r\nconst mermaidResult = useMermaid(mermaidContent, mermaidOptions)\r\n\r\nconst svg = ref('')\r\nconst isLoading = computed(() => mermaidResult.isLoading.value)\r\nconst error = computed(() => mermaidResult.error.value)\r\n\r\nconst containerRef = ref<HTMLElement | null>(null)\r\n\r\nconst zoomControls = useMermaidZoom({\r\n container: containerRef,\r\n scaleStep: 0.2,\r\n minScale: 0.1,\r\n maxScale: 5,\r\n})\r\n\r\nconst debouncedInitialize = debounce(initializeZoom, 500)\r\n\r\nfunction initializeZoom() {\r\n nextTick(() => {\r\n if (containerRef.value) {\r\n zoomControls.initialize()\r\n }\r\n })\r\n}\r\n\r\nwatch(\r\n () => mermaidResult.data.value,\r\n (newSvg, oldSvg) => {\r\n console.log('[SyntaxMermaid] mermaidResult.data.value changed:', {\r\n oldSvg,\r\n newSvg,\r\n isNewSvg: !!newSvg,\r\n startsWithSvg: newSvg?.trim().startsWith('<svg'),\r\n preview: newSvg?.substring(0, 50)\r\n })\r\n\r\n if (newSvg) {\r\n svg.value = newSvg\r\n debouncedInitialize()\r\n\r\n // 检测是否成功渲染了 SVG(以 <svg 开头)\r\n if (newSvg.trim().startsWith('<svg')) {\r\n console.log('[SyntaxMermaid] Emitting ready event - Mermaid is available')\r\n emit('ready')\r\n } else {\r\n console.log('[SyntaxMermaid] Emitting degraded event - Mermaid not available')\r\n emit('degraded')\r\n }\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n\r\nwatch(svg, (newSvg) => {\r\n if (newSvg) {\r\n debouncedInitialize()\r\n }\r\n})\r\n\r\nfunction zoomIn() {\r\n zoomControls?.zoomIn()\r\n}\r\n\r\nfunction zoomOut() {\r\n zoomControls?.zoomOut()\r\n}\r\n\r\nfunction reset() {\r\n zoomControls?.reset()\r\n}\r\n\r\nfunction fullscreen() {\r\n zoomControls?.fullscreen()\r\n zoomControls?.reset()\r\n}\r\n\r\nfunction download() {\r\n downloadSvgAsPng(svg.value)\r\n}\r\n\r\nfunction getSvg() {\r\n return svg.value\r\n}\r\n\r\nfunction reinitialize() {\r\n debouncedInitialize()\r\n}\r\n\r\nonMounted(() => {\r\n if (svg.value) {\r\n debouncedInitialize()\r\n }\r\n})\r\n\r\ndefineExpose({\r\n svg,\r\n isLoading,\r\n error,\r\n containerRef,\r\n zoomIn,\r\n zoomOut,\r\n reset,\r\n fullscreen,\r\n download,\r\n getSvg,\r\n reinitialize,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"containerRef\" class=\"syntax-mermaid\" :class=\"{ 'syntax-mermaid--dark': props.isDark }\">\r\n <div ref=\"renderContainerRef\" class=\"syntax-mermaid__render-container\" aria-hidden=\"true\" />\r\n\r\n <div v-if=\"isLoading\" class=\"syntax-mermaid__loading\">\r\n <slot name=\"loading\">\r\n <span class=\"syntax-mermaid__loading-text\">加载中...</span>\r\n </slot>\r\n </div>\r\n <div v-else class=\"syntax-mermaid__content\" v-html=\"svg\" />\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.syntax-mermaid {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 200px;\r\n overflow: hidden;\r\n cursor: grab;\r\n position: relative;\r\n}\r\n\r\n.syntax-mermaid__render-container {\r\n position: absolute;\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n pointer-events: none;\r\n}\r\n\r\n.syntax-mermaid:active {\r\n cursor: grabbing;\r\n}\r\n\r\n.syntax-mermaid__content {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.syntax-mermaid__content svg {\r\n transform-origin: center center;\r\n max-width: 100%;\r\n max-height: 100%;\r\n}\r\n\r\n.syntax-mermaid:fullscreen {\r\n max-height: 100vh;\r\n}\r\n\r\n.syntax-mermaid:fullscreen .syntax-mermaid__content {\r\n justify-content: center;\r\n}\r\n\r\n.syntax-mermaid__loading {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: 100%;\r\n min-height: 200px;\r\n}\r\n\r\n.syntax-mermaid__loading-text {\r\n color: #666;\r\n font-size: 14px;\r\n}\r\n\r\n.syntax-mermaid--dark .syntax-mermaid__loading-text {\r\n color: #999;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { MdComponent, MermaidExposeProps, MermaidAction, MermaidSlotProps } from './types'\r\nimport type { VNode } from 'vue'\r\nimport { computed, ref, h } from 'vue'\r\nimport { useClipboard } from '@vueuse/core'\r\n// 使用构建时检测的 mermaid 可用性标志\r\nimport { HAS_MERMAID } from 'virtual:mermaid-check'\r\nimport SyntaxMermaid from './SyntaxMermaid.vue'\r\nimport CodeBlock from '../CodeBlock/index.vue'\r\n\r\ninterface MermaidProps extends MdComponent {\r\n isDark?: boolean\r\n shikiTheme?: [string, string]\r\n config?: Record<string, any>\r\n mermaidActions?: MermaidAction[]\r\n}\r\n\r\nconst props = withDefaults(defineProps<MermaidProps>(), {\r\n raw: () => ({}),\r\n isDark: false,\r\n shikiTheme: () => ['vitesse-light', 'vitesse-dark'],\r\n config: () => ({}),\r\n mermaidActions: undefined,\r\n})\r\n\r\nconst syntaxMermaidRef = ref<InstanceType<typeof SyntaxMermaid> | null>(null)\r\nconst showSourceCode = ref(false)\r\n// 使用构建时检测的结果:如果构建时检测到 mermaid,则不降级;否则降级\r\n// 这样可以避免运行时异步检测导致的闪烁\r\nconst isDegraded = ref(!HAS_MERMAID)\r\nconst mermaidContent = computed(() => props.raw?.content || '')\r\nconst mermaidId = computed(() => `mermaid-${props.raw?.key || 'default'}`)\r\nconst isLoading = computed(() => syntaxMermaidRef.value?.isLoading ?? true)\r\nconst svg = computed(() => syntaxMermaidRef.value?.svg ?? '')\r\nconst activeTab = computed(() => (showSourceCode.value ? 'code' : 'diagram'))\r\n\r\nfunction handleZoomIn(event?: Event) {\r\n event?.stopPropagation()\r\n event?.preventDefault()\r\n if (!showSourceCode.value) {\r\n syntaxMermaidRef.value?.zoomIn()\r\n }\r\n}\r\n\r\nfunction handleZoomOut(event?: Event) {\r\n event?.stopPropagation()\r\n event?.preventDefault()\r\n if (!showSourceCode.value) {\r\n syntaxMermaidRef.value?.zoomOut()\r\n }\r\n}\r\n\r\nfunction handleReset(event?: Event) {\r\n event?.stopPropagation()\r\n event?.preventDefault()\r\n if (!showSourceCode.value) {\r\n syntaxMermaidRef.value?.reset()\r\n }\r\n}\r\n\r\nfunction handleFullscreen() {\r\n if (!showSourceCode.value) {\r\n syntaxMermaidRef.value?.fullscreen()\r\n }\r\n}\r\n\r\nfunction handleToggleCode() {\r\n showSourceCode.value = !showSourceCode.value\r\n}\r\n\r\nconst { copy: copyCode, copied } = useClipboard({ copiedDuring: 1500 })\r\n\r\nfunction handleTabClick(tabName: string) {\r\n if (tabName === 'code' && !showSourceCode.value) {\r\n showSourceCode.value = true\r\n } else if (tabName === 'diagram' && showSourceCode.value) {\r\n showSourceCode.value = false\r\n }\r\n}\r\n\r\nasync function handleCopyCode(event?: Event) {\r\n event?.stopPropagation()\r\n event?.preventDefault()\r\n\r\n if (copied.value) {\r\n return\r\n }\r\n\r\n if (!props.raw.content) {\r\n return\r\n }\r\n await copyCode(props.raw.content)\r\n}\r\n\r\nfunction handleDownload() {\r\n syntaxMermaidRef.value?.download()\r\n}\r\n\r\nconst normalizedActions = computed<MermaidAction[]>(() => {\r\n return props.mermaidActions || []\r\n})\r\n\r\nconst filteredActions = computed<MermaidAction[]>(() => {\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<MermaidSlotProps>(() => ({\r\n showSourceCode: showSourceCode.value,\r\n svg: svg.value,\r\n rawContent: props.raw.content || '',\r\n isLoading: isLoading.value,\r\n copied: copied.value,\r\n zoomIn: handleZoomIn,\r\n zoomOut: handleZoomOut,\r\n reset: handleReset,\r\n fullscreen: handleFullscreen,\r\n toggleCode: handleToggleCode,\r\n copyCode: handleCopyCode,\r\n download: handleDownload,\r\n raw: props.raw,\r\n}))\r\n\r\nfunction renderActionIcon(action: MermaidAction): 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: 'mermaid-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: MermaidSlotProps) => 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 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: MermaidAction) {\r\n if (action.disabled) return\r\n action.onClick?.(slotProps.value)\r\n}\r\n\r\nconst exposedMethods = computed(\r\n () =>\r\n ({\r\n showSourceCode: showSourceCode.value,\r\n svg: svg.value,\r\n rawContent: props.raw.content || '',\r\n isLoading: isLoading.value,\r\n copied: copied.value,\r\n zoomIn: handleZoomIn,\r\n zoomOut: handleZoomOut,\r\n reset: handleReset,\r\n fullscreen: handleFullscreen,\r\n toggleCode: handleToggleCode,\r\n copyCode: handleCopyCode,\r\n download: handleDownload,\r\n raw: props.raw,\r\n }) satisfies MermaidExposeProps,\r\n)\r\n</script>\r\n\r\n<template>\r\n <!-- 当 Mermaid 不可用时(降级),渲染 CodeBlock -->\r\n <CodeBlock\r\n v-if=\"isDegraded\"\r\n :code=\"props.raw?.content || ''\"\r\n language=\"mermaid\"\r\n :is-dark=\"props.isDark\"\r\n :light-theme=\"props.shikiTheme[0]\"\r\n :dark-theme=\"props.shikiTheme[1]\"\r\n />\r\n\r\n <!-- 当 Mermaid 可用时,渲染完整的 Mermaid 组件 -->\r\n <div v-else :key=\"props.raw.key\" class=\"markdown-mermaid\" :class=\"{ 'markdown-mermaid--dark': props.isDark }\">\r\n <Transition name=\"toolbar\" appear>\r\n <div class=\"toolbar-container\">\r\n <slot name=\"mermaidHeader\" v-bind=\"exposedMethods\">\r\n <div class=\"mermaid-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <div class=\"segmented-control\">\r\n <div class=\"segmented-slider\" :class=\"{ 'slide-right': activeTab === 'code' }\" />\r\n <div\r\n class=\"segment-item\"\r\n :class=\"{ active: activeTab === 'diagram' }\"\r\n @click=\"handleTabClick('diagram')\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12 2L2 7L12 12L22 7L12 2Z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M2 17L12 22L22 17\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M2 12L12 17L22 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span>预览</span>\r\n </div>\r\n <div class=\"segment-item\" :class=\"{ active: activeTab === 'code' }\" @click=\"handleTabClick('code')\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M16 18L22 12L16 6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M8 6L2 12L8 18\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span>代码</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-right\">\r\n <slot name=\"mermaidActions\" v-bind=\"exposedMethods\">\r\n <div\r\n v-for=\"action in filteredActions\"\r\n :key=\"action.key\"\r\n class=\"toolbar-action-btn\"\r\n :class=\"[action.class, { 'toolbar-action-btn--disabled': action.disabled }]\"\r\n :style=\"action.style\"\r\n :title=\"action.title\"\r\n @click=\"handleActionClick(action)\"\r\n >\r\n <component :is=\"renderActionIcon(action)\" v-if=\"action.icon\" />\r\n </div>\r\n\r\n <template v-if=\"showSourceCode\">\r\n <div\r\n class=\"toolbar-action-btn\"\r\n :class=\"{ 'copy-success': copied }\"\r\n title=\"复制代码\"\r\n @click=\"handleCopyCode($event)\"\r\n >\r\n <svg\r\n v-if=\"copied\"\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 v-else width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\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 </div>\r\n </template>\r\n\r\n <template v-else>\r\n <div class=\"toolbar-action-btn\" title=\"缩小\" @click=\"handleZoomOut($event)\">\r\n <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toolbar-action-btn\" title=\"放大\" @click=\"handleZoomIn($event)\">\r\n <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toolbar-action-btn\" title=\"重置\" @click=\"handleReset($event)\">\r\n <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\r\n />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toolbar-action-btn\" title=\"下载\" @click=\"handleDownload\">\r\n <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z\"\r\n />\r\n </svg>\r\n </div>\r\n </template>\r\n </slot>\r\n </div>\r\n </div>\r\n </slot>\r\n </div>\r\n </Transition>\r\n\r\n <div v-show=\"showSourceCode\" class=\"mermaid-source-code\">\r\n <CodeBlock\r\n :code=\"props.raw?.content || ''\"\r\n language=\"mermaid\"\r\n :is-dark=\"props.isDark\"\r\n :light-theme=\"props.shikiTheme[0]\"\r\n :dark-theme=\"props.shikiTheme[1]\"\r\n />\r\n </div>\r\n\r\n <SyntaxMermaid\r\n v-show=\"!showSourceCode\"\r\n ref=\"syntaxMermaidRef\"\r\n :content=\"mermaidContent\"\r\n :id=\"mermaidId\"\r\n :is-dark=\"props.isDark\"\r\n :config=\"props.config\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<style>\r\n.markdown-mermaid {\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.markdown-mermaid.markdown-mermaid--dark {\r\n background: rgba(255, 255, 255, 0.13);\r\n}\r\n\r\n.markdown-mermaid .toolbar-container {\r\n position: relative;\r\n z-index: 10;\r\n flex-shrink: 0;\r\n background: rgba(0, 0, 0, 0.05);\r\n color: #333;\r\n}\r\n\r\n.markdown-mermaid.markdown-mermaid--dark .toolbar-container {\r\n background: rgba(0, 0, 0, 0.25);\r\n color: #fff;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 8px 16px;\r\n background: transparent;\r\n color: inherit;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-left {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segmented-control {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n background: rgba(0, 0, 0, 0.06);\r\n border-radius: 6px;\r\n padding: 3px;\r\n gap: 2px;\r\n}\r\n\r\n.markdown-mermaid.markdown-mermaid--dark .mermaid-toolbar .segmented-control {\r\n background: rgba(255, 255, 255, 0.08);\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segmented-slider {\r\n position: absolute;\r\n top: 3px;\r\n left: 3px;\r\n width: calc(50% - 4px);\r\n height: calc(100% - 6px);\r\n background: #fff;\r\n border-radius: 4px;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r\n z-index: 0;\r\n}\r\n\r\n.markdown-mermaid.markdown-mermaid--dark .mermaid-toolbar .segmented-slider {\r\n background: rgba(255, 255, 255, 0.15);\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segmented-slider.slide-right {\r\n transform: translateX(calc(100% + 2px));\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segment-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n font-size: 12px;\r\n border: none;\r\n color: inherit;\r\n min-width: 60px;\r\n text-align: center;\r\n box-sizing: border-box;\r\n font-weight: 500;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n padding: 5px 12px;\r\n transition: all 0.2s ease;\r\n background: transparent;\r\n opacity: 0.6;\r\n user-select: none;\r\n position: relative;\r\n z-index: 1;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segment-item.active {\r\n opacity: 1;\r\n}\r\n\r\n.markdown-mermaid.markdown-mermaid--dark .mermaid-toolbar .segment-item.active {\r\n color: #fff;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segment-item:hover {\r\n opacity: 1;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .segment-item svg {\r\n flex-shrink: 0;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-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 transition: all 0.2s ease;\r\n opacity: 0.7;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-action-btn:hover {\r\n opacity: 1;\r\n background: rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-action-btn.copy-success {\r\n opacity: 1;\r\n color: #22c55e;\r\n}\r\n\r\n.markdown-mermaid.markdown-mermaid--dark .mermaid-toolbar .toolbar-action-btn:hover {\r\n background: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .toolbar-action-btn.toolbar-action-btn--disabled {\r\n opacity: 0.3;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .mermaid-action-icon {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.markdown-mermaid .mermaid-toolbar .mermaid-action-icon :deep(svg) {\r\n width: 16px;\r\n height: 16px;\r\n flex-shrink: 0;\r\n}\r\n\r\n.markdown-mermaid .mermaid-source-code {\r\n position: relative;\r\n z-index: 1;\r\n flex: 1;\r\n width: 100%;\r\n overflow: auto;\r\n box-sizing: border-box;\r\n}\r\n\r\n.toolbar-enter-active,\r\n.toolbar-leave-active {\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\n.toolbar-enter-from,\r\n.toolbar-leave-to {\r\n opacity: 0;\r\n}\r\n</style>\r\n"],"names":["props","__props","emit","__emit","renderContainerRef","ref","mermaidContent","computed","content","mermaidOptions","id","theme","isDark","config","container","value","mermaidResult","useMermaid","svg","isLoading","error","containerRef","zoomControls","useMermaidZoom","debouncedInitialize","debounce","nextTick","initialize","watch","data","newSvg","oldSvg","console","log","isNewSvg","startsWithSvg","trim","startsWith","preview","substring","immediate","onMounted","__expose","zoomIn","zoomOut","reset","fullscreen","download","downloadSvgAsPng","getSvg","reinitialize","_createElementBlock","class","_normalizeClass","_createElementVNode","_openBlock","_hoisted_1","_renderSlot","_ctx","_cache","innerHTML","syntaxMermaidRef","showSourceCode","isDegraded","raw","mermaidId","key","activeTab","handleZoomIn","event","stopPropagation","preventDefault","handleZoomOut","handleReset","handleFullscreen","handleToggleCode","copy","copyCode","copied","useClipboard","copiedDuring","handleTabClick","tabName","async","handleCopyCode","handleDownload","normalizedActions","mermaidActions","filteredActions","filter","action","show","slotProps","rawContent","toggleCode","renderActionIcon","icon","h","result","exposedMethods","_createBlock","CodeBlock","code","language","shikiTheme","_createVNode","_Transition","name","appear","$slots","_normalizeProps","_guardReactiveProps","_hoisted_2","_hoisted_3","_hoisted_4","active","onClick","width","height","viewBox","fill","xmlns","d","stroke","_hoisted_5","_Fragment","_renderList","disabled","style","_normalizeStyle","title","$event","handleActionClick","_resolveDynamicComponent","_unref","_hoisted_7","_hoisted_8","_withDirectives","_hoisted_9","SyntaxMermaid"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),t=require("property-information"),o=require("deepmerge"),a=require("rehype-sanitize"),n=require("remark-parse"),l=require("remark-rehype"),r=require("unified"),i=require("rehype-katex"),c=require("rehype-raw"),s=require("remark-breaks"),u=require("remark-gfm"),d=require("remark-math"),m=require("unist-util-visit"),p=require("lodash-es");function h(t,o,a,n){return e.h("div",o,v(t.children,{listDepth:-1,listOrdered:!1,listItemIndex:-1,svg:!1},t,a??{},e.toValue(n)??{},{}))}function v(t,o,a,n,l,r){return t.map(t=>{switch(t.type){case"text":case"raw":return t.value;case"root":return v(t.children,o,a,n,l,r);case"element":{const{attrs:i,context:c,aliasList:s,vnodeProps:u}=g(t,a,o,r,l);for(let e=s.length-1;e>=0;e--){const o=n[s[e]];if("function"==typeof o)return o({...u,...i,children:()=>v(t.children,c,t,n,l,r)})}return e.h(t.tagName,i,v(t.children,c,t,n,l,r))}default:return null}})}function g(e,o,a,n,l){const r=[];let i={};const c={},s={...a};if("element"===e.type){switch(r.push(e.tagName),n[e.tagName]=e.tagName in n?n[e.tagName]+1:0,c.key=`${e.tagName}-${n[e.tagName]}`,e.properties=e.properties||{},"svg"===e.tagName&&(s.svg=!0),i=Object.entries(e.properties).reduce((e,[o,a])=>(e[t.find(s.svg?t.svg:t.html,o).attribute]=a,e),{}),e.tagName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":c.level=Number.parseFloat(e.tagName.slice(1)),r.push("heading");break;case"code":c.languageOriginal=Array.isArray(i.class)?i.class.find(e=>e.startsWith("language-")):"",c.language=c.languageOriginal?c.languageOriginal.replace("language-",""):"",c.inline="tagName"in o&&"pre"!==o.tagName,c.content=e.children[0]?.value??"",r.push(c.inline?"inline-code":"block-code");break;case"thead":case"tbody":s.currentContext=e.tagName;break;case"td":case"th":case"tr":c.isHead="thead"===a.currentContext;break;case"ul":case"ol":s.listDepth=a.listDepth+1,s.listOrdered="ol"===e.tagName,s.listItemIndex=-1,c.ordered=s.listOrdered,c.depth=s.listDepth,r.push("list");break;case"li":s.listItemIndex++,c.ordered=s.listOrdered,c.depth=s.listDepth,c.index=s.listItemIndex,r.push("list-item");break;case"slot":"string"==typeof e.properties["slot-name"]&&(r.push(`${e.properties["slot-name"]}`),delete e.properties["slot-name"])}i=function(e,t,o,a,n){const l={...a};for(let r=t.length-1;r>=0;r--){const i=t[r];if(i in n){const t=n[i];return{...l,..."function"==typeof t?t(e,{...a,...o}):t}}}return l}(e,r,c,{...i},l)}return{attrs:i,context:s,aliasList:r,vnodeProps:c}}function f(t){return{processor:e.computed(()=>y({prePlugins:[n,...e.toValue(t?.remarkPlugins)??[]],rehypePlugins:e.toValue(t?.rehypePlugins),rehypeOptions:e.toValue(t?.rehypeOptions),sanitize:e.toValue(t?.sanitize),sanitizeOptions:e.toValue(t?.sanitizeOptions)}))}}function y(e){return r.unified().use(e?.prePlugins??[]).use(l,{allowDangerousHtml:!0,...e?.rehypeOptions||{}}).use(e?.rehypePlugins??[]).use(e?.sanitize?[[a,o(a.defaultSchema,e?.sanitizeOptions?.sanitizeOptions||{},e?.sanitizeOptions?.mergeOptions||{})]]:[])}const k={markdown:{type:String,default:""},customAttrs:{type:Object,default:()=>({})},remarkPlugins:{type:Array,default:()=>[]},rehypePlugins:{type:Array,default:()=>[]},rehypeOptions:{type:Object,default:()=>({})},sanitize:{type:Boolean,default:!1},sanitizeOptions:{type:Object,default:()=>({})}},w=e.defineComponent({name:"VueMarkdown",props:k,setup(t,{slots:o,attrs:a}){const{markdown:n,remarkPlugins:l,rehypePlugins:r,rehypeOptions:i,sanitize:c,sanitizeOptions:s,customAttrs:u}=e.toRefs(t),{processor:d}=f({remarkPlugins:l,rehypePlugins:r,rehypeOptions:i,sanitize:c,sanitizeOptions:s});return()=>{const e=d.value.parse(n.value);return h(d.value.runSync(e),a,o,u.value)}}}),x=e.defineComponent({name:"VueMarkdownAsync",props:k,async setup(t,{slots:o,attrs:a}){const{markdown:n,remarkPlugins:l,rehypePlugins:r,rehypeOptions:i,sanitize:c,sanitizeOptions:s,customAttrs:u}=e.toRefs(t),{processor:d}=f({remarkPlugins:l,rehypePlugins:r,rehypeOptions:i,sanitize:c,sanitizeOptions:s}),m=e.shallowRef(null),p=async()=>{const e=d.value.parse(n.value);m.value=await d.value.run(e)};return e.watch(()=>[n.value,d.value],p,{flush:"sync"}),await p(),()=>m.value?h(m.value,a,o,u.value):null}}),b="undefined"!=typeof window&&"undefined"!=typeof document,B=Object.prototype.toString;function C(e){return Array.isArray(e)?e:[e]}const E=b?window:void 0,S=b?window.navigator:void 0;function A(...t){const o=e.computed(()=>{const o=C(e.toValue(t[0])).filter(e=>null!=e);return o.every(e=>"string"!=typeof e)?o:void 0});return a=()=>{var a,n;return[null!==(a=null===(n=o.value)||void 0===n?void 0:n.map(t=>function(t){var o;const a=e.toValue(t);return null!==(o=null==a?void 0:a.$el)&&void 0!==o?o:a}(t)))&&void 0!==a?a:[E].filter(e=>null!=e),C(e.toValue(o.value?t[1]:t[0])),C(e.unref(o.value?t[2]:t[1])),e.toValue(o.value?t[3]:t[2])]},n=([e,t,o,a],n,l)=>{if(!(null==e?void 0:e.length)||!(null==t?void 0:t.length)||!(null==o?void 0:o.length))return;const r=(i=a,"[object Object]"===B.call(i)?{...a}:a);var i;const c=e.flatMap(e=>t.flatMap(t=>o.map(o=>((e,t,o,a)=>(e.addEventListener(t,o,a),()=>e.removeEventListener(t,o,a)))(e,t,o,r))));l(()=>{c.forEach(e=>e())})},l={flush:"post"},e.watch(a,n,{...l,immediate:!0});var a,n,l}function O(){const t=e.shallowRef(!1),o=e.getCurrentInstance();return o&&e.onMounted(()=>{t.value=!0},o),t}function R(t){const o=O();return e.computed(()=>(o.value,Boolean(t())))}function L(t,o={}){const{controls:a=!1,navigator:n=S}=o,l=R(()=>n&&"permissions"in n),r=e.shallowRef(),i="string"==typeof t?{name:t}:t,c=e.shallowRef(),s=()=>{var e,t;c.value=null!==(e=null===(t=r.value)||void 0===t?void 0:t.state)&&void 0!==e?e:"prompt"};A(r,"change",s,{passive:!0});const u=function(){let t;function o(){return t||(t=(async()=>{if(l.value){if(!r.value)try{r.value=await n.permissions.query(i)}catch(t){r.value=void 0}finally{s()}return a?e.toRaw(r.value):void 0}})()),t}return o.reset=async()=>{const e=t;t=void 0,e&&await e},o}();return u(),a?{state:c,isSupported:l,query:u}:c}function z(t={}){const{navigator:o=S,read:a=!1,source:n,copiedDuring:l=1500,legacy:r=!1}=t,i=R(()=>o&&"clipboard"in o),c=L("clipboard-read"),s=L("clipboard-write"),u=e.computed(()=>i.value||r),d=e.shallowRef(""),m=e.shallowRef(!1),p=function(t,o,a={}){const{immediate:n=!0,immediateCallback:l=!1}=a,r=e.shallowRef(!1);let i;function c(){i&&(clearTimeout(i),i=void 0)}function s(){r.value=!1,c()}function u(...a){l&&t(),c(),r.value=!0,i=setTimeout(()=>{r.value=!1,i=void 0,t(...a)},e.toValue(o))}var d;return n&&(r.value=!0,b&&u()),d=s,e.getCurrentScope()&&e.onScopeDispose(d,void 0),{isPending:e.shallowReadonly(r),start:u,stop:s}}(()=>m.value=!1,l,{immediate:!1});function h(e){return"granted"===e||"prompt"===e}return u.value&&a&&A(["copy","cut"],async function(){let e=!(i.value&&h(c.value));if(!e)try{d.value=await o.clipboard.readText()}catch(l){e=!0}var t,a,n;e&&(d.value=null!==(t=null===(a=document)||void 0===a||null===(n=a.getSelection)||void 0===n||null===(n=n.call(a))||void 0===n?void 0:n.toString())&&void 0!==t?t:"")},{passive:!0}),{isSupported:u,text:e.readonly(d),copied:e.readonly(m),copy:async function(t=e.toValue(n)){if(u.value&&null!=t){let e=!(i.value&&h(s.value));if(!e)try{await o.clipboard.writeText(t)}catch(a){e=!0}e&&function(e){const t=document.createElement("textarea");t.value=e,t.style.position="absolute",t.style.opacity="0",t.setAttribute("readonly",""),document.body.appendChild(t),t.select(),document.execCommand("copy"),t.remove()}(t),d.value=t,m.value=!0,p.start()}}}}let T=null,V=null,D=!1;const N=()=>{D||(D=!0,console.log("%c[x-markdown]%c 代码高亮功能已降级为纯文本模式","font-weight: bold; color: #0066cc;","color: #666;"),console.log("%c如需语法高亮功能,请安装以下依赖:","color: #666; font-weight: bold;"),console.log("%c pnpm add shiki shiki-stream","color: #00aa00; font-family: monospace;"),console.log("%c安装后请重启开发服务器","color: #999; font-size: 12px;"))},M=e=>{if(!e.length)return[[]];const t=[[]];let o=t[0];const a=()=>{o=[],t.push(o)};return e.forEach(e=>{const t=e.content??"";if("\n"===t)return void a();if(!t.includes("\n"))return void o.push(e);const n=t.split("\n");n.forEach((t,l)=>{t&&o.push({...e,content:t}),l<n.length-1&&a()})}),0===t.length?[[]]:t},P=(e,t)=>{if(e||t)return{backgroundColor:e,color:t}};function H(t,o){const a=e.ref(),n=e.ref(!1),l=e.ref(null);let r=null,i="",c=null,s="",u="";const d=e.computed(()=>(e.isRef(o.theme)?o.theme.value:o.theme)||"slack-dark"),m=e.computed(()=>e.toValue(o.language)||"text"),p=e.computed(()=>a.value?.lines||[[]]),h=e.computed(()=>a.value?.preStyle),v=async(e,t=!1)=>{if(!r)return;t&&(r.clear(),i="");const n=!t&&e.startsWith(i);let c=e;if(n?c=e.slice(i.length):t||r.clear(),i=e,!c){const e=[...r.tokensStable,...r.tokensUnstable];return void(a.value={colorReplacements:o.colorReplacements,lines:e.length?M(e):[[]],preStyle:a.value?.preStyle})}try{await r.enqueue(c);const e=[...r.tokensStable,...r.tokensUnstable];a.value={colorReplacements:o.colorReplacements,lines:M(e),preStyle:a.value?.preStyle}}catch(s){console.error("[x-markdown] Streaming highlighting failed:",s),l.value=s}},g=async()=>{n.value=!0,l.value=null;let e=m.value;const p=d.value;try{const n=await(T||(T=import("shiki").catch(()=>(N(),null))),T);if(!n)return console.warn("[x-markdown] Shiki not available, falling back to plain text mode"),void(a.value={colorReplacements:o.colorReplacements,lines:[[{content:t.value}]],preStyle:void 0});c=await n.getSingletonHighlighter({langs:[],themes:[p]}),u=e;try{await c.loadLanguage(e),s=e}catch{console.warn(`[x-markdown] Failed to load language: ${e}, falling back to plaintext`),e="plaintext",s="plaintext"}const l=await(V||(V=import("shiki-stream").catch(()=>(N(),null))),V);if(!l){console.warn("[x-markdown] shiki-stream not available, using non-streaming mode");const n=c.codeToThemedTokens(t.value,e,p);return void(a.value={colorReplacements:o.colorReplacements,lines:M(n),preStyle:P(c.getTheme(p)?.bg,c.getTheme(p)?.fg)})}const d=l.ShikiStreamTokenizer||l.default;r=new d({highlighter:c,lang:e,theme:p}),i="";const m=c.getTheme(p),h=P(m?.bg,m?.fg);t.value?(await v(t.value,!0),a.value&&(a.value.preStyle=h)):a.value={colorReplacements:o.colorReplacements,lines:[[]],preStyle:h}}catch(h){console.error("[x-markdown] Highlighter initialization failed:",h),l.value=h,a.value={colorReplacements:o.colorReplacements,lines:[[{content:t.value}]],preStyle:void 0}}finally{n.value=!1}};return e.watch(()=>[m.value,d.value],async([e])=>{const t=e;if(c&&"plaintext"===s&&t!==u&&"plaintext"!==t)try{return await c.loadLanguage(t),void g()}catch{return void(u=t)}g()},{immediate:!0}),e.watch(t,async e=>{const t=m.value;if(c&&"plaintext"===s&&t!==u&&"plaintext"!==t)try{return await c.loadLanguage(t),void(await g())}catch{u=t}r?v(e):c||(a.value={colorReplacements:o.colorReplacements,lines:[[{content:e}]],preStyle:a.value?.preStyle})}),e.onUnmounted(()=>{r?.clear(),r=null,i=""}),{streaming:a,lines:p,preStyle:h,isLoading:n,error:l}}const $={class:"x-md-syntax-code-block"},_={class:"x-md-code-content"},j={key:0},q=(e,t)=>{const o=e.__vccOpts||e;for(const[a,n]of t)o[a]=n;return o},I=q(e.defineComponent({name:"SyntaxCodeBlock",__name:"SyntaxCodeBlock",props:{code:{},language:{},lightTheme:{default:"vitesse-light"},darkTheme:{default:"vitesse-dark"},isDark:{type:Boolean,default:!1},colorReplacements:{},codeMaxHeight:{},enableAnimate:{type:Boolean,default:!1}},setup(t,{expose:o}){let a=null;e.onMounted(async()=>{const e=await Function("return import('@shikijs/core')")().catch(()=>({getTokenStyleObject:()=>({})}));a=e.getTokenStyleObject});const n=t,l=e.computed(()=>n.code.trim()),r=e.computed(()=>n.language||"text"),i=e.computed(()=>n.isDark?n.darkTheme:n.lightTheme),{lines:c,preStyle:s}=H(l,{language:r,theme:i,colorReplacements:n.colorReplacements}),u=(e,t)=>t&&t[e.toLowerCase()]||e,d=e=>{const t={};return Object.entries(e).forEach(([e,o])=>{const a=e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[a]=o}),t},m=e=>{if(e.htmlStyle){const t=d(e.htmlStyle);if(!n.colorReplacements)return t;const o={...t};return o.color&&"string"==typeof o.color&&(o.color=u(o.color,n.colorReplacements)),o.backgroundColor&&"string"==typeof o.backgroundColor&&(o.backgroundColor=u(o.backgroundColor,n.colorReplacements)),o}if(!a)return{};const t=a(e),o=d(t);if(!n.colorReplacements)return o;const l={...o};return l.color&&"string"==typeof l.color&&(l.color=u(l.color,n.colorReplacements)),l.backgroundColor&&"string"==typeof l.backgroundColor&&(l.backgroundColor=u(l.backgroundColor,n.colorReplacements)),l},p=e.computed(()=>!c.value?.length),h=e.computed(()=>({...s.value,maxHeight:n.codeMaxHeight}));return o({lines:c,code:l,language:r,actualTheme:i}),(t,o)=>(e.openBlock(),e.createElementBlock("div",$,[p.value?(e.openBlock(),e.createElementBlock("pre",{key:0,style:e.normalizeStyle(h.value)},[e.createElementVNode("code",null,e.toDisplayString(l.value),1)],4)):(e.openBlock(),e.createElementBlock("pre",{key:1,class:e.normalizeClass(["shiki",i.value]),style:e.normalizeStyle(h.value),tabindex:"0"},[o[4]||(o[4]=e.createTextVNode(" ",-1)),e.createElementVNode("code",_,[o[2]||(o[2]=e.createTextVNode("\n ",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c),(t,a)=>(e.openBlock(),e.createElementBlock("span",{key:a,class:"x-md-code-line"},[o[0]||(o[0]=e.createTextVNode("\n ",-1)),t.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(t,(t,o)=>(e.openBlock(),e.createElementBlock("span",{key:o,style:e.normalizeStyle(m(t)),class:e.normalizeClass({"x-md-animated-word":n.enableAnimate})},e.toDisplayString(t.content),7))),128)):(e.openBlock(),e.createElementBlock("span",j," ")),o[1]||(o[1]=e.createTextVNode("\n ",-1))]))),128)),o[3]||(o[3]=e.createTextVNode("\n ",-1))]),o[5]||(o[5]=e.createTextVNode("\n ",-1))],6))]))}}),[["__scopeId","data-v-7cbaa1d1"]]),F={class:"x-md-code-header"},X={class:"x-md-code-header__left"},U=["title"],Y={class:"x-md-code-lang"},G={class:"x-md-code-header__right"},W=["title","disabled","onClick"],K={key:0,class:"x-md-copy-icon",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},Q={key:1,class:"x-md-copy-icon",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},Z=q(e.defineComponent({name:"CodeBlock",__name:"index",props:{code:{},language:{},lightTheme:{default:"vitesse-light"},darkTheme:{default:"vitesse-dark"},isDark:{type:Boolean,default:!1},colorReplacements:{},codeMaxHeight:{},showCodeBlockHeader:{type:Boolean,default:!0},enableAnimate:{type:Boolean,default:!1},codeBlockActions:{default:void 0},stickyCodeBlockHeader:{type:Boolean,default:!0}},setup(t,{expose:o}){const{copy:a,copied:n}=z({copiedDuring:2e3}),l=e.ref(!1),r=e.ref(null),i=()=>{l.value=!l.value},c=t,s=e.computed(()=>c.code.trim()),u=e.computed(()=>c.language||"text"),d=e.computed(()=>c.codeBlockActions||[]),m=e.computed(()=>d.value.filter(e=>!e.show||e.show(p.value))),p=e.computed(()=>({language:u.value,code:s.value,copy:a,copied:n.value,collapsed:l.value,toggleCollapse:i}));function h(t){if(!t.icon)return null;if("string"==typeof t.icon)return e.h("span",{class:"x-md-action-icon",innerHTML:t.icon});if("function"==typeof t.icon){try{const e=t.icon(p.value);if(e&&"object"==typeof e&&"__v_isVNode"in e)return e}catch{}return e.h(t.icon)}return e.h(t.icon)}return o({copy:a,copied:n,collapsed:l,toggleCollapse:i,syntaxCodeBlockRef:r}),(o,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["x-md-code-block",{"x-md-code-block--dark":c.isDark}])},[t.showCodeBlockHeader?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["x-md-code-header-wrapper",[{"x-md-code-header-wrapper--sticky":c.stickyCodeBlockHeader},{"x-md-code-header-wrapper--collapsed":l.value}]])},[e.createElementVNode("div",F,[e.renderSlot(o.$slots,"codeHeader",{language:u.value,code:s.value,copy:e.unref(a),copied:e.unref(n),collapsed:l.value,toggleCollapse:i},()=>[e.createElementVNode("div",X,[e.createElementVNode("button",{class:e.normalizeClass(["x-md-collapse-btn",{"x-md-collapse-btn--collapsed":l.value}]),onClick:i,title:l.value?"展开代码":"折叠代码"},[...d[1]||(d[1]=[e.createElementVNode("svg",{class:"x-md-collapse-icon",viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"6 9 12 15 18 9"})],-1)])],10,U),e.createElementVNode("span",Y,e.toDisplayString(u.value),1)]),e.createElementVNode("div",G,[e.renderSlot(o.$slots,"codeActions",{code:s.value,copy:e.unref(a),copied:e.unref(n)},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,t=>(e.openBlock(),e.createElementBlock("button",{key:t.key,class:e.normalizeClass(["x-md-action-btn",[t.class,{"x-md-action-btn--disabled":t.disabled}]]),style:e.normalizeStyle(t.style),title:t.title,disabled:t.disabled,onClick:e=>function(e){e.disabled||e.onClick?.(p.value)}(t)},[t.icon?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(h(t)),{key:0})):e.createCommentVNode("",!0)],14,W))),128)),e.createElementVNode("button",{class:e.normalizeClass(["x-md-copy-btn",{"x-md-copy-btn--copied":e.unref(n)}]),onClick:d[0]||(d[0]=t=>e.unref(a)(s.value))},[e.unref(n)?(e.openBlock(),e.createElementBlock("svg",K,[...d[2]||(d[2]=[e.createElementVNode("path",{fill:"currentColor",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"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",Q,[...d[3]||(d[3]=[e.createElementVNode("path",{fill:"currentColor",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"},null,-1),e.createElementVNode("path",{fill:"currentColor",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"},null,-1)])]))],2)],!0)])],!0)])],2)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["x-md-code-body",{"x-md-code-body--collapsed":l.value}])},[e.createVNode(I,{ref_key:"syntaxCodeBlockRef",ref:r,code:s.value,language:u.value,"light-theme":c.lightTheme,"dark-theme":c.darkTheme,"is-dark":c.isDark,"color-replacements":c.colorReplacements,"code-max-height":c.codeMaxHeight,"enable-animate":c.enableAnimate},null,8,["code","language","light-theme","dark-theme","is-dark","color-replacements","code-max-height","enable-animate"])],2)],2))}}),[["__scopeId","data-v-8b0fb0b9"]]),J=q(e.defineComponent({__name:"index",props:{raw:{default:()=>({})},isDark:{type:Boolean,default:!1},shikiTheme:{default:()=>["vitesse-light","vitesse-dark"]},enableAnimate:{type:Boolean,default:!1}},setup(t){let o=null;e.onMounted(async()=>{const e=await Function("return import('@shikijs/core')")().catch(()=>({getTokenStyleObject:()=>({})}));o=e.getTokenStyleObject});const a=t,n=e.computed(()=>a.raw?.content??""),l=e.computed(()=>a.raw?.language||"ts"),r=e.computed(()=>a.isDark?a.shikiTheme[1]:a.shikiTheme[0]),{lines:i,preStyle:c}=H(n,{language:l,theme:r}),s=e.computed(()=>i.value.flat()),u=e.computed(()=>c.value||{}),d=e=>{const t={};return Object.entries(e).forEach(([e,o])=>{const a=e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[a]=o}),t},m=e=>{if(e.htmlStyle)return d(e.htmlStyle);if(!o)return{};const t=o(e);return d(t)};return(t,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["x-md-inline-code",{"x-md-inline-code--dark":a.isDark,"x-md-animated-word":a.enableAnimate}])},[e.createElementVNode("code",{style:e.normalizeStyle(u.value)},[s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(s.value,(t,o)=>(e.openBlock(),e.createElementBlock("span",{key:o,style:e.normalizeStyle(m(t)),class:e.normalizeClass({"x-md-animated-word":a.enableAnimate})},e.toDisplayString(t.content),7))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(n.value),1)],64))],4)],2))}}),[["__scopeId","data-v-97166d5b"]]),ee=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./index-CgG50XSZ.cjs"))),te=e.defineComponent({props:{raw:{type:Object,default:()=>({})},codeXRender:{type:Object,default:()=>({})},isDark:{type:Boolean,default:!1},shikiTheme:{type:Array,default:()=>["vitesse-light","vitesse-dark"]},showCodeBlockHeader:{type:Boolean,default:!0},stickyCodeBlockHeader:{type:Boolean,default:!0},codeMaxHeight:{type:String,default:void 0},enableAnimate:{type:Boolean,default:!1},codeBlockActions:{type:Array,default:void 0},mermaidActions:{type:Array,default:void 0},mermaidConfig:{type:Object,default:void 0}},setup(t,{slots:o}){const{codeXRender:a}=t;return()=>{if(t.raw.inline){if(a&&a.inline){const o=a.inline;return"function"==typeof o?o(t):e.h(o,t)}return e.h(J,{raw:t.raw,isDark:t.isDark,shikiTheme:t.shikiTheme,enableAnimate:t.enableAnimate})}const{language:n}=t.raw;if(a&&a[n]){const o=a[n];return"function"==typeof o?o(t):e.h(o,t)}if("mermaid"===n){const a={};return Object.keys(o).forEach(e=>{e.startsWith("mermaid")&&(a[e]=o[e])}),e.h(ee,{raw:t.raw,isDark:t.isDark,shikiTheme:t.shikiTheme,mermaidActions:t.mermaidActions,config:t.mermaidConfig},a)}return e.h(Z,{code:t.raw.content||"",language:t.raw.language||"text",isDark:t.isDark,lightTheme:t.shikiTheme[0],darkTheme:t.shikiTheme[1],showCodeBlockHeader:t.showCodeBlockHeader,stickyCodeBlockHeader:t.stickyCodeBlockHeader,codeMaxHeight:t.codeMaxHeight,enableAnimate:t.enableAnimate,codeBlockActions:t.codeBlockActions},o)}}});function oe(t){return{code:o=>e.h(te,{raw:o,codeXRender:t?.codeXRender,isDark:t?.isDark,shikiTheme:t?.shikiTheme,enableAnimate:t?.enableAnimate,showCodeBlockHeader:t?.showCodeBlockHeader,stickyCodeBlockHeader:t?.stickyCodeBlockHeader,codeMaxHeight:t?.codeMaxHeight,codeBlockActions:t?.codeBlockActions,mermaidActions:t?.mermaidActions,mermaidConfig:t?.mermaidConfig})}}function ae(e){if("string"!=typeof e)return e;const t=/```[\s\S]*?```/g,o=e.match(t)||[];let a=e.replace(t,"ELX_CODE_BLOCK_PLACEHOLDER");return a=p.flow([e=>e.replace(/\\\[(.*?)\\\]/g,(e,t)=>`$$${t}$$`),e=>e.replace(/\\\[([\s\S]*?)\\\]/g,(e,t)=>`$$${t}$$`),e=>e.replace(/\\\((.*?)\\\)/g,(e,t)=>`$$${t}$$`),e=>e.replace(/(^|[^\\])\$(.+?)\$/g,(e,t,o)=>`${t}$${o}$`)])(a),o.forEach(e=>{a=a.replace("ELX_CODE_BLOCK_PLACEHOLDER",e.replace(/\$/g,"_ELX_DOLLAR_"))}),a=a.replace(/_ELX_DOLLAR_/g,"$"),a}let ne=null,le=!1;const re=[];let ie=!1;function ce(){return e=>{m.visit(e,"element",e=>{if(["p","h1","h2","h3","h4","h5","h6","li","strong","th","td"].includes(e.tagName)&&e.children){const t=[];for(const o of e.children)"text"===o.type?[...new Intl.Segmenter("zh",{granularity:"word"}).segment(o.value)].map(e=>e.segment).filter(Boolean).forEach(e=>{t.push({children:[{type:"text",value:e}],properties:{className:"x-md-animated-word"},tagName:"span",type:"element"})}):t.push(o);e.children=t}})}}function se(t){const{allowHtml:o,enableAnimate:a,enableLatex:n,enableBreaks:l,enableGfm:r,rehypePlugins:m,remarkPlugins:p,rehypePluginsAhead:h,remarkPluginsAhead:v}=e.toRefs(t);return{rehypePlugins:e.computed(()=>[...h.value,o.value&&c,n.value&&i,a.value&&ce,...m.value].filter(Boolean)),remarkPlugins:e.computed(()=>{const e=[n.value&&d,!1!==r.value&&[u,{singleTilde:!1}],l.value&&s].filter(Boolean);return[...v.value,...e,...p.value]})}}const ue={light:"vitesse-light",dark:"vitesse-dark"},de={markdown:{type:String,default:""},allowHtml:{type:Boolean,default:!1},enableLatex:{type:Boolean,default:!0},enableAnimate:{type:Boolean,default:!1},enableBreaks:{type:Boolean,default:!0},enableGfm:{type:Boolean,default:!0},isDark:{type:Boolean,default:!1},shikiTheme:{type:Array,default:()=>["vitesse-light","vitesse-dark"]},showCodeBlockHeader:{type:Boolean,default:!0},stickyCodeBlockHeader:{type:Boolean,default:!1},codeMaxHeight:{type:String,default:void 0},codeBlockActions:{type:Array,default:void 0},mermaidActions:{type:Array,default:void 0},mermaidConfig:{type:Object,default:void 0},codeXRender:{type:Object,default:()=>({})},customAttrs:{type:Object,default:()=>({})},remarkPlugins:{type:Array,default:()=>[]},remarkPluginsAhead:{type:Array,default:()=>[]},rehypePlugins:{type:Array,default:()=>[]},rehypePluginsAhead:{type:Array,default:()=>[]},rehypeOptions:{type:Object,default:()=>({})},sanitize:{type:Boolean,default:!1},sanitizeOptions:{type:Object,default:()=>({})}};function me(t,o){return e.defineComponent({name:t,props:de,setup(t,{slots:a,attrs:n}){const{rehypePlugins:l,remarkPlugins:r}=se(t),i=oe(t),c=e.computed(()=>t.markdown),s=e.computed(()=>({markdown:c.value,customAttrs:t.customAttrs,remarkPlugins:e.toValue(r),rehypePlugins:e.toValue(l),rehypeOptions:t.rehypeOptions,sanitize:t.sanitize,sanitizeOptions:t.sanitizeOptions}));return()=>e.h("div",{class:["x-md-renderer",{"is-dark":t.isDark}],style:{backgroundColor:t.isDark?"#1e1e1e":"#ffffff",color:t.isDark?"#e5e5e5":"#333333",padding:"16px"},...n},e.h(o,{...s.value,class:"x-md-core"},{...i,...a}))}})}const pe=me("MarkdownRenderer",w),he=me("MarkdownRendererAsync",x);exports.CodeBlock=Z,exports.MarkdownRenderer=pe,exports.MarkdownRendererAsync=he,exports.VueMarkdown=w,exports.VueMarkdownAsync=x,exports.createProcessor=y,exports.downloadSvgAsPng=function(e){if(e)try{const t=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`,o=new Image;o.onload=()=>{try{const a=document.createElement("canvas"),n=a.getContext("2d",{willReadFrequently:!1});if(!n)return;const l=2;a.width=o.width*l,a.height=o.height*l,n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high",n.fillStyle="#ffffff",n.fillRect(0,0,a.width,a.height),n.drawImage(o,0,0,a.width,a.height);const r=(new Date).toISOString().slice(0,19).replace(/:/g,"-");try{a.toBlob(e=>{if(!e)return;const t=URL.createObjectURL(e),o=document.createElement("a");o.href=t,o.download=`mermaid-diagram-${r}.png`,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(t)},"image/png",.95)}catch(e){console.error("Failed to convert canvas to blob:",e);try{const e=a.toDataURL("image/png",.95),t=document.createElement("a");t.href=e,t.download=`mermaid-diagram-${r}.png`,document.body.appendChild(t),t.click(),document.body.removeChild(t)}catch(t){console.error("Failed to convert canvas to data URL:",t)}}}catch(a){console.error("Canvas operation failed:",a)}},o.onerror=e=>{console.error("Failed to load image:",e)},o.src=t}catch(t){console.error("Failed to download SVG:",t)}},exports.getVNodeInfos=g,exports.preprocessLaTeX=ae,exports.render=h,exports.renderChildren=v,exports.useClipboard=z,exports.useComponents=oe,exports.useHighlight=H,exports.useMarkdownProcessor=f,exports.useMermaid=function(t,o={}){const a=e.computed(()=>"object"==typeof o&&"value"in o?o.value:o),n=e.computed(()=>({suppressErrorRendering:!0,startOnLoad:!1,securityLevel:"loose",theme:a.value.theme||"default",...a.value.config||{}})),l=e.ref(""),r=e.ref(null),i=e.ref(!1);let c=!1;const s=p.throttle(()=>{const e="string"==typeof t?t:t.value;if(!e?.trim())return l.value="",r.value=null,void(i.value=!1);var o;i.value=!0,o=async()=>{if(!c)try{const t=await async function(){return"undefined"==typeof window?null:(ne||(ne=import("mermaid").then(e=>e.default).catch(()=>(le||(le=!0,console.log("%c[x-markdown]%c Mermaid 图表功能已降级为代码块显示","font-weight: bold; color: #9333ea;","color: #666;"),console.log("%c如需 Mermaid 图表渲染功能,请安装:","color: #666; font-weight: bold;"),console.log("%c pnpm add mermaid","color: #9333ea; font-family: monospace;"),console.log("%c安装后请重启开发服务器","color: #999; font-size: 12px;")),null))),ne)}();if(!t)return l.value=e,r.value=null,void(i.value=!1);if(t.initialize(n.value),!(await t.parse(e.trim())))return l.value="",r.value=new Error("Mermaid parse error: Invalid syntax"),void(i.value=!1);const o=`${a.value.id||"mermaid"}-${Math.random().toString(36).substring(2,11)}`,c=(()=>{const e=a.value.container;return e?"object"==typeof e&&"value"in e?e.value:e:null})();if(!c)return void(i.value=!1);const{svg:s}=await t.render(o,e,c);l.value=s,r.value=null,i.value=!1}catch(t){l.value="",r.value=t,i.value=!1}},re.push(o),async function(){if(!ie){for(ie=!0;re.length>0;){const t=re.shift();if(t)try{await t()}catch(e){console.error("Mermaid render queue error:",e)}}ie=!1}}()},100,{leading:!1,trailing:!0});return e.watch([()=>"string"==typeof t?t:t.value,()=>n.value],()=>{s()},{immediate:!0}),e.onUnmounted(()=>{c=!0}),{data:l,error:r,isLoading:i}},exports.useMermaidZoom=function(t){const{container:o}=t,a=e.ref(1),n=e.ref(0),l=e.ref(0),r=e.ref(!1);let i=null;const c=()=>o.value?.querySelector(".syntax-mermaid__content svg"),s=e=>{e.style.transformOrigin="center center",e.style.transform=`translate(${n.value}px, ${l.value}px) scale(${a.value})`},u=()=>{a.value=1,n.value=0,l.value=0,r.value=!1},d=()=>{i?.(),i=null,u()};return e.watch(()=>o.value,()=>{d(),u()}),e.onUnmounted(d),{zoomIn:()=>{const e=c();e&&(a.value=Math.min(a.value+.2,10),s(e))},zoomOut:()=>{const e=c();e&&(a.value=Math.max(a.value-.2,.1),s(e))},reset:()=>{const e=c();e&&(u(),s(e))},fullscreen:()=>{o.value&&(document.fullscreenElement?document.exitFullscreen():o.value.requestFullscreen?.())},destroy:d,initialize:()=>{if(!o.value)return;u(),i=(e=>{let t=0,o=0,i=!1;const u=(e,a)=>{r.value=!0,t=e-n.value,o=a-l.value,document.body.style.userSelect="none"},d=(e,a)=>{if(r.value&&i){n.value=e-t,l.value=a-o;const r=c();r&&s(r)}},m=()=>{r.value=!1,i=!1,document.body.style.userSelect=""},h=t=>{0===t.button&&(t.target===e||e.contains(t.target))&&(t.preventDefault(),i=!0,u(t.clientX,t.clientY))},v=e=>{i&&d(e.clientX,e.clientY)},g=p.throttle(t=>{const o=c();if(!o)return;const r=e.getBoundingClientRect(),i=o.getBoundingClientRect(),u=t.clientX-r.left,d=t.clientY-r.top,m=i.left-r.left+i.width/2,p=i.top-r.top+i.height/2,h=(u-m-n.value)/a.value,v=(d-p-l.value)/a.value,g=t.deltaY>0?-.05:.05,f=Math.min(Math.max(a.value+g,.1),10);f!==a.value&&(a.value=f,n.value=u-m-h*a.value,l.value=d-p-v*a.value,s(o))},20,{leading:!0,trailing:!0}),f=t=>{(t.target===e||e.contains(t.target))&&(t.preventDefault(),g(t))},y=t=>{(t.target===e||e.contains(t.target))&&1===t.touches.length&&(t.preventDefault(),i=!0,u(t.touches[0].clientX,t.touches[0].clientY))},k=e=>{i&&(e.preventDefault(),d(e.touches[0].clientX,e.touches[0].clientY))};return e.addEventListener("mousedown",h),document.addEventListener("mousemove",v),document.addEventListener("mouseup",m),e.addEventListener("wheel",f,{passive:!1}),e.addEventListener("touchstart",y,{passive:!1}),e.addEventListener("touchmove",k,{passive:!1}),document.addEventListener("touchend",m),()=>{e.removeEventListener("mousedown",h),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",m),e.removeEventListener("wheel",f),e.removeEventListener("touchstart",y),e.removeEventListener("touchmove",k),document.removeEventListener("touchend",m),document.body.style.userSelect=""}})(o.value);const e=c();e&&s(e)}}},exports.usePlugins=se,exports.useProcessMarkdown=function(e){return ae(e)},exports.useTheme=function(t={}){const{lightTheme:o=ue.light,darkTheme:a=ue.dark}=t,n=e.ref(e.isRef(t.mode)?t.mode.value:t.mode||"auto"),l=e.computed({get:()=>e.isRef(t.mode)?t.mode.value:n.value,set:e=>{n.value=e}}),r=e.ref(!1);if("undefined"!=typeof window){const e=window.matchMedia("(prefers-color-scheme: dark)");r.value=e.matches,e.addEventListener("change",e=>{r.value=e.matches})}const i=e.computed(()=>"auto"===l.value?r.value:"dark"===l.value),c=e.computed(()=>(e.isRef(t.theme)?t.theme.value:t.theme)||(i.value?a:o));return{mode:l,isDark:i,actualTheme:c,setMode:e=>{n.value=e},toggleMode:()=>{const e=["light","dark","auto"],t=e.indexOf(l.value);n.value=e[(t+1)%e.length]}}};
|
|
2
|
+
//# sourceMappingURL=index-DtKeGkdv.cjs.map
|