@hejiayue/x-markdown-test 0.0.1-beta.108 → 0.0.1-beta.110

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.
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),t=require("./index-RSdl7F9j.cjs"),o=require("lodash-es"),a={key:0,class:"syntax-mermaid__loading"},n=["innerHTML"],l=e.defineComponent({__name:"SyntaxMermaid",props:{content:{default:""},id:{default:"mermaid-default"},isDark:{type:Boolean,default:!1},config:{default:()=>({})}},emits:["degraded","ready"],setup(l,{expose:r,emit:i}){const d=l,c=i,s=e.ref(null),m=e.computed(()=>d.content),u=e.computed(()=>({id:d.id,theme:d.isDark?"dark":"default",config:d.config,container:s.value})),v=t.useMermaid(m,u),h=e.ref(""),g=e.computed(()=>v.isLoading.value),k=e.computed(()=>v.error.value),p=e.ref(null),w=t.useMermaidZoom({container:p}),f=o.debounce(function(){e.nextTick(()=>{p.value&&w.initialize()})},500);return e.watch(()=>v.data.value,(e,t)=>{console.log("[SyntaxMermaid] mermaidResult.data.value changed:",{oldSvg:t,newSvg:e,isNewSvg:!!e,startsWithSvg:e?.trim().startsWith("<svg"),preview:e?.substring(0,50)}),e&&(h.value=e,f(),e.trim().startsWith("<svg")?(console.log("[SyntaxMermaid] Emitting ready event - Mermaid is available"),c("ready")):(console.log("[SyntaxMermaid] Emitting degraded event - Mermaid not available"),c("degraded")))},{immediate:!0}),e.watch(h,e=>{e&&f()}),e.onMounted(()=>{h.value&&f()}),r({svg:h,isLoading:g,error:k,containerRef:p,zoomIn:function(){w?.zoomIn()},zoomOut:function(){w?.zoomOut()},reset:function(){w?.reset()},fullscreen:function(){w?.fullscreen(),w?.reset()},download:function(){t.downloadSvgAsPng(h.value)},getSvg:function(){return h.value},reinitialize:function(){f()}}),(t,o)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerRef",ref:p,class:e.normalizeClass(["syntax-mermaid",{"syntax-mermaid--dark":d.isDark}])},[e.createElementVNode("div",{ref_key:"renderContainerRef",ref:s,class:"syntax-mermaid__render-container","aria-hidden":"true"},null,512),g.value?(e.openBlock(),e.createElementBlock("div",a,[e.renderSlot(t.$slots,"loading",{},()=>[o[0]||(o[0]=e.createElementVNode("span",{class:"syntax-mermaid__loading-text"},"加载中...",-1))])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"syntax-mermaid__content",innerHTML:h.value},null,8,n))],2))}}),r={class:"toolbar-container"},i={class:"mermaid-toolbar"},d={class:"toolbar-left"},c={class:"segmented-control"},s={class:"toolbar-right"},m=["title","onClick"],u={key:0,width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},v={key:1,width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},h={class:"mermaid-source-code"},g=e.defineComponent({__name:"index",props:{isDark:{type:Boolean,default:!1},shikiTheme:{default:()=>["vitesse-light","vitesse-dark"]},config:{default:()=>({})},mermaidActions:{default:void 0},raw:{default:()=>({})}},setup(o){const a=o,n=e.ref(null),g=e.ref(!1),k=e.ref(!1),p=e.computed(()=>a.raw?.content||""),w=e.computed(()=>`mermaid-${a.raw?.key||"default"}`),f=e.computed(()=>n.value?.isLoading??!0),y=e.computed(()=>n.value?.svg??""),E=e.computed(()=>g.value?"code":"diagram");function C(e){e?.stopPropagation(),e?.preventDefault(),g.value||n.value?.zoomIn()}function V(e){e?.stopPropagation(),e?.preventDefault(),g.value||n.value?.zoomOut()}function N(e){e?.stopPropagation(),e?.preventDefault(),g.value||n.value?.reset()}function B(){g.value||n.value?.fullscreen()}function x(){g.value=!g.value}const{copy:b,copied:M}=t.useClipboard({copiedDuring:1500});function z(e){"code"!==e||g.value?"diagram"===e&&g.value&&(g.value=!1):g.value=!0}async function L(e){e?.stopPropagation(),e?.preventDefault(),M.value||a.raw.content&&await b(a.raw.content)}function S(){n.value?.download()}const _=e.computed(()=>a.mermaidActions||[]),D=e.computed(()=>_.value.filter(e=>!e.show||e.show(T.value))),T=e.computed(()=>({showSourceCode:g.value,svg:y.value,rawContent:a.raw.content||"",isLoading:f.value,copied:M.value,zoomIn:C,zoomOut:V,reset:N,fullscreen:B,toggleCode:x,copyCode:L,download:S,raw:a.raw}));function H(t){if(!t.icon)return null;if("string"==typeof t.icon)return e.h("span",{class:"mermaid-action-icon",innerHTML:t.icon});if("function"==typeof t.icon){try{const e=t.icon(T.value);if(e&&"object"==typeof e&&"__v_isVNode"in e)return e}catch{}return e.h(t.icon)}return e.h(t.icon)}const P=e.computed(()=>({showSourceCode:g.value,svg:y.value,rawContent:a.raw.content||"",isLoading:f.value,copied:M.value,zoomIn:C,zoomOut:V,reset:N,fullscreen:B,toggleCode:x,copyCode:L,download:S,raw:a.raw}));return e.onMounted(async()=>{const e=await t.checkMermaidAvailable();k.value=!e}),(o,f)=>k.value?(e.openBlock(),e.createBlock(t.CodeBlock,{key:0,code:a.raw?.content||"",language:"mermaid","is-dark":a.isDark,"light-theme":a.shikiTheme[0],"dark-theme":a.shikiTheme[1]},null,8,["code","is-dark","light-theme","dark-theme"])):(e.openBlock(),e.createElementBlock("div",{key:a.raw.key,class:e.normalizeClass(["markdown-mermaid",{"markdown-mermaid--dark":a.isDark}])},[e.createVNode(e.Transition,{name:"toolbar",appear:""},{default:e.withCtx(()=>[e.createElementVNode("div",r,[e.renderSlot(o.$slots,"mermaidHeader",e.normalizeProps(e.guardReactiveProps(P.value)),()=>[e.createElementVNode("div",i,[e.createElementVNode("div",d,[e.createElementVNode("div",c,[e.createElementVNode("div",{class:e.normalizeClass(["segmented-slider",{"slide-right":"code"===E.value}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["segment-item",{active:"diagram"===E.value}]),onClick:f[0]||(f[0]=e=>z("diagram"))},[...f[6]||(f[6]=[e.createElementVNode("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M12 2L2 7L12 12L22 7L12 2Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M2 17L12 22L22 17",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M2 12L12 17L22 12",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1),e.createElementVNode("span",null,"预览",-1)])],2),e.createElementVNode("div",{class:e.normalizeClass(["segment-item",{active:"code"===E.value}]),onClick:f[1]||(f[1]=e=>z("code"))},[...f[7]||(f[7]=[e.createElementVNode("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M16 18L22 12L16 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M8 6L2 12L8 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1),e.createElementVNode("span",null,"代码",-1)])],2)])]),e.createElementVNode("div",s,[e.renderSlot(o.$slots,"mermaidActions",e.normalizeProps(e.guardReactiveProps(P.value)),()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,t=>(e.openBlock(),e.createElementBlock("div",{key:t.key,class:e.normalizeClass(["toolbar-action-btn",[t.class,{"toolbar-action-btn--disabled":t.disabled}]]),style:e.normalizeStyle(t.style),title:t.title,onClick:e=>function(e){e.disabled||e.onClick?.(T.value)}(t)},[t.icon?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(H(t)),{key:0})):e.createCommentVNode("",!0)],14,m))),128)),g.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["toolbar-action-btn",{"copy-success":e.unref(M)}]),title:"复制代码",onClick:f[2]||(f[2]=e=>L(e))},[e.unref(M)?(e.openBlock(),e.createElementBlock("svg",u,[...f[8]||(f[8]=[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",v,[...f[9]||(f[9]=[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)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",{class:"toolbar-action-btn",title:"缩小",onClick:f[3]||(f[3]=e=>V(e))},[...f[10]||(f[10]=[e.createElementVNode("svg",{width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"currentColor",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"})],-1)])]),e.createElementVNode("div",{class:"toolbar-action-btn",title:"放大",onClick:f[4]||(f[4]=e=>C(e))},[...f[11]||(f[11]=[e.createElementVNode("svg",{width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"currentColor",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"})],-1)])]),e.createElementVNode("div",{class:"toolbar-action-btn",title:"重置",onClick:f[5]||(f[5]=e=>N(e))},[...f[12]||(f[12]=[e.createElementVNode("svg",{width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"currentColor",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"}),e.createElementVNode("path",{fill:"currentColor",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"})],-1)])]),e.createElementVNode("div",{class:"toolbar-action-btn",title:"下载",onClick:S},[...f[13]||(f[13]=[e.createElementVNode("svg",{width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"currentColor",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"})],-1)])])],64))])])])])])]),_:3}),e.withDirectives(e.createElementVNode("div",h,[e.createVNode(t.CodeBlock,{code:a.raw?.content||"",language:"mermaid","is-dark":a.isDark,"light-theme":a.shikiTheme[0],"dark-theme":a.shikiTheme[1]},null,8,["code","is-dark","light-theme","dark-theme"])],512),[[e.vShow,g.value]]),e.withDirectives(e.createVNode(l,{ref_key:"syntaxMermaidRef",ref:n,content:p.value,id:w.value,"is-dark":a.isDark,config:a.config},null,8,["content","id","is-dark","config"]),[[e.vShow,!g.value]])],2))}});exports.default=g;
2
+ //# sourceMappingURL=index-BOIzI4mU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BOIzI4mU.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, onMounted } from 'vue'\r\nimport { useClipboard } from '@vueuse/core'\r\n// 使用运行时检测\r\nimport { checkMermaidAvailable } from '../../hooks/useMermaid'\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\nconst isDegraded = ref(false)\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\r\n// 组件挂载时检测 mermaid 是否可用\r\nonMounted(async () => {\r\n const hasMermaid = await checkMermaidAvailable()\r\n isDegraded.value = !hasMermaid\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","hasMermaid","checkMermaidAvailable","_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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"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, computed, nextTick, watch, onMounted, createElementBlock, openBlock, normalizeClass, createElementVNode, renderSlot, createBlock, createVNode, withDirectives, Transition, withCtx, normalizeProps, guardReactiveProps, Fragment, renderList, normalizeStyle, createCommentVNode, resolveDynamicComponent, unref, vShow, h } from "vue";
2
- import { u as useMermaid, a as useMermaidZoom, d as downloadSvgAsPng, b as useClipboard, C as CodeBlock } from "./index-Ys7-7uFi.js";
2
+ import { u as useMermaid, a as useMermaidZoom, d as downloadSvgAsPng, b as useClipboard, c as checkMermaidAvailable, C as CodeBlock } from "./index-BL_6QZNq.js";
3
3
  import { debounce } from "lodash-es";
4
4
  const _hoisted_1$1 = {
5
5
  key: 0,
@@ -292,6 +292,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
292
292
  raw: props.raw
293
293
  })
294
294
  );
295
+ onMounted(async () => {
296
+ const hasMermaid = await checkMermaidAvailable();
297
+ isDegraded.value = !hasMermaid;
298
+ });
295
299
  return (_ctx, _cache) => {
296
300
  return isDegraded.value ? (openBlock(), createBlock(CodeBlock, {
297
301
  key: 0,
@@ -526,4 +530,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
526
530
  export {
527
531
  _sfc_main as default
528
532
  };
529
- //# sourceMappingURL=index-BjeepIV6.js.map
533
+ //# sourceMappingURL=index-DoC1ohUF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DoC1ohUF.js","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, onMounted } from 'vue'\r\nimport { useClipboard } from '@vueuse/core'\r\n// 使用运行时检测\r\nimport { checkMermaidAvailable } from '../../hooks/useMermaid'\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\nconst isDegraded = ref(false)\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\r\n// 组件挂载时检测 mermaid 是否可用\r\nonMounted(async () => {\r\n const hasMermaid = await checkMermaidAvailable()\r\n isDegraded.value = !hasMermaid\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":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_hoisted_1","_renderSlot","_createBlock","_createVNode","_Transition","_normalizeProps","_guardReactiveProps","_Fragment","_renderList","_normalizeStyle","_resolveDynamicComponent","_unref","_withDirectives","SyntaxMermaid"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.create,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.prototype.hasOwnProperty;const e=require("vue"),t=require("property-information"),a=require("deepmerge"),o=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,a,o,n){return e.h("div",a,v(t.children,{listDepth:-1,listOrdered:!1,listItemIndex:-1,svg:!1},t,o??{},e.toValue(n)??{},{}))}function v(t,a,o,n,l,r){return t.map(t=>{switch(t.type){case"text":case"raw":return t.value;case"root":return v(t.children,a,o,n,l,r);case"element":{const{attrs:i,context:c,aliasList:s,vnodeProps:u}=g(t,o,a,r,l);for(let e=s.length-1;e>=0;e--){const a=n[s[e]];if("function"==typeof a)return a({...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,a,o,n,l){const r=[];let i={};const c={},s={...o};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,[a,o])=>(e[t.find(s.svg?t.svg:t.html,a).attribute]=o,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 a&&"pre"!==a.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"===o.currentContext;break;case"ul":case"ol":s.listDepth=o.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,a,o,n){const l={...o};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,{...o,...a}):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?[[o,a(o.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:a,attrs:o}){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),o,a,u.value)}}}),b=e.defineComponent({name:"VueMarkdownAsync",props:k,async setup(t,{slots:a,attrs:o}){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,o,a,u.value):null}}),x="undefined"!=typeof window&&"undefined"!=typeof document,B=Object.prototype.toString;function C(e){return Array.isArray(e)?e:[e]}const O=x?window:void 0,E=x?window.navigator:void 0;function S(...t){const a=e.computed(()=>{const a=C(e.toValue(t[0])).filter(e=>null!=e);return a.every(e=>"string"!=typeof e)?a:void 0});return o=()=>{var o,n;return[null!==(o=null===(n=a.value)||void 0===n?void 0:n.map(t=>function(t){var a;const o=e.toValue(t);return null!==(a=null==o?void 0:o.$el)&&void 0!==a?a:o}(t)))&&void 0!==o?o:[O].filter(e=>null!=e),C(e.toValue(a.value?t[1]:t[0])),C(e.unref(a.value?t[2]:t[1])),e.toValue(a.value?t[3]:t[2])]},n=([e,t,a,o],n,l)=>{if(!(null==e?void 0:e.length)||!(null==t?void 0:t.length)||!(null==a?void 0:a.length))return;const r=(i=o,"[object Object]"===B.call(i)?{...o}:o);var i;const c=e.flatMap(e=>t.flatMap(t=>a.map(a=>((e,t,a,o)=>(e.addEventListener(t,a,o),()=>e.removeEventListener(t,a,o)))(e,t,a,r))));l(()=>{c.forEach(e=>e())})},l={flush:"post"},e.watch(o,n,{...l,immediate:!0});var o,n,l}function A(){const t=e.shallowRef(!1),a=e.getCurrentInstance();return a&&e.onMounted(()=>{t.value=!0},a),t}function R(t){const a=A();return e.computed(()=>(a.value,Boolean(t())))}function L(t,a={}){const{controls:o=!1,navigator:n=E}=a,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"};S(r,"change",s,{passive:!0});const u=function(){let t;function a(){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 o?e.toRaw(r.value):void 0}})()),t}return a.reset=async()=>{const e=t;t=void 0,e&&await e},a}();return u(),o?{state:c,isSupported:l,query:u}:c}function z(t={}){const{navigator:a=E,read:o=!1,source:n,copiedDuring:l=1500,legacy:r=!1}=t,i=R(()=>a&&"clipboard"in a),c=L("clipboard-read"),s=L("clipboard-write"),u=e.computed(()=>i.value||r),d=e.shallowRef(""),m=e.shallowRef(!1),p=function(t,a,o={}){const{immediate:n=!0,immediateCallback:l=!1}=o,r=e.shallowRef(!1);let i;function c(){i&&(clearTimeout(i),i=void 0)}function s(){r.value=!1,c()}function u(...o){l&&t(),c(),r.value=!0,i=setTimeout(()=>{r.value=!1,i=void 0,t(...o)},e.toValue(a))}var d;return n&&(r.value=!0,x&&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&&o&&S(["copy","cut"],async function(){let e=!(i.value&&h(c.value));if(!e)try{d.value=await a.clipboard.readText()}catch(l){e=!0}var t,o,n;e&&(d.value=null!==(t=null===(o=document)||void 0===o||null===(n=o.getSelection)||void 0===n||null===(n=n.call(o))||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 a.clipboard.writeText(t)}catch(o){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,D=null,V=!1;const N=()=>{V||(V=!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;"))},P=e=>{if(!e.length)return[[]];const t=[[]];let a=t[0];const o=()=>{a=[],t.push(a)};return e.forEach(e=>{const t=e.content??"";if("\n"===t)return void o();if(!t.includes("\n"))return void a.push(e);const n=t.split("\n");n.forEach((t,l)=>{t&&a.push({...e,content:t}),l<n.length-1&&o()})}),0===t.length?[[]]:t},M=(e,t)=>{if(e||t)return{backgroundColor:e,color:t}};function H(t,a){const o=e.ref(),n=e.ref(!1),l=e.ref(null);let r=null,i="",c=null,s="",u="";const d=e.computed(()=>(e.isRef(a.theme)?a.theme.value:a.theme)||"slack-dark"),m=e.computed(()=>e.toValue(a.language)||"text"),p=e.computed(()=>o.value?.lines||[[]]),h=e.computed(()=>o.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(o.value={colorReplacements:a.colorReplacements,lines:e.length?P(e):[[]],preStyle:o.value?.preStyle})}try{await r.enqueue(c);const e=[...r.tokensStable,...r.tokensUnstable];o.value={colorReplacements:a.colorReplacements,lines:P(e),preStyle:o.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(async()=>(T||(T=(async()=>{try{return await import("shiki")}catch{return N(),null}})()),T))();if(!n)return console.warn("[x-markdown] Shiki not available, falling back to plain text mode"),void(o.value={colorReplacements:a.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(async()=>(D||(D=(async()=>{try{return await import("shiki-stream")}catch{return N(),null}})()),D))();if(!l){console.warn("[x-markdown] shiki-stream not available, using non-streaming mode");const n=c.codeToThemedTokens(t.value,e,p);return void(o.value={colorReplacements:a.colorReplacements,lines:P(n),preStyle:M(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=M(m?.bg,m?.fg);t.value?(await v(t.value,!0),o.value&&(o.value.preStyle=h)):o.value={colorReplacements:a.colorReplacements,lines:[[]],preStyle:h}}catch(h){console.error("[x-markdown] Highlighter initialization failed:",h),l.value=h,o.value={colorReplacements:a.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||(o.value={colorReplacements:a.colorReplacements,lines:[[{content:e}]],preStyle:o.value?.preStyle})}),e.onUnmounted(()=>{r?.clear(),r=null,i=""}),{streaming:o,lines:p,preStyle:h,isLoading:n,error:l}}const $={class:"x-md-syntax-code-block"},j={class:"x-md-code-content"},_={key:0},q=(e,t)=>{const a=e.__vccOpts||e;for(const[o,n]of t)a[o]=n;return a},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:a}){let o=null;e.onMounted(async()=>{const e=await Function("return import('@shikijs/core')")().catch(()=>({getTokenStyleObject:()=>({})}));o=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,a])=>{const o=e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[o]=a}),t},m=e=>{if(e.htmlStyle){const t=d(e.htmlStyle);if(!n.colorReplacements)return t;const a={...t};return a.color&&"string"==typeof a.color&&(a.color=u(a.color,n.colorReplacements)),a.backgroundColor&&"string"==typeof a.backgroundColor&&(a.backgroundColor=u(a.backgroundColor,n.colorReplacements)),a}if(!o)return{};const t=o(e),a=d(t);if(!n.colorReplacements)return a;const l={...a};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 a({lines:c,code:l,language:r,actualTheme:i}),(t,a)=>(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"},[a[4]||(a[4]=e.createTextVNode(" ",-1)),e.createElementVNode("code",j,[a[2]||(a[2]=e.createTextVNode("\n ",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c),(t,o)=>(e.openBlock(),e.createElementBlock("span",{key:o,class:"x-md-code-line"},[a[0]||(a[0]=e.createTextVNode("\n ",-1)),t.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(t,(t,a)=>(e.openBlock(),e.createElementBlock("span",{key:a,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",_," ")),a[1]||(a[1]=e.createTextVNode("\n ",-1))]))),128)),a[3]||(a[3]=e.createTextVNode("\n ",-1))]),a[5]||(a[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:a}){const{copy:o,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:o,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 a({copy:o,copied:n,collapsed:l,toggleCollapse:i,syntaxCodeBlockRef:r}),(a,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(a.$slots,"codeHeader",{language:u.value,code:s.value,copy:e.unref(o),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(a.$slots,"codeActions",{code:s.value,copy:e.unref(o),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(o)(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 a=null;e.onMounted(async()=>{const e=await Function("return import('@shikijs/core')")().catch(()=>({getTokenStyleObject:()=>({})}));a=e.getTokenStyleObject});const o=t,n=e.computed(()=>o.raw?.content??""),l=e.computed(()=>o.raw?.language||"ts"),r=e.computed(()=>o.isDark?o.shikiTheme[1]:o.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,a])=>{const o=e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[o]=a}),t},m=e=>{if(e.htmlStyle)return d(e.htmlStyle);if(!a)return{};const t=a(e);return d(t)};return(t,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["x-md-inline-code",{"x-md-inline-code--dark":o.isDark,"x-md-animated-word":o.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,a)=>(e.openBlock(),e.createElementBlock("span",{key:a,style:e.normalizeStyle(m(t)),class:e.normalizeClass({"x-md-animated-word":o.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-BOIzI4mU.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:a}){const{codeXRender:o}=t;return()=>{if(t.raw.inline){if(o&&o.inline){const a=o.inline;return"function"==typeof a?a(t):e.h(a,t)}return e.h(J,{raw:t.raw,isDark:t.isDark,shikiTheme:t.shikiTheme,enableAnimate:t.enableAnimate})}const{language:n}=t.raw;if(o&&o[n]){const a=o[n];return"function"==typeof a?a(t):e.h(a,t)}if("mermaid"===n){const o={};return Object.keys(a).forEach(e=>{e.startsWith("mermaid")&&(o[e]=a[e])}),e.h(ee,{raw:t.raw,isDark:t.isDark,shikiTheme:t.shikiTheme,mermaidActions:t.mermaidActions,config:t.mermaidConfig},o)}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},a)}}});function ae(t){return{code:a=>e.h(te,{raw:a,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 oe(e){if("string"!=typeof e)return e;const t=/```[\s\S]*?```/g,a=e.match(t)||[];let o=e.replace(t,"ELX_CODE_BLOCK_PLACEHOLDER");return o=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,a)=>`${t}$${a}$`)])(o),a.forEach(e=>{o=o.replace("ELX_CODE_BLOCK_PLACEHOLDER",e.replace(/\$/g,"_ELX_DOLLAR_"))}),o=o.replace(/_ELX_DOLLAR_/g,"$"),o}let ne=null,le=!1,re=null,ie=null;const ce=[];let se=!1;function ue(){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 a of e.children)"text"===a.type?[...new Intl.Segmenter("zh",{granularity:"word"}).segment(a.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(a);e.children=t}})}}function de(t){const{allowHtml:a,enableAnimate:o,enableLatex:n,enableBreaks:l,enableGfm:r,rehypePlugins:m,remarkPlugins:p,rehypePluginsAhead:h,remarkPluginsAhead:v}=e.toRefs(t);return{rehypePlugins:e.computed(()=>[...h.value,a.value&&c,n.value&&i,o.value&&ue,...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 me={light:"vitesse-light",dark:"vitesse-dark"},pe={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 he(t,a){return e.defineComponent({name:t,props:pe,setup(t,{slots:o,attrs:n}){const{rehypePlugins:l,remarkPlugins:r}=de(t),i=ae(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(a,{...s.value,class:"x-md-core"},{...i,...o}))}})}const ve=he("MarkdownRenderer",w),ge=he("MarkdownRendererAsync",b);exports.CodeBlock=Z,exports.MarkdownRenderer=ve,exports.MarkdownRendererAsync=ge,exports.VueMarkdown=w,exports.VueMarkdownAsync=b,exports.checkMermaidAvailable=async function(){return null!==re?re:ie||(ie=(async()=>{try{return await import("mermaid"),re=!0,!0}catch(e){return re=!1,!1}})(),ie)},exports.createProcessor=y,exports.downloadSvgAsPng=function(e){if(e)try{const t=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`,a=new Image;a.onload=()=>{try{const o=document.createElement("canvas"),n=o.getContext("2d",{willReadFrequently:!1});if(!n)return;const l=2;o.width=a.width*l,o.height=a.height*l,n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high",n.fillStyle="#ffffff",n.fillRect(0,0,o.width,o.height),n.drawImage(a,0,0,o.width,o.height);const r=(new Date).toISOString().slice(0,19).replace(/:/g,"-");try{o.toBlob(e=>{if(!e)return;const t=URL.createObjectURL(e),a=document.createElement("a");a.href=t,a.download=`mermaid-diagram-${r}.png`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(t)},"image/png",.95)}catch(e){console.error("Failed to convert canvas to blob:",e);try{const e=o.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(o){console.error("Canvas operation failed:",o)}},a.onerror=e=>{console.error("Failed to load image:",e)},a.src=t}catch(t){console.error("Failed to download SVG:",t)}},exports.getVNodeInfos=g,exports.preprocessLaTeX=oe,exports.render=h,exports.renderChildren=v,exports.useClipboard=z,exports.useComponents=ae,exports.useHighlight=H,exports.useMarkdownProcessor=f,exports.useMermaid=function(t,a={}){const o=e.computed(()=>"object"==typeof a&&"value"in a?a.value:a),n=e.computed(()=>({suppressErrorRendering:!0,startOnLoad:!1,securityLevel:"loose",theme:o.value.theme||"default",...o.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 a;i.value=!0,a=async()=>{if(!c)try{const t=await async function(){return"undefined"==typeof window?null:(ne||(ne=(async()=>{try{return(await import("mermaid")).default}catch{return 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 a=`${o.value.id||"mermaid"}-${Math.random().toString(36).substring(2,11)}`,c=(()=>{const e=o.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(a,e,c);l.value=s,r.value=null,i.value=!1}catch(t){l.value="",r.value=t,i.value=!1}},ce.push(a),async function(){if(!se){for(se=!0;ce.length>0;){const t=ce.shift();if(t)try{await t()}catch(e){console.error("Mermaid render queue error:",e)}}se=!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:a}=t,o=e.ref(1),n=e.ref(0),l=e.ref(0),r=e.ref(!1);let i=null;const c=()=>a.value?.querySelector(".syntax-mermaid__content svg"),s=e=>{e.style.transformOrigin="center center",e.style.transform=`translate(${n.value}px, ${l.value}px) scale(${o.value})`},u=()=>{o.value=1,n.value=0,l.value=0,r.value=!1},d=()=>{i?.(),i=null,u()};return e.watch(()=>a.value,()=>{d(),u()}),e.onUnmounted(d),{zoomIn:()=>{const e=c();e&&(o.value=Math.min(o.value+.2,10),s(e))},zoomOut:()=>{const e=c();e&&(o.value=Math.max(o.value-.2,.1),s(e))},reset:()=>{const e=c();e&&(u(),s(e))},fullscreen:()=>{a.value&&(document.fullscreenElement?document.exitFullscreen():a.value.requestFullscreen?.())},destroy:d,initialize:()=>{if(!a.value)return;u(),i=(e=>{let t=0,a=0,i=!1;const u=(e,o)=>{r.value=!0,t=e-n.value,a=o-l.value,document.body.style.userSelect="none"},d=(e,o)=>{if(r.value&&i){n.value=e-t,l.value=o-a;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 a=c();if(!a)return;const r=e.getBoundingClientRect(),i=a.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)/o.value,v=(d-p-l.value)/o.value,g=t.deltaY>0?-.05:.05,f=Math.min(Math.max(o.value+g,.1),10);f!==o.value&&(o.value=f,n.value=u-m-h*o.value,l.value=d-p-v*o.value,s(a))},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=""}})(a.value);const e=c();e&&s(e)}}},exports.usePlugins=de,exports.useProcessMarkdown=function(e){return oe(e)},exports.useTheme=function(t={}){const{lightTheme:a=me.light,darkTheme:o=me.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?o:a));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-RSdl7F9j.cjs.map