@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
|
@@ -33,18 +33,94 @@ __export(Sender_exports, {
|
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(Sender_exports);
|
|
35
35
|
var import_react = require("react");
|
|
36
|
+
var import_icons = require("@ant-design/icons");
|
|
37
|
+
var import_antd = require("antd");
|
|
36
38
|
var import_XAdkSender = __toESM(require("../../XAdkSender"));
|
|
37
39
|
var import_ChatSenderStateContext = require("../context/ChatSenderStateContext");
|
|
40
|
+
var import_DefaultLayoutContext = require("../context/DefaultLayoutContext");
|
|
38
41
|
var import_ChatActionContext = require("../context/ChatActionContext");
|
|
42
|
+
var import_styles = require("./styles");
|
|
39
43
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
40
44
|
var Sender = (0, import_react.forwardRef)(
|
|
41
|
-
(props, ref) => {
|
|
42
|
-
const {
|
|
45
|
+
({ allowUpload, uploadRequest: customUploadRequest, footerLeft, ...props }, ref) => {
|
|
46
|
+
const {
|
|
47
|
+
loading,
|
|
48
|
+
uploadRequest: providerUploadRequest,
|
|
49
|
+
allowUpload: providerAllowUpload,
|
|
50
|
+
senderValue,
|
|
51
|
+
setSenderValue
|
|
52
|
+
} = (0, import_ChatSenderStateContext.useChatSenderState)();
|
|
53
|
+
const layout = (0, import_DefaultLayoutContext.useDefaultLayoutContext)();
|
|
43
54
|
const { chat, stopChat, clearChat } = (0, import_ChatActionContext.useChatActions)();
|
|
55
|
+
const styles = (0, import_styles.useStyles)();
|
|
56
|
+
const senderRef = (0, import_react.useRef)(null);
|
|
57
|
+
const fileInputRef = (0, import_react.useRef)(null);
|
|
58
|
+
const mergedAllowUpload = allowUpload ?? (layout == null ? void 0 : layout.allowUpload) ?? providerAllowUpload;
|
|
59
|
+
const uploadRequest = customUploadRequest ?? providerUploadRequest;
|
|
60
|
+
const setSenderRef = (0, import_react.useCallback)(
|
|
61
|
+
(sender) => {
|
|
62
|
+
var _a;
|
|
63
|
+
senderRef.current = sender;
|
|
64
|
+
(_a = layout == null ? void 0 : layout.registerSender) == null ? void 0 : _a.call(layout, sender);
|
|
65
|
+
if (typeof ref === "function")
|
|
66
|
+
ref(sender);
|
|
67
|
+
else if (ref)
|
|
68
|
+
ref.current = sender;
|
|
69
|
+
},
|
|
70
|
+
[layout, ref]
|
|
71
|
+
);
|
|
72
|
+
const handleFileChange = (0, import_react.useCallback)(
|
|
73
|
+
(event) => {
|
|
74
|
+
var _a;
|
|
75
|
+
const files = event.target.files;
|
|
76
|
+
if (files == null ? void 0 : files.length)
|
|
77
|
+
(_a = senderRef.current) == null ? void 0 : _a.addFiles(Array.from(files));
|
|
78
|
+
event.target.value = "";
|
|
79
|
+
},
|
|
80
|
+
[]
|
|
81
|
+
);
|
|
82
|
+
const renderCustomFooterLeft = (0, import_react.useCallback)(
|
|
83
|
+
(oriNode, info) => {
|
|
84
|
+
if (footerLeft === false || footerLeft === void 0)
|
|
85
|
+
return null;
|
|
86
|
+
return typeof footerLeft === "function" ? footerLeft(oriNode, info) : footerLeft;
|
|
87
|
+
},
|
|
88
|
+
[footerLeft]
|
|
89
|
+
);
|
|
90
|
+
const mergedFooterLeft = mergedAllowUpload ? (oriNode, info) => {
|
|
91
|
+
var _a;
|
|
92
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
93
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
94
|
+
"input",
|
|
95
|
+
{
|
|
96
|
+
ref: fileInputRef,
|
|
97
|
+
type: "file",
|
|
98
|
+
multiple: true,
|
|
99
|
+
hidden: true,
|
|
100
|
+
accept: (_a = props.allowedFileTypes) == null ? void 0 : _a.join(","),
|
|
101
|
+
onChange: handleFileChange
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: "上传文件", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
105
|
+
"button",
|
|
106
|
+
{
|
|
107
|
+
type: "button",
|
|
108
|
+
className: styles.uploadButton,
|
|
109
|
+
onClick: () => {
|
|
110
|
+
var _a2;
|
|
111
|
+
return (_a2 = fileInputRef.current) == null ? void 0 : _a2.click();
|
|
112
|
+
},
|
|
113
|
+
"aria-label": "上传文件",
|
|
114
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.PaperClipOutlined, {})
|
|
115
|
+
}
|
|
116
|
+
) }),
|
|
117
|
+
renderCustomFooterLeft(oriNode, info)
|
|
118
|
+
] });
|
|
119
|
+
} : footerLeft;
|
|
44
120
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
45
121
|
import_XAdkSender.default,
|
|
46
122
|
{
|
|
47
|
-
ref,
|
|
123
|
+
ref: setSenderRef,
|
|
48
124
|
...props,
|
|
49
125
|
loading,
|
|
50
126
|
value: senderValue,
|
|
@@ -52,7 +128,8 @@ var Sender = (0, import_react.forwardRef)(
|
|
|
52
128
|
onSubmit: chat,
|
|
53
129
|
onStop: stopChat,
|
|
54
130
|
onClear: clearChat,
|
|
55
|
-
uploadRequest
|
|
131
|
+
uploadRequest,
|
|
132
|
+
footerLeft: mergedFooterLeft
|
|
56
133
|
}
|
|
57
134
|
);
|
|
58
135
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/XAdkProvider/compound/Sender.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { forwardRef } from \"react\";\nimport XAdkSender from \"@/components/XAdkSender\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkC;AAClC,wBAAuB;AACvB,oCAAmC;AACnC,+BAA+B;
|
|
6
|
-
"names": ["XAdkSender"]
|
|
4
|
+
"sourcesContent": ["import React, { forwardRef, useCallback, useRef } from \"react\";\nimport { PaperClipOutlined } from \"@ant-design/icons\";\nimport { Tooltip } from \"antd\";\nimport XAdkSender from \"@/components/XAdkSender\";\nimport { useChatSenderState } from \"../context/ChatSenderStateContext\";\nimport { useDefaultLayoutContext } from \"../context/DefaultLayoutContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type {\n ActionsComponents,\n SlotRenderFunction,\n XAdkSenderProps,\n XAdkSenderHandle,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n/**\n * XAdkProvider.Sender - 输入框组件\n *\n * 从 Context 获取聊天动作并提供输入界面\n * 基于 XAdkSender 组件实现\n *\n * @example\n * ```tsx\n * <XAdkProvider url=\"...\" token=\"...\">\n * <XAdkProvider.Sender\n * clearBtnShow={true}\n * allowUpload\n * uploadRequest={myUploadHandler}\n * />\n * </XAdkProvider>\n * ```\n */\nexport interface XAdkSenderCompoundProps extends Partial<\n Omit<XAdkSenderProps, \"loading\" | \"onSubmit\" | \"onStop\" | \"onClear\">\n> {\n /** 是否显示内置上传按钮;未传时依次继承 DefaultLayout 与 Provider 配置。 */\n allowUpload?: boolean;\n /** 额外的样式 */\n style?: React.CSSProperties;\n /** 额外的类名 */\n className?: string;\n}\n\nconst Sender = forwardRef<XAdkSenderHandle, XAdkSenderCompoundProps>(\n (\n { allowUpload, uploadRequest: customUploadRequest, footerLeft, ...props },\n ref,\n ) => {\n const {\n loading,\n uploadRequest: providerUploadRequest,\n allowUpload: providerAllowUpload,\n senderValue,\n setSenderValue,\n } = useChatSenderState();\n const layout = useDefaultLayoutContext();\n const { chat, stopChat, clearChat } = useChatActions();\n const styles = useStyles();\n const senderRef = useRef<XAdkSenderHandle | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const mergedAllowUpload =\n allowUpload ?? layout?.allowUpload ?? providerAllowUpload;\n const uploadRequest = customUploadRequest ?? providerUploadRequest;\n\n // 同时维护业务 ref 与 DefaultLayout 的拖拽文件注入目标。\n const setSenderRef = useCallback(\n (sender: XAdkSenderHandle | null) => {\n senderRef.current = sender;\n layout?.registerSender?.(sender);\n if (typeof ref === \"function\") ref(sender);\n else if (ref) ref.current = sender;\n },\n [layout, ref],\n );\n\n const handleFileChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files?.length) senderRef.current?.addFiles(Array.from(files));\n event.target.value = \"\";\n },\n [],\n );\n\n const renderCustomFooterLeft = useCallback(\n (oriNode: React.ReactNode, info: { components: ActionsComponents }) => {\n if (footerLeft === false || footerLeft === undefined) return null;\n return typeof footerLeft === \"function\"\n ? footerLeft(oriNode, info)\n : footerLeft;\n },\n [footerLeft],\n );\n\n const mergedFooterLeft: SlotRenderFunction | React.ReactNode =\n mergedAllowUpload\n ? (oriNode, info) => (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n accept={props.allowedFileTypes?.join(\",\")}\n onChange={handleFileChange}\n />\n <Tooltip title=\"上传文件\">\n <button\n type=\"button\"\n className={styles.uploadButton}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"上传文件\"\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n {renderCustomFooterLeft(oriNode, info)}\n </>\n )\n : footerLeft;\n\n return (\n <XAdkSender\n ref={setSenderRef}\n {...props}\n loading={loading}\n value={senderValue}\n onChange={setSenderValue}\n onSubmit={chat}\n onStop={stopChat}\n onClear={clearChat}\n uploadRequest={uploadRequest}\n footerLeft={mergedFooterLeft}\n />\n );\n },\n);\n\nSender.displayName = \"XAdkProvider.Sender\";\n\nexport default Sender;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuD;AACvD,mBAAkC;AAClC,kBAAwB;AACxB,wBAAuB;AACvB,oCAAmC;AACnC,kCAAwC;AACxC,+BAA+B;AAO/B,oBAA0B;AAoFd;AAtDZ,IAAM,aAAS;AAAA,EACb,CACE,EAAE,aAAa,eAAe,qBAAqB,YAAY,GAAG,MAAM,GACxE,QACG;AACH,UAAM;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,MACf,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACF,QAAI,kDAAmB;AACvB,UAAM,aAAS,qDAAwB;AACvC,UAAM,EAAE,MAAM,UAAU,UAAU,QAAI,yCAAe;AACrD,UAAM,aAAS,yBAAU;AACzB,UAAM,gBAAY,qBAAgC,IAAI;AACtD,UAAM,mBAAe,qBAAyB,IAAI;AAClD,UAAM,oBACJ,gBAAe,iCAAQ,gBAAe;AACxC,UAAM,gBAAgB,uBAAuB;AAG7C,UAAM,mBAAe;AAAA,MACnB,CAAC,WAAoC;AAlE3C;AAmEQ,kBAAU,UAAU;AACpB,+CAAQ,mBAAR,gCAAyB;AACzB,YAAI,OAAO,QAAQ;AAAY,cAAI,MAAM;AAAA,iBAChC;AAAK,cAAI,UAAU;AAAA,MAC9B;AAAA,MACA,CAAC,QAAQ,GAAG;AAAA,IACd;AAEA,UAAM,uBAAmB;AAAA,MACvB,CAAC,UAA+C;AA5EtD;AA6EQ,cAAM,QAAQ,MAAM,OAAO;AAC3B,YAAI,+BAAO;AAAQ,0BAAU,YAAV,mBAAmB,SAAS,MAAM,KAAK,KAAK;AAC/D,cAAM,OAAO,QAAQ;AAAA,MACvB;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,6BAAyB;AAAA,MAC7B,CAAC,SAA0B,SAA4C;AACrE,YAAI,eAAe,SAAS,eAAe;AAAW,iBAAO;AAC7D,eAAO,OAAO,eAAe,aACzB,WAAW,SAAS,IAAI,IACxB;AAAA,MACN;AAAA,MACA,CAAC,UAAU;AAAA,IACb;AAEA,UAAM,mBACJ,oBACI,CAAC,SAAS,SAAM;AAhG1B;AAiGY,yFACE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,UAAQ;AAAA,YACR,QAAM;AAAA,YACN,SAAQ,WAAM,qBAAN,mBAAwB,KAAK;AAAA,YACrC,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,4CAAC,uBAAQ,OAAM,QACb;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,OAAO;AAAA,YAClB,SAAS,MAAG;AA9G9B,kBAAAA;AA8GiC,sBAAAA,MAAA,aAAa,YAAb,gBAAAA,IAAsB;AAAA;AAAA,YACrC,cAAW;AAAA,YAEX,sDAAC,kCAAkB;AAAA;AAAA,QACrB,GACF;AAAA,QACC,uBAAuB,SAAS,IAAI;AAAA,SACvC;AAAA,QAEF;AAEN,WACE;AAAA,MAAC,kBAAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACJ,GAAG;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT;AAAA,QACA,YAAY;AAAA;AAAA,IACd;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;AAErB,IAAO,iBAAQ;",
|
|
6
|
+
"names": ["_a", "XAdkSender"]
|
|
7
7
|
}
|
|
@@ -46,6 +46,22 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
46
46
|
width: 100%;
|
|
47
47
|
align-self: center;
|
|
48
48
|
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
49
|
+
`,
|
|
50
|
+
uploadButton: import_css.css`
|
|
51
|
+
border: 0;
|
|
52
|
+
background: transparent;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
display: flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
padding: 6px;
|
|
58
|
+
border-radius: 50%;
|
|
59
|
+
color: #6b7280;
|
|
60
|
+
transition: background 0.2s;
|
|
61
|
+
|
|
62
|
+
&:hover {
|
|
63
|
+
background: rgba(0, 0, 0, 0.04);
|
|
64
|
+
}
|
|
49
65
|
`
|
|
50
66
|
}));
|
|
51
67
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/XAdkProvider/compound/styles.tsx"],
|
|
4
|
-
"sourcesContent": ["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n}));\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBV,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n\n uploadButton: css`\n border: 0;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n border-radius: 50%;\n color: #6b7280;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n}));\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBV,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBhB,EAAE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -7,6 +7,10 @@ import type { UploadRequestFn } from "../../../types";
|
|
|
7
7
|
export interface ChatSenderStateContextType {
|
|
8
8
|
loading: boolean;
|
|
9
9
|
uploadRequest?: UploadRequestFn;
|
|
10
|
+
/** Provider 级上传开关,默认布局可直接继承 config.allowUpload。 */
|
|
11
|
+
allowUpload: boolean;
|
|
12
|
+
/** Provider 级拖拽上传开关,默认布局仍可通过同名 prop 局部覆盖。 */
|
|
13
|
+
draggable: boolean;
|
|
10
14
|
/** Sender 输入框受控值 */
|
|
11
15
|
senderValue: string;
|
|
12
16
|
/** 更新 Sender 输入框值 */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/XAdkProvider/context/ChatSenderStateContext.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { createContext, useContext } from \"react\";\nimport type { UploadRequestFn } from \"@/types\";\n\n/**\n * Sender 专用状态 Context\n * 仅包含 Sender 需要的字段,避免 messages 变化导致 Sender 重渲染和焦点丢失\n */\nexport interface ChatSenderStateContextType {\n loading: boolean;\n uploadRequest?: UploadRequestFn;\n /** Sender 输入框受控值 */\n senderValue: string;\n /** 更新 Sender 输入框值 */\n setSenderValue: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport const ChatSenderStateContext
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiD;
|
|
4
|
+
"sourcesContent": ["import React, { createContext, useContext } from \"react\";\nimport type { UploadRequestFn } from \"@/types\";\n\n/**\n * Sender 专用状态 Context\n * 仅包含 Sender 需要的字段,避免 messages 变化导致 Sender 重渲染和焦点丢失\n */\nexport interface ChatSenderStateContextType {\n loading: boolean;\n uploadRequest?: UploadRequestFn;\n /** Provider 级上传开关,默认布局可直接继承 config.allowUpload。 */\n allowUpload: boolean;\n /** Provider 级拖拽上传开关,默认布局仍可通过同名 prop 局部覆盖。 */\n draggable: boolean;\n /** Sender 输入框受控值 */\n senderValue: string;\n /** 更新 Sender 输入框值 */\n setSenderValue: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport const ChatSenderStateContext =\n createContext<ChatSenderStateContextType | null>(null);\n\nexport const useChatSenderState = () => {\n const context = useContext(ChatSenderStateContext);\n if (!context) {\n throw new Error(\"useChatSenderState must be used within XAdkProvider\");\n }\n return context;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiD;AAoB1C,IAAM,6BACX,4BAAiD,IAAI;AAEhD,IAAM,qBAAqB,MAAM;AACtC,QAAM,cAAU,yBAAW,sBAAsB;AACjD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { XAdkSenderHandle } from "../../../types";
|
|
3
|
+
/** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */
|
|
4
|
+
export interface DefaultLayoutContextType {
|
|
5
|
+
allowUpload?: boolean;
|
|
6
|
+
registerSender?: (sender: XAdkSenderHandle | null) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const DefaultLayoutContext: import("react").Context<DefaultLayoutContextType | null>;
|
|
9
|
+
export declare const useDefaultLayoutContext: () => DefaultLayoutContextType | null;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/XAdkProvider/context/DefaultLayoutContext.tsx
|
|
20
|
+
var DefaultLayoutContext_exports = {};
|
|
21
|
+
__export(DefaultLayoutContext_exports, {
|
|
22
|
+
DefaultLayoutContext: () => DefaultLayoutContext,
|
|
23
|
+
useDefaultLayoutContext: () => useDefaultLayoutContext
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(DefaultLayoutContext_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var DefaultLayoutContext = (0, import_react.createContext)(null);
|
|
28
|
+
var useDefaultLayoutContext = () => (0, import_react.useContext)(DefaultLayoutContext);
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
DefaultLayoutContext,
|
|
32
|
+
useDefaultLayoutContext
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=DefaultLayoutContext.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/XAdkProvider/context/DefaultLayoutContext.tsx"],
|
|
4
|
+
"sourcesContent": ["import { createContext, useContext } from \"react\";\nimport type { XAdkSenderHandle } from \"@/types\";\n\n/** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */\nexport interface DefaultLayoutContextType {\n allowUpload?: boolean;\n registerSender?: (sender: XAdkSenderHandle | null) => void;\n}\n\nexport const DefaultLayoutContext =\n createContext<DefaultLayoutContextType | null>(null);\n\nexport const useDefaultLayoutContext = () => useContext(DefaultLayoutContext);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0C;AASnC,IAAM,2BACX,4BAA+C,IAAI;AAE9C,IAAM,0BAA0B,UAAM,yBAAW,oBAAoB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* XAdkProvider Context 导出
|
|
3
3
|
* 提供拆分的 Context 和对应的 Hooks
|
|
4
4
|
*/
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
5
|
+
export * from "./ChatStateContext";
|
|
6
|
+
export * from "./ChatActionContext";
|
|
7
|
+
export * from "./SessionContext";
|
|
8
|
+
export * from "./ChatSenderStateContext";
|
|
9
|
+
export * from "./DefaultLayoutContext";
|
|
@@ -20,11 +20,13 @@ __reExport(context_exports, require("./ChatStateContext"), module.exports);
|
|
|
20
20
|
__reExport(context_exports, require("./ChatActionContext"), module.exports);
|
|
21
21
|
__reExport(context_exports, require("./SessionContext"), module.exports);
|
|
22
22
|
__reExport(context_exports, require("./ChatSenderStateContext"), module.exports);
|
|
23
|
+
__reExport(context_exports, require("./DefaultLayoutContext"), module.exports);
|
|
23
24
|
// Annotate the CommonJS export names for ESM import in node:
|
|
24
25
|
0 && (module.exports = {
|
|
25
26
|
...require("./ChatStateContext"),
|
|
26
27
|
...require("./ChatActionContext"),
|
|
27
28
|
...require("./SessionContext"),
|
|
28
|
-
...require("./ChatSenderStateContext")
|
|
29
|
+
...require("./ChatSenderStateContext"),
|
|
30
|
+
...require("./DefaultLayoutContext")
|
|
29
31
|
});
|
|
30
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/XAdkProvider/context/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAKA,4BAAc,+BALd;AAMA,4BAAc,gCANd;AAOA,4BAAc,6BAPd;AAQA,4BAAc,qCARd;",
|
|
4
|
+
"sourcesContent": ["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from \"./ChatStateContext\";\nexport * from \"./ChatActionContext\";\nexport * from \"./SessionContext\";\nexport * from \"./ChatSenderStateContext\";\nexport * from \"./DefaultLayoutContext\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAKA,4BAAc,+BALd;AAMA,4BAAc,gCANd;AAOA,4BAAc,6BAPd;AAQA,4BAAc,qCARd;AASA,4BAAc,mCATd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -42,7 +42,7 @@ var import_ChatSenderStateContext = require("./context/ChatSenderStateContext");
|
|
|
42
42
|
var import_useADKChat = __toESM(require("../../hooks/useADKChat"));
|
|
43
43
|
var import_common = require("../../styles/common");
|
|
44
44
|
var import_tokens = require("../../styles/tokens");
|
|
45
|
-
var
|
|
45
|
+
var import_runtime = require("../../presets/runtime");
|
|
46
46
|
var import_Header = __toESM(require("./compound/Header"));
|
|
47
47
|
var import_Sidebar = __toESM(require("./compound/Sidebar"));
|
|
48
48
|
var import_Messages = __toESM(require("./compound/Messages"));
|
|
@@ -68,13 +68,10 @@ var XAdkProviderComponent = (0, import_react.forwardRef)(
|
|
|
68
68
|
children
|
|
69
69
|
}, ref) => {
|
|
70
70
|
const mergedStrategies = (0, import_react.useMemo)(
|
|
71
|
-
() => (0,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
...strategies
|
|
76
|
-
}
|
|
77
|
-
),
|
|
71
|
+
() => (0, import_runtime.mergeChatStrategies)(preset ?? (config == null ? void 0 : config.preset), {
|
|
72
|
+
...config == null ? void 0 : config.strategies,
|
|
73
|
+
...strategies
|
|
74
|
+
}),
|
|
78
75
|
[preset, strategies, config == null ? void 0 : config.preset, config == null ? void 0 : config.strategies]
|
|
79
76
|
);
|
|
80
77
|
const internalData = (0, import_useADKChat.default)({
|
|
@@ -116,8 +113,10 @@ var XAdkProviderComponent = (0, import_react.forwardRef)(
|
|
|
116
113
|
} = data;
|
|
117
114
|
const showFeedback = (config == null ? void 0 : config.showFeedback) ?? true;
|
|
118
115
|
const onFileClick = config == null ? void 0 : config.onFileClick;
|
|
116
|
+
const allowUpload = (config == null ? void 0 : config.allowUpload) ?? false;
|
|
117
|
+
const draggable = (config == null ? void 0 : config.draggable) ?? true;
|
|
119
118
|
const presetUploadRequest = (0, import_react.useMemo)(
|
|
120
|
-
() => (0,
|
|
119
|
+
() => (0, import_runtime.resolvePresetUploadRequest)(preset ?? (config == null ? void 0 : config.preset), {
|
|
121
120
|
url,
|
|
122
121
|
token,
|
|
123
122
|
appNo: config == null ? void 0 : config.appNo
|
|
@@ -235,10 +234,12 @@ var XAdkProviderComponent = (0, import_react.forwardRef)(
|
|
|
235
234
|
() => ({
|
|
236
235
|
loading,
|
|
237
236
|
uploadRequest,
|
|
237
|
+
allowUpload,
|
|
238
|
+
draggable,
|
|
238
239
|
senderValue,
|
|
239
240
|
setSenderValue
|
|
240
241
|
}),
|
|
241
|
-
[loading, uploadRequest, senderValue]
|
|
242
|
+
[loading, uploadRequest, allowUpload, draggable, senderValue]
|
|
242
243
|
);
|
|
243
244
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
244
245
|
import_antd.ConfigProvider,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/runtime\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\n }),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["useADKChat", "Header", "Sidebar", "Messages", "Sender", "Chatbot", "DefaultLayout", "Welcome"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { InlineTagRenderInfo, MentionTag, XAdkSenderInputPart, XAdkSenderSubmitPart } from "../../types";
|
|
3
|
+
export interface InlineTagInputRef {
|
|
4
|
+
focus: () => void;
|
|
5
|
+
getText: () => string;
|
|
6
|
+
getParts: () => XAdkSenderSubmitPart[];
|
|
7
|
+
getCursorOffset: () => number;
|
|
8
|
+
insertMention: (mention: MentionTag, replace?: {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
}) => void;
|
|
12
|
+
/** @deprecated 请使用 insertMention。 */
|
|
13
|
+
insertTag: (mention: MentionTag, replace?: {
|
|
14
|
+
start: number;
|
|
15
|
+
end: number;
|
|
16
|
+
}) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface InlineTagInputProps {
|
|
19
|
+
value: string;
|
|
20
|
+
mentions: MentionTag[];
|
|
21
|
+
defaultInputParts?: XAdkSenderInputPart[];
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
onChange: (value: string) => void;
|
|
25
|
+
onMentionsChange: (mentions: MentionTag[]) => void;
|
|
26
|
+
onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
|
|
27
|
+
onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;
|
|
28
|
+
renderMention?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
declare const InlineTagInput: React.ForwardRefExoticComponent<InlineTagInputProps & React.RefAttributes<InlineTagInputRef>>;
|
|
31
|
+
export default InlineTagInput;
|