@antdv-next/x 0.1.0 → 0.2.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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_utils/vue.d.ts +2 -0
  3. package/dist/_utils/vue.js +16 -0
  4. package/dist/actions/Actions.js +3 -2
  5. package/dist/actions/ActionsCopy.js +4 -4
  6. package/dist/attachments/PlaceholderUploader.d.ts +16 -0
  7. package/dist/attachments/PlaceholderUploader.js +31 -5
  8. package/dist/attachments/index.d.ts +8 -1
  9. package/dist/attachments/index.js +7 -1
  10. package/dist/bubble/Bubble.js +5 -8
  11. package/dist/bubble/BubbleList.js +4 -4
  12. package/dist/bubble/Divider.js +1 -1
  13. package/dist/code-highlighter/shiki.js +2 -1
  14. package/dist/conversations/GroupTitle.d.ts +22 -2
  15. package/dist/conversations/GroupTitle.js +25 -3
  16. package/dist/conversations/Item.d.ts +1 -1
  17. package/dist/conversations/Item.js +1 -4
  18. package/dist/conversations/index.d.ts +10 -1
  19. package/dist/conversations/index.js +12 -0
  20. package/dist/conversations/interface.d.ts +7 -0
  21. package/dist/file-card/FileCard.js +1 -1
  22. package/dist/file-card/List.js +1 -1
  23. package/dist/file-card/components/File.d.ts +6 -6
  24. package/dist/file-card/components/File.js +2 -2
  25. package/dist/index.esm.js +149 -85
  26. package/dist/index.umd.js +148 -84
  27. package/dist/mermaid/Mermaid.d.ts +5 -0
  28. package/dist/mermaid/Mermaid.js +22 -1
  29. package/dist/mermaid/index.d.ts +1 -1
  30. package/dist/package.js +1 -1
  31. package/dist/prompts/Prompts.js +1 -4
  32. package/dist/sources/Sources.js +1 -4
  33. package/dist/sources/components/CarouselCard.js +1 -4
  34. package/dist/suggestion/Suggestion.js +1 -4
  35. package/dist/thought-chain/Item.js +3 -6
  36. package/dist/thought-chain/Node.js +1 -4
  37. package/package.json +2 -1
package/dist/index.umd.js CHANGED
@@ -48,7 +48,7 @@
48
48
  shiki_dist_themes_vitesse_dark_mjs = __toESM(shiki_dist_themes_vitesse_dark_mjs);
49
49
  shiki_dist_themes_vitesse_light_mjs = __toESM(shiki_dist_themes_vitesse_light_mjs);
50
50
  //#region package.json
51
- var version = "0.1.0";
51
+ var version = "0.2.0";
52
52
  //#endregion
53
53
  //#region components/x-provider/context.ts
54
54
  var XProviderContextKey = Symbol("antdv-next-x-provider-context");
@@ -74,6 +74,20 @@
74
74
  });
75
75
  }
76
76
  //#endregion
77
+ //#region components/_utils/vue.ts
78
+ function isEmptyNode(node) {
79
+ if (node === null || node === void 0 || typeof node === "boolean") return true;
80
+ if (Array.isArray(node)) return node.every(isEmptyNode);
81
+ if ((0, vue.isVNode)(node)) {
82
+ if (node.type === vue.Comment) return true;
83
+ if (node.type === vue.Fragment && Array.isArray(node.children)) return node.children.every((child) => isEmptyNode(child));
84
+ }
85
+ return false;
86
+ }
87
+ function hasRenderableNode(node) {
88
+ return !isEmptyNode(node);
89
+ }
90
+ //#endregion
77
91
  //#region components/actions/ActionsMenu.tsx
78
92
  var keySeed$1 = 0;
79
93
  function findItem(keyPath, items) {
@@ -653,8 +667,8 @@
653
667
  });
654
668
  const mergedItem = {
655
669
  ...item,
656
- icon: slottedIcon ?? item.icon,
657
- actionRender: slotActionNode !== void 0 ? slotActionNode : item.actionRender
670
+ icon: slottedIcon !== void 0 && !isEmptyNode(slottedIcon) ? slottedIcon : item.icon,
671
+ actionRender: slotActionNode !== void 0 && !isEmptyNode(slotActionNode) ? slotActionNode : item.actionRender
658
672
  };
659
673
  return (0, vue.createVNode)(Item, {
660
674
  "key": item.key ?? idx,
@@ -944,14 +958,14 @@
944
958
  const { class: _class, style: _style, ...rest } = attrs;
945
959
  return rest;
946
960
  });
947
- const iconRenderSlot = (0, vue.computed)(() => slots.iconRender ?? slots["icon-render"]);
961
+ const iconSlot = (0, vue.computed)(() => slots.icon);
948
962
  const mergedCopyIcons = (0, vue.computed)(() => {
949
963
  const [defaultOriginNode, copiedOriginNode] = normalizeCopyIcons(props.icon);
950
- if (!iconRenderSlot.value) return props.icon;
951
- return [iconRenderSlot.value({
964
+ if (!iconSlot.value) return props.icon;
965
+ return [iconSlot.value({
952
966
  originNode: defaultOriginNode,
953
967
  status: "default"
954
- }), iconRenderSlot.value({
968
+ }), iconSlot.value({
955
969
  originNode: copiedOriginNode,
956
970
  status: "copied"
957
971
  })];
@@ -1306,7 +1320,7 @@
1306
1320
  type: Function,
1307
1321
  default: void 0
1308
1322
  },
1309
- iconRenderSlot: {
1323
+ iconSlot: {
1310
1324
  type: Function,
1311
1325
  default: void 0
1312
1326
  }
@@ -1367,7 +1381,7 @@
1367
1381
  color: props.iconColor,
1368
1382
  ...props.styles.icon
1369
1383
  }
1370
- }, [renderWithSlot(props.iconRenderSlot, iconNode.value)]),
1384
+ }, [renderWithSlot(props.iconSlot, iconNode.value)]),
1371
1385
  (0, vue.createVNode)("div", { "class": `${compCls.value}-content` }, [(0, vue.createVNode)("div", {
1372
1386
  "class": [`${compCls.value}-name`, props.classes.name],
1373
1387
  "style": props.styles.name
@@ -2174,7 +2188,7 @@
2174
2188
  "mask": props.mask,
2175
2189
  "descriptionRenderSlot": slots.description,
2176
2190
  "maskRenderSlot": slots.mask,
2177
- "iconRenderSlot": slots.iconRender,
2191
+ "iconSlot": slots.icon,
2178
2192
  "classes": mergedClasses.value,
2179
2193
  "styles": mergedStyles.value
2180
2194
  }, null);
@@ -2384,7 +2398,7 @@
2384
2398
  item: fileItem,
2385
2399
  index: itemIndex
2386
2400
  }) : void 0,
2387
- iconRender: slots.iconRender ? (slotInfo) => slots.iconRender?.({
2401
+ icon: slots.iconRender ? (slotInfo) => slots.iconRender?.({
2388
2402
  ...slotInfo,
2389
2403
  item: fileItem,
2390
2404
  index: itemIndex
@@ -2709,6 +2723,10 @@
2709
2723
  type: String,
2710
2724
  required: true
2711
2725
  },
2726
+ type: {
2727
+ type: String,
2728
+ required: true
2729
+ },
2712
2730
  placeholder: {
2713
2731
  type: [
2714
2732
  String,
@@ -2756,6 +2774,28 @@
2756
2774
  if (!isConfig.value) return {};
2757
2775
  return props.placeholder;
2758
2776
  });
2777
+ const renderConfigNode = () => {
2778
+ const iconOriginNode = placeholderConfig.value.icon;
2779
+ const titleOriginNode = placeholderConfig.value.title;
2780
+ const descriptionOriginNode = placeholderConfig.value.description;
2781
+ const iconNode = slots.placeholderIcon?.({
2782
+ type: props.type,
2783
+ originNode: iconOriginNode
2784
+ }) ?? iconOriginNode;
2785
+ const titleNode = slots.placeholderTitle?.({
2786
+ type: props.type,
2787
+ originNode: titleOriginNode
2788
+ }) ?? titleOriginNode;
2789
+ const descriptionNode = slots.placeholderDescription?.({
2790
+ type: props.type,
2791
+ originNode: descriptionOriginNode
2792
+ }) ?? descriptionOriginNode;
2793
+ return (0, vue.createVNode)("div", { "class": `${placeholderCls.value}-inner` }, [
2794
+ (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-icon` }, [iconNode]),
2795
+ (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-title` }, [titleNode]),
2796
+ (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-description` }, [descriptionNode])
2797
+ ]);
2798
+ };
2759
2799
  const onDragEnter = () => {
2760
2800
  dragIn.value = true;
2761
2801
  };
@@ -2766,11 +2806,11 @@
2766
2806
  dragIn.value = false;
2767
2807
  };
2768
2808
  return () => {
2769
- const node = isConfig.value ? (0, vue.createVNode)("div", { "class": `${placeholderCls.value}-inner` }, [
2770
- (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-icon` }, [placeholderConfig.value.icon]),
2771
- (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-title` }, [placeholderConfig.value.title]),
2772
- (0, vue.createVNode)("span", { "class": `${placeholderCls.value}-description` }, [placeholderConfig.value.description])
2773
- ]) : slots.default?.() || props.placeholder;
2809
+ const originNode = isConfig.value ? renderConfigNode() : slots.default?.() || props.placeholder;
2810
+ const node = slots.placeholder?.({
2811
+ type: props.type,
2812
+ originNode
2813
+ }) ?? originNode;
2774
2814
  return (0, vue.createVNode)("div", {
2775
2815
  "class": [
2776
2816
  placeholderCls.value,
@@ -3113,12 +3153,18 @@
3113
3153
  const getPlaceholderNode = (type, options) => {
3114
3154
  const placeholderContent = typeof props.placeholder === "function" ? props.placeholder(type) : props.placeholder;
3115
3155
  return (0, vue.createVNode)(PlaceholderUploader, {
3156
+ "type": type,
3116
3157
  "placeholder": placeholderContent,
3117
3158
  "upload": uploadProps.value,
3118
3159
  "prefixCls": props.prefixCls,
3119
3160
  "class": mergedClasses.value.placeholder,
3120
3161
  "style": [mergedStyles.value.placeholder, options?.style]
3121
- }, null);
3162
+ }, {
3163
+ placeholder: slots.placeholder,
3164
+ placeholderIcon: slots.placeholderIcon,
3165
+ placeholderTitle: slots.placeholderTitle,
3166
+ placeholderDescription: slots.placeholderDescription
3167
+ });
3122
3168
  };
3123
3169
  const renderWithChildren = () => {
3124
3170
  let _slot;
@@ -3853,10 +3899,6 @@
3853
3899
  if (!slot) return null;
3854
3900
  return typeof slot === "function" ? slot(content, info) : slot;
3855
3901
  }
3856
- function hasRenderableNode$7(node) {
3857
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
3858
- return node !== null && node !== void 0 && node !== false;
3859
- }
3860
3902
  var XBubble = /* @__PURE__ */ (0, vue.defineComponent)({
3861
3903
  name: "AxBubble",
3862
3904
  inheritAttrs: false,
@@ -4020,12 +4062,12 @@
4020
4062
  return rest;
4021
4063
  });
4022
4064
  const memoedContent = (0, vue.computed)(() => {
4023
- if (slots.contentRender) {
4024
- const slotNode = slots.contentRender({
4065
+ if (slots.content) {
4066
+ const slotNode = slots.content({
4025
4067
  content: props.content,
4026
4068
  info: props.info
4027
4069
  });
4028
- if (hasRenderableNode$7(slotNode)) return slotNode;
4070
+ if (hasRenderableNode(slotNode)) return slotNode;
4029
4071
  }
4030
4072
  return props.contentRender ? props.contentRender(props.content, props.info) : props.content;
4031
4073
  });
@@ -4116,12 +4158,12 @@
4116
4158
  };
4117
4159
  const renderContent = () => {
4118
4160
  if (props.loading) {
4119
- if (slots.loadingRender) {
4120
- const slotNode = slots.loadingRender({
4161
+ if (slots.loading) {
4162
+ const slotNode = slots.loading({
4121
4163
  content: props.content,
4122
4164
  info: props.info
4123
4165
  });
4124
- if (hasRenderableNode$7(slotNode)) return slotNode;
4166
+ if (hasRenderableNode(slotNode)) return slotNode;
4125
4167
  }
4126
4168
  if (props.loadingRender) return props.loadingRender(props.content, props.info);
4127
4169
  return (0, vue.createVNode)(loading_default, { "prefixCls": props.prefixCls }, null);
@@ -4261,7 +4303,7 @@
4261
4303
  "class": [`${props.prefixCls}-divider`, props.class],
4262
4304
  "styles": props.styles,
4263
4305
  "classes": props.classes
4264
- }), { contentRender: ({ content }) => (0, vue.createVNode)(antdv_next.Divider, props.dividerProps, _isSlot$3(content) ? content : { default: () => [content] }) });
4306
+ }), { content: ({ content }) => (0, vue.createVNode)(antdv_next.Divider, props.dividerProps, _isSlot$3(content) ? content : { default: () => [content] }) });
4265
4307
  }
4266
4308
  });
4267
4309
  //#endregion
@@ -4696,10 +4738,10 @@
4696
4738
  role
4697
4739
  });
4698
4740
  };
4699
- if (slots.contentRender) bubbleSlots.contentRender = bindListSlot("contentRender");
4700
- else if (contentRender) bubbleSlots.contentRender = ({ content, info: bubbleInfo }) => contentRender(content, bubbleInfo);
4701
- if (slots.loadingRender) bubbleSlots.loadingRender = bindListSlot("loadingRender");
4702
- else if (loadingRender) bubbleSlots.loadingRender = ({ content, info: bubbleInfo }) => loadingRender(content, bubbleInfo);
4741
+ if (slots.contentRender) bubbleSlots.content = bindListSlot("contentRender");
4742
+ else if (contentRender) bubbleSlots.content = ({ content, info: bubbleInfo }) => contentRender(content, bubbleInfo);
4743
+ if (slots.loadingRender) bubbleSlots.loading = bindListSlot("loadingRender");
4744
+ else if (loadingRender) bubbleSlots.loading = ({ content, info: bubbleInfo }) => loadingRender(content, bubbleInfo);
4703
4745
  for (const name of bubbleSlotNames) {
4704
4746
  if (name === "contentRender" || name === "loadingRender") continue;
4705
4747
  const slot = bindListSlot(name);
@@ -4767,7 +4809,8 @@
4767
4809
  }
4768
4810
  async function loadLang(lang) {
4769
4811
  const loader = LANG_LOADERS[lang];
4770
- if (!loader || loadedLangs.has(lang)) return false;
4812
+ if (!loader) return false;
4813
+ if (loadedLangs.has(lang)) return true;
4771
4814
  const instance = await getHighlighter();
4772
4815
  const mod = await loader();
4773
4816
  await instance.loadLanguage(mod.default);
@@ -5514,6 +5557,20 @@
5514
5557
  type: Object,
5515
5558
  required: true
5516
5559
  },
5560
+ groupLabelRender: {
5561
+ type: [
5562
+ String,
5563
+ Number,
5564
+ Object,
5565
+ Array,
5566
+ Function
5567
+ ],
5568
+ default: void 0
5569
+ },
5570
+ groupLabelRenderSlot: {
5571
+ type: Function,
5572
+ default: void 0
5573
+ },
5517
5574
  classes: {
5518
5575
  type: [
5519
5576
  String,
@@ -5549,15 +5606,22 @@
5549
5606
  });
5550
5607
  const labelNode = (0, vue.computed)(() => {
5551
5608
  const { label, name } = props.groupInfo;
5552
- if (typeof label === "function") return label(name, { groupInfo: props.groupInfo });
5553
- return label || name;
5609
+ const originNode = typeof label === "function" ? label(name, { groupInfo: props.groupInfo }) : label || name;
5610
+ const renderInfo = {
5611
+ group: name,
5612
+ groupInfo: props.groupInfo,
5613
+ originNode
5614
+ };
5615
+ if (props.groupLabelRenderSlot) return props.groupLabelRenderSlot(renderInfo);
5616
+ if (props.groupLabelRender !== void 0) return typeof props.groupLabelRender === "function" ? props.groupLabelRender(name, renderInfo) : props.groupLabelRender;
5617
+ return originNode;
5554
5618
  });
5555
5619
  return () => (0, vue.createVNode)("li", { "class": props.classes }, [(0, vue.createVNode)("div", {
5556
5620
  "class": [`${props.prefixCls}-group-title`, { [`${props.prefixCls}-group-title-collapsible`]: mergeCollapsible.value }],
5557
5621
  "onClick": () => {
5558
5622
  if (mergeCollapsible.value) props.onItemExpand?.(props.groupInfo.name);
5559
5623
  }
5560
- }, [labelNode.value && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-group-label` }, [labelNode.value]), mergeCollapsible.value && (0, vue.createVNode)("div", { "class": [`${props.prefixCls}-group-collapse-trigger`, `${props.prefixCls}-group-collapse-trigger-${groupOpen.value ? "open" : "close"}`] }, [(0, vue.createVNode)(_antdv_next_icons.RightOutlined, null, null)])]), (0, vue.createVNode)(vue.Transition, props.collapseTransition ?? {}, { default: () => [mergeCollapsible.value ? groupOpen.value ? (0, vue.createVNode)("div", null, [slots.default?.()]) : null : (0, vue.createVNode)("div", null, [slots.default?.()])] })]);
5624
+ }, [hasRenderableNode(labelNode.value) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-group-label` }, [labelNode.value]), mergeCollapsible.value && (0, vue.createVNode)("div", { "class": [`${props.prefixCls}-group-collapse-trigger`, `${props.prefixCls}-group-collapse-trigger-${groupOpen.value ? "open" : "close"}`] }, [(0, vue.createVNode)(_antdv_next_icons.RightOutlined, null, null)])]), (0, vue.createVNode)(vue.Transition, props.collapseTransition ?? {}, { default: () => [mergeCollapsible.value ? groupOpen.value ? (0, vue.createVNode)("div", null, [slots.default?.()]) : null : (0, vue.createVNode)("div", null, [slots.default?.()])] })]);
5561
5625
  }
5562
5626
  });
5563
5627
  //#endregion
@@ -5642,10 +5706,6 @@
5642
5706
  var stopPropagation = (event) => {
5643
5707
  event.stopPropagation();
5644
5708
  };
5645
- var hasRenderableNode$6 = (node) => {
5646
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
5647
- return node !== null && node !== void 0 && node !== false;
5648
- };
5649
5709
  var renderWithPriority = (render, slotRender, info) => {
5650
5710
  if (slotRender) return slotRender(info);
5651
5711
  if (render !== void 0) return typeof render === "function" ? render(info.item, info) : render;
@@ -5776,7 +5836,7 @@
5776
5836
  if (!disabled) props.onClick?.(props.info.key, props.info);
5777
5837
  }
5778
5838
  }, [
5779
- hasRenderableNode$6(iconNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-icon` }, [iconNode]),
5839
+ hasRenderableNode(iconNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-icon` }, [iconNode]),
5780
5840
  (0, vue.createVNode)(antdv_next.Typography.Text, { "class": `${props.prefixCls}-label` }, _isSlot$2(labelNode) ? labelNode : { default: () => [labelNode] }),
5781
5841
  !disabled && props.menu && (0, vue.createVNode)("div", { "onClick": stopPropagation }, [(0, vue.createVNode)(antdv_next.Dropdown, {
5782
5842
  "menu": menuProps.value,
@@ -5997,6 +6057,16 @@
5997
6057
  ],
5998
6058
  default: void 0
5999
6059
  },
6060
+ groupLabelRender: {
6061
+ type: [
6062
+ String,
6063
+ Number,
6064
+ Object,
6065
+ Array,
6066
+ Function
6067
+ ],
6068
+ default: void 0
6069
+ },
6000
6070
  menu: {
6001
6071
  type: [Object, Function],
6002
6072
  default: void 0
@@ -6168,6 +6238,8 @@
6168
6238
  "key": groupInfo.name || `key-${groupIndex}`,
6169
6239
  "prefixCls": props.prefixCls,
6170
6240
  "groupInfo": groupInfo,
6241
+ "groupLabelRender": props.groupLabelRender,
6242
+ "groupLabelRenderSlot": slots.groupLabelRender,
6171
6243
  "classes": [contextConfig.value.classes?.group, props.classes?.group],
6172
6244
  "enableCollapse": enableCollapse.value,
6173
6245
  "expandedKeys": mergedExpandedKeys.value,
@@ -6446,6 +6518,26 @@
6446
6518
  const { class: _class, style: _style, ...rest } = attrs;
6447
6519
  return rest;
6448
6520
  });
6521
+ const getNamedSlot = (name) => slots[name] ?? slots[name.replace(/[A-Z]/g, (s) => `-${s.toLowerCase()}`)];
6522
+ const resolvedCustomActions = (0, vue.computed)(() => mergedActions.value.customActions.map((item, index) => {
6523
+ const iconSlotInfo = {
6524
+ item,
6525
+ index,
6526
+ originNode: item.icon
6527
+ };
6528
+ const iconFromSlot = getNamedSlot("customActionIconRender")?.(iconSlotInfo);
6529
+ const actionSlotInfo = {
6530
+ item,
6531
+ index,
6532
+ originNode: item.actionRender !== void 0 ? typeof item.actionRender === "function" ? item.actionRender(item) : item.actionRender : void 0
6533
+ };
6534
+ const actionFromSlot = getNamedSlot("customActionRender")?.(actionSlotInfo);
6535
+ return {
6536
+ ...item,
6537
+ icon: iconFromSlot !== void 0 && !isEmptyNode(iconFromSlot) ? iconFromSlot : item.icon,
6538
+ actionRender: actionFromSlot !== void 0 && !isEmptyNode(actionFromSlot) ? actionFromSlot : item.actionRender
6539
+ };
6540
+ }));
6449
6541
  function applySvgTransform() {
6450
6542
  if (mergedRenderType.value !== RenderType.Image) return;
6451
6543
  const svgEl = graphRef.value?.querySelector("svg");
@@ -6573,7 +6665,7 @@
6573
6665
  key: "copy",
6574
6666
  actionRender: () => (0, vue.createVNode)(ActionsWithSub.Copy, { "text": props.content }, null)
6575
6667
  });
6576
- return [...items, ...mergedActions.value.customActions];
6668
+ return [...items, ...resolvedCustomActions.value];
6577
6669
  });
6578
6670
  function renderHeader() {
6579
6671
  if (props.header === null) return null;
@@ -6913,10 +7005,6 @@
6913
7005
  delete domAttrs.children;
6914
7006
  return domAttrs;
6915
7007
  }
6916
- function hasRenderableNode$5(node) {
6917
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
6918
- return node !== null && node !== void 0 && node !== false;
6919
- }
6920
7008
  //#endregion
6921
7009
  //#region components/prompts/index.tsx
6922
7010
  var prompts_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -7089,12 +7177,12 @@
7089
7177
  ],
7090
7178
  "style": [nested ? mergedStyles.value.subItem : mergedStyles.value.item, item.style],
7091
7179
  "onClick": () => triggerItemClick(item, nested)
7092
- }), [hasRenderableNode$5(iconNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-icon` }, [iconNode]), (0, vue.createVNode)("div", {
7180
+ }), [hasRenderableNode(iconNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-icon` }, [iconNode]), (0, vue.createVNode)("div", {
7093
7181
  "class": [`${props.prefixCls}-content`, mergedClasses.value.itemContent],
7094
7182
  "style": mergedStyles.value.itemContent
7095
7183
  }, [
7096
- hasRenderableNode$5(labelNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-label` }, [labelNode]),
7097
- hasRenderableNode$5(descriptionNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-desc` }, [descriptionNode]),
7184
+ hasRenderableNode(labelNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-label` }, [labelNode]),
7185
+ hasRenderableNode(descriptionNode) && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-desc` }, [descriptionNode]),
7098
7186
  itemHasChildren && (0, vue.createVNode)("div", { "class": `${props.prefixCls}-nested` }, [renderItems(item.children, true)])
7099
7187
  ])]);
7100
7188
  })]);
@@ -7119,7 +7207,7 @@
7119
7207
  attrs.style,
7120
7208
  props.style
7121
7209
  ]
7122
- }), [hasRenderableNode$5(renderTitle()) && (0, vue.createVNode)("div", {
7210
+ }), [hasRenderableNode(renderTitle()) && (0, vue.createVNode)("div", {
7123
7211
  "class": [`${props.prefixCls}-title`, mergedClasses.value.title],
7124
7212
  "style": mergedStyles.value.title
7125
7213
  }, [renderTitle()]), renderItems(props.items)]);
@@ -9317,10 +9405,6 @@
9317
9405
  Sender.Switch = SenderSwitch_default;
9318
9406
  //#endregion
9319
9407
  //#region components/sources/components/CarouselCard.tsx
9320
- var hasRenderableNode$4 = (node) => {
9321
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
9322
- return node !== null && node !== void 0 && node !== false;
9323
- };
9324
9408
  var CarouselCard = /* @__PURE__ */ (0, vue.defineComponent)({
9325
9409
  name: "XSourcesCarouselCard",
9326
9410
  props: {
@@ -9431,7 +9515,7 @@
9431
9515
  "key": item.key ?? index,
9432
9516
  "class": `${compCls}-item`,
9433
9517
  "onClick": () => handleClick(item)
9434
- }, [(0, vue.createVNode)("div", { "class": `${compCls}-item-title-wrapper` }, [hasRenderableNode$4(iconNode) && (0, vue.createVNode)("span", { "class": `${compCls}-item-icon` }, [iconNode]), (0, vue.createVNode)("span", { "class": `${compCls}-item-title` }, [titleNode])]), hasRenderableNode$4(descriptionNode) && (0, vue.createVNode)("div", { "class": `${compCls}-item-description` }, [descriptionNode])]);
9518
+ }, [(0, vue.createVNode)("div", { "class": `${compCls}-item-title-wrapper` }, [hasRenderableNode(iconNode) && (0, vue.createVNode)("span", { "class": `${compCls}-item-icon` }, [iconNode]), (0, vue.createVNode)("span", { "class": `${compCls}-item-title` }, [titleNode])]), hasRenderableNode(descriptionNode) && (0, vue.createVNode)("div", { "class": `${compCls}-item-description` }, [descriptionNode])]);
9435
9519
  })())] })]);
9436
9520
  }
9437
9521
  });
@@ -9536,12 +9620,6 @@
9536
9620
  return [genSourcesStyle(compToken), genCollapseMotion(compToken)];
9537
9621
  }, prepareComponentToken$4);
9538
9622
  //#endregion
9539
- //#region components/sources/Sources.tsx
9540
- var hasRenderableNode$3 = (node) => {
9541
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
9542
- return node !== null && node !== void 0 && node !== false;
9543
- };
9544
- //#endregion
9545
9623
  //#region components/sources/index.tsx
9546
9624
  var sources_default = /* @__PURE__ */ (0, vue.defineComponent)({
9547
9625
  name: "AxSources",
@@ -9694,9 +9772,9 @@
9694
9772
  "target": "_blank",
9695
9773
  "rel": "noopener noreferrer"
9696
9774
  }, [
9697
- hasRenderableNode$3(iconNode) && (0, vue.createVNode)("span", { "class": `${props.prefixCls}-link-icon` }, [iconNode]),
9775
+ hasRenderableNode(iconNode) && (0, vue.createVNode)("span", { "class": `${props.prefixCls}-link-icon` }, [iconNode]),
9698
9776
  (0, vue.createVNode)("span", { "class": `${props.prefixCls}-link-title` }, [titleNode]),
9699
- hasRenderableNode$3(descriptionNode) && (0, vue.createVNode)("span", { "class": `${props.prefixCls}-link-description` }, [descriptionNode])
9777
+ hasRenderableNode(descriptionNode) && (0, vue.createVNode)("span", { "class": `${props.prefixCls}-link-description` }, [descriptionNode])
9700
9778
  ])]);
9701
9779
  })]) : slots.default?.();
9702
9780
  return (0, vue.createVNode)("div", (0, vue.mergeProps)({ "ref": rootRef }, domAttrs.value, {
@@ -9844,12 +9922,6 @@
9844
9922
  return [activePaths, onKeyDown];
9845
9923
  }
9846
9924
  //#endregion
9847
- //#region components/suggestion/Suggestion.tsx
9848
- var hasRenderableNode$2 = (node) => {
9849
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
9850
- return node !== null && node !== void 0 && node !== false;
9851
- };
9852
- //#endregion
9853
9925
  //#region components/suggestion/index.tsx
9854
9926
  var suggestion_default = /* @__PURE__ */ (0, vue.defineComponent)({
9855
9927
  name: "AxSuggestion",
@@ -10006,9 +10078,9 @@
10006
10078
  originNode: item.extra
10007
10079
  });
10008
10080
  return (0, vue.createVNode)(antdv_next.Flex, { "class": `${prefixCls.value}-item` }, { default: () => [
10009
- hasRenderableNode$2(iconNode) && (0, vue.createVNode)("div", { "class": `${prefixCls.value}-item-icon` }, [iconNode]),
10081
+ hasRenderableNode(iconNode) && (0, vue.createVNode)("div", { "class": `${prefixCls.value}-item-icon` }, [iconNode]),
10010
10082
  labelNode,
10011
- hasRenderableNode$2(extraNode) && (0, vue.createVNode)("div", { "class": `${prefixCls.value}-item-extra` }, [extraNode])
10083
+ hasRenderableNode(extraNode) && (0, vue.createVNode)("div", { "class": `${prefixCls.value}-item-extra` }, [extraNode])
10012
10084
  ] });
10013
10085
  },
10014
10086
  "classes": { popup: { root: popupRootClass.value } },
@@ -10535,10 +10607,6 @@
10535
10607
  }, prepareComponentToken$1);
10536
10608
  //#endregion
10537
10609
  //#region components/thought-chain/Item.tsx
10538
- function hasRenderableNode$1(node) {
10539
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
10540
- return node !== null && node !== void 0 && node !== false;
10541
- }
10542
10610
  var XThoughtChainItem = /* @__PURE__ */ (0, vue.defineComponent)({
10543
10611
  name: "AxThoughtChainItem",
10544
10612
  props: {
@@ -10618,16 +10686,16 @@
10618
10686
  return () => {
10619
10687
  const cls = itemPrefixCls.value;
10620
10688
  const statusCls = `${props.prefixCls}-status`;
10621
- const iconRenderSlot = slots.iconRender ?? slots["icon-render"];
10689
+ const iconSlot = slots.icon;
10622
10690
  const originIconNode = props.status ? STATUS_ICON_MAP[props.status] : props.icon;
10623
- const iconNode = iconRenderSlot ? iconRenderSlot({
10691
+ const iconNode = iconSlot ? iconSlot({
10624
10692
  originNode: originIconNode,
10625
10693
  status: props.status
10626
10694
  }) : originIconNode;
10627
10695
  const titleNode = slots.title ? slots.title({ originNode: props.title }) : props.title;
10628
10696
  const descriptionNode = slots.description ? slots.description({ originNode: props.description }) : props.description;
10629
- const hasTitle = hasRenderableNode$1(titleNode);
10630
- const hasDescription = hasRenderableNode$1(descriptionNode);
10697
+ const hasTitle = hasRenderableNode(titleNode);
10698
+ const hasDescription = hasRenderableNode(descriptionNode);
10631
10699
  return (0, vue.createVNode)("div", {
10632
10700
  "ref": rootRef,
10633
10701
  "class": [
@@ -10647,7 +10715,7 @@
10647
10715
  ],
10648
10716
  "style": props.styles?.root,
10649
10717
  "onClick": handleClick
10650
- }, [hasRenderableNode$1(iconNode) && (0, vue.createVNode)("div", {
10718
+ }, [hasRenderableNode(iconNode) && (0, vue.createVNode)("div", {
10651
10719
  "style": props.styles?.icon,
10652
10720
  "class": [
10653
10721
  statusCls,
@@ -10670,10 +10738,6 @@
10670
10738
  });
10671
10739
  //#endregion
10672
10740
  //#region components/thought-chain/Node.tsx
10673
- function hasRenderableNode(node) {
10674
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
10675
- return node !== null && node !== void 0 && node !== false;
10676
- }
10677
10741
  var Node_default = /* @__PURE__ */ (0, vue.defineComponent)({
10678
10742
  name: "ThoughtChainNode",
10679
10743
  props: {
@@ -28,6 +28,11 @@ export interface MermaidProps extends Omit<HTMLAttributes, "content" | "class" |
28
28
  export interface MermaidRef {
29
29
  nativeElement: HTMLDivElement;
30
30
  }
31
+ export interface MermaidCustomActionSlotInfo {
32
+ item: ItemType;
33
+ index: number;
34
+ originNode: VNodeChild;
35
+ }
31
36
  declare enum RenderType {
32
37
  Code = "code",
33
38
  Image = "image"
@@ -1,4 +1,5 @@
1
1
  import useXComponentConfig from "../_utils/hooks/use-x-component-config.js";
2
+ import { isEmptyNode } from "../_utils/vue.js";
2
3
  import warning from "../_utils/warning.js";
3
4
  import ActionsWithSub from "../actions/index.js";
4
5
  import localeValues from "../locale/en_US.js";
@@ -168,6 +169,26 @@ var XMermaid = /* @__PURE__ */ defineComponent({
168
169
  const { class: _class, style: _style, ...rest } = attrs;
169
170
  return rest;
170
171
  });
172
+ const getNamedSlot = (name) => slots[name] ?? slots[name.replace(/[A-Z]/g, (s) => `-${s.toLowerCase()}`)];
173
+ const resolvedCustomActions = computed(() => mergedActions.value.customActions.map((item, index) => {
174
+ const iconSlotInfo = {
175
+ item,
176
+ index,
177
+ originNode: item.icon
178
+ };
179
+ const iconFromSlot = getNamedSlot("customActionIconRender")?.(iconSlotInfo);
180
+ const actionSlotInfo = {
181
+ item,
182
+ index,
183
+ originNode: item.actionRender !== void 0 ? typeof item.actionRender === "function" ? item.actionRender(item) : item.actionRender : void 0
184
+ };
185
+ const actionFromSlot = getNamedSlot("customActionRender")?.(actionSlotInfo);
186
+ return {
187
+ ...item,
188
+ icon: iconFromSlot !== void 0 && !isEmptyNode(iconFromSlot) ? iconFromSlot : item.icon,
189
+ actionRender: actionFromSlot !== void 0 && !isEmptyNode(actionFromSlot) ? actionFromSlot : item.actionRender
190
+ };
191
+ }));
171
192
  function applySvgTransform() {
172
193
  if (mergedRenderType.value !== RenderType.Image) return;
173
194
  const svgEl = graphRef.value?.querySelector("svg");
@@ -295,7 +316,7 @@ var XMermaid = /* @__PURE__ */ defineComponent({
295
316
  key: "copy",
296
317
  actionRender: () => createVNode(ActionsWithSub.Copy, { "text": props.content }, null)
297
318
  });
298
- return [...items, ...mergedActions.value.customActions];
319
+ return [...items, ...resolvedCustomActions.value];
299
320
  });
300
321
  function renderHeader() {
301
322
  if (props.header === null) return null;
@@ -1,3 +1,3 @@
1
1
  import { default as Mermaid } from './Mermaid';
2
- export type { MermaidActions, MermaidProps, MermaidRef, MermaidRenderType, MermaidSemanticType, } from './Mermaid';
2
+ export type { MermaidActions, MermaidCustomActionSlotInfo, MermaidProps, MermaidRef, MermaidRenderType, MermaidSemanticType, } from './Mermaid';
3
3
  export default Mermaid;
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.1.0";
2
+ var version = "0.2.0";
3
3
  //#endregion
4
4
  export { version };
@@ -1,4 +1,5 @@
1
1
  import useXComponentConfig from "../_utils/hooks/use-x-component-config.js";
2
+ import { hasRenderableNode } from "../_utils/vue.js";
2
3
  import style_default from "./style/index.js";
3
4
  import { computed, createVNode, defineComponent, mergeProps, nextTick, onMounted, ref, useAttrs } from "vue";
4
5
  import { useConfig } from "antdv-next/dist/config-provider/context";
@@ -19,10 +20,6 @@ function getItemDomAttrs(item) {
19
20
  delete domAttrs.children;
20
21
  return domAttrs;
21
22
  }
22
- function hasRenderableNode(node) {
23
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
24
- return node !== null && node !== void 0 && node !== false;
25
- }
26
23
  var XPrompts = /* @__PURE__ */ defineComponent({
27
24
  name: "AxPrompts",
28
25
  inheritAttrs: false,
@@ -1,5 +1,6 @@
1
1
  import useXComponentConfig from "../_utils/hooks/use-x-component-config.js";
2
2
  import initCollapseTransition from "../_utils/transition.js";
3
+ import { hasRenderableNode } from "../_utils/vue.js";
3
4
  import CarouselCard from "./components/CarouselCard.js";
4
5
  import style_default from "./style/index.js";
5
6
  import { Fragment, Transition, computed, createVNode, defineComponent, mergeProps, ref, useAttrs } from "vue";
@@ -7,10 +8,6 @@ import { useConfig } from "antdv-next/dist/config-provider/context";
7
8
  import { Popover } from "antdv-next";
8
9
  import { RightOutlined } from "@antdv-next/icons";
9
10
  //#region components/sources/Sources.tsx
10
- var hasRenderableNode = (node) => {
11
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
12
- return node !== null && node !== void 0 && node !== false;
13
- };
14
11
  var XSources = /* @__PURE__ */ defineComponent({
15
12
  name: "AxSources",
16
13
  inheritAttrs: false,
@@ -1,11 +1,8 @@
1
+ import { hasRenderableNode } from "../../_utils/vue.js";
1
2
  import { createVNode, defineComponent, nextTick, ref, watch } from "vue";
2
3
  import { Carousel } from "antdv-next";
3
4
  import { LeftOutlined, RightOutlined } from "@antdv-next/icons";
4
5
  //#region components/sources/components/CarouselCard.tsx
5
- var hasRenderableNode = (node) => {
6
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
7
- return node !== null && node !== void 0 && node !== false;
8
- };
9
6
  var CarouselCard = /* @__PURE__ */ defineComponent({
10
7
  name: "XSourcesCarouselCard",
11
8
  props: {
@@ -1,14 +1,11 @@
1
1
  import useXComponentConfig from "../_utils/hooks/use-x-component-config.js";
2
+ import { hasRenderableNode } from "../_utils/vue.js";
2
3
  import style_default from "./style/index.js";
3
4
  import useActive from "./useActive.js";
4
5
  import { computed, createVNode, defineComponent, mergeProps, ref, useAttrs, watch } from "vue";
5
6
  import { useConfig } from "antdv-next/dist/config-provider/context";
6
7
  import { Cascader, Flex } from "antdv-next";
7
8
  //#region components/suggestion/Suggestion.tsx
8
- var hasRenderableNode = (node) => {
9
- if (Array.isArray(node)) return node.some((item) => item !== null && item !== void 0 && item !== false);
10
- return node !== null && node !== void 0 && node !== false;
11
- };
12
9
  var XSuggestion = /* @__PURE__ */ defineComponent({
13
10
  name: "AxSuggestion",
14
11
  inheritAttrs: false,