@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha10
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.
- package/README.md +22 -0
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +78 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
- package/dist/cjs/components/Sources/index.d.ts +5 -0
- package/dist/cjs/components/Sources/index.js +162 -0
- package/dist/cjs/components/Sources/index.js.map +7 -0
- package/dist/cjs/components/Sources/styles.d.ts +59 -0
- package/dist/cjs/components/Sources/styles.js +179 -0
- package/dist/cjs/components/Sources/styles.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +75 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +11 -10
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
- package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
- package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
- package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
- package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
- package/dist/cjs/components/XAdkSender/index.js +422 -150
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
- package/dist/cjs/components/XAdkSender/styles.js +225 -5
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.js +5 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +8 -3
- package/dist/cjs/index.js +44 -10
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/presets/base.d.ts +6 -0
- package/dist/cjs/presets/base.js +50 -0
- package/dist/cjs/presets/base.js.map +7 -0
- package/dist/cjs/presets/define.d.ts +11 -0
- package/dist/cjs/presets/define.js +58 -0
- package/dist/cjs/presets/define.js.map +7 -0
- package/dist/cjs/presets/index.d.ts +3 -0
- package/dist/cjs/presets/index.js +28 -0
- package/dist/cjs/presets/index.js.map +7 -0
- package/dist/cjs/presets/runtime.d.ts +22 -0
- package/dist/cjs/presets/runtime.js +75 -0
- package/dist/cjs/presets/runtime.js.map +7 -0
- package/dist/cjs/presets/xgroup/index.d.ts +5 -0
- package/dist/cjs/presets/xgroup/index.js +10 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
- package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
- package/dist/cjs/presets/xgroup/preset.js +16 -37
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
- package/dist/cjs/presets/xgroup/strategies.js +11 -15
- package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +11 -2
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/Sources.d.ts +30 -0
- package/dist/cjs/types/Sources.js +18 -0
- package/dist/cjs/types/Sources.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +154 -8
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/cjs/utils/markdownResource.d.ts +14 -0
- package/dist/cjs/utils/markdownResource.js +131 -0
- package/dist/cjs/utils/markdownResource.js.map +7 -0
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
- package/dist/esm/components/Sources/index.d.ts +5 -0
- package/dist/esm/components/Sources/index.js +127 -0
- package/dist/esm/components/Sources/index.js.map +1 -0
- package/dist/esm/components/Sources/styles.d.ts +59 -0
- package/dist/esm/components/Sources/styles.js +34 -0
- package/dist/esm/components/Sources/styles.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/index.js +55 -10
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
- package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +7 -3
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
- package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/esm/components/XAdkSender/InputTags.js +37 -0
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
- package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/esm/components/XAdkSender/QuickList.js +96 -0
- package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +1 -6
- package/dist/esm/components/XAdkSender/index.js +476 -143
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
- package/dist/esm/components/XAdkSender/styles.js +34 -12
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/hooks/useADKChat.js +8 -2
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +8 -3
- package/dist/esm/index.js +7 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/base.d.ts +6 -0
- package/dist/esm/presets/base.js +28 -0
- package/dist/esm/presets/base.js.map +1 -0
- package/dist/esm/presets/define.d.ts +11 -0
- package/dist/esm/presets/define.js +33 -0
- package/dist/esm/presets/define.js.map +1 -0
- package/dist/esm/presets/index.d.ts +3 -0
- package/dist/esm/presets/index.js +4 -0
- package/dist/esm/presets/index.js.map +1 -0
- package/dist/esm/presets/runtime.d.ts +22 -0
- package/dist/esm/presets/runtime.js +45 -0
- package/dist/esm/presets/runtime.js.map +1 -0
- package/dist/esm/presets/xgroup/index.d.ts +5 -0
- package/dist/esm/presets/xgroup/index.js +6 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
- package/dist/esm/presets/xgroup/preset.d.ts +1 -13
- package/dist/esm/presets/xgroup/preset.js +9 -29
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
- package/dist/esm/presets/xgroup/strategies.js +8 -20
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +11 -2
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/Sources.d.ts +30 -0
- package/dist/esm/types/Sources.js +2 -0
- package/dist/esm/types/Sources.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +33 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +154 -8
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +14 -0
- package/dist/esm/utils/markdownResource.js +101 -0
- package/dist/esm/utils/markdownResource.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +6 -1
- package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/cjs/components/XAdkSender/Switch.js +0 -95
- package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
- package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/esm/components/XAdkSender/Switch.js +0 -53
- package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
+
var _excluded = ["style", "className", "rootClassName", "title", "expandIconPosition", "inline", "expanded", "defaultExpanded", "onExpand", "activeKey", "items", "onClick", "popoverOverlayWidth"];
|
|
6
|
+
import { RightOutlined } from '@ant-design/icons';
|
|
7
|
+
import { Popover } from 'antd';
|
|
8
|
+
import { clsx } from 'clsx';
|
|
9
|
+
import React, { useState, useCallback } from 'react';
|
|
10
|
+
import CarouselCard from "./components/CarouselCard";
|
|
11
|
+
import useStyle from "./styles";
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
15
|
+
var Sources = function Sources(props, ref) {
|
|
16
|
+
var style = props.style,
|
|
17
|
+
className = props.className,
|
|
18
|
+
rootClassName = props.rootClassName,
|
|
19
|
+
title = props.title,
|
|
20
|
+
_props$expandIconPosi = props.expandIconPosition,
|
|
21
|
+
expandIconPosition = _props$expandIconPosi === void 0 ? 'start' : _props$expandIconPosi,
|
|
22
|
+
_props$inline = props.inline,
|
|
23
|
+
inline = _props$inline === void 0 ? false : _props$inline,
|
|
24
|
+
expanded = props.expanded,
|
|
25
|
+
defaultExpanded = props.defaultExpanded,
|
|
26
|
+
onExpand = props.onExpand,
|
|
27
|
+
activeKey = props.activeKey,
|
|
28
|
+
items = props.items,
|
|
29
|
+
_onClick = props.onClick,
|
|
30
|
+
_props$popoverOverlay = props.popoverOverlayWidth,
|
|
31
|
+
popoverOverlayWidth = _props$popoverOverlay === void 0 ? 300 : _props$popoverOverlay,
|
|
32
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
33
|
+
var styles = useStyle();
|
|
34
|
+
var sourcesRef = React.useRef(null);
|
|
35
|
+
React.useImperativeHandle(ref, function () {
|
|
36
|
+
return {
|
|
37
|
+
nativeElement: sourcesRef.current
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// ============================ Collapsible ============================
|
|
42
|
+
var _useState = useState(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : true),
|
|
43
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
44
|
+
isExpand = _useState2[0],
|
|
45
|
+
setIsExpand = _useState2[1];
|
|
46
|
+
var isControlled = expanded !== undefined;
|
|
47
|
+
var actualExpanded = isControlled ? expanded : isExpand;
|
|
48
|
+
var handleToggle = useCallback(function () {
|
|
49
|
+
var newExpand = !actualExpanded;
|
|
50
|
+
if (!isControlled) {
|
|
51
|
+
setIsExpand(newExpand);
|
|
52
|
+
}
|
|
53
|
+
onExpand === null || onExpand === void 0 || onExpand(newExpand);
|
|
54
|
+
}, [actualExpanded, isControlled, onExpand]);
|
|
55
|
+
var mergedCls = clsx(styles.sources, className, rootClassName, _defineProperty({}, styles.sourcesInline, inline));
|
|
56
|
+
var ContentNode = items ? /*#__PURE__*/_jsx("ul", {
|
|
57
|
+
className: styles.sourcesList,
|
|
58
|
+
children: items.map(function (item, index) {
|
|
59
|
+
return /*#__PURE__*/_jsx("li", {
|
|
60
|
+
className: styles.sourcesListItem,
|
|
61
|
+
onClick: function onClick() {
|
|
62
|
+
return _onClick === null || _onClick === void 0 ? void 0 : _onClick(item);
|
|
63
|
+
},
|
|
64
|
+
children: /*#__PURE__*/_jsxs("a", {
|
|
65
|
+
className: styles.sourcesLink,
|
|
66
|
+
href: item.url,
|
|
67
|
+
target: "_blank",
|
|
68
|
+
rel: "noopener noreferrer",
|
|
69
|
+
children: [item.icon && /*#__PURE__*/_jsx("span", {
|
|
70
|
+
className: styles.sourcesLinkIcon,
|
|
71
|
+
children: item.icon
|
|
72
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
73
|
+
className: styles.sourcesLinkTitle,
|
|
74
|
+
children: item.title
|
|
75
|
+
})]
|
|
76
|
+
})
|
|
77
|
+
}, item.key || index);
|
|
78
|
+
})
|
|
79
|
+
}) : null;
|
|
80
|
+
return /*#__PURE__*/_jsx("div", _objectSpread(_objectSpread({
|
|
81
|
+
ref: sourcesRef,
|
|
82
|
+
className: mergedCls,
|
|
83
|
+
style: style
|
|
84
|
+
}, restProps), {}, {
|
|
85
|
+
children: inline ? /*#__PURE__*/_jsx(Popover, {
|
|
86
|
+
content: /*#__PURE__*/_jsx(CarouselCard, {
|
|
87
|
+
className: clsx(styles.sources, className),
|
|
88
|
+
style: style,
|
|
89
|
+
activeKey: activeKey,
|
|
90
|
+
prefixCls: "sources",
|
|
91
|
+
items: items,
|
|
92
|
+
onClick: _onClick
|
|
93
|
+
}),
|
|
94
|
+
open: inline ? undefined : false,
|
|
95
|
+
overlayStyle: {
|
|
96
|
+
width: popoverOverlayWidth
|
|
97
|
+
},
|
|
98
|
+
placement: "top",
|
|
99
|
+
forceRender: true,
|
|
100
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
101
|
+
className: styles.sourcesTitleWrapper,
|
|
102
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
103
|
+
children: title
|
|
104
|
+
})
|
|
105
|
+
})
|
|
106
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
107
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
108
|
+
className: clsx(styles.sourcesTitleWrapper, expandIconPosition === 'end' && styles.sourcesIconPositionEnd),
|
|
109
|
+
onClick: handleToggle,
|
|
110
|
+
children: [/*#__PURE__*/_jsx(RightOutlined, {
|
|
111
|
+
className: clsx(styles.sourcesTitleDownIcon, _defineProperty({}, styles.sourcesTitleDownIconExpanded, actualExpanded))
|
|
112
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
113
|
+
children: title
|
|
114
|
+
})]
|
|
115
|
+
}), actualExpanded && /*#__PURE__*/_jsx("div", {
|
|
116
|
+
className: styles.sourcesContent,
|
|
117
|
+
children: ContentNode
|
|
118
|
+
})]
|
|
119
|
+
})
|
|
120
|
+
}));
|
|
121
|
+
};
|
|
122
|
+
var ForwardSources = /*#__PURE__*/React.forwardRef(Sources);
|
|
123
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
124
|
+
ForwardSources.displayName = 'Sources';
|
|
125
|
+
}
|
|
126
|
+
export default ForwardSources;
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RightOutlined","Popover","clsx","React","useState","useCallback","CarouselCard","useStyle","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Sources","props","ref","style","className","rootClassName","title","_props$expandIconPosi","expandIconPosition","_props$inline","inline","expanded","defaultExpanded","onExpand","activeKey","items","onClick","_props$popoverOverlay","popoverOverlayWidth","restProps","_objectWithoutProperties","_excluded","styles","sourcesRef","useRef","useImperativeHandle","nativeElement","current","_useState","_useState2","_slicedToArray","isExpand","setIsExpand","isControlled","undefined","actualExpanded","handleToggle","newExpand","mergedCls","sources","_defineProperty","sourcesInline","ContentNode","sourcesList","children","map","item","index","sourcesListItem","sourcesLink","href","url","target","rel","icon","sourcesLinkIcon","sourcesLinkTitle","key","_objectSpread","content","prefixCls","open","overlayStyle","width","placement","forceRender","sourcesTitleWrapper","sourcesIconPositionEnd","sourcesTitleDownIcon","sourcesTitleDownIconExpanded","sourcesContent","ForwardSources","forwardRef","process","env","NODE_ENV","displayName"],"sources":["../../../../src/components/Sources/index.tsx"],"sourcesContent":["import { RightOutlined } from '@ant-design/icons';\nimport { Popover } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useState, useCallback } from 'react';\nimport type { SourcesProps, SourcesRef } from '@/types/Sources';\nimport CarouselCard from './components/CarouselCard';\nimport useStyle from './styles';\n\nconst Sources: React.ForwardRefRenderFunction<SourcesRef, SourcesProps> = (props, ref) => {\n const {\n style,\n className,\n rootClassName,\n title,\n expandIconPosition = 'start',\n inline = false,\n expanded,\n defaultExpanded,\n onExpand,\n activeKey,\n items,\n onClick,\n popoverOverlayWidth = 300,\n ...restProps\n } = props;\n\n const styles = useStyle();\n\n const sourcesRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => ({\n nativeElement: sourcesRef.current!,\n }));\n\n // ============================ Collapsible ============================\n const [isExpand, setIsExpand] = useState<boolean>(defaultExpanded ?? true);\n const isControlled = expanded !== undefined;\n const actualExpanded = isControlled ? expanded : isExpand;\n\n const handleToggle = useCallback(() => {\n const newExpand = !actualExpanded;\n if (!isControlled) {\n setIsExpand(newExpand);\n }\n onExpand?.(newExpand);\n }, [actualExpanded, isControlled, onExpand]);\n\n const mergedCls = clsx(\n styles.sources,\n className,\n rootClassName,\n {\n [styles.sourcesInline]: inline,\n },\n );\n\n const ContentNode = items ? (\n <ul className={styles.sourcesList}>\n {items.map((item, index) => (\n <li\n key={item.key || index}\n className={styles.sourcesListItem}\n onClick={() => onClick?.(item)}\n >\n <a\n className={styles.sourcesLink}\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {item.icon && <span className={styles.sourcesLinkIcon}>{item.icon}</span>}\n <span className={styles.sourcesLinkTitle}>{item.title}</span>\n </a>\n </li>\n ))}\n </ul>\n ) : null;\n\n return (\n <div\n ref={sourcesRef}\n className={mergedCls}\n style={style}\n {...restProps}\n >\n {inline ? (\n <Popover\n content={\n <CarouselCard\n className={clsx(styles.sources, className)}\n style={style}\n activeKey={activeKey}\n prefixCls=\"sources\"\n items={items}\n onClick={onClick}\n />\n }\n open={inline ? undefined : false}\n overlayStyle={{ width: popoverOverlayWidth }}\n placement=\"top\"\n forceRender\n >\n <div className={styles.sourcesTitleWrapper}>\n <span>{title}</span>\n </div>\n </Popover>\n ) : (\n <>\n <div\n className={clsx(\n styles.sourcesTitleWrapper,\n expandIconPosition === 'end' && styles.sourcesIconPositionEnd,\n )}\n onClick={handleToggle}\n >\n <RightOutlined\n className={clsx(styles.sourcesTitleDownIcon, {\n [styles.sourcesTitleDownIconExpanded]: actualExpanded,\n })}\n />\n <span>{title}</span>\n </div>\n {actualExpanded && (\n <div className={styles.sourcesContent}>\n {ContentNode}\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst ForwardSources = React.forwardRef(Sources);\n\nif (process.env.NODE_ENV !== 'production') {\n ForwardSources.displayName = 'Sources';\n}\n\nexport default ForwardSources;\nexport type { SourcesProps, SourcesItem, SourcesRef } from '@/types/Sources';"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare const useStyles: () => {
|
|
2
|
+
sources: string;
|
|
3
|
+
sourcesTitleWrapper: string;
|
|
4
|
+
sourcesTitleDownIcon: string;
|
|
5
|
+
sourcesTitleDownIconExpanded: string;
|
|
6
|
+
sourcesIconPositionEnd: string;
|
|
7
|
+
sourcesList: string;
|
|
8
|
+
sourcesListItem: string;
|
|
9
|
+
sourcesLink: string;
|
|
10
|
+
sourcesLinkIcon: string;
|
|
11
|
+
sourcesLinkTitle: string;
|
|
12
|
+
sourcesContent: string;
|
|
13
|
+
sourcesContentHidden: string;
|
|
14
|
+
sourcesInline: string;
|
|
15
|
+
carouselWrapper: string;
|
|
16
|
+
carouselTitle: string;
|
|
17
|
+
carouselBtnWrapper: string;
|
|
18
|
+
carouselBtn: string;
|
|
19
|
+
carouselBtnDisabled: string;
|
|
20
|
+
carouselPage: string;
|
|
21
|
+
carouselItem: string;
|
|
22
|
+
carouselItemTitleWrapper: string;
|
|
23
|
+
carouselItemTitle: string;
|
|
24
|
+
carouselItemDescription: string;
|
|
25
|
+
} & {
|
|
26
|
+
w: (width: string | number) => string;
|
|
27
|
+
h: (height: string | number) => string;
|
|
28
|
+
p: (padding: string) => string;
|
|
29
|
+
pb: (padding: string | number) => string;
|
|
30
|
+
pt: (padding: string | number) => string;
|
|
31
|
+
pl: (padding: string | number) => string;
|
|
32
|
+
pr: (padding: string | number) => string;
|
|
33
|
+
m: (margin: string) => string;
|
|
34
|
+
mb: (margin: string | number) => string;
|
|
35
|
+
mt: (margin: string | number) => string;
|
|
36
|
+
ml: (margin: string | number) => string;
|
|
37
|
+
mr: (margin: string | number) => string;
|
|
38
|
+
text: (size: string | number) => string;
|
|
39
|
+
weight: (size: number) => string;
|
|
40
|
+
textColor: (c: string) => string;
|
|
41
|
+
bg: (c: string) => string;
|
|
42
|
+
rs: (radius: string | number) => string;
|
|
43
|
+
gap: (g: string | number) => string;
|
|
44
|
+
flex: string;
|
|
45
|
+
flexCenter: string;
|
|
46
|
+
flexBetween: string;
|
|
47
|
+
flexColumn: string;
|
|
48
|
+
flex1: string;
|
|
49
|
+
cursor: (type: string) => string;
|
|
50
|
+
border: (color: string, width?: string) => string;
|
|
51
|
+
boxShadow: (shadow: string) => string;
|
|
52
|
+
transition: (property?: string, duration?: string) => string;
|
|
53
|
+
overflow: (type: string) => string;
|
|
54
|
+
position: (type: string) => string;
|
|
55
|
+
zIndex: (index: number) => string;
|
|
56
|
+
flexCenterGap2: string;
|
|
57
|
+
flexCenterGap4: string;
|
|
58
|
+
};
|
|
59
|
+
export default useStyles;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23;
|
|
3
|
+
import { css } from "@emotion/css";
|
|
4
|
+
import { withBasicStyles } from "../../styles/common";
|
|
5
|
+
export var useStyles = withBasicStyles(function () {
|
|
6
|
+
return {
|
|
7
|
+
sources: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n "]))),
|
|
8
|
+
sourcesTitleWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #888;\n line-height: 1.5;\n cursor: pointer;\n margin-bottom: 12px;\n width: fit-content;\n "]))),
|
|
9
|
+
sourcesTitleDownIcon: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n font-size: 12px;\n transition: transform 0.3s ease;\n "]))),
|
|
10
|
+
sourcesTitleDownIconExpanded: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n transform: rotate(90deg);\n "]))),
|
|
11
|
+
sourcesIconPositionEnd: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n .sources-title-down-icon {\n order: 1;\n }\n "]))),
|
|
12
|
+
sourcesList: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n list-style: none;\n margin: 0;\n padding: 0;\n ul, ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n "]))),
|
|
13
|
+
sourcesListItem: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n margin-bottom: 8px;\n "]))),
|
|
14
|
+
sourcesLink: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n color: #333;\n display: flex;\n gap: 4px;\n text-decoration: none;\n &:hover {\n color: #1677ff;\n }\n "]))),
|
|
15
|
+
sourcesLinkIcon: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n flex-shrink: 0;\n "]))),
|
|
16
|
+
sourcesLinkTitle: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n "]))),
|
|
17
|
+
sourcesContent: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n overflow: hidden;\n transition: all 0.3s ease;\n "]))),
|
|
18
|
+
sourcesContentHidden: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: none;\n "]))),
|
|
19
|
+
sourcesInline: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: inline-flex;\n .sources-title-wrapper {\n background: #f5f5f5;\n border-radius: 10px;\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n color: #888;\n font-weight: 400;\n padding-inline: 6px;\n padding-block: 0;\n margin-inline: 4px;\n margin-block: 0;\n }\n "]))),
|
|
20
|
+
// ========== Carousel 相关 ==========
|
|
21
|
+
carouselWrapper: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n min-width: 260px;\n "]))),
|
|
22
|
+
carouselTitle: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n "]))),
|
|
23
|
+
carouselBtnWrapper: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n display: flex;\n gap: 4px;\n "]))),
|
|
24
|
+
carouselBtn: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n height: 32px;\n width: 32px;\n border-radius: 6px;\n transition: background 0.2s ease;\n &:not(.carousel-btn-disabled):hover {\n background: #f5f5f5;\n }\n "]))),
|
|
25
|
+
carouselBtnDisabled: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n "]))),
|
|
26
|
+
carouselPage: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n font-size: 12px;\n color: #888;\n "]))),
|
|
27
|
+
carouselItem: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n padding: 8px;\n box-sizing: border-box;\n font-size: 14px;\n line-height: 1.5;\n cursor: pointer;\n "]))),
|
|
28
|
+
carouselItemTitleWrapper: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n display: flex;\n gap: 4px;\n align-items: center;\n "]))),
|
|
29
|
+
carouselItemTitle: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n "]))),
|
|
30
|
+
carouselItemDescription: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n opacity: 0.8;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n text-overflow: ellipsis;\n margin-top: 4px;\n font-size: 12px;\n color: #888;\n "])))
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
export default useStyles;
|
|
34
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","sources","_templateObject","_taggedTemplateLiteral","sourcesTitleWrapper","_templateObject2","sourcesTitleDownIcon","_templateObject3","sourcesTitleDownIconExpanded","_templateObject4","sourcesIconPositionEnd","_templateObject5","sourcesList","_templateObject6","sourcesListItem","_templateObject7","sourcesLink","_templateObject8","sourcesLinkIcon","_templateObject9","sourcesLinkTitle","_templateObject10","sourcesContent","_templateObject11","sourcesContentHidden","_templateObject12","sourcesInline","_templateObject13","carouselWrapper","_templateObject14","carouselTitle","_templateObject15","carouselBtnWrapper","_templateObject16","carouselBtn","_templateObject17","carouselBtnDisabled","_templateObject18","carouselPage","_templateObject19","carouselItem","_templateObject20","carouselItemTitleWrapper","_templateObject21","carouselItemTitle","_templateObject22","carouselItemDescription","_templateObject23"],"sources":["../../../../src/components/Sources/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n sources: css`\n position: relative;\n `,\n\n sourcesTitleWrapper: css`\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #888;\n line-height: 1.5;\n cursor: pointer;\n margin-bottom: 12px;\n width: fit-content;\n `,\n\n sourcesTitleDownIcon: css`\n font-size: 12px;\n transition: transform 0.3s ease;\n `,\n\n sourcesTitleDownIconExpanded: css`\n transform: rotate(90deg);\n `,\n\n sourcesIconPositionEnd: css`\n .sources-title-down-icon {\n order: 1;\n }\n `,\n\n sourcesList: css`\n list-style: none;\n margin: 0;\n padding: 0;\n ul, ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n `,\n\n sourcesListItem: css`\n margin-bottom: 8px;\n `,\n\n sourcesLink: css`\n color: #333;\n display: flex;\n gap: 4px;\n text-decoration: none;\n &:hover {\n color: #1677ff;\n }\n `,\n\n sourcesLinkIcon: css`\n flex-shrink: 0;\n `,\n\n sourcesLinkTitle: css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n sourcesContent: css`\n overflow: hidden;\n transition: all 0.3s ease;\n `,\n\n sourcesContentHidden: css`\n display: none;\n `,\n\n sourcesInline: css`\n display: inline-flex;\n .sources-title-wrapper {\n background: #f5f5f5;\n border-radius: 10px;\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n color: #888;\n font-weight: 400;\n padding-inline: 6px;\n padding-block: 0;\n margin-inline: 4px;\n margin-block: 0;\n }\n `,\n\n // ========== Carousel 相关 ==========\n carouselWrapper: css`\n min-width: 260px;\n `,\n\n carouselTitle: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n `,\n\n carouselBtnWrapper: css`\n display: flex;\n gap: 4px;\n `,\n\n carouselBtn: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n height: 32px;\n width: 32px;\n border-radius: 6px;\n transition: background 0.2s ease;\n &:not(.carousel-btn-disabled):hover {\n background: #f5f5f5;\n }\n `,\n\n carouselBtnDisabled: css`\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n `,\n\n carouselPage: css`\n font-size: 12px;\n color: #888;\n `,\n\n carouselItem: css`\n padding: 8px;\n box-sizing: border-box;\n font-size: 14px;\n line-height: 1.5;\n cursor: pointer;\n `,\n\n carouselItemTitleWrapper: css`\n display: flex;\n gap: 4px;\n align-items: center;\n `,\n\n carouselItemTitle: css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n carouselItemDescription: css`\n opacity: 0.8;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n text-overflow: ellipsis;\n margin-top: 4px;\n font-size: 12px;\n color: #888;\n `,\n}));\n\nexport default useStyles;"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,qCAEX;IAEDC,mBAAmB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,2OAWvB;IAEDG,oBAAoB,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,wEAGxB;IAEDK,4BAA4B,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2CAEhC;IAEDO,sBAAsB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,oEAI1B;IAEDS,WAAW,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,uJASf;IAEDW,eAAe,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,qCAEnB;IAEDa,WAAW,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,0IAQf;IAEDe,eAAe,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,iCAEnB;IAEDiB,gBAAgB,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,2FAIpB;IAEDmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,mEAGlB;IAEDqB,oBAAoB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,gCAExB;IAEDuB,aAAa,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,gWAejB;IAED;IACAyB,eAAe,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,mCAEnB;IAED2B,aAAa,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,wHAKjB;IAED6B,kBAAkB,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,+CAGtB;IAED+B,WAAW,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,wSAYf;IAEDiC,mBAAmB,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,oFAIvB;IAEDmC,YAAY,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,oDAGhB;IAEDqC,YAAY,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,+HAMhB;IAEDuC,wBAAwB,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,yEAI5B;IAEDyC,iBAAiB,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,2FAIrB;IAED2C,uBAAuB,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA;EAW9B,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import "@ant-design/x-markdown/themes/light.css";
|
|
3
|
-
import type { FileItem } from "../../../../types";
|
|
3
|
+
import type { FileItem, MarkdownExtension, MarkdownResourceLink, RenderMarkdownResourceLink } from "../../../../types";
|
|
4
4
|
export interface MarkdownRenderProps {
|
|
5
5
|
text: string;
|
|
6
|
+
/** 紧凑布局,适合用户消息气泡等内联场景 */
|
|
7
|
+
compact?: boolean;
|
|
8
|
+
/** Markdown 资源链接协议白名单,未命中的协议保持普通 Markdown 行为 */
|
|
9
|
+
resourceLinkSchemes?: readonly string[];
|
|
6
10
|
/** 点击 Markdown 中识别到的文件链接的回调 */
|
|
7
11
|
onFileClick?: (file: FileItem) => void;
|
|
12
|
+
/** 点击 Markdown 中识别到的资源链接标签,如 [@skill](skill://xxx) */
|
|
13
|
+
onResourceLinkClick?: (link: MarkdownResourceLink) => void;
|
|
14
|
+
/** 自定义资源链接渲染,返回 null 时使用默认标签样式 */
|
|
15
|
+
renderResourceLink?: RenderMarkdownResourceLink;
|
|
16
|
+
/** Markdown/XML 自定义标签扩展 */
|
|
17
|
+
markdownExtensions?: readonly MarkdownExtension[];
|
|
18
|
+
/**
|
|
19
|
+
* 将命中文件扩展名的裸 URL 当作纯文本展示,不升级为 FileGallery。
|
|
20
|
+
* 用户消息应如实展示输入文本,除资源链接等业务扩展外不做额外富化。
|
|
21
|
+
* 默认 false,保留 Agent 消息现有行为。
|
|
22
|
+
*/
|
|
23
|
+
bareUrlAsText?: boolean;
|
|
24
|
+
/** 将已经丢失资源 URI 的 @name 兼容渲染成只读高亮标签。 */
|
|
25
|
+
highlightPlainMentions?: boolean;
|
|
8
26
|
}
|
|
9
27
|
declare const MarkdownRender: React.FC<MarkdownRenderProps>;
|
|
10
28
|
export default MarkdownRender;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
3
|
import React from "react";
|
|
2
4
|
import XMarkdown from "@ant-design/x-markdown";
|
|
3
5
|
import "@ant-design/x-markdown/themes/light.css";
|
|
@@ -7,9 +9,12 @@ import Latex from "@ant-design/x-markdown/plugins/Latex";
|
|
|
7
9
|
import { useStyles } from "./styles";
|
|
8
10
|
import { BarsOutlined, BulbOutlined, ThunderboltOutlined, CheckCircleOutlined } from "@ant-design/icons";
|
|
9
11
|
import FileGallery from "../../../FileGallery";
|
|
12
|
+
import { parseMarkdownResourceHref, getMarkdownResourceDisplayLabel, replaceMarkdownResourceLinks } from "../../../../utils/markdownResource";
|
|
13
|
+
|
|
14
|
+
// 支持识别的文件扩展名
|
|
10
15
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
16
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
-
|
|
17
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
18
|
var FILE_EXT_REGEX = /\.(pdf|doc|docx|xls|xlsx|csv|ppt|pptx|zip|rar|7z|txt|md|json|xml|mp3|wav|m4a|aac|ogg|flac|mp4|mov|webm|mkv|avi|png|jpg|jpeg|gif|webp|bmp|svg)(\?.*)?$/i;
|
|
14
19
|
var MIME_MAP = {
|
|
15
20
|
pdf: "application/pdf",
|
|
@@ -55,6 +60,17 @@ var extractExt = function extractExt(str) {
|
|
|
55
60
|
if (!match) return "";
|
|
56
61
|
return match[1].toLowerCase();
|
|
57
62
|
};
|
|
63
|
+
var escapeMarkdownLabel = function escapeMarkdownLabel(value) {
|
|
64
|
+
return value.replace(/\\/g, "\\\\").replace(/\]/g, "\\]");
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// 使用标准 https 链接作为 Markdown AST 的内部载体,避免自定义 HTML 标签被解析器降级成纯文本。
|
|
68
|
+
var RESOURCE_LINK_SENTINEL = "https://xadk.local/resource";
|
|
69
|
+
var PLAIN_MENTION_SENTINEL = "https://xadk.local/mention";
|
|
70
|
+
// 仅开放符合 Custom Element 命名规则的标签,避免覆盖 a/code 等内置 Markdown 节点。
|
|
71
|
+
var CUSTOM_TAG_NAME_REGEX = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/;
|
|
72
|
+
var CUSTOM_ATTRIBUTE_NAME_REGEX = /^[a-z][a-z0-9-]*$/;
|
|
73
|
+
var EMPTY_MARKDOWN_EXTENSIONS = [];
|
|
58
74
|
var CodeComponent = function CodeComponent(props) {
|
|
59
75
|
var _className$match;
|
|
60
76
|
var className = props.className,
|
|
@@ -105,23 +121,159 @@ var extractText = function extractText(children) {
|
|
|
105
121
|
if ( /*#__PURE__*/React.isValidElement(children)) return extractText(children.props.children);
|
|
106
122
|
return "";
|
|
107
123
|
};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
124
|
+
|
|
125
|
+
// 从组件 props 中获取自定义 Markdown 扩展属性值,支持 kebab-case、camelCase 和 compactCase。
|
|
126
|
+
var getExtensionAttribute = function getExtensionAttribute(props, attribute) {
|
|
127
|
+
var _ref, _record$attribute;
|
|
128
|
+
var record = props;
|
|
129
|
+
var camelCase = attribute.replace(/-([a-z])/g, function (_, char) {
|
|
130
|
+
return char.toUpperCase();
|
|
131
|
+
});
|
|
132
|
+
var compact = attribute.replaceAll("-", "");
|
|
133
|
+
var value = (_ref = (_record$attribute = record[attribute]) !== null && _record$attribute !== void 0 ? _record$attribute : record[camelCase]) !== null && _ref !== void 0 ? _ref : record[compact];
|
|
134
|
+
return value === undefined || value === null ? undefined : String(value);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// 仅允许自定义 Markdown 扩展的安全属性,避免 XSS 注入。s
|
|
138
|
+
var getAllowedExtensionAttributes = function getAllowedExtensionAttributes(extension) {
|
|
139
|
+
return (extension.allowedAttributes || []).filter(function (attribute) {
|
|
140
|
+
return CUSTOM_ATTRIBUTE_NAME_REGEX.test(attribute) && !attribute.startsWith("on") && attribute !== "style" && attribute !== "srcdoc";
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
var createMarkdownExtensionComponent = function createMarkdownExtensionComponent(extension) {
|
|
144
|
+
var MarkdownExtensionComponent = function MarkdownExtensionComponent(props) {
|
|
145
|
+
var attributes = Object.fromEntries(getAllowedExtensionAttributes(extension).flatMap(function (attribute) {
|
|
146
|
+
var value = getExtensionAttribute(props, attribute);
|
|
147
|
+
return value === undefined ? [] : [[attribute, value]];
|
|
148
|
+
}));
|
|
149
|
+
var node = {
|
|
150
|
+
tagName: extension.tagName,
|
|
151
|
+
attributes: attributes,
|
|
152
|
+
text: extractText(props.children).trim(),
|
|
153
|
+
children: props.children
|
|
154
|
+
};
|
|
155
|
+
var customNode = extension.render(node);
|
|
156
|
+
return customNode === null ? /*#__PURE__*/_jsx(_Fragment, {
|
|
157
|
+
children: props.children
|
|
158
|
+
}) : customNode;
|
|
159
|
+
};
|
|
160
|
+
MarkdownExtensionComponent.displayName = "MarkdownExtension(".concat(extension.tagName, ")");
|
|
161
|
+
return MarkdownExtensionComponent;
|
|
162
|
+
};
|
|
163
|
+
var MarkdownRender = function MarkdownRender(_ref2) {
|
|
164
|
+
var text = _ref2.text,
|
|
165
|
+
_ref2$compact = _ref2.compact,
|
|
166
|
+
compact = _ref2$compact === void 0 ? false : _ref2$compact,
|
|
167
|
+
resourceLinkSchemes = _ref2.resourceLinkSchemes,
|
|
168
|
+
onFileClick = _ref2.onFileClick,
|
|
169
|
+
onResourceLinkClick = _ref2.onResourceLinkClick,
|
|
170
|
+
renderResourceLink = _ref2.renderResourceLink,
|
|
171
|
+
_ref2$markdownExtensi = _ref2.markdownExtensions,
|
|
172
|
+
markdownExtensions = _ref2$markdownExtensi === void 0 ? EMPTY_MARKDOWN_EXTENSIONS : _ref2$markdownExtensi,
|
|
173
|
+
_ref2$bareUrlAsText = _ref2.bareUrlAsText,
|
|
174
|
+
bareUrlAsText = _ref2$bareUrlAsText === void 0 ? false : _ref2$bareUrlAsText,
|
|
175
|
+
_ref2$highlightPlainM = _ref2.highlightPlainMentions,
|
|
176
|
+
highlightPlainMentions = _ref2$highlightPlainM === void 0 ? false : _ref2$highlightPlainM;
|
|
111
177
|
var styles = useStyles();
|
|
112
|
-
var
|
|
178
|
+
var displayText = highlightPlainMentions ? text.replace(/(^|[^\[a-z0-9_])@([a-z0-9][a-z0-9._-]*)/gi, function (_source, prefix, label) {
|
|
179
|
+
return "".concat(prefix, "[").concat(escapeMarkdownLabel(label), "](").concat(PLAIN_MENTION_SENTINEL, "?label=").concat(encodeURIComponent(label), ")");
|
|
180
|
+
}) : text;
|
|
181
|
+
var markdown = replaceMarkdownResourceLinks(displayText, function (link) {
|
|
182
|
+
// 非 http(s) 协议会被 Markdown 引擎清洗,先编码到内部标准链接中交给 a renderer 恢复。
|
|
183
|
+
return "[".concat(escapeMarkdownLabel(link.label), "](").concat(RESOURCE_LINK_SENTINEL, "?href=").concat(encodeURIComponent(link.href), "&label=").concat(encodeURIComponent(link.label), ")");
|
|
184
|
+
}, {
|
|
185
|
+
schemes: resourceLinkSchemes
|
|
186
|
+
}).replaceAll(/\/\*\s*PLANNING\s*\*\//g, '<tag type="planning"></tag>').replaceAll(/\/\*\s*REPLANNING\s*\*\//g, '<tag type="replanning"></tag>').replaceAll(/\/\*\s*REASONING\s*\*\//g, '<tag type="reasoning"></tag>').replaceAll(/\/\*\s*ACTION\s*\*\//g, '<tag type="action"></tag>').replaceAll(/\/\*\s*FINAL_ANSWER\s*\*\//g, '<tag type="final_answer"></tag>');
|
|
187
|
+
var ResourceLinkComponent = React.useCallback(function (props) {
|
|
188
|
+
var href = String(props.href || "");
|
|
189
|
+
var linkText = String(props.label || "") || extractText(props.children);
|
|
190
|
+
var resourceLink = parseMarkdownResourceHref(href, linkText, {
|
|
191
|
+
schemes: resourceLinkSchemes
|
|
192
|
+
});
|
|
193
|
+
if (!resourceLink) return /*#__PURE__*/_jsx(_Fragment, {
|
|
194
|
+
children: props.children
|
|
195
|
+
});
|
|
196
|
+
var displayLabel = getMarkdownResourceDisplayLabel(resourceLink.label);
|
|
197
|
+
var customNode = renderResourceLink === null || renderResourceLink === void 0 ? void 0 : renderResourceLink(resourceLink);
|
|
198
|
+
if (customNode) return customNode;
|
|
199
|
+
return /*#__PURE__*/_jsx("button", {
|
|
200
|
+
type: "button",
|
|
201
|
+
className: styles.resourceLink,
|
|
202
|
+
onClick: function onClick() {
|
|
203
|
+
return onResourceLinkClick === null || onResourceLinkClick === void 0 ? void 0 : onResourceLinkClick(resourceLink);
|
|
204
|
+
},
|
|
205
|
+
"aria-label": displayLabel,
|
|
206
|
+
"data-xadk-resource-link": resourceLink.type,
|
|
207
|
+
"data-resource-markdown": "[".concat(resourceLink.label, "](").concat(resourceLink.href, ")"),
|
|
208
|
+
children: displayLabel
|
|
209
|
+
});
|
|
210
|
+
}, [onResourceLinkClick, renderResourceLink, resourceLinkSchemes, styles.resourceLink]);
|
|
211
|
+
var PlainMentionComponent = React.useCallback(function (props) {
|
|
212
|
+
var label = String(props.label || "") || extractText(props.children);
|
|
213
|
+
return /*#__PURE__*/_jsx("span", {
|
|
214
|
+
className: styles.resourceLink,
|
|
215
|
+
"aria-label": label,
|
|
216
|
+
"data-xadk-resource-link": "true",
|
|
217
|
+
children: label
|
|
218
|
+
});
|
|
219
|
+
}, [styles.resourceLink]);
|
|
113
220
|
|
|
114
|
-
// 自定义 a
|
|
221
|
+
// 自定义 a 标签渲染:资源协议渲染为标签,文件链接渲染为 FileGallery,其余保持普通链接。
|
|
115
222
|
var LinkComponent = React.useCallback(function (props) {
|
|
116
223
|
var href = String(props.href || "");
|
|
117
224
|
// 用递归提取纯文本,避免 children 是 React node 时 String() 得到 "[object Object]"
|
|
118
225
|
var linkText = extractText(props.children);
|
|
226
|
+
var resolvedHref = href;
|
|
227
|
+
var resolvedLabel = linkText;
|
|
228
|
+
try {
|
|
229
|
+
var internalUrl = new URL(href);
|
|
230
|
+
if (internalUrl.origin + internalUrl.pathname === PLAIN_MENTION_SENTINEL) {
|
|
231
|
+
var label = internalUrl.searchParams.get("label") || linkText;
|
|
232
|
+
return /*#__PURE__*/_jsx("span", {
|
|
233
|
+
className: styles.resourceLink,
|
|
234
|
+
"aria-label": label,
|
|
235
|
+
"data-xadk-resource-link": "true",
|
|
236
|
+
children: label
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
if (internalUrl.origin + internalUrl.pathname === RESOURCE_LINK_SENTINEL) {
|
|
240
|
+
resolvedHref = internalUrl.searchParams.get("href") || "";
|
|
241
|
+
resolvedLabel = internalUrl.searchParams.get("label") || linkText;
|
|
242
|
+
}
|
|
243
|
+
} catch (_unused) {
|
|
244
|
+
// 相对链接及非标准 URL 继续走原有解析逻辑。
|
|
245
|
+
}
|
|
246
|
+
var resourceLink = parseMarkdownResourceHref(resolvedHref, resolvedLabel, {
|
|
247
|
+
schemes: resourceLinkSchemes
|
|
248
|
+
});
|
|
249
|
+
if (resourceLink) {
|
|
250
|
+
var displayLabel = getMarkdownResourceDisplayLabel(resourceLink.label);
|
|
251
|
+
var customNode = renderResourceLink === null || renderResourceLink === void 0 ? void 0 : renderResourceLink(resourceLink);
|
|
252
|
+
if (customNode) return customNode;
|
|
253
|
+
return /*#__PURE__*/_jsx("button", {
|
|
254
|
+
type: "button",
|
|
255
|
+
className: styles.resourceLink,
|
|
256
|
+
onClick: function onClick() {
|
|
257
|
+
return onResourceLinkClick === null || onResourceLinkClick === void 0 ? void 0 : onResourceLinkClick(resourceLink);
|
|
258
|
+
},
|
|
259
|
+
"aria-label": displayLabel,
|
|
260
|
+
"data-xadk-resource-link": resourceLink.type,
|
|
261
|
+
"data-resource-markdown": "[".concat(resourceLink.label, "](").concat(resourceLink.href, ")"),
|
|
262
|
+
children: displayLabel
|
|
263
|
+
});
|
|
264
|
+
}
|
|
119
265
|
|
|
120
266
|
// 先识别 name(链接文字),再识别 url(href)
|
|
121
267
|
var ext = extractExt(linkText) || extractExt(href);
|
|
122
268
|
if (ext) {
|
|
123
269
|
// href 为空说明链接还在流式截断中,不渲染,避免显示出错误文字
|
|
124
270
|
if (!href) return null;
|
|
271
|
+
// 用户消息场景:裸 URL 不富化,直接展示为纯文本字符串
|
|
272
|
+
if (bareUrlAsText) {
|
|
273
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
274
|
+
children: linkText || href
|
|
275
|
+
});
|
|
276
|
+
}
|
|
125
277
|
var mimeType = MIME_MAP[ext] || "";
|
|
126
278
|
var fileItem = {
|
|
127
279
|
displayName: linkText || href,
|
|
@@ -141,23 +293,50 @@ var MarkdownRender = function MarkdownRender(_ref) {
|
|
|
141
293
|
rel: "noopener noreferrer",
|
|
142
294
|
children: props.children
|
|
143
295
|
});
|
|
144
|
-
}, [onFileClick]);
|
|
296
|
+
}, [onFileClick, onResourceLinkClick, renderResourceLink, resourceLinkSchemes, styles.resourceLink, bareUrlAsText]);
|
|
297
|
+
var enabledMarkdownExtensions = React.useMemo(function () {
|
|
298
|
+
var registeredTags = new Set();
|
|
299
|
+
return markdownExtensions.filter(function (extension) {
|
|
300
|
+
var tagName = extension.tagName.toLowerCase();
|
|
301
|
+
if (!CUSTOM_TAG_NAME_REGEX.test(tagName) || registeredTags.has(tagName)) {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
registeredTags.add(tagName);
|
|
305
|
+
return true;
|
|
306
|
+
});
|
|
307
|
+
}, [markdownExtensions]);
|
|
308
|
+
var dompurifyConfig = React.useMemo(function () {
|
|
309
|
+
var allowedAttributes = Array.from(new Set(enabledMarkdownExtensions.flatMap(function (extension) {
|
|
310
|
+
return _toConsumableArray(getAllowedExtensionAttributes(extension));
|
|
311
|
+
})));
|
|
312
|
+
return allowedAttributes.length ? {
|
|
313
|
+
ADD_ATTR: allowedAttributes
|
|
314
|
+
} : undefined;
|
|
315
|
+
}, [enabledMarkdownExtensions]);
|
|
316
|
+
var extensionComponents = React.useMemo(function () {
|
|
317
|
+
return Object.fromEntries(enabledMarkdownExtensions.map(function (extension) {
|
|
318
|
+
return [extension.tagName.toLowerCase(), createMarkdownExtensionComponent(extension)];
|
|
319
|
+
}));
|
|
320
|
+
}, [enabledMarkdownExtensions]);
|
|
145
321
|
return /*#__PURE__*/_jsx("div", {
|
|
146
|
-
className: styles.markdownWrapper,
|
|
322
|
+
className: "".concat(styles.markdownWrapper).concat(compact ? " ".concat(styles.markdownWrapperCompact) : ""),
|
|
147
323
|
children: /*#__PURE__*/_jsx("div", {
|
|
148
|
-
className: styles.markdownHost,
|
|
324
|
+
className: "".concat(styles.markdownHost).concat(compact ? " ".concat(styles.markdownHostCompact) : ""),
|
|
149
325
|
children: /*#__PURE__*/_jsx(XMarkdown, {
|
|
150
326
|
content: markdown,
|
|
151
327
|
className: "x-markdown-light",
|
|
152
328
|
paragraphTag: "div",
|
|
329
|
+
dompurifyConfig: dompurifyConfig,
|
|
153
330
|
config: {
|
|
154
331
|
extensions: Latex()
|
|
155
332
|
},
|
|
156
|
-
components: {
|
|
333
|
+
components: _objectSpread({
|
|
157
334
|
tag: ThinkComponent,
|
|
335
|
+
"resource-link": ResourceLinkComponent,
|
|
336
|
+
"plain-mention": PlainMentionComponent,
|
|
158
337
|
code: CodeComponent,
|
|
159
338
|
a: LinkComponent
|
|
160
|
-
},
|
|
339
|
+
}, extensionComponents),
|
|
161
340
|
streaming: {
|
|
162
341
|
enableAnimation: true,
|
|
163
342
|
animationConfig: {
|