@hejiayue/x-markdown-test 0.0.1-beta.151 → 0.0.1-beta.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/style.css +438 -1
  2. package/dist/types/config.d.ts +33 -0
  3. package/dist/types/hooks/useMermaid.d.ts +1 -1
  4. package/dist/types/index.d.ts +2 -0
  5. package/dist/x-markdown.cjs.js +35 -1
  6. package/dist/x-markdown.cjs.js.map +1 -1
  7. package/dist/x-markdown.cjs10.js +52 -1
  8. package/dist/x-markdown.cjs10.js.map +1 -1
  9. package/dist/x-markdown.cjs11.js +57 -1
  10. package/dist/x-markdown.cjs11.js.map +1 -1
  11. package/dist/x-markdown.cjs12.js +18 -0
  12. package/dist/x-markdown.cjs12.js.map +1 -0
  13. package/dist/x-markdown.cjs14.js +92 -1
  14. package/dist/x-markdown.cjs14.js.map +1 -1
  15. package/dist/x-markdown.cjs15.js +36 -1
  16. package/dist/x-markdown.cjs15.js.map +1 -1
  17. package/dist/x-markdown.cjs16.js +9 -1
  18. package/dist/x-markdown.cjs16.js.map +1 -1
  19. package/dist/x-markdown.cjs17.js +10 -1
  20. package/dist/x-markdown.cjs17.js.map +1 -1
  21. package/dist/x-markdown.cjs18.js +11 -1
  22. package/dist/x-markdown.cjs18.js.map +1 -1
  23. package/dist/x-markdown.cjs19.js +11 -1
  24. package/dist/x-markdown.cjs19.js.map +1 -1
  25. package/dist/x-markdown.cjs2.js +86 -1
  26. package/dist/x-markdown.cjs2.js.map +1 -1
  27. package/dist/x-markdown.cjs20.js +211 -0
  28. package/dist/x-markdown.cjs20.js.map +1 -0
  29. package/dist/x-markdown.cjs22.js +13 -1
  30. package/dist/x-markdown.cjs22.js.map +1 -1
  31. package/dist/x-markdown.cjs23.js +79 -0
  32. package/dist/x-markdown.cjs23.js.map +1 -0
  33. package/dist/x-markdown.cjs25.js +409 -0
  34. package/dist/x-markdown.cjs25.js.map +1 -0
  35. package/dist/x-markdown.cjs27.js +199 -1
  36. package/dist/x-markdown.cjs27.js.map +1 -1
  37. package/dist/x-markdown.cjs28.js +135 -1
  38. package/dist/x-markdown.cjs28.js.map +1 -1
  39. package/dist/x-markdown.cjs3.js +97 -1
  40. package/dist/x-markdown.cjs3.js.map +1 -1
  41. package/dist/x-markdown.cjs30.js +11 -1
  42. package/dist/x-markdown.cjs30.js.map +1 -1
  43. package/dist/x-markdown.cjs31.js +122 -1
  44. package/dist/x-markdown.cjs31.js.map +1 -1
  45. package/dist/x-markdown.cjs32.js +11 -0
  46. package/dist/x-markdown.cjs32.js.map +1 -0
  47. package/dist/x-markdown.cjs33.js +128 -1
  48. package/dist/x-markdown.cjs33.js.map +1 -1
  49. package/dist/x-markdown.cjs4.js +153 -1
  50. package/dist/x-markdown.cjs4.js.map +1 -1
  51. package/dist/x-markdown.cjs5.js +43 -1
  52. package/dist/x-markdown.cjs5.js.map +1 -1
  53. package/dist/x-markdown.cjs6.js +27 -1
  54. package/dist/x-markdown.cjs6.js.map +1 -1
  55. package/dist/x-markdown.cjs7.js +310 -1
  56. package/dist/x-markdown.cjs7.js.map +1 -1
  57. package/dist/x-markdown.cjs8.js +30 -1
  58. package/dist/x-markdown.cjs8.js.map +1 -1
  59. package/dist/x-markdown.cjs9.js +435 -1
  60. package/dist/x-markdown.cjs9.js.map +1 -1
  61. package/dist/x-markdown.es.js +11 -28
  62. package/dist/x-markdown.es10.js +10 -10
  63. package/dist/x-markdown.es10.js.map +1 -1
  64. package/dist/x-markdown.es11.js +4 -5
  65. package/dist/x-markdown.es11.js.map +1 -1
  66. package/dist/x-markdown.es12.js +12 -0
  67. package/dist/x-markdown.es12.js.map +1 -0
  68. package/dist/x-markdown.es14.js +85 -29
  69. package/dist/x-markdown.es14.js.map +1 -1
  70. package/dist/x-markdown.es15.js +32 -4
  71. package/dist/x-markdown.es15.js.map +1 -1
  72. package/dist/x-markdown.es16.js +5 -5
  73. package/dist/x-markdown.es16.js.map +1 -1
  74. package/dist/x-markdown.es17.js +5 -6
  75. package/dist/x-markdown.es17.js.map +1 -1
  76. package/dist/x-markdown.es18.js +6 -6
  77. package/dist/x-markdown.es18.js.map +1 -1
  78. package/dist/x-markdown.es19.js +7 -206
  79. package/dist/x-markdown.es19.js.map +1 -1
  80. package/dist/x-markdown.es2.js +6 -7
  81. package/dist/x-markdown.es2.js.map +1 -1
  82. package/dist/x-markdown.es20.js +207 -0
  83. package/dist/x-markdown.es20.js.map +1 -0
  84. package/dist/x-markdown.es22.js +7 -72
  85. package/dist/x-markdown.es22.js.map +1 -1
  86. package/dist/x-markdown.es23.js +75 -0
  87. package/dist/x-markdown.es23.js.map +1 -0
  88. package/dist/{x-markdown.es24.js → x-markdown.es25.js} +12 -10
  89. package/dist/x-markdown.es25.js.map +1 -0
  90. package/dist/x-markdown.es27.js +182 -7
  91. package/dist/x-markdown.es27.js.map +1 -1
  92. package/dist/x-markdown.es28.js +7 -8
  93. package/dist/x-markdown.es28.js.map +1 -1
  94. package/dist/x-markdown.es3.js +7 -8
  95. package/dist/x-markdown.es3.js.map +1 -1
  96. package/dist/x-markdown.es30.js +7 -77
  97. package/dist/x-markdown.es30.js.map +1 -1
  98. package/dist/x-markdown.es31.js +112 -124
  99. package/dist/x-markdown.es31.js.map +1 -1
  100. package/dist/x-markdown.es32.js +7 -0
  101. package/dist/x-markdown.es32.js.map +1 -0
  102. package/dist/x-markdown.es33.js +124 -5
  103. package/dist/x-markdown.es33.js.map +1 -1
  104. package/dist/x-markdown.es4.js +5 -7
  105. package/dist/x-markdown.es4.js.map +1 -1
  106. package/dist/x-markdown.es5.js +9 -10
  107. package/dist/x-markdown.es5.js.map +1 -1
  108. package/dist/x-markdown.es6.js +5 -5
  109. package/dist/x-markdown.es6.js.map +1 -1
  110. package/dist/x-markdown.es7.js +61 -74
  111. package/dist/x-markdown.es7.js.map +1 -1
  112. package/dist/x-markdown.es8.js +4 -5
  113. package/dist/x-markdown.es8.js.map +1 -1
  114. package/dist/x-markdown.es9.js +22 -14
  115. package/dist/x-markdown.es9.js.map +1 -1
  116. package/package.json +3 -14
  117. package/dist/types/vite-plugin.d.ts +0 -29
  118. package/dist/vite-plugin.cjs +0 -128
  119. package/dist/vite-plugin.cjs.map +0 -1
  120. package/dist/vite-plugin.js +0 -128
  121. package/dist/vite-plugin.js.map +0 -1
  122. package/dist/x-markdown.cjs13.js +0 -2
  123. package/dist/x-markdown.cjs13.js.map +0 -1
  124. package/dist/x-markdown.cjs21.js +0 -2
  125. package/dist/x-markdown.cjs21.js.map +0 -1
  126. package/dist/x-markdown.cjs24.js +0 -2
  127. package/dist/x-markdown.cjs24.js.map +0 -1
  128. package/dist/x-markdown.cjs26.js +0 -2
  129. package/dist/x-markdown.cjs26.js.map +0 -1
  130. package/dist/x-markdown.es13.js +0 -89
  131. package/dist/x-markdown.es13.js.map +0 -1
  132. package/dist/x-markdown.es21.js +0 -11
  133. package/dist/x-markdown.es21.js.map +0 -1
  134. package/dist/x-markdown.es24.js.map +0 -1
  135. package/dist/x-markdown.es26.js +0 -160
  136. package/dist/x-markdown.es26.js.map +0 -1
@@ -1,89 +0,0 @@
1
- import { defineComponent, h, defineAsyncComponent } from "vue";
2
- import CodeBlock from "./x-markdown.es17.js";
3
- import CodeLine from "./x-markdown.es18.js";
4
- const Mermaid = defineAsyncComponent(() => import("./x-markdown.es16.js"));
5
- const _sfc_main = defineComponent({
6
- props: {
7
- raw: { type: Object, default: () => ({}) },
8
- codeXRender: { type: Object, default: () => ({}) },
9
- isDark: { type: Boolean, default: false },
10
- shikiTheme: {
11
- type: Array,
12
- default: () => ["vitesse-light", "vitesse-dark"]
13
- },
14
- showCodeBlockHeader: { type: Boolean, default: true },
15
- stickyCodeBlockHeader: { type: Boolean, default: true },
16
- codeMaxHeight: { type: String, default: void 0 },
17
- enableAnimate: { type: Boolean, default: false },
18
- codeBlockActions: { type: Array, default: void 0 },
19
- mermaidActions: { type: Array, default: void 0 },
20
- mermaidConfig: { type: Object, default: void 0 }
21
- },
22
- setup(props, { slots }) {
23
- const { codeXRender } = props;
24
- return () => {
25
- if (props.raw.inline) {
26
- if (codeXRender && codeXRender.inline) {
27
- const renderer = codeXRender.inline;
28
- if (typeof renderer === "function") {
29
- return renderer(props);
30
- }
31
- return h(renderer, props);
32
- }
33
- return h(CodeLine, {
34
- raw: props.raw,
35
- isDark: props.isDark,
36
- shikiTheme: props.shikiTheme,
37
- enableAnimate: props.enableAnimate
38
- });
39
- }
40
- const { language } = props.raw;
41
- if (codeXRender && codeXRender[language]) {
42
- const renderer = codeXRender[language];
43
- if (typeof renderer === "function") {
44
- return renderer(props);
45
- }
46
- return h(renderer, props);
47
- }
48
- if (language === "mermaid") {
49
- const mermaidSlots = {};
50
- Object.keys(slots).forEach((key) => {
51
- if (key.startsWith("mermaid")) {
52
- mermaidSlots[key] = slots[key];
53
- }
54
- });
55
- return h(
56
- Mermaid,
57
- {
58
- raw: props.raw,
59
- isDark: props.isDark,
60
- shikiTheme: props.shikiTheme,
61
- mermaidActions: props.mermaidActions,
62
- config: props.mermaidConfig
63
- },
64
- mermaidSlots
65
- );
66
- }
67
- return h(
68
- CodeBlock,
69
- {
70
- code: props.raw.content || "",
71
- language: props.raw.language || "text",
72
- isDark: props.isDark,
73
- lightTheme: props.shikiTheme[0],
74
- darkTheme: props.shikiTheme[1],
75
- showCodeBlockHeader: props.showCodeBlockHeader,
76
- stickyCodeBlockHeader: props.stickyCodeBlockHeader,
77
- codeMaxHeight: props.codeMaxHeight,
78
- enableAnimate: props.enableAnimate,
79
- codeBlockActions: props.codeBlockActions
80
- },
81
- slots
82
- );
83
- };
84
- }
85
- });
86
- export {
87
- _sfc_main as default
88
- };
89
- //# sourceMappingURL=x-markdown.es13.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x-markdown.es13.js","sources":["../src/components/CodeX/index.vue"],"sourcesContent":["<script lang=\"ts\">\r\nimport { defineComponent, h, type PropType, defineAsyncComponent } from 'vue'\r\nimport type { CodeBlockAction } from '../CodeBlock/types'\r\nimport type { MermaidAction } from '../Mermaid/types'\r\nimport CodeBlock from '../CodeBlock/index.vue'\r\nimport CodeLine from '../CodeLine/index.vue'\r\n// Mermaid 组件改为动态导入,实现按需加载\r\nconst Mermaid = defineAsyncComponent(() => import('../Mermaid/index.vue'))\r\n\r\nexport default defineComponent({\r\n props: {\r\n raw: { type: Object, default: () => ({}) },\r\n codeXRender: { type: Object, default: () => ({}) },\r\n isDark: { type: Boolean, default: false },\r\n shikiTheme: {\r\n type: Array as unknown as PropType<[string, string]>,\r\n default: () => ['vitesse-light', 'vitesse-dark'] as [string, string],\r\n },\r\n showCodeBlockHeader: { type: Boolean, default: true },\r\n stickyCodeBlockHeader: { type: Boolean, default: true },\r\n codeMaxHeight: { type: String, default: undefined },\r\n enableAnimate: { type: Boolean, default: false },\r\n codeBlockActions: { type: Array as PropType<CodeBlockAction[]>, default: undefined },\r\n mermaidActions: { type: Array as PropType<MermaidAction[]>, default: undefined },\r\n mermaidConfig: { type: Object as PropType<Record<string, any>>, default: undefined },\r\n },\r\n setup(props, { slots }) {\r\n const { codeXRender } = props\r\n\r\n return (): ReturnType<typeof h> | null => {\r\n // 处理行内代码\r\n if (props.raw.inline) {\r\n if (codeXRender && codeXRender.inline) {\r\n const renderer = codeXRender.inline\r\n if (typeof renderer === 'function') {\r\n return renderer(props)\r\n }\r\n return h(renderer, props)\r\n }\r\n // 传递完整的配置给 CodeLine,包括主题和动画设置\r\n return h(CodeLine, {\r\n raw: props.raw,\r\n isDark: props.isDark,\r\n shikiTheme: props.shikiTheme,\r\n enableAnimate: props.enableAnimate,\r\n })\r\n }\r\n\r\n const { language } = props.raw\r\n\r\n // 处理自定义渲染器\r\n if (codeXRender && codeXRender[language]) {\r\n const renderer = codeXRender[language]\r\n if (typeof renderer === 'function') {\r\n return renderer(props)\r\n }\r\n return h(renderer, props)\r\n }\r\n\r\n // 处理 Mermaid 图表\r\n if (language === 'mermaid') {\r\n const mermaidSlots: Record<string, any> = {}\r\n Object.keys(slots).forEach((key) => {\r\n if (key.startsWith('mermaid')) {\r\n mermaidSlots[key] = slots[key]\r\n }\r\n })\r\n\r\n return h(\r\n Mermaid,\r\n {\r\n raw: props.raw,\r\n isDark: props.isDark,\r\n shikiTheme: props.shikiTheme,\r\n mermaidActions: props.mermaidActions,\r\n config: props.mermaidConfig,\r\n },\r\n mermaidSlots,\r\n )\r\n }\r\n\r\n // 渲染标准代码块\r\n return h(\r\n CodeBlock,\r\n {\r\n code: props.raw.content || '',\r\n language: props.raw.language || 'text',\r\n isDark: props.isDark,\r\n lightTheme: props.shikiTheme[0],\r\n darkTheme: props.shikiTheme[1],\r\n showCodeBlockHeader: props.showCodeBlockHeader,\r\n stickyCodeBlockHeader: props.stickyCodeBlockHeader,\r\n codeMaxHeight: props.codeMaxHeight,\r\n enableAnimate: props.enableAnimate,\r\n codeBlockActions: props.codeBlockActions,\r\n },\r\n slots,\r\n )\r\n }\r\n },\r\n})\r\n</script>\r\n"],"names":[],"mappings":";;;AAOA,MAAM,UAAU,qBAAqB,MAAM,OAAO,sBAAsB,CAAC;AAEzE,MAAA,YAAe,gBAAgB;AAAA,EAC7B,OAAO;AAAA,IACL,KAAK,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAA,GAAC;AAAA,IACtC,aAAa,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAA,GAAC;AAAA,IAC9C,QAAQ,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,IAClC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,MAAM,CAAC,iBAAiB,cAAc;AAAA,IAAA;AAAA,IAEjD,qBAAqB,EAAE,MAAM,SAAS,SAAS,KAAA;AAAA,IAC/C,uBAAuB,EAAE,MAAM,SAAS,SAAS,KAAA;AAAA,IACjD,eAAe,EAAE,MAAM,QAAQ,SAAS,OAAA;AAAA,IACxC,eAAe,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,IACzC,kBAAkB,EAAE,MAAM,OAAsC,SAAS,OAAA;AAAA,IACzE,gBAAgB,EAAE,MAAM,OAAoC,SAAS,OAAA;AAAA,IACrE,eAAe,EAAE,MAAM,QAAyC,SAAS,OAAA;AAAA,EAAU;AAAA,EAErF,MAAM,OAAO,EAAE,SAAS;AACtB,UAAM,EAAE,gBAAgB;AAExB,WAAO,MAAmC;AAExC,UAAI,MAAM,IAAI,QAAQ;AACpB,YAAI,eAAe,YAAY,QAAQ;AACrC,gBAAM,WAAW,YAAY;AAC7B,cAAI,OAAO,aAAa,YAAY;AAClC,mBAAO,SAAS,KAAK;AAAA,UACvB;AACA,iBAAO,EAAE,UAAU,KAAK;AAAA,QAC1B;AAEA,eAAO,EAAE,UAAU;AAAA,UACjB,KAAK,MAAM;AAAA,UACX,QAAQ,MAAM;AAAA,UACd,YAAY,MAAM;AAAA,UAClB,eAAe,MAAM;AAAA,QAAA,CACtB;AAAA,MACH;AAEA,YAAM,EAAE,aAAa,MAAM;AAG3B,UAAI,eAAe,YAAY,QAAQ,GAAG;AACxC,cAAM,WAAW,YAAY,QAAQ;AACrC,YAAI,OAAO,aAAa,YAAY;AAClC,iBAAO,SAAS,KAAK;AAAA,QACvB;AACA,eAAO,EAAE,UAAU,KAAK;AAAA,MAC1B;AAGA,UAAI,aAAa,WAAW;AAC1B,cAAM,eAAoC,CAAA;AAC1C,eAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AAClC,cAAI,IAAI,WAAW,SAAS,GAAG;AAC7B,yBAAa,GAAG,IAAI,MAAM,GAAG;AAAA,UAC/B;AAAA,QACF,CAAC;AAED,eAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,KAAK,MAAM;AAAA,YACX,QAAQ,MAAM;AAAA,YACd,YAAY,MAAM;AAAA,YAClB,gBAAgB,MAAM;AAAA,YACtB,QAAQ,MAAM;AAAA,UAAA;AAAA,UAEhB;AAAA,QAAA;AAAA,MAEJ;AAGA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,MAAM,MAAM,IAAI,WAAW;AAAA,UAC3B,UAAU,MAAM,IAAI,YAAY;AAAA,UAChC,QAAQ,MAAM;AAAA,UACd,YAAY,MAAM,WAAW,CAAC;AAAA,UAC9B,WAAW,MAAM,WAAW,CAAC;AAAA,UAC7B,qBAAqB,MAAM;AAAA,UAC3B,uBAAuB,MAAM;AAAA,UAC7B,eAAe,MAAM;AAAA,UACrB,eAAe,MAAM;AAAA,UACrB,kBAAkB,MAAM;AAAA,QAAA;AAAA,QAE1B;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF,CAAC;"}
@@ -1,11 +0,0 @@
1
- const _export_sfc = (sfc, props) => {
2
- const target = sfc.__vccOpts || sfc;
3
- for (const [key, val] of props) {
4
- target[key] = val;
5
- }
6
- return target;
7
- };
8
- export {
9
- _export_sfc as default
10
- };
11
- //# sourceMappingURL=x-markdown.es21.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x-markdown.es21.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"x-markdown.es24.js","sources":["../src/components/Mermaid/index.vue"],"sourcesContent":["<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\n// 默认为 true(降级模式),检测到可用后才切换到正常模式\r\n// 这样可以避免首次渲染时的闪烁问题\r\nconst isDegraded = ref(true)\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 {\n // ignore\n }\r\n return h(action.icon as any)\r\n }\r\n\r\n return h(action.icon as any)\r\n}\r\n\r\nfunction handleActionClick(action: 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 :show-code-block-header=\"false\"\r\n :sticky-code-block-header=\"false\"\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":["_createBlock","_createElementBlock","_normalizeClass","_createVNode","_Transition","_createElementVNode","_renderSlot","_normalizeProps","_guardReactiveProps","_Fragment","_renderList","_normalizeStyle","_resolveDynamicComponent","_unref","_openBlock","_withDirectives","SyntaxMermaid"],"mappings":"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"}
@@ -1,160 +0,0 @@
1
- import { useTimeoutFn, isClient, toArray, watchImmediate, createSingletonPromise, isObject } from "./x-markdown.es30.js";
2
- import { tryOnScopeDispose } from "./x-markdown.es30.js";
3
- import { computed, shallowRef, toValue, readonly, getCurrentInstance, onMounted, unref, toRaw } from "vue";
4
- const defaultWindow = isClient ? window : void 0;
5
- const defaultNavigator = isClient ? window.navigator : void 0;
6
- function unrefElement(elRef) {
7
- var _$el;
8
- const plain = toValue(elRef);
9
- return (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;
10
- }
11
- function useEventListener(...args) {
12
- const register = (el, event, listener, options) => {
13
- el.addEventListener(event, listener, options);
14
- return () => el.removeEventListener(event, listener, options);
15
- };
16
- const firstParamTargets = computed(() => {
17
- const test = toArray(toValue(args[0])).filter((e) => e != null);
18
- return test.every((e) => typeof e !== "string") ? test : void 0;
19
- });
20
- return watchImmediate(() => {
21
- var _firstParamTargets$va, _firstParamTargets$va2;
22
- return [
23
- (_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),
24
- toArray(toValue(firstParamTargets.value ? args[1] : args[0])),
25
- toArray(unref(firstParamTargets.value ? args[2] : args[1])),
26
- toValue(firstParamTargets.value ? args[3] : args[2])
27
- ];
28
- }, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {
29
- if (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;
30
- const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
31
- const cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));
32
- onCleanup(() => {
33
- cleanups.forEach((fn) => fn());
34
- });
35
- }, { flush: "post" });
36
- }
37
- // @__NO_SIDE_EFFECTS__
38
- function useMounted() {
39
- const isMounted = shallowRef(false);
40
- const instance = getCurrentInstance();
41
- if (instance) onMounted(() => {
42
- isMounted.value = true;
43
- }, instance);
44
- return isMounted;
45
- }
46
- // @__NO_SIDE_EFFECTS__
47
- function useSupported(callback) {
48
- const isMounted = /* @__PURE__ */ useMounted();
49
- return computed(() => {
50
- isMounted.value;
51
- return Boolean(callback());
52
- });
53
- }
54
- // @__NO_SIDE_EFFECTS__
55
- function usePermission(permissionDesc, options = {}) {
56
- const { controls = false, navigator: navigator$1 = defaultNavigator } = options;
57
- const isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && "permissions" in navigator$1);
58
- const permissionStatus = shallowRef();
59
- const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc;
60
- const state = shallowRef();
61
- const update = () => {
62
- var _permissionStatus$val, _permissionStatus$val2;
63
- state.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : "prompt";
64
- };
65
- useEventListener(permissionStatus, "change", update, { passive: true });
66
- const query = createSingletonPromise(async () => {
67
- if (!isSupported.value) return;
68
- if (!permissionStatus.value) try {
69
- permissionStatus.value = await navigator$1.permissions.query(desc);
70
- } catch (_unused) {
71
- permissionStatus.value = void 0;
72
- } finally {
73
- update();
74
- }
75
- if (controls) return toRaw(permissionStatus.value);
76
- });
77
- query();
78
- if (controls) return {
79
- state,
80
- isSupported,
81
- query
82
- };
83
- else return state;
84
- }
85
- function useClipboard(options = {}) {
86
- const { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;
87
- const isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator$1 && "clipboard" in navigator$1);
88
- const permissionRead = /* @__PURE__ */ usePermission("clipboard-read");
89
- const permissionWrite = /* @__PURE__ */ usePermission("clipboard-write");
90
- const isSupported = computed(() => isClipboardApiSupported.value || legacy);
91
- const text = shallowRef("");
92
- const copied = shallowRef(false);
93
- const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });
94
- async function updateText() {
95
- let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));
96
- if (!useLegacy) try {
97
- text.value = await navigator$1.clipboard.readText();
98
- } catch (_unused) {
99
- useLegacy = true;
100
- }
101
- if (useLegacy) text.value = legacyRead();
102
- }
103
- if (isSupported.value && read) useEventListener(["copy", "cut"], updateText, { passive: true });
104
- async function copy(value = toValue(source)) {
105
- if (isSupported.value && value != null) {
106
- let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));
107
- if (!useLegacy) try {
108
- await navigator$1.clipboard.writeText(value);
109
- } catch (_unused2) {
110
- useLegacy = true;
111
- }
112
- if (useLegacy) legacyCopy(value);
113
- text.value = value;
114
- copied.value = true;
115
- timeout.start();
116
- }
117
- }
118
- function legacyCopy(value) {
119
- const ta = document.createElement("textarea");
120
- ta.value = value;
121
- ta.style.position = "absolute";
122
- ta.style.opacity = "0";
123
- ta.setAttribute("readonly", "");
124
- document.body.appendChild(ta);
125
- ta.select();
126
- document.execCommand("copy");
127
- ta.remove();
128
- }
129
- function legacyRead() {
130
- var _document$getSelectio, _document, _document$getSelectio2;
131
- return (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : "";
132
- }
133
- function isAllowed(status) {
134
- return status === "granted" || status === "prompt";
135
- }
136
- return {
137
- isSupported,
138
- text: readonly(text),
139
- copied: readonly(copied),
140
- copy
141
- };
142
- }
143
- export {
144
- createSingletonPromise,
145
- defaultNavigator,
146
- defaultWindow,
147
- isClient,
148
- isObject,
149
- toArray,
150
- tryOnScopeDispose,
151
- unrefElement,
152
- useClipboard,
153
- useEventListener,
154
- useMounted,
155
- usePermission,
156
- useSupported,
157
- useTimeoutFn,
158
- watchImmediate
159
- };
160
- //# sourceMappingURL=x-markdown.es26.js.map