@king-design/vue 3.7.0 → 3.8.0-beta.0

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 (227) hide show
  1. package/__tests__/__snapshots__/Vue Next Demos.md +399 -0
  2. package/components/bubble/bubble.d.ts +61 -0
  3. package/components/bubble/bubble.js +81 -0
  4. package/components/bubble/bubble.vdt.js +85 -0
  5. package/components/bubble/index.d.ts +1 -0
  6. package/components/bubble/index.js +1 -0
  7. package/components/bubble/index.spec.d.ts +1 -0
  8. package/components/bubble/index.spec.js +771 -0
  9. package/components/bubble/styles.d.ts +5 -0
  10. package/components/bubble/styles.js +53 -0
  11. package/components/bubble/useBubbleDisplay.d.ts +18 -0
  12. package/components/bubble/useBubbleDisplay.js +300 -0
  13. package/components/bubbleList/bubbleList.d.ts +87 -0
  14. package/components/bubbleList/bubbleList.js +75 -0
  15. package/components/bubbleList/bubbleList.vdt.js +143 -0
  16. package/components/bubbleList/index.d.ts +1 -0
  17. package/components/bubbleList/index.js +1 -0
  18. package/components/bubbleList/index.spec.d.ts +1 -0
  19. package/components/bubbleList/index.spec.js +1268 -0
  20. package/components/bubbleList/item.d.ts +16 -0
  21. package/components/bubbleList/item.js +27 -0
  22. package/components/bubbleList/item.vdt.js +36 -0
  23. package/components/bubbleList/styles.d.ts +5 -0
  24. package/components/bubbleList/styles.js +33 -0
  25. package/components/bubbleList/useBubbleList.d.ts +28 -0
  26. package/components/bubbleList/useBubbleList.js +455 -0
  27. package/components/checkbox/index.d.ts +3 -3
  28. package/components/fileCard/fileCard.d.ts +65 -0
  29. package/components/fileCard/fileCard.js +72 -0
  30. package/components/fileCard/fileCard.vdt.js +161 -0
  31. package/components/fileCard/fileCardAssets.d.ts +1 -0
  32. package/components/fileCard/fileCardAssets.js +54 -0
  33. package/components/fileCard/fileCardUtils.d.ts +14 -0
  34. package/components/fileCard/fileCardUtils.js +94 -0
  35. package/components/fileCard/index.d.ts +2 -0
  36. package/components/fileCard/index.js +2 -0
  37. package/components/fileCard/index.spec.d.ts +1 -0
  38. package/components/fileCard/index.spec.js +1096 -0
  39. package/components/fileCard/list.d.ts +29 -0
  40. package/components/fileCard/list.js +46 -0
  41. package/components/fileCard/list.vdt.js +71 -0
  42. package/components/fileCard/styles.d.ts +5 -0
  43. package/components/fileCard/styles.js +83 -0
  44. package/components/fileCard/useFileCard.d.ts +45 -0
  45. package/components/fileCard/useFileCard.js +330 -0
  46. package/components/fileCard/useFileCardList.d.ts +14 -0
  47. package/components/fileCard/useFileCardList.js +49 -0
  48. package/components/form/form.js +2 -1
  49. package/components/media/context.d.ts +6 -0
  50. package/components/media/context.js +2 -0
  51. package/components/media/group.d.ts +12 -0
  52. package/components/media/group.js +32 -0
  53. package/components/media/group.vdt.js +50 -0
  54. package/components/media/index.d.ts +2 -0
  55. package/components/media/index.js +2 -0
  56. package/components/media/index.spec.d.ts +1 -0
  57. package/components/media/index.spec.js +1691 -0
  58. package/components/media/media.d.ts +37 -0
  59. package/components/media/media.js +67 -0
  60. package/components/media/media.vdt.js +202 -0
  61. package/components/media/mediaAssets.d.ts +4 -0
  62. package/components/media/mediaAssets.js +9 -0
  63. package/components/media/mediaUtils.d.ts +6 -0
  64. package/components/media/mediaUtils.js +66 -0
  65. package/components/media/styles.d.ts +13 -0
  66. package/components/media/styles.js +52 -0
  67. package/components/media/types.d.ts +37 -0
  68. package/components/media/types.js +1 -0
  69. package/components/media/useMedia.d.ts +70 -0
  70. package/components/media/useMedia.js +471 -0
  71. package/components/media/useMediaGroup.d.ts +15 -0
  72. package/components/media/useMediaGroup.js +136 -0
  73. package/components/media/useMediaViewer.d.ts +14 -0
  74. package/components/media/useMediaViewer.js +129 -0
  75. package/components/media/viewer.d.ts +24 -0
  76. package/components/media/viewer.js +54 -0
  77. package/components/media/viewer.vdt.js +100 -0
  78. package/components/radio/index.d.ts +3 -3
  79. package/components/sender/icons.d.ts +3 -0
  80. package/components/sender/icons.js +17 -0
  81. package/components/sender/index.d.ts +1 -0
  82. package/components/sender/index.js +1 -0
  83. package/components/sender/index.spec.d.ts +1 -0
  84. package/components/sender/index.spec.js +1597 -0
  85. package/components/sender/sender.d.ts +104 -0
  86. package/components/sender/sender.js +111 -0
  87. package/components/sender/sender.vdt.js +230 -0
  88. package/components/sender/styles.d.ts +5 -0
  89. package/components/sender/styles.js +56 -0
  90. package/components/sender/useAutoResize.d.ts +4 -0
  91. package/components/sender/useAutoResize.js +99 -0
  92. package/components/sender/useSenderDrag.d.ts +6 -0
  93. package/components/sender/useSenderDrag.js +320 -0
  94. package/components/sender/useSenderInput.d.ts +16 -0
  95. package/components/sender/useSenderInput.js +101 -0
  96. package/components/sender/useSenderPaste.d.ts +5 -0
  97. package/components/sender/useSenderPaste.js +36 -0
  98. package/components/sender/useSenderUpload.d.ts +11 -0
  99. package/components/sender/useSenderUpload.js +395 -0
  100. package/components/skeleton/skeleton.d.ts +2 -1
  101. package/components/skeleton/skeleton.js +1 -1
  102. package/components/think/index.d.ts +1 -0
  103. package/components/think/index.js +1 -0
  104. package/components/think/index.spec.d.ts +1 -0
  105. package/components/think/index.spec.js +345 -0
  106. package/components/think/index.vdt.js +82 -0
  107. package/components/think/styles.d.ts +5 -0
  108. package/components/think/styles.js +25 -0
  109. package/components/think/think.d.ts +28 -0
  110. package/components/think/think.js +48 -0
  111. package/components/think/useThinkExpand.d.ts +10 -0
  112. package/components/think/useThinkExpand.js +56 -0
  113. package/components/types.d.ts +4 -2
  114. package/components/upload/ajaxUploader.d.ts +1 -0
  115. package/components/upload/ajaxUploader.js +6 -0
  116. package/components/xmarkdown/index.d.ts +2 -0
  117. package/components/xmarkdown/index.js +1 -0
  118. package/components/xmarkdown/index.spec.d.ts +1 -0
  119. package/components/xmarkdown/index.spec.js +1666 -0
  120. package/components/xmarkdown/markdown/codeBlockRenderer.d.ts +8 -0
  121. package/components/xmarkdown/markdown/codeBlockRenderer.js +52 -0
  122. package/components/xmarkdown/markdown/codeblock.d.ts +8 -0
  123. package/components/xmarkdown/markdown/codeblock.js +74 -0
  124. package/components/xmarkdown/markdown/highlight.d.ts +17 -0
  125. package/components/xmarkdown/markdown/highlight.js +83 -0
  126. package/components/xmarkdown/markdown/index.d.ts +14 -0
  127. package/components/xmarkdown/markdown/index.js +14 -0
  128. package/components/xmarkdown/markdown/mermaid.d.ts +8 -0
  129. package/components/xmarkdown/markdown/mermaid.js +104 -0
  130. package/components/xmarkdown/markdown/renderTree.d.ts +54 -0
  131. package/components/xmarkdown/markdown/renderTree.js +386 -0
  132. package/components/xmarkdown/markdown/renderer.d.ts +18 -0
  133. package/components/xmarkdown/markdown/renderer.js +461 -0
  134. package/components/xmarkdown/markdown/streaming.d.ts +24 -0
  135. package/components/xmarkdown/markdown/streaming.js +513 -0
  136. package/components/xmarkdown/markdown/types.d.ts +124 -0
  137. package/components/xmarkdown/markdown/types.js +6 -0
  138. package/components/xmarkdown/markdown/utils.d.ts +7 -0
  139. package/components/xmarkdown/markdown/utils.js +9 -0
  140. package/components/xmarkdown/markdown.d.ts +1 -0
  141. package/components/xmarkdown/markdown.js +1 -0
  142. package/components/xmarkdown/styles.d.ts +5 -0
  143. package/components/xmarkdown/styles.js +50 -0
  144. package/components/xmarkdown/useMermaid.d.ts +27 -0
  145. package/components/xmarkdown/useMermaid.js +745 -0
  146. package/components/xmarkdown/useXMarkdownContent.d.ts +14 -0
  147. package/components/xmarkdown/useXMarkdownContent.js +218 -0
  148. package/components/xmarkdown/useXMarkdownDisplay.d.ts +26 -0
  149. package/components/xmarkdown/useXMarkdownDisplay.js +569 -0
  150. package/components/xmarkdown/xmarkdown.d.ts +61 -0
  151. package/components/xmarkdown/xmarkdown.js +109 -0
  152. package/components/xmarkdown/xmarkdown.vdt.js +43 -0
  153. package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  154. package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  155. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  156. package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  157. package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  158. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  159. package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  160. package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  161. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  162. package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  163. package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  164. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  165. package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  166. package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  167. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  168. package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  169. package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
  170. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  171. package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  172. package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  173. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  174. package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  175. package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
  176. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  177. package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  178. package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
  179. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  180. package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  181. package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  182. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  183. package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  184. package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
  185. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  186. package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  187. package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  188. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  189. package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  190. package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  191. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  192. package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  193. package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  194. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  195. package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  196. package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
  197. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  198. package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  199. package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  200. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  201. package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  202. package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  203. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  204. package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  205. package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  206. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  207. package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  208. package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  209. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  210. package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  211. package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  212. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  213. package/dist/i18n/en-US.js +29 -1
  214. package/dist/i18n/en-US.js.map +1 -1
  215. package/dist/i18n/en-US.min.js +1 -1
  216. package/dist/index.js +100506 -37457
  217. package/dist/index.js.map +1 -1
  218. package/dist/index.min.js +1569 -1
  219. package/dist/kpc.css +4 -0
  220. package/dist/ksyun.css +4 -0
  221. package/i18n/en-US.d.ts +27 -0
  222. package/i18n/en-US.js +29 -1
  223. package/index.d.ts +9 -2
  224. package/index.js +9 -2
  225. package/package.json +8 -2
  226. package/styles/global.js +12 -6
  227. package/yarn-error.log +0 -1012
@@ -0,0 +1,745 @@
1
+ import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js/instance/slice";
2
+ import _Symbol from "@babel/runtime-corejs3/core-js/symbol";
3
+ import _getIteratorMethod from "@babel/runtime-corejs3/core-js/get-iterator-method";
4
+ import _extends from "@babel/runtime-corejs3/helpers/extends";
5
+ import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
6
+ import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
7
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
+ function _unsupportedIterableToArray(o, minLen) { var _context8; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context8 = Object.prototype.toString.call(o)).call(_context8, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
+ import _Set from "@babel/runtime-corejs3/core-js/set";
11
+ import _Number$isFinite from "@babel/runtime-corejs3/core-js/number/is-finite";
12
+ import _Number$parseFloat from "@babel/runtime-corejs3/core-js/number/parse-float";
13
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js/instance/filter";
14
+ import _Array$from from "@babel/runtime-corejs3/core-js/array/from";
15
+ import _Math$imul from "@babel/runtime-corejs3/core-js/math/imul";
16
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js/instance/map";
17
+ import _trimInstanceProperty from "@babel/runtime-corejs3/core-js/instance/trim";
18
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js/instance/includes";
19
+ import _Promise from "@babel/runtime-corejs3/core-js/promise";
20
+ /**
21
+ * Mermaid 图表处理
22
+ *
23
+ * 负责渲染 Mermaid 图表,以及缩放、拖拽、下载等交互功能。
24
+ */
25
+ import { useInstance } from 'intact-vue-next';
26
+ import { _$ } from '../../i18n';
27
+ import { selectValue } from '../utils';
28
+ // 模块级常量
29
+ var SCALE_STEP = 0.2;
30
+ var WHEEL_STEP = 0.1;
31
+ var VIEWPORT_MAX_HEIGHT = 480;
32
+ // 模块级状态
33
+ var mermaidPromise = null;
34
+ /**
35
+ * 管理 Mermaid 图表的渲染与交互
36
+ */
37
+ export function useMermaid(getRenderedBlockData, getPrefixCls) {
38
+ var instance = useInstance();
39
+ var renderSeed = 0;
40
+ var syncing = false;
41
+ var pendingSync = false;
42
+ var dragState = null;
43
+ var feedbackTimers = new _Set();
44
+ /**
45
+ * 同步渲染 Mermaid 图表
46
+ */
47
+ function syncBlocks(_x) {
48
+ return _syncBlocks.apply(this, arguments);
49
+ }
50
+ /**
51
+ * 渲染单个 Mermaid 块
52
+ */
53
+ function _syncBlocks() {
54
+ _syncBlocks = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(container) {
55
+ var _context;
56
+ var blocks, mermaid, _iterator, _step, block;
57
+ return _regeneratorRuntime.wrap(function _callee$(_context2) {
58
+ while (1) switch (_context2.prev = _context2.next) {
59
+ case 0:
60
+ if (instance.get('enableMermaid')) {
61
+ _context2.next = 2;
62
+ break;
63
+ }
64
+ return _context2.abrupt("return");
65
+ case 2:
66
+ if (!syncing) {
67
+ _context2.next = 5;
68
+ break;
69
+ }
70
+ pendingSync = true;
71
+ return _context2.abrupt("return");
72
+ case 5:
73
+ // 获取所有需要渲染的 Mermaid 块
74
+ blocks = _filterInstanceProperty(_context = _Array$from(container.querySelectorAll('[data-kpc-mermaid="true"]'))).call(_context, function (block) {
75
+ return block.dataset.kpcRenderState !== 'done';
76
+ });
77
+ if (blocks.length) {
78
+ _context2.next = 8;
79
+ break;
80
+ }
81
+ return _context2.abrupt("return");
82
+ case 8:
83
+ syncing = true;
84
+ _context2.prev = 9;
85
+ _context2.next = 12;
86
+ return loadMermaid();
87
+ case 12:
88
+ mermaid = _context2.sent;
89
+ if (mermaid) {
90
+ _context2.next = 15;
91
+ break;
92
+ }
93
+ return _context2.abrupt("return");
94
+ case 15:
95
+ mermaid.initialize(_extends({
96
+ startOnLoad: false,
97
+ securityLevel: 'strict',
98
+ theme: 'default'
99
+ }, instance.get('mermaidConfig')));
100
+ _iterator = _createForOfIteratorHelperLoose(blocks);
101
+ case 17:
102
+ if ((_step = _iterator()).done) {
103
+ _context2.next = 23;
104
+ break;
105
+ }
106
+ block = _step.value;
107
+ _context2.next = 21;
108
+ return renderBlock(block, mermaid, container);
109
+ case 21:
110
+ _context2.next = 17;
111
+ break;
112
+ case 23:
113
+ _context2.prev = 23;
114
+ syncing = false;
115
+ if (pendingSync) {
116
+ pendingSync = false;
117
+ void syncBlocks(container);
118
+ }
119
+ return _context2.finish(23);
120
+ case 27:
121
+ case "end":
122
+ return _context2.stop();
123
+ }
124
+ }, _callee, null, [[9,, 23, 27]]);
125
+ }));
126
+ return _syncBlocks.apply(this, arguments);
127
+ }
128
+ function renderBlock(_x2, _x3, _x4) {
129
+ return _renderBlock.apply(this, arguments);
130
+ }
131
+ /**
132
+ * 初始化图表尺寸和缩放
133
+ */
134
+ function _renderBlock() {
135
+ _renderBlock = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(block, mermaid, container) {
136
+ var state, stage, blockId, renderedBlock, source, renderId, svg, error;
137
+ return _regeneratorRuntime.wrap(function _callee2$(_context3) {
138
+ while (1) switch (_context3.prev = _context3.next) {
139
+ case 0:
140
+ state = block.dataset.kpcRenderState;
141
+ if (!(state === 'loading' || state === 'done')) {
142
+ _context3.next = 3;
143
+ break;
144
+ }
145
+ return _context3.abrupt("return");
146
+ case 3:
147
+ stage = block.querySelector('[data-kpc-mermaid-stage="true"]');
148
+ blockId = block.dataset.kpcBlockId || '';
149
+ renderedBlock = getRenderedBlockData(blockId);
150
+ source = (renderedBlock == null ? void 0 : renderedBlock.source) || '';
151
+ if (!(!stage || !source)) {
152
+ _context3.next = 9;
153
+ break;
154
+ }
155
+ return _context3.abrupt("return");
156
+ case 9:
157
+ block.dataset.kpcRenderState = 'loading';
158
+ stage.textContent = _$('Mermaid 渲染中...');
159
+ updateToolbarState(block);
160
+ _context3.prev = 12;
161
+ renderId = createMermaidRenderId(container, source, blockId, renderSeed++, getPrefixCls());
162
+ _context3.next = 16;
163
+ return mermaid.renderAsync(renderId, source);
164
+ case 16:
165
+ svg = _context3.sent;
166
+ if (container.contains(block)) {
167
+ _context3.next = 19;
168
+ break;
169
+ }
170
+ return _context3.abrupt("return");
171
+ case 19:
172
+ stage.innerHTML = svg;
173
+ block.dataset.kpcRenderState = 'done';
174
+ prepareStage(block);
175
+ _context3.next = 33;
176
+ break;
177
+ case 24:
178
+ _context3.prev = 24;
179
+ _context3.t0 = _context3["catch"](12);
180
+ if (container.contains(block)) {
181
+ _context3.next = 28;
182
+ break;
183
+ }
184
+ return _context3.abrupt("return");
185
+ case 28:
186
+ error = _context3.t0 instanceof Error ? _context3.t0 : new Error(String(_context3.t0));
187
+ stage.innerHTML = "<div class=\"" + getPrefixCls() + "-xmarkdown-mermaid-error\">" + escapeHtml(error.message) + "</div>";
188
+ block.dataset.kpcRenderState = 'error';
189
+ updateToolbarState(block, false);
190
+ instance.trigger('mermaidError', error, source);
191
+ case 33:
192
+ case "end":
193
+ return _context3.stop();
194
+ }
195
+ }, _callee2, null, [[12, 24]]);
196
+ }));
197
+ return _renderBlock.apply(this, arguments);
198
+ }
199
+ function prepareStage(block) {
200
+ var stage = block.querySelector('[data-kpc-mermaid-stage="true"]');
201
+ var svg = stage == null ? void 0 : stage.querySelector('svg');
202
+ var viewport = block.querySelector('[data-kpc-mermaid-viewport="true"]');
203
+ if (!stage || !svg) {
204
+ updateToolbarState(block, false);
205
+ return;
206
+ }
207
+ var _getBaseSize = getBaseSize(svg),
208
+ width = _getBaseSize.width,
209
+ height = _getBaseSize.height;
210
+ if (width > 0) block.dataset.kpcMermaidBaseWidth = String(width);
211
+ if (height > 0) block.dataset.kpcMermaidBaseHeight = String(height);
212
+ block.dataset.kpcScale = '1';
213
+ svg.style.maxWidth = '100%';
214
+ svg.style.height = 'auto';
215
+ block.dataset.kpcInitialScale = String(getFittedScale(block, viewport));
216
+ block.dataset.kpcScale = block.dataset.kpcInitialScale;
217
+ applyTransform(block);
218
+ }
219
+ /**
220
+ * 处理缩放
221
+ */
222
+ function stepScale(block, delta) {
223
+ setScale(block, getScale(block) + delta);
224
+ }
225
+ /**
226
+ * 读取当前缩放比例
227
+ */
228
+ function getScale(block) {
229
+ var parsed = Number(block.dataset.kpcScale || '1');
230
+ return _Number$isFinite(parsed) ? parsed : 1;
231
+ }
232
+ /**
233
+ * 读取初始适配缩放比例
234
+ */
235
+ function getInitialScale(block) {
236
+ var parsed = Number(block.dataset.kpcInitialScale || '1');
237
+ return _Number$isFinite(parsed) ? parsed : 1;
238
+ }
239
+ /**
240
+ * 计算最小缩放比例
241
+ */
242
+ function getMinScale(block) {
243
+ return Math.max(0.25, Math.min(getInitialScale(block), 1) * 0.6);
244
+ }
245
+ /**
246
+ * 计算最大缩放比例
247
+ */
248
+ function getMaxScale(block) {
249
+ return Math.max(2, getInitialScale(block) * 3);
250
+ }
251
+ /**
252
+ * 设置指定图表的缩放比例
253
+ */
254
+ function setScale(block, nextScale) {
255
+ var initialScale = getInitialScale(block);
256
+ block.dataset.kpcScale = String(clamp(nextScale, getMinScale(block), getMaxScale(block)));
257
+ applyTransform(block);
258
+ if (getScale(block) <= initialScale) {
259
+ var viewport = block.querySelector('[data-kpc-mermaid-viewport="true"]');
260
+ if (viewport) {
261
+ viewport.scrollLeft = 0;
262
+ viewport.scrollTop = 0;
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * 重置为初始缩放比例
268
+ */
269
+ function resetScale(block) {
270
+ block.dataset.kpcScale = String(getInitialScale(block));
271
+ applyTransform(block);
272
+ }
273
+ /**
274
+ * 应用缩放变换
275
+ */
276
+ function applyTransform(block) {
277
+ var stage = block.querySelector('[data-kpc-mermaid-stage="true"]');
278
+ var svg = stage == null ? void 0 : stage.querySelector('svg');
279
+ var viewport = block.querySelector('[data-kpc-mermaid-viewport="true"]');
280
+ if (!stage || !svg || !viewport) {
281
+ updateToolbarState(block, false);
282
+ return;
283
+ }
284
+ var scale = getScale(block);
285
+ var baseWidth = Number(block.dataset.kpcMermaidBaseWidth || '0');
286
+ var baseHeight = Number(block.dataset.kpcMermaidBaseHeight || '0');
287
+ var viewportWidth = Math.max(viewport.clientWidth, 1);
288
+ var viewportHeight = Math.max(viewport.clientHeight, 1);
289
+ var scaledWidth = Math.max(baseWidth * scale, 1);
290
+ var scaledHeight = Math.max(baseHeight * scale, 1);
291
+ var needsHorizontalScroll = scaledWidth + 16 > viewportWidth;
292
+ var needsVerticalScroll = scaledHeight + 16 > viewportHeight;
293
+ var stageWidth = needsHorizontalScroll ? scaledWidth + 16 : viewportWidth;
294
+ var stageHeight = needsVerticalScroll ? scaledHeight + 16 : viewportHeight;
295
+ block.dataset.kpcScale = String(scale);
296
+ stage.style.width = stageWidth + "px";
297
+ stage.style.height = stageHeight + "px";
298
+ stage.style.justifyContent = needsHorizontalScroll ? 'flex-start' : 'center';
299
+ stage.style.alignItems = needsVerticalScroll ? 'flex-start' : 'center';
300
+ svg.style.transformOrigin = 'center center';
301
+ svg.style.transform = 'none';
302
+ svg.style.width = scaledWidth + "px";
303
+ svg.style.height = scaledHeight + "px";
304
+ svg.style.maxWidth = 'none';
305
+ svg.style.cursor = 'default';
306
+ viewport.dataset.kpcCanDrag = needsHorizontalScroll || needsVerticalScroll ? 'true' : 'false';
307
+ updateToolbarState(block);
308
+ }
309
+ /**
310
+ * 计算 fitted 缩放比例
311
+ */
312
+ function getFittedScale(block, viewport) {
313
+ var targetViewport = viewport || block.querySelector('[data-kpc-mermaid-viewport="true"]');
314
+ var baseWidth = Number(block.dataset.kpcMermaidBaseWidth || '0');
315
+ var baseHeight = Number(block.dataset.kpcMermaidBaseHeight || '0');
316
+ if (!targetViewport || baseWidth <= 0 || baseHeight <= 0) return 1;
317
+ var rect = targetViewport.getBoundingClientRect();
318
+ var availableWidth = Math.max(rect.width - 16, 1);
319
+ var viewportMaxHeight = _Number$parseFloat(window.getComputedStyle(targetViewport).maxHeight || '') || VIEWPORT_MAX_HEIGHT;
320
+ var availableHeight = Math.max(viewportMaxHeight - 16, 1);
321
+ var fittedScale = Math.min(1, availableWidth / baseWidth, availableHeight / baseHeight);
322
+ return clamp(fittedScale, 0.25, 1);
323
+ }
324
+ /**
325
+ * 更新工具栏状态
326
+ */
327
+ function updateToolbarState(block, enabled) {
328
+ if (enabled === void 0) {
329
+ enabled = true;
330
+ }
331
+ var scale = getScale(block);
332
+ var initialScale = getInitialScale(block);
333
+ var isSourceView = block.dataset.kpcView === 'source';
334
+ var disableZoom = !enabled || isSourceView;
335
+ var zoomOutButton = block.querySelector('[data-kpc-action="zoom-mermaid-out"]');
336
+ var zoomInButton = block.querySelector('[data-kpc-action="zoom-mermaid-in"]');
337
+ var resetButton = block.querySelector('[data-kpc-action="reset-mermaid-zoom"]');
338
+ var downloadButton = block.querySelector('[data-kpc-action="download-mermaid"]');
339
+ if (zoomOutButton) zoomOutButton.disabled = disableZoom || scale <= getMinScale(block);
340
+ if (zoomInButton) zoomInButton.disabled = disableZoom || scale >= getMaxScale(block);
341
+ if (resetButton) resetButton.disabled = disableZoom || scale === initialScale;
342
+ if (downloadButton) downloadButton.disabled = !enabled || isSourceView;
343
+ }
344
+ /**
345
+ * 切换视图(图表/源码)
346
+ */
347
+ function setView(actionElement, view) {
348
+ var block = actionElement.closest('[data-kpc-mermaid="true"]');
349
+ if (!block) return;
350
+ block.dataset.kpcView = view;
351
+ applyTransform(block);
352
+ block.querySelectorAll('[data-kpc-action="set-mermaid-view-diagram"], [data-kpc-action="set-mermaid-view-source"]').forEach(function (button) {
353
+ button.dataset.kpcSelected = button.dataset.kpcAction === "set-mermaid-view-" + view ? 'true' : 'false';
354
+ button.setAttribute('aria-pressed', button.dataset.kpcSelected);
355
+ });
356
+ updateToolbarState(block);
357
+ }
358
+ /**
359
+ * 下载图表
360
+ */
361
+ function download(_x5) {
362
+ return _download.apply(this, arguments);
363
+ }
364
+ /**
365
+ * 处理指针按下(开始拖拽)
366
+ */
367
+ function _download() {
368
+ _download = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(actionElement) {
369
+ var block, svg, filename, dataUrl;
370
+ return _regeneratorRuntime.wrap(function _callee3$(_context4) {
371
+ while (1) switch (_context4.prev = _context4.next) {
372
+ case 0:
373
+ block = actionElement.closest('[data-kpc-mermaid="true"]');
374
+ svg = block == null ? void 0 : block.querySelector('[data-kpc-mermaid-stage="true"] svg');
375
+ if (!(!block || !svg)) {
376
+ _context4.next = 4;
377
+ break;
378
+ }
379
+ return _context4.abrupt("return", false);
380
+ case 4:
381
+ filename = "mermaid-" + Date.now();
382
+ _context4.prev = 5;
383
+ _context4.next = 8;
384
+ return svgToPngDataUrl(svg);
385
+ case 8:
386
+ dataUrl = _context4.sent;
387
+ triggerDownload(dataUrl, filename + ".png");
388
+ return _context4.abrupt("return", true);
389
+ case 13:
390
+ _context4.prev = 13;
391
+ _context4.t0 = _context4["catch"](5);
392
+ _context4.prev = 15;
393
+ triggerDownload(serializeSvgAsDataUrl(svg), filename + ".svg");
394
+ return _context4.abrupt("return", true);
395
+ case 20:
396
+ _context4.prev = 20;
397
+ _context4.t1 = _context4["catch"](15);
398
+ return _context4.abrupt("return", false);
399
+ case 23:
400
+ case "end":
401
+ return _context4.stop();
402
+ }
403
+ }, _callee3, null, [[5, 13], [15, 20]]);
404
+ }));
405
+ return _download.apply(this, arguments);
406
+ }
407
+ function handlePointerDown(e, container) {
408
+ if (e.button !== 0) return;
409
+ var target = e.target;
410
+ var viewport = target == null ? void 0 : target.closest('[data-kpc-mermaid-viewport="true"]');
411
+ if (!viewport || !container.contains(viewport)) return;
412
+ if (viewport.dataset.kpcCanDrag !== 'true') return;
413
+ dragState = {
414
+ viewport: viewport,
415
+ pointerId: e.pointerId,
416
+ startX: e.clientX,
417
+ startY: e.clientY,
418
+ startScrollLeft: viewport.scrollLeft,
419
+ startScrollTop: viewport.scrollTop
420
+ };
421
+ viewport.dataset.kpcDragging = 'true';
422
+ viewport.setPointerCapture == null || viewport.setPointerCapture(e.pointerId);
423
+ e.preventDefault();
424
+ }
425
+ /**
426
+ * 处理指针移动
427
+ */
428
+ function handlePointerMove(e) {
429
+ if (!dragState || dragState.pointerId !== e.pointerId) return;
430
+ dragState.viewport.scrollLeft = dragState.startScrollLeft - (e.clientX - dragState.startX);
431
+ dragState.viewport.scrollTop = dragState.startScrollTop - (e.clientY - dragState.startY);
432
+ e.preventDefault();
433
+ }
434
+ /**
435
+ * 处理指针抬起(结束拖拽)
436
+ */
437
+ function handlePointerUp(e) {
438
+ if (!dragState || dragState.pointerId !== e.pointerId) return;
439
+ finishDrag();
440
+ }
441
+ /**
442
+ * 结束拖拽
443
+ */
444
+ function finishDrag() {
445
+ if (!dragState) return;
446
+ dragState.viewport.dataset.kpcDragging = 'false';
447
+ dragState.viewport.releasePointerCapture == null || dragState.viewport.releasePointerCapture(dragState.pointerId);
448
+ dragState = null;
449
+ }
450
+ /**
451
+ * 处理滚轮缩放
452
+ */
453
+ function handleWheel(e, container) {
454
+ var target = e.target;
455
+ var viewport = target == null ? void 0 : target.closest('[data-kpc-mermaid-viewport="true"]');
456
+ if (!viewport || !container.contains(viewport) || !(e.ctrlKey || e.metaKey)) return;
457
+ var block = viewport.closest('[data-kpc-mermaid="true"]');
458
+ if (!block || block.dataset.kpcView === 'source') return;
459
+ e.preventDefault();
460
+ var delta = e.deltaY < 0 ? WHEEL_STEP : -WHEEL_STEP;
461
+ setScale(block, getScale(block) + delta);
462
+ }
463
+ /**
464
+ * 显示按钮反馈
465
+ */
466
+ function showFeedback(button, text) {
467
+ var previousTitle = button.getAttribute('title') || '';
468
+ var iconElement = button.querySelector('[data-kpc-icon="true"]');
469
+ var defaultIconClass = button.dataset.kpcDefaultIcon || '';
470
+ var feedbackIconClass = button.dataset.kpcFeedbackIcon || defaultIconClass;
471
+ if (button.dataset.kpcFeedbackMode === 'icon' && iconElement) {
472
+ iconElement.className = getPrefixCls() + "-xmarkdown-toolbar-icon " + getPrefixCls() + "-icon " + feedbackIconClass;
473
+ button.setAttribute('title', text);
474
+ button.setAttribute('aria-label', text);
475
+ } else {
476
+ button.textContent = text;
477
+ }
478
+ var timer = window.setTimeout(function () {
479
+ feedbackTimers.delete(timer);
480
+ if (!document.body.contains(button)) return;
481
+ if (button.dataset.kpcFeedbackMode === 'icon' && iconElement) {
482
+ iconElement.className = getPrefixCls() + "-xmarkdown-toolbar-icon " + getPrefixCls() + "-icon " + defaultIconClass;
483
+ button.setAttribute('title', button.dataset.kpcDefaultTitle || previousTitle);
484
+ button.setAttribute('aria-label', button.dataset.kpcDefaultTitle || previousTitle);
485
+ }
486
+ }, 1200);
487
+ feedbackTimers.add(timer);
488
+ }
489
+ /**
490
+ * 清理反馈定时器
491
+ */
492
+ function clearFeedbackTimers() {
493
+ feedbackTimers.forEach(function (timer) {
494
+ return clearTimeout(timer);
495
+ });
496
+ feedbackTimers.clear();
497
+ }
498
+ return {
499
+ syncBlocks: syncBlocks,
500
+ setView: setView,
501
+ stepScale: stepScale,
502
+ resetScale: resetScale,
503
+ download: download,
504
+ handlePointerDown: handlePointerDown,
505
+ handlePointerMove: handlePointerMove,
506
+ handlePointerUp: handlePointerUp,
507
+ handleWheel: handleWheel,
508
+ showFeedback: showFeedback,
509
+ finishDrag: finishDrag,
510
+ clearFeedbackTimers: clearFeedbackTimers
511
+ };
512
+ }
513
+ /**
514
+ * 加载 Mermaid 库
515
+ */
516
+ function loadMermaid() {
517
+ if (!mermaidPromise) {
518
+ mermaidPromise = import('mermaid/dist/mermaid.min.js').then(function (module) {
519
+ return module.default || module;
520
+ }).catch(function () {
521
+ mermaidPromise = null;
522
+ return null;
523
+ });
524
+ }
525
+ return mermaidPromise;
526
+ }
527
+ /**
528
+ * 生成 Mermaid 渲染 id
529
+ */
530
+ function createMermaidRenderId(container, source, blockId, renderSeed, prefixCls) {
531
+ var suffix = blockId || "tail-" + renderSeed;
532
+ var scope = hashText(suffix + "\n" + (source || ''));
533
+ var instanceScope = getMermaidInstanceScope(container, prefixCls);
534
+ return "kpc-xmarkdown-mermaid-" + scope + (instanceScope ? "-" + instanceScope : '') + "-" + suffix;
535
+ }
536
+ /**
537
+ * 获取当前 XMarkdown 在局部多实例场景下的序号
538
+ */
539
+ function getMermaidInstanceScope(container, prefixCls) {
540
+ var rootSelector = "." + prefixCls + "-xmarkdown";
541
+ var root = container.closest(rootSelector) || container;
542
+ var current = root.parentElement;
543
+ while (current) {
544
+ var roots = _Array$from(current.querySelectorAll(rootSelector));
545
+ var index = roots.indexOf(root);
546
+ if (index > -1 && roots.length > 1) {
547
+ return index > 0 ? String(index) : '';
548
+ }
549
+ current = current.parentElement;
550
+ }
551
+ return '';
552
+ }
553
+ /**
554
+ * 生成稳定短 hash
555
+ */
556
+ function hashText(text) {
557
+ var hash = 2166136261;
558
+ for (var i = 0; i < text.length; i++) {
559
+ hash ^= text.charCodeAt(i);
560
+ hash = _Math$imul(hash, 16777619);
561
+ }
562
+ return (hash >>> 0).toString(36);
563
+ }
564
+ /**
565
+ * 获取 SVG 基础尺寸
566
+ */
567
+ function getBaseSize(svg) {
568
+ var viewBox = svg.getAttribute('viewBox');
569
+ if (viewBox) {
570
+ var _context5;
571
+ var _viewBox$trim$split$m = _mapInstanceProperty(_context5 = _trimInstanceProperty(viewBox).call(viewBox).split(/\s+/)).call(_context5, Number),
572
+ _width = _viewBox$trim$split$m[2],
573
+ _height = _viewBox$trim$split$m[3];
574
+ if (_width > 0 && _height > 0) return {
575
+ width: _width,
576
+ height: _height
577
+ };
578
+ }
579
+ var width = parseSvgSize(svg.getAttribute('width'));
580
+ var height = parseSvgSize(svg.getAttribute('height'));
581
+ if (width > 0 && height > 0) return {
582
+ width: width,
583
+ height: height
584
+ };
585
+ var rect = svg.getBoundingClientRect();
586
+ return {
587
+ width: rect.width,
588
+ height: rect.height
589
+ };
590
+ }
591
+ /**
592
+ * 解析 SVG 尺寸属性
593
+ */
594
+ function parseSvgSize(value) {
595
+ if (!value || _includesInstanceProperty(value).call(value, '%')) return 0;
596
+ var parsed = _Number$parseFloat(value);
597
+ return _Number$isFinite(parsed) ? parsed : 0;
598
+ }
599
+ /**
600
+ * 序列化 SVG 为 Data URL
601
+ */
602
+ function serializeSvgAsDataUrl(svg) {
603
+ var clonedSvg = svg.cloneNode(true);
604
+ clonedSvg.removeAttribute('style');
605
+ clonedSvg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
606
+ clonedSvg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
607
+ return "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(clonedSvg));
608
+ }
609
+ /**
610
+ * SVG 转 PNG Data URL
611
+ */
612
+ function svgToPngDataUrl(_x6) {
613
+ return _svgToPngDataUrl.apply(this, arguments);
614
+ }
615
+ /**
616
+ * 触发下载
617
+ */
618
+ function _svgToPngDataUrl() {
619
+ _svgToPngDataUrl = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(svg) {
620
+ var width, height, image, canvas, context;
621
+ return _regeneratorRuntime.wrap(function _callee4$(_context6) {
622
+ while (1) switch (_context6.prev = _context6.next) {
623
+ case 0:
624
+ width = Math.max(Math.round(svg.getBoundingClientRect().width || parseSvgSize(svg.getAttribute('width')) || 1), 1);
625
+ height = Math.max(Math.round(svg.getBoundingClientRect().height || parseSvgSize(svg.getAttribute('height')) || 1), 1);
626
+ image = new Image();
627
+ image.decoding = 'async';
628
+ _context6.next = 6;
629
+ return new _Promise(function (resolve, reject) {
630
+ image.onload = function () {
631
+ return resolve();
632
+ };
633
+ image.onerror = function () {
634
+ return reject(new Error('Failed to load mermaid svg'));
635
+ };
636
+ image.src = serializeSvgAsDataUrl(svg);
637
+ });
638
+ case 6:
639
+ canvas = document.createElement('canvas');
640
+ canvas.width = width;
641
+ canvas.height = height;
642
+ context = canvas.getContext('2d');
643
+ if (context) {
644
+ _context6.next = 12;
645
+ break;
646
+ }
647
+ throw new Error('Failed to create canvas context');
648
+ case 12:
649
+ context.fillStyle = '#ffffff';
650
+ context.fillRect(0, 0, width, height);
651
+ context.drawImage(image, 0, 0, width, height);
652
+ return _context6.abrupt("return", canvas.toDataURL('image/png'));
653
+ case 16:
654
+ case "end":
655
+ return _context6.stop();
656
+ }
657
+ }, _callee4);
658
+ }));
659
+ return _svgToPngDataUrl.apply(this, arguments);
660
+ }
661
+ function triggerDownload(url, filename) {
662
+ var anchor = document.createElement('a');
663
+ anchor.href = url;
664
+ anchor.download = filename;
665
+ anchor.rel = 'noopener';
666
+ document.body.appendChild(anchor);
667
+ anchor.click();
668
+ document.body.removeChild(anchor);
669
+ }
670
+ /**
671
+ * 复制文本到剪贴板
672
+ */
673
+ export function copyText(_x7) {
674
+ return _copyText.apply(this, arguments);
675
+ }
676
+ /**
677
+ * 创建隐藏的复制元素
678
+ */
679
+ function _copyText() {
680
+ _copyText = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(text) {
681
+ var fakeElement, result;
682
+ return _regeneratorRuntime.wrap(function _callee5$(_context7) {
683
+ while (1) switch (_context7.prev = _context7.next) {
684
+ case 0:
685
+ _context7.prev = 0;
686
+ if (!navigator.clipboard) {
687
+ _context7.next = 5;
688
+ break;
689
+ }
690
+ _context7.next = 4;
691
+ return navigator.clipboard.writeText(text);
692
+ case 4:
693
+ return _context7.abrupt("return", true);
694
+ case 5:
695
+ _context7.next = 9;
696
+ break;
697
+ case 7:
698
+ _context7.prev = 7;
699
+ _context7.t0 = _context7["catch"](0);
700
+ case 9:
701
+ fakeElement = createFakeElement(text);
702
+ document.body.appendChild(fakeElement);
703
+ selectValue(fakeElement);
704
+ try {
705
+ document.execCommand('copy');
706
+ result = true;
707
+ } catch (e) {
708
+ result = false;
709
+ }
710
+ document.body.removeChild(fakeElement);
711
+ return _context7.abrupt("return", result);
712
+ case 15:
713
+ case "end":
714
+ return _context7.stop();
715
+ }
716
+ }, _callee5, null, [[0, 7]]);
717
+ }));
718
+ return _copyText.apply(this, arguments);
719
+ }
720
+ function createFakeElement(value) {
721
+ var isRTL = document.documentElement.getAttribute('dir') === 'rtl';
722
+ var fakeElement = document.createElement('textarea');
723
+ fakeElement.style.fontSize = '12pt';
724
+ fakeElement.style.border = '0';
725
+ fakeElement.style.padding = '0';
726
+ fakeElement.style.margin = '0';
727
+ fakeElement.style.position = 'absolute';
728
+ fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px';
729
+ fakeElement.style.top = (window.pageYOffset || document.documentElement.scrollTop) + "px";
730
+ fakeElement.setAttribute('readonly', '');
731
+ fakeElement.value = value;
732
+ return fakeElement;
733
+ }
734
+ /**
735
+ * 数值约束
736
+ */
737
+ function clamp(value, min, max) {
738
+ return Math.min(max, Math.max(min, Math.round(value * 100) / 100));
739
+ }
740
+ /**
741
+ * 转义 HTML
742
+ */
743
+ function escapeHtml(text) {
744
+ return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
745
+ }