@core-pilot/client-vue 0.0.7 → 0.0.9

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 (42) hide show
  1. package/dist/cjs/client-vue.css +1 -1
  2. package/dist/cjs/components/bubble-list/index.js +1 -1
  3. package/dist/cjs/components/bubble-list/index.js.map +1 -1
  4. package/dist/cjs/components/core-card/index.js +2 -0
  5. package/dist/cjs/components/core-card/index.js.map +1 -0
  6. package/dist/cjs/components/core-upload/assets/delete.svg.js +2 -0
  7. package/dist/cjs/components/core-upload/assets/delete.svg.js.map +1 -0
  8. package/dist/cjs/components/core-upload/assets/temp.svg.js +2 -0
  9. package/dist/cjs/components/core-upload/assets/temp.svg.js.map +1 -0
  10. package/dist/cjs/components/core-upload/assets/upload.svg.js +2 -0
  11. package/dist/cjs/components/core-upload/assets/upload.svg.js.map +1 -0
  12. package/dist/cjs/components/core-upload/index.js +2 -0
  13. package/dist/cjs/components/core-upload/index.js.map +1 -0
  14. package/dist/cjs/components/index.js +1 -1
  15. package/dist/cjs/components/x-markdown/index.js +1 -1
  16. package/dist/cjs/components/x-markdown/index.js.map +1 -1
  17. package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js +1 -1
  18. package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
  19. package/dist/cjs/index.js +1 -1
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/es/client-vue.css +1 -1
  22. package/dist/es/components/bubble-list/index.js +1 -0
  23. package/dist/es/components/bubble-list/index.js.map +1 -1
  24. package/dist/es/components/core-card/index.js +81 -0
  25. package/dist/es/components/core-card/index.js.map +1 -0
  26. package/dist/es/components/core-upload/assets/delete.svg.js +5 -0
  27. package/dist/es/components/core-upload/assets/delete.svg.js.map +1 -0
  28. package/dist/es/components/core-upload/assets/temp.svg.js +5 -0
  29. package/dist/es/components/core-upload/assets/temp.svg.js.map +1 -0
  30. package/dist/es/components/core-upload/assets/upload.svg.js +5 -0
  31. package/dist/es/components/core-upload/assets/upload.svg.js.map +1 -0
  32. package/dist/es/components/core-upload/index.js +258 -0
  33. package/dist/es/components/core-upload/index.js.map +1 -0
  34. package/dist/es/components/index.js +4 -0
  35. package/dist/es/components/index.js.map +1 -1
  36. package/dist/es/components/x-markdown/index.js +118 -21
  37. package/dist/es/components/x-markdown/index.js.map +1 -1
  38. package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +17 -2
  39. package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
  40. package/dist/es/index.js +4 -0
  41. package/dist/es/index.js.map +1 -1
  42. package/package.json +1 -1
@@ -36,6 +36,7 @@ import CoreTips from "../core-tips/index.js";
36
36
  import CoreResult from "../core-result/index.js";
37
37
  import CoreTable from "../core-table/index.js";
38
38
  import CoreChart from "../core-chart/index.js";
39
+ import CoreCard from "../core-card/index.js";
39
40
  /* empty css */
40
41
  import zhCn from "../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js";
41
42
  import { unified } from "../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js";
@@ -62,6 +63,22 @@ const checkAndReturnRefList = (text) => {
62
63
  return [];
63
64
  }
64
65
  };
66
+ const isCompleteJSON = (jsonStr) => {
67
+ if (!jsonStr || jsonStr.trim().length === 0) {
68
+ return false;
69
+ }
70
+ const trimmed = jsonStr.trim();
71
+ const firstChar = trimmed[0];
72
+ if (firstChar !== "{" && firstChar !== "[") {
73
+ return false;
74
+ }
75
+ try {
76
+ JSON.parse(trimmed);
77
+ return true;
78
+ } catch (error) {
79
+ return false;
80
+ }
81
+ };
65
82
  const XMarkdown = /* @__PURE__ */ defineComponent({
66
83
  name: "XMarkdown",
67
84
  props: {
@@ -84,6 +101,10 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
84
101
  isHistoryMessage: {
85
102
  type: Boolean,
86
103
  default: false
104
+ },
105
+ historyInputs: {
106
+ type: Object,
107
+ default: () => ({})
87
108
  }
88
109
  },
89
110
  expose: ["getContentText"],
@@ -103,6 +124,7 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
103
124
  const curIndex = ref(0);
104
125
  let curInit = 0;
105
126
  const ast = ref(null);
127
+ const isRewrite = ref(false);
106
128
  const streamCall = (stream) => {
107
129
  context.value = context.value + stream;
108
130
  };
@@ -147,9 +169,22 @@ ${divContent}${divEnd}`;
147
169
  }
148
170
  return content;
149
171
  });
150
- const disabled = computed(() => {
151
- return props.isHistoryMessage;
152
- });
172
+ const checkDisabled = (node) => {
173
+ const {
174
+ properties = {},
175
+ parentScope
176
+ } = node;
177
+ const {
178
+ disabled
179
+ } = properties;
180
+ if (disabled) {
181
+ return true;
182
+ }
183
+ if (parentScope === "form") {
184
+ return props.isHistoryMessage && !isRewrite.value;
185
+ }
186
+ return false;
187
+ };
153
188
  watch(() => [props.text, props.typing], (v, o) => {
154
189
  var _a, _b, _c, _d;
155
190
  const [text, typing] = v;
@@ -256,6 +291,11 @@ ${divContent}${divEnd}`;
256
291
  curIndex.value -= 1;
257
292
  return;
258
293
  }
294
+ if (action === "inner_rewrite") {
295
+ isRewrite.value = true;
296
+ console.log("isRewrite", isRewrite.value);
297
+ return;
298
+ }
259
299
  let res = {
260
300
  action,
261
301
  payload: {}
@@ -275,6 +315,9 @@ ${divContent}${divEnd}`;
275
315
  }
276
316
  };
277
317
  }
318
+ if (isRewrite.value && action.startsWith("core_")) {
319
+ isRewrite.value = false;
320
+ }
278
321
  emit("coreSubmit", res);
279
322
  };
280
323
  const handleClick = (e) => {
@@ -362,7 +405,11 @@ ${divContent}${divEnd}`;
362
405
  var _a;
363
406
  if (!schema || typeof schema !== "object") return;
364
407
  if (schema.type === "form") {
365
- const formData = ((_a = schema.properties) == null ? void 0 : _a.data) || {};
408
+ const formData = {
409
+ ...((_a = schema.properties) == null ? void 0 : _a.data) || {},
410
+ // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景
411
+ ...props.historyInputs || {}
412
+ };
366
413
  formDataList.push(formData);
367
414
  return;
368
415
  }
@@ -424,8 +471,38 @@ ${divContent}${divEnd}`;
424
471
  }, {
425
472
  immediate: true
426
473
  });
474
+ const renderSkeleton = () => {
475
+ return h("div", {
476
+ class: "hitl-skeleton"
477
+ }, [
478
+ // 头部骨架
479
+ h("div", {
480
+ class: "skeleton-header"
481
+ }, [h("div", {
482
+ class: "skeleton-avatar"
483
+ }), h("div", {
484
+ class: "skeleton-title"
485
+ })]),
486
+ // 内容骨架
487
+ h("div", {
488
+ class: "skeleton-item skeleton-item-long"
489
+ }),
490
+ h("div", {
491
+ class: "skeleton-item skeleton-item-medium"
492
+ }),
493
+ h("div", {
494
+ class: "skeleton-item skeleton-item-short"
495
+ }),
496
+ h("div", {
497
+ class: "skeleton-item skeleton-item-long"
498
+ }),
499
+ h("div", {
500
+ class: "skeleton-item skeleton-item-medium"
501
+ })
502
+ ]);
503
+ };
427
504
  const hastToVNode = (node, index, row) => {
428
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
505
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
429
506
  if (!node) return null;
430
507
  let children = [];
431
508
  const blackTagNames = ["sub", "pre", "text", "ElForm"];
@@ -506,14 +583,30 @@ ${divContent}${divEnd}`;
506
583
  ...node.properties
507
584
  }, children);
508
585
  }
586
+ if (node.tagName === "CoreCard") {
587
+ const slots = {};
588
+ if ((_d = node.slots) == null ? void 0 : _d.header) {
589
+ slots.header = () => {
590
+ return node.slots.header.map((slotItem) => {
591
+ return hastToVNode(slotItem, index);
592
+ });
593
+ };
594
+ }
595
+ if (children && children.length > 0) {
596
+ slots.default = () => children;
597
+ }
598
+ return h(CoreCard, {
599
+ ...node.properties
600
+ }, slots);
601
+ }
509
602
  if (node.tagName === "ElForm") {
510
- const children2 = (_d = node.children) == null ? void 0 : _d.map((child) => hastToVNode(child, curInit));
603
+ const children2 = (_e = node.children) == null ? void 0 : _e.map((child) => hastToVNode(child, curInit));
511
604
  curInit++;
512
605
  return h(ElForm, {
513
606
  ref: formRefs.value.set,
514
607
  model: hitlData.value[index],
515
608
  ...node.properties,
516
- disabled: ((_e = node.properties) == null ? void 0 : _e.disabled) || disabled.value
609
+ disabled: checkDisabled(node)
517
610
  }, children2);
518
611
  }
519
612
  if (node.tagName === "ElFormItem") {
@@ -528,7 +621,7 @@ ${divContent}${divEnd}`;
528
621
  }
529
622
  return h(ElButton, {
530
623
  ...node.properties,
531
- disabled: ((_g = node.properties) == null ? void 0 : _g.disabled) || disabled.value,
624
+ disabled: checkDisabled(node),
532
625
  onClick: () => {
533
626
  var _a2;
534
627
  btnClick(index, (_a2 = node.properties) == null ? void 0 : _a2.action, payload, node.parentScope);
@@ -538,8 +631,8 @@ ${divContent}${divEnd}`;
538
631
  if (node.tagName === "ElSelect") {
539
632
  return h(ElSelect, {
540
633
  ...node.properties,
541
- disabled: ((_h = node.properties) == null ? void 0 : _h.disabled) || disabled.value,
542
- modelValue: hitlData.value[index][(_i = node.properties) == null ? void 0 : _i.formProp],
634
+ disabled: checkDisabled(node),
635
+ modelValue: hitlData.value[index][(_g = node.properties) == null ? void 0 : _g.formProp],
543
636
  "onUpdate:modelValue": (value) => {
544
637
  var _a2;
545
638
  hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
@@ -549,8 +642,8 @@ ${divContent}${divEnd}`;
549
642
  if (node.tagName === "ElDatePicker") {
550
643
  return h(ElDatePicker, {
551
644
  ...node.properties,
552
- disabled: ((_j = node.properties) == null ? void 0 : _j.disabled) || disabled.value,
553
- modelValue: hitlData.value[index][(_k = node.properties) == null ? void 0 : _k.formProp],
645
+ disabled: checkDisabled(node),
646
+ modelValue: hitlData.value[index][(_h = node.properties) == null ? void 0 : _h.formProp],
554
647
  "onUpdate:modelValue": (value) => {
555
648
  var _a2;
556
649
  hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
@@ -560,8 +653,8 @@ ${divContent}${divEnd}`;
560
653
  if (node.tagName === "ElInput") {
561
654
  return h(ElInput, {
562
655
  ...node.properties,
563
- disabled: ((_l = node.properties) == null ? void 0 : _l.disabled) || disabled.value,
564
- modelValue: hitlData.value[index][(_m = node.properties) == null ? void 0 : _m.formProp],
656
+ disabled: checkDisabled(node),
657
+ modelValue: hitlData.value[index][(_i = node.properties) == null ? void 0 : _i.formProp],
565
658
  "onUpdate:modelValue": (value) => {
566
659
  var _a2;
567
660
  hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
@@ -571,8 +664,8 @@ ${divContent}${divEnd}`;
571
664
  if (node.tagName === "ElRadioGroup") {
572
665
  return h(ElRadioGroup, {
573
666
  ...node.properties,
574
- disabled: ((_n = node.properties) == null ? void 0 : _n.disabled) || disabled.value,
575
- modelValue: hitlData.value[index][(_o = node.properties) == null ? void 0 : _o.formProp],
667
+ disabled: checkDisabled(node),
668
+ modelValue: hitlData.value[index][(_j = node.properties) == null ? void 0 : _j.formProp],
576
669
  "onUpdate:modelValue": (value) => {
577
670
  var _a2;
578
671
  hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
@@ -582,7 +675,7 @@ ${divContent}${divEnd}`;
582
675
  if (node.tagName === "ElRadio") {
583
676
  return h(ElRadio, {
584
677
  ...node.properties,
585
- disabled: ((_p = node.properties) == null ? void 0 : _p.disabled) || disabled.value
678
+ disabled: checkDisabled(node)
586
679
  }, children);
587
680
  }
588
681
  if (node.tagName === "ElTable") {
@@ -629,10 +722,13 @@ ${divContent}${divEnd}`;
629
722
  });
630
723
  }
631
724
  if (node.tagName === "pre") {
632
- const codeNode = (_q = node.children) == null ? void 0 : _q.find((child) => child.tagName === "code");
725
+ const codeNode = (_k = node.children) == null ? void 0 : _k.find((child) => child.tagName === "code");
633
726
  if (codeNode) {
634
- if ((_s = (_r = codeNode.properties) == null ? void 0 : _r.className) == null ? void 0 : _s.includes("language-CorePilot")) {
635
- const code = ((_u = (_t = codeNode.children) == null ? void 0 : _t[0]) == null ? void 0 : _u.value) || "";
727
+ if ((_m = (_l = codeNode.properties) == null ? void 0 : _l.className) == null ? void 0 : _m.includes("language-CorePilot")) {
728
+ const code = ((_o = (_n = codeNode.children) == null ? void 0 : _n[0]) == null ? void 0 : _o.value) || "";
729
+ if (!isCompleteJSON(code)) {
730
+ return renderSkeleton();
731
+ }
636
732
  try {
637
733
  const schema = JSON.parse(code);
638
734
  const viewTree = parseCorePilot(schema);
@@ -641,7 +737,7 @@ ${divContent}${divEnd}`;
641
737
  class: "hitl-wrapper"
642
738
  }, [children2]);
643
739
  } catch (error) {
644
- return null;
740
+ return renderSkeleton();
645
741
  }
646
742
  }
647
743
  }
@@ -661,6 +757,7 @@ ${divContent}${divEnd}`;
661
757
  ast,
662
758
  container,
663
759
  renderComplete,
760
+ isRewrite,
664
761
  getContentText
665
762
  };
666
763
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport CoreTable from '../core-table';\nimport CoreChart from '../core-chart';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // 如果当前是历史消息,则禁用点击事件\n const disabled = computed(() => {\n return props.isHistoryMessage;\n })\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n return null;\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["checkAndReturnRefList","text","reg","match","exec","refListStr","refList","JSON","parse","error","name","props","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamCall","stream","value","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","computed","content","includes","res","duration","toFixed","length","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","getRefConfig","refContainer","querySelector","textContent","renderComplete","debounce","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleAClick","stopPropagation","preventDefault","href","id","title","ext","split","pop","window","open","ElMessage","btnClick","index","action","payload","parentScope","validate","handleClick","highlight","page","source","data","getContentText","innerText","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","newImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","computedForm","mdAst","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","run","nextTick","details","summary","Accordion","hastToVNode","row","blackTagNames","map","h","class","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","viewTree","parseCorePilot","trim","onUpdated","render","_createVNode"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport CoreTable from '../core-table';\nimport CoreChart from '../core-chart';\nimport CoreCard from '../core-card';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport { InputSchema } from '@/types/index.ts';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\n/**\n * 检测 JSON 字符串是否完整\n * 使用最高效的方式:快速检查基本结构后直接尝试解析\n */\nconst isCompleteJSON = (jsonStr: string): boolean => {\n if (!jsonStr || jsonStr.trim().length === 0) {\n return false;\n }\n \n const trimmed = jsonStr.trim();\n \n // 快速检查:必须以 { 或 [ 开头\n const firstChar = trimmed[0];\n if (firstChar !== '{' && firstChar !== '[') {\n return false;\n }\n \n // 直接尝试解析,如果成功就是完整的 JSON\n try {\n JSON.parse(trimmed);\n return true;\n } catch (error) {\n // 解析失败,说明 JSON 不完整或格式错误\n return false;\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n historyInputs: {\n type: Object,\n default: () => ({}),\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null);\n const isRewrite = ref(false);\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // TODO 后续需要规范相关定义\n // 如果当前是历史消息, 且父级作用域为form,则禁用点击事件\n const checkDisabled = (node: InputSchema) => {\n const { properties = {}, parentScope } = node;\n const { disabled } = properties;\n if (disabled) {\n return true;\n }\n if (parentScope === 'form') {\n return props.isHistoryMessage && !isRewrite.value;\n }\n return false;\n }\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n console.log('isRewrite', isRewrite.value);\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = {\n ...schema.properties?.data || {},\n // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景\n ...props.historyInputs || {},\n };\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 渲染骨架屏组件\n * @returns {VNode} 骨架屏虚拟节点\n */\n const renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n };\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n // 处理 header 插槽\n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, index);\n });\n };\n }\n \n // 处理默认插槽\n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(\n CoreCard,\n {\n ...node.properties,\n },\n slots\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n isRewrite,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["checkAndReturnRefList","text","reg","match","exec","refListStr","refList","JSON","parse","error","isCompleteJSON","jsonStr","trim","length","trimmed","firstChar","name","props","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","isRewrite","streamCall","stream","value","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","computed","content","includes","res","duration","toFixed","checkDisabled","node","properties","parentScope","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","getRefConfig","refContainer","querySelector","textContent","renderComplete","debounce","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleAClick","stopPropagation","preventDefault","href","id","title","ext","split","pop","window","open","ElMessage","btnClick","index","action","payload","console","log","validate","handleClick","highlight","page","source","data","getContentText","innerText","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","newImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","push","Array","isArray","children","child","computedForm","mdAst","preNodes","findPreNodes","preNode","codeNode","className","code","run","nextTick","details","summary","Accordion","renderSkeleton","h","class","hastToVNode","row","blackTagNames","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","slots","header","slotItem","CoreCard","ElForm","set","model","ElFormItem","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","viewTree","parseCorePilot","onUpdated","render","_createVNode"],"mappings":"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"}
@@ -131,14 +131,23 @@ const parseButton = (schema, type) => {
131
131
  };
132
132
  };
133
133
  const parseCard = (schema) => {
134
- return {
135
- tagName: "ElCard",
134
+ var _a;
135
+ const result = {
136
+ tagName: "CoreCard",
136
137
  type: "element",
137
138
  properties: schema.properties,
138
139
  children: schema.children.map((item) => {
139
140
  return parseSchema(item);
140
141
  })
141
142
  };
143
+ if ((_a = schema.slots) == null ? void 0 : _a.header) {
144
+ result.slots = {
145
+ header: schema.slots.header.map((item) => {
146
+ return parseSchema(item);
147
+ })
148
+ };
149
+ }
150
+ return result;
142
151
  };
143
152
  const parseTableColumn = (schema, parentType) => {
144
153
  var _a;
@@ -153,6 +162,12 @@ const parseTableColumn = (schema, parentType) => {
153
162
  };
154
163
  };
155
164
  const parseTable = (schema) => {
165
+ if (!schema.properties.tableProps) {
166
+ schema.properties.tableProps = {
167
+ data: [],
168
+ ...schema.properties
169
+ };
170
+ }
156
171
  return {
157
172
  tagName: "ElTable",
158
173
  type: "element",