@ai-group/chat-sdk 0.2.5 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +93 -214
  2. package/dist/cjs/assets/arrow-down.png +0 -0
  3. package/dist/cjs/assets/arrow-up.png +0 -0
  4. package/dist/cjs/assets/chatKnowledge.png +0 -0
  5. package/dist/cjs/assets/completed-black.png +0 -0
  6. package/dist/cjs/assets/completed.png +0 -0
  7. package/dist/cjs/assets/document-black.png +0 -0
  8. package/dist/cjs/assets/document.png +0 -0
  9. package/dist/cjs/assets/document.svg +16 -0
  10. package/dist/cjs/assets/empty.png +0 -0
  11. package/dist/cjs/assets/group.png +0 -0
  12. package/dist/cjs/assets/qa-black.png +0 -0
  13. package/dist/cjs/assets/qa.png +0 -0
  14. package/dist/cjs/assets/skillNo-black.png +0 -0
  15. package/dist/cjs/assets/skillNo.png +0 -0
  16. package/dist/cjs/assets/tools-black.png +0 -0
  17. package/dist/cjs/assets/tools.png +0 -0
  18. package/dist/cjs/assets/user.png +0 -0
  19. package/dist/cjs/client/base.d.ts +9 -0
  20. package/dist/cjs/client/base.js +18 -0
  21. package/dist/cjs/client/base.js.map +7 -0
  22. package/dist/cjs/client/restClient.d.ts +0 -0
  23. package/dist/cjs/client/restClient.js +1 -0
  24. package/dist/cjs/client/restClient.js.map +7 -0
  25. package/dist/cjs/client/wsClient.d.ts +0 -0
  26. package/dist/cjs/client/wsClient.js +1 -0
  27. package/dist/cjs/client/wsClient.js.map +7 -0
  28. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  29. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +484 -0
  30. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +7 -0
  31. package/dist/cjs/components/XAiChatbot/index.d.ts +12 -0
  32. package/dist/cjs/components/XAiChatbot/index.js +365 -0
  33. package/dist/cjs/components/XAiChatbot/index.js.map +7 -0
  34. package/dist/cjs/components/XAiChatbot/styles.d.ts +72 -0
  35. package/dist/cjs/components/XAiChatbot/styles.js +426 -0
  36. package/dist/cjs/components/XAiChatbot/styles.js.map +7 -0
  37. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  38. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +127 -0
  39. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +7 -0
  40. package/dist/cjs/components/XAiProvider/index.d.ts +4 -0
  41. package/dist/cjs/components/XAiProvider/index.js +115 -0
  42. package/dist/cjs/components/XAiProvider/index.js.map +7 -0
  43. package/dist/cjs/components/XAiSDK.d.ts +10 -0
  44. package/dist/cjs/components/XAiSDK.js +53 -0
  45. package/dist/cjs/components/XAiSDK.js.map +7 -0
  46. package/dist/cjs/components/XAiWebSDKWrapper.d.ts +9 -0
  47. package/dist/cjs/components/XAiWebSDKWrapper.js +70 -0
  48. package/dist/cjs/components/XAiWebSDKWrapper.js.map +7 -0
  49. package/dist/cjs/context/AiProviderContext.d.ts +12 -0
  50. package/dist/cjs/context/AiProviderContext.js +74 -0
  51. package/dist/cjs/context/AiProviderContext.js.map +7 -0
  52. package/dist/cjs/context/ThemeContext.d.ts +20 -0
  53. package/dist/cjs/context/ThemeContext.js +37 -0
  54. package/dist/cjs/context/ThemeContext.js.map +7 -0
  55. package/dist/cjs/hooks/useAgentGenerator.d.ts +72 -0
  56. package/dist/cjs/hooks/useAgentGenerator.js +487 -0
  57. package/dist/cjs/hooks/useAgentGenerator.js.map +7 -0
  58. package/dist/cjs/hooks/useEventStreamRequest.d.ts +30 -0
  59. package/dist/cjs/hooks/useEventStreamRequest.js +188 -0
  60. package/dist/cjs/hooks/useEventStreamRequest.js.map +7 -0
  61. package/dist/cjs/hooks/useProviderContext.d.ts +33 -0
  62. package/dist/cjs/hooks/useProviderContext.js +105 -0
  63. package/dist/cjs/hooks/useProviderContext.js.map +7 -0
  64. package/dist/cjs/hooks/useXAiSDK.d.ts +14 -0
  65. package/dist/cjs/hooks/useXAiSDK.js +75 -0
  66. package/dist/cjs/hooks/useXAiSDK.js.map +7 -0
  67. package/dist/cjs/index.d.ts +9 -0
  68. package/dist/cjs/index.js +61 -0
  69. package/dist/cjs/index.js.map +7 -0
  70. package/dist/cjs/services/api.d.ts +69 -0
  71. package/dist/cjs/services/api.js +49 -0
  72. package/dist/cjs/services/api.js.map +7 -0
  73. package/dist/cjs/styles/common.d.ts +64 -0
  74. package/dist/cjs/styles/common.js +144 -0
  75. package/dist/cjs/styles/common.js.map +7 -0
  76. package/dist/cjs/styles/markdown.d.ts +3 -0
  77. package/dist/cjs/styles/markdown.js +193 -0
  78. package/dist/cjs/styles/markdown.js.map +7 -0
  79. package/dist/cjs/types/XAiChatbot.d.ts +159 -0
  80. package/dist/cjs/types/XAiChatbot.js +18 -0
  81. package/dist/cjs/types/XAiChatbot.js.map +7 -0
  82. package/dist/cjs/types/XAiMessage.d.ts +121 -0
  83. package/dist/cjs/types/XAiMessage.js +55 -0
  84. package/dist/cjs/types/XAiMessage.js.map +7 -0
  85. package/dist/cjs/types/XAiProvider.d.ts +46 -0
  86. package/dist/cjs/types/XAiProvider.js +50 -0
  87. package/dist/cjs/types/XAiProvider.js.map +7 -0
  88. package/dist/cjs/types/index.d.ts +3 -0
  89. package/dist/cjs/types/index.js +28 -0
  90. package/dist/cjs/types/index.js.map +7 -0
  91. package/dist/cjs/types/mdx.d.ts +18 -0
  92. package/dist/cjs/utils/chat.d.ts +34 -0
  93. package/dist/cjs/utils/chat.js +1 -0
  94. package/dist/cjs/utils/chat.js.map +7 -0
  95. package/dist/cjs/utils/index.d.ts +2 -0
  96. package/dist/cjs/utils/index.js +49 -0
  97. package/dist/cjs/utils/index.js.map +7 -0
  98. package/dist/cjs/utils/providerManager.d.ts +22 -0
  99. package/dist/cjs/utils/providerManager.js +73 -0
  100. package/dist/cjs/utils/providerManager.js.map +7 -0
  101. package/dist/cjs/utils/request.d.ts +78 -0
  102. package/dist/cjs/utils/request.example.d.ts +39 -0
  103. package/dist/cjs/utils/request.example.js +211 -0
  104. package/dist/cjs/utils/request.example.js.map +7 -0
  105. package/dist/cjs/utils/request.js +231 -0
  106. package/dist/cjs/utils/request.js.map +7 -0
  107. package/dist/cjs/utils/umdEntry.d.ts +14 -0
  108. package/dist/cjs/utils/umdEntry.js +97 -0
  109. package/dist/cjs/utils/umdEntry.js.map +7 -0
  110. package/dist/esm/assets/user.png +0 -0
  111. package/dist/esm/client/base.d.ts +9 -0
  112. package/dist/esm/client/restClient.d.ts +0 -0
  113. package/dist/esm/client/wsClient.d.ts +0 -0
  114. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  115. package/dist/esm/components/XAiChatbot/index.d.ts +12 -0
  116. package/dist/esm/components/XAiChatbot/index.js +17 -11
  117. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  118. package/dist/esm/components/XAiChatbot/styles.d.ts +72 -0
  119. package/dist/esm/components/XAiChatbot/styles.js +37 -38
  120. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  121. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  122. package/dist/esm/components/XAiProvider/index.d.ts +4 -0
  123. package/dist/esm/components/XAiProvider/index.js +8 -1
  124. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  125. package/dist/esm/components/XAiSDK.d.ts +10 -0
  126. package/dist/esm/components/XAiWebSDKWrapper.d.ts +9 -0
  127. package/dist/esm/components/XAiWebSDKWrapper.js +4 -1
  128. package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -1
  129. package/dist/esm/context/AiProviderContext.d.ts +12 -0
  130. package/dist/esm/context/ThemeContext.d.ts +20 -0
  131. package/dist/esm/hooks/useAgentGenerator.d.ts +72 -0
  132. package/dist/esm/hooks/useAgentGenerator.js +113 -39
  133. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  134. package/dist/esm/hooks/useEventStreamRequest.d.ts +30 -0
  135. package/dist/esm/hooks/useProviderContext.d.ts +33 -0
  136. package/dist/esm/hooks/useXAiSDK.d.ts +14 -0
  137. package/dist/esm/index.d.ts +9 -0
  138. package/dist/esm/services/api.d.ts +69 -0
  139. package/dist/esm/services/api.js.map +1 -1
  140. package/dist/esm/styles/common.d.ts +64 -0
  141. package/dist/esm/styles/markdown.d.ts +3 -0
  142. package/dist/esm/types/XAiChatbot.d.ts +159 -0
  143. package/dist/esm/types/XAiMessage.d.ts +121 -0
  144. package/dist/esm/types/XAiProvider.d.ts +46 -0
  145. package/dist/esm/types/XAiProvider.js +7 -0
  146. package/dist/esm/types/XAiProvider.js.map +1 -1
  147. package/dist/esm/types/index.d.ts +3 -0
  148. package/dist/esm/utils/chat.d.ts +34 -0
  149. package/dist/esm/utils/index.d.ts +2 -0
  150. package/dist/esm/utils/providerManager.d.ts +22 -0
  151. package/dist/esm/utils/request.d.ts +78 -0
  152. package/dist/esm/utils/request.example.d.ts +39 -0
  153. package/dist/esm/utils/umdEntry.d.ts +14 -0
  154. package/dist/esm/utils/umdEntry.js +22 -18
  155. package/dist/esm/utils/umdEntry.js.map +1 -1
  156. package/dist/umd/chat-sdk.min.js +1 -1
  157. package/package.json +1 -1
@@ -0,0 +1,365 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/XAiChatbot/index.tsx
30
+ var XAiChatbot_exports = {};
31
+ __export(XAiChatbot_exports, {
32
+ default: () => XAiChatbot_default
33
+ });
34
+ module.exports = __toCommonJS(XAiChatbot_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_antd = require("antd");
37
+ var import_x = require("@ant-design/x");
38
+ var import_icons = require("@ant-design/icons");
39
+ var import_clsx = __toESM(require("clsx"));
40
+ var import_markdown_it = __toESM(require("markdown-it"));
41
+ var import_react_html_parser = __toESM(require("react-html-parser"));
42
+ var import_markdown = __toESM(require("../../styles/markdown"));
43
+ var import_XAiMessage = require("../../types/XAiMessage");
44
+ var import_empty = __toESM(require("../../assets/empty.png"));
45
+ var import_group = __toESM(require("../../assets/group.png"));
46
+ var import_arrow_up = __toESM(require("../../assets/arrow-up.png"));
47
+ var import_arrow_down = __toESM(require("../../assets/arrow-down.png"));
48
+ var import_useProviderContext = require("../../hooks/useProviderContext");
49
+ var import_styles = require("./styles");
50
+ var md = new import_markdown_it.default({
51
+ html: true,
52
+ linkify: true,
53
+ typographer: true
54
+ });
55
+ var defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {
56
+ return self.renderToken(tokens, idx, options);
57
+ });
58
+ md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
59
+ const aIndex = tokens[idx].attrIndex("target");
60
+ if (aIndex < 0) {
61
+ tokens[idx].attrPush(["target", "_blank"]);
62
+ } else {
63
+ tokens[idx].attrs[aIndex][1] = "_blank";
64
+ }
65
+ const relIndex = tokens[idx].attrIndex("rel");
66
+ if (relIndex < 0) {
67
+ tokens[idx].attrPush(["rel", "noopener noreferrer"]);
68
+ } else {
69
+ tokens[idx].attrs[relIndex][1] = "noopener noreferrer";
70
+ }
71
+ return defaultRender(tokens, idx, options, env, self);
72
+ };
73
+ var defaultActions = [
74
+ {
75
+ key: "redo",
76
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.RedoOutlined, null),
77
+ tooltip: "重新生成"
78
+ },
79
+ {
80
+ key: "copy",
81
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.CopyOutlined, null),
82
+ tooltip: "复制"
83
+ },
84
+ {
85
+ key: "delete",
86
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.DeleteOutlined, null),
87
+ tooltip: "删除"
88
+ }
89
+ ];
90
+ var XAiChatbot = (props) => {
91
+ const { mergedProps } = (0, import_useProviderContext.useChatbotContext)(props);
92
+ const {
93
+ navbarShow = false,
94
+ navbar,
95
+ renderNavbar = null,
96
+ // renderMessageContent,
97
+ // quickReplies = [],
98
+ // quickRepliesVisible = true,
99
+ // onQuickReplyClick,
100
+ loading: propLoading = false,
101
+ messageTooltip,
102
+ avatar,
103
+ userAvatar,
104
+ messages: propMessages,
105
+ text = "",
106
+ emptyStateImage = import_empty.default,
107
+ emptyStateText = "我的智能体",
108
+ messageActions = defaultActions,
109
+ onMessagesActionsCallback,
110
+ // 点击帮助消息
111
+ onSuggestMessageClick,
112
+ onSend,
113
+ onClear,
114
+ onStop
115
+ } = mergedProps;
116
+ const messages = mergedProps.messages || propMessages || [];
117
+ const loading = mergedProps.loading || propLoading;
118
+ const [disabled, _setDisabled] = (0, import_react.useState)(false);
119
+ const [content, setContent] = (0, import_react.useState)(text);
120
+ const [mode, _setMode] = (0, import_react.useState)("");
121
+ const [fileUploading, setFileUploading] = (0, import_react.useState)(false);
122
+ const [clearPopoverVisible, setClearPopoverVisible] = (0, import_react.useState)(false);
123
+ const styles = (0, import_styles.useStyles)();
124
+ const FooterActions = ({ data }) => /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.flex, styles.gap(13)) }, messageActions.map((action, index) => /* @__PURE__ */ import_react.default.createElement(import_antd.Tooltip, { key: action.key, title: action.tooltip }, /* @__PURE__ */ import_react.default.createElement("span", { className: styles.cursor("pointer"), onClick: () => onMessagesActionsCallback == null ? void 0 : onMessagesActionsCallback(index, data) }, action.icon))));
125
+ const MessageFooter = ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, messageTooltip == null ? void 0 : messageTooltip(data), /* @__PURE__ */ import_react.default.createElement(FooterActions, { data }));
126
+ const rolesObject = {
127
+ assistant: {
128
+ placement: "start",
129
+ avatar: { icon: avatar || /* @__PURE__ */ import_react.default.createElement(import_icons.UserOutlined, { className: (0, import_clsx.default)(styles.bg("#fde3cf"), styles.userAvatar) }) },
130
+ typing: { step: 5, interval: 20 },
131
+ style: {
132
+ maxWidth: 600
133
+ },
134
+ classNames: {
135
+ content: "assistant-content"
136
+ }
137
+ },
138
+ user: {
139
+ placement: "end",
140
+ avatar: { icon: userAvatar || /* @__PURE__ */ import_react.default.createElement(import_icons.UserOutlined, { className: (0, import_clsx.default)(styles.bg("#87d068"), styles.userAvatar) }) },
141
+ classNames: {
142
+ content: "user-content"
143
+ }
144
+ },
145
+ suggestion: {
146
+ placement: "start",
147
+ avatar: { icon: /* @__PURE__ */ import_react.default.createElement(import_icons.UserOutlined, null), style: { visibility: "hidden" } },
148
+ variant: "borderless"
149
+ }
150
+ };
151
+ const ActionHeader = ({ thinks = [], renderActionHeader }) => {
152
+ var _a;
153
+ const [expanded, setExpanded] = (0, import_react.useState)(false);
154
+ if (!thinks || thinks.length === 0)
155
+ return null;
156
+ if (renderActionHeader) {
157
+ return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });
158
+ }
159
+ const first = thinks[0];
160
+ const { name } = first;
161
+ const icon = (first == null ? void 0 : first.icon) || ((_a = first == null ? void 0 : first.extra) == null ? void 0 : _a.icon);
162
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: styles.actionHeaderWrapper }, !expanded && /* @__PURE__ */ import_react.default.createElement(
163
+ "div",
164
+ {
165
+ className: styles.actionHeaderItem,
166
+ onClick: () => setExpanded((v) => !v)
167
+ },
168
+ icon && /* @__PURE__ */ import_react.default.createElement("img", { src: icon, alt: "icon", className: styles.actionHeaderIcon }),
169
+ /* @__PURE__ */ import_react.default.createElement("span", { className: styles.actionHeaderText }, name),
170
+ /* @__PURE__ */ import_react.default.createElement("img", { alt: "展开icon", src: import_arrow_down.default, className: styles.w("16px") })
171
+ ), expanded && /* @__PURE__ */ import_react.default.createElement("div", { className: styles.actionHeaderDetail }, /* @__PURE__ */ import_react.default.createElement("div", { className: styles.actionDetailTitle, onClick: () => setExpanded((v) => !v) }, /* @__PURE__ */ import_react.default.createElement("img", { src: import_group.default, alt: "", className: (0, import_clsx.default)(styles.w(14)) }), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.flex1, styles.pl(10)) }, "隐藏运行过程"), /* @__PURE__ */ import_react.default.createElement("img", { alt: "收起icon", src: import_arrow_up.default, className: styles.w("16px") })), thinks.map((action, idx) => {
172
+ var _a2, _b, _c;
173
+ const thinkIcon = (action == null ? void 0 : action.expandIcon) || ((_a2 = action == null ? void 0 : action.extra) == null ? void 0 : _a2.expandIcon) || ((_b = action == null ? void 0 : action.extra) == null ? void 0 : _b.icon) || (action == null ? void 0 : action.icon);
174
+ const thinkCost = (action == null ? void 0 : action.cost) || ((_c = action == null ? void 0 : action.extra) == null ? void 0 : _c.cost);
175
+ return /* @__PURE__ */ import_react.default.createElement("div", { key: action.uniqueId || idx, className: styles.actionHeaderDetailItem }, thinkIcon && /* @__PURE__ */ import_react.default.createElement("img", { src: thinkIcon, alt: "icon", className: styles.actionHeaderIcon }), /* @__PURE__ */ import_react.default.createElement("span", null, action == null ? void 0 : action.name), /* @__PURE__ */ import_react.default.createElement("span", { className: styles.actionHeaderCost }, thinkCost ? `${thinkCost}s` : ""));
176
+ })));
177
+ };
178
+ const handleSend = () => {
179
+ if (content.trim()) {
180
+ onSend == null ? void 0 : onSend("text", content);
181
+ setContent("");
182
+ }
183
+ };
184
+ const NavBar = () => {
185
+ if (renderNavbar) {
186
+ return renderNavbar();
187
+ }
188
+ if (navbar == null ? void 0 : navbar.title) {
189
+ return /* @__PURE__ */ import_react.default.createElement("header", { className: styles.navbar }, navbar.avatar && /* @__PURE__ */ import_react.default.createElement("img", { src: navbar.avatar, className: styles.avatar, alt: "" }), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", { className: styles.title }, navbar.title), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.subtitle }, navbar.subtitle)));
190
+ }
191
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null);
192
+ };
193
+ const fileInputRef = (0, import_react.useRef)(null);
194
+ const handleStopGenerate = () => {
195
+ onStop == null ? void 0 : onStop();
196
+ };
197
+ const handleFileSelect = () => {
198
+ };
199
+ const handleClear = () => {
200
+ setClearPopoverVisible(true);
201
+ };
202
+ const cancelClear = () => {
203
+ setClearPopoverVisible(false);
204
+ };
205
+ const confirmClear = () => {
206
+ setContent("");
207
+ onClear == null ? void 0 : onClear();
208
+ setClearPopoverVisible(false);
209
+ };
210
+ const clearConfirmContent = /* @__PURE__ */ import_react.default.createElement("div", { className: styles.p("2px") }, /* @__PURE__ */ import_react.default.createElement("p", { className: (0, import_clsx.default)(styles.mb(14), styles.mt(0)) }, "确认清除所有聊天记录并重置会话!"), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.popoverFooter }, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { size: "small", onClick: cancelClear }, "取消"), /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { size: "small", type: "primary", danger: true, onClick: confirmClear }, "确认")));
211
+ const uploadButton = /* @__PURE__ */ import_react.default.createElement("div", { className: styles.flexCenterGap2 }, /* @__PURE__ */ import_react.default.createElement(
212
+ import_antd.Tooltip,
213
+ {
214
+ placement: "top",
215
+ title: mode === "single_agent_skill_mode" ? "工作流模式不支持上传文件" : "支持图片、文档等上传"
216
+ },
217
+ fileUploading ? /* @__PURE__ */ import_react.default.createElement(import_antd.Spin, { size: "small" }) : /* @__PURE__ */ import_react.default.createElement(
218
+ "i",
219
+ {
220
+ className: mode === "single_agent_skill_mode" ? styles.iconZengjiaDisabled : styles.iconZengjiaNormal,
221
+ onClick: () => {
222
+ var _a;
223
+ if (mode !== "single_agent_skill_mode" && fileInputRef.current) {
224
+ (_a = fileInputRef.current) == null ? void 0 : _a.click();
225
+ }
226
+ }
227
+ }
228
+ ),
229
+ /* @__PURE__ */ import_react.default.createElement(
230
+ "input",
231
+ {
232
+ type: "file",
233
+ ref: fileInputRef,
234
+ onChange: handleFileSelect,
235
+ style: { display: "none" },
236
+ accept: "*/*",
237
+ disabled: fileUploading || mode === "single_agent_skill_mode"
238
+ }
239
+ )
240
+ ));
241
+ const EmptyState = (0, import_react.useMemo)(() => () => /* @__PURE__ */ import_react.default.createElement("div", { className: styles.emptyWrapper }, /* @__PURE__ */ import_react.default.createElement("img", { src: emptyStateImage, alt: "空状态图标", className: styles.emptyImg }), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.text(16), styles.weight(600), styles.textColor("#343434")) }, emptyStateText)), [emptyStateImage, emptyStateText]);
242
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.GlobalStyle, null), /* @__PURE__ */ import_react.default.createElement(import_markdown.default, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.wrapper }, navbarShow && /* @__PURE__ */ import_react.default.createElement(NavBar, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.messageContainer }, (messages == null ? void 0 : messages.length) ? /* @__PURE__ */ import_react.default.createElement(
243
+ import_x.Bubble.List,
244
+ {
245
+ roles: rolesObject,
246
+ items: messages.map((msg) => {
247
+ const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg;
248
+ return {
249
+ key: id,
250
+ role,
251
+ loading: status === import_XAiMessage.MessageStatus.init,
252
+ header: () => /* @__PURE__ */ import_react.default.createElement(ActionHeader, { thinks }),
253
+ content: (() => {
254
+ var _a, _b, _c;
255
+ if (type === "TextMessage") {
256
+ if (role === "user") {
257
+ return /* @__PURE__ */ import_react.default.createElement(
258
+ "div",
259
+ {
260
+ className: "markdown-body",
261
+ style: {
262
+ minWidth: 0,
263
+ maxWidth: 600
264
+ }
265
+ },
266
+ (_a = msg.content) == null ? void 0 : _a.text
267
+ );
268
+ }
269
+ const html = md.render(((_b = msg.content) == null ? void 0 : _b.text) || "");
270
+ const htmlString = (0, import_react_html_parser.default)(html);
271
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
272
+ "div",
273
+ {
274
+ className: "markdown-body",
275
+ style: {
276
+ minWidth: 0,
277
+ maxWidth: 600
278
+ }
279
+ },
280
+ htmlString
281
+ ));
282
+ }
283
+ if (type === "ImageMessage") {
284
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { minWidth: 0, maxWidth: 600 } }, /* @__PURE__ */ import_react.default.createElement("img", { src: (_c = msg.content) == null ? void 0 : _c.bytes, alt: "", style: { maxWidth: 680 } }));
285
+ }
286
+ if (type === "SuggestionMessage") {
287
+ return /* @__PURE__ */ import_react.default.createElement(
288
+ import_x.Prompts,
289
+ {
290
+ vertical: true,
291
+ items: msg.content,
292
+ onItemClick: (info) => {
293
+ onSuggestMessageClick == null ? void 0 : onSuggestMessageClick(info.data, id, "text");
294
+ if (info.data.description) {
295
+ onSend == null ? void 0 : onSend("text", info.data.description);
296
+ }
297
+ }
298
+ }
299
+ );
300
+ }
301
+ return null;
302
+ })(),
303
+ footer: () => {
304
+ return extra.noFooter ? null : role === import_XAiMessage.MessageRole.assistant && status !== import_XAiMessage.MessageStatus.failed && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(MessageFooter, { data: msg }));
305
+ }
306
+ };
307
+ })
308
+ }
309
+ ) : /* @__PURE__ */ import_react.default.createElement(EmptyState, null)), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.chatFooter }, /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.flex, styles.gap(8)) }, /* @__PURE__ */ import_react.default.createElement(
310
+ import_antd.Popover,
311
+ {
312
+ content: clearConfirmContent,
313
+ title: "确认清空对话",
314
+ trigger: "click",
315
+ open: clearPopoverVisible,
316
+ onOpenChange: setClearPopoverVisible
317
+ },
318
+ /* @__PURE__ */ import_react.default.createElement(
319
+ "div",
320
+ {
321
+ className: styles.clearBtn,
322
+ style: { border: "1px solid #E4E7EC", borderRadius: "50%", height: "35px", width: "35px" },
323
+ onClick: handleClear
324
+ },
325
+ /* @__PURE__ */ import_react.default.createElement(import_icons.ClearOutlined, { className: styles.text(16) })
326
+ )
327
+ ), /* @__PURE__ */ import_react.default.createElement(
328
+ import_x.Sender,
329
+ {
330
+ value: content,
331
+ className: styles.sendWrapper,
332
+ placeholder: "继续对话...",
333
+ disabled,
334
+ loading,
335
+ actions: (_, info) => {
336
+ const { SendButton, LoadingButton } = info.components;
337
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { size: "small" }, /* @__PURE__ */ import_react.default.createElement("div", { className: styles.w(20) }), mode !== "single_agent_skill_mode" && uploadButton, mode === "meta_agent_mode" && /* @__PURE__ */ import_react.default.createElement(
338
+ "div",
339
+ {
340
+ className: styles.flexCenterGap2,
341
+ style: { visibility: "hidden" }
342
+ },
343
+ /* @__PURE__ */ import_react.default.createElement("i", { className: styles.iconHuihuarenqun })
344
+ ), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.divider }), loading ? /* @__PURE__ */ import_react.default.createElement(LoadingButton, { onClick: handleStopGenerate, className: styles.stopButton }) : /* @__PURE__ */ import_react.default.createElement(
345
+ SendButton,
346
+ {
347
+ className: styles.sendButton,
348
+ type: "primary",
349
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.ArrowUpOutlined, { className: styles.text(20) }),
350
+ disabled
351
+ }
352
+ ));
353
+ },
354
+ onChange: (v) => {
355
+ setContent(v);
356
+ },
357
+ onSubmit: handleSend,
358
+ onCancel: () => {
359
+ handleStopGenerate();
360
+ }
361
+ }
362
+ )))));
363
+ };
364
+ var XAiChatbot_default = XAiChatbot;
365
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiChatbot/index.tsx"],
4
+ "sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Button,\n Space,\n Spin,\n Tooltip,\n Popover,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Sender,\n Prompts,\n} from '@ant-design/x';\nimport {\n ArrowUpOutlined,\n ClearOutlined,\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n thinks: any[];\n renderActionHeader?: (params: { thinks: any[]; expanded: boolean; onToggle: () => void }) => React.ReactNode;\n}\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [disabled, _setDisabled] = useState<boolean>(false); // 是否禁止输入\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [mode, _setMode] = useState<string>(''); // todo 模式\n const [fileUploading, setFileUploading] = useState(false); // 文件上传进度条\n const [clearPopoverVisible, setClearPopoverVisible] = useState(false); // 气泡卡片显隐藏\n const styles = useStyles();\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages }> = ({ data }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n </span>\n </Tooltip>\n ))}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages }> = ({ data }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // ActionHeader 组件\n const ActionHeader: React.FC<ActionHeaderProps> = ({ thinks = [], renderActionHeader }) => {\n const [expanded, setExpanded] = useState(false);\n if (!thinks || thinks.length === 0) return null;\n if (renderActionHeader) {\n return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });\n }\n // 默认渲染\n const first = thinks[0];\n const { name } = first;\n const icon = first?.icon || first?.extra?.icon;\n return (\n <div className={styles.actionHeaderWrapper}>\n { !expanded && (\n <div\n className={styles.actionHeaderItem}\n onClick={() => setExpanded((v) => !v)}\n >\n { icon && <img src={icon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span className={styles.actionHeaderText}>{name}</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n ) }\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n {thinks.map((action, idx) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n { thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n // 触发发送\n const handleSend = () => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.('text', content);\n setContent(''); // 发送后清空输入框内容\n }\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 文件上传按钮引用\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 停止生成\n const handleStopGenerate = () => {\n onStop?.();\n };\n\n // 选择文件\n const handleFileSelect = () => {};\n\n // 点击清除按钮\n const handleClear = () => {\n setClearPopoverVisible(true);\n };\n\n // 取消清除\n const cancelClear = () => {\n setClearPopoverVisible(false);\n };\n\n // 确认清除\n const confirmClear = () => {\n setContent('');\n onClear?.();\n setClearPopoverVisible(false);\n };\n\n // 清空按钮提示文案\n const clearConfirmContent = (\n <div className={styles.p('2px')}>\n <p className={clsx(styles.mb(14), styles.mt(0))}>确认清除所有聊天记录并重置会话!</p>\n <div className={styles.popoverFooter}>\n <Button size=\"small\" onClick={cancelClear}>\n 取消\n </Button>\n <Button size=\"small\" type=\"primary\" danger onClick={confirmClear}>\n 确认\n </Button>\n </div>\n </div>\n );\n\n // 自定义上传按钮\n const uploadButton = (\n <div className={styles.flexCenterGap2}>\n <Tooltip\n placement=\"top\"\n title={\n mode === 'single_agent_skill_mode' ? '工作流模式不支持上传文件' : '支持图片、文档等上传'\n }\n >\n {fileUploading\n ? (\n <Spin size=\"small\" />\n )\n : (\n <i\n className={\n mode === 'single_agent_skill_mode'\n ? styles.iconZengjiaDisabled\n : styles.iconZengjiaNormal\n }\n onClick={() => {\n if (mode !== 'single_agent_skill_mode' && fileInputRef.current) {\n fileInputRef.current?.click();\n }\n }}\n />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n accept=\"*/*\"\n disabled={fileUploading || mode === 'single_agent_skill_mode'}\n />\n </Tooltip>\n </div>\n );\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n roles={rolesObject}\n items={messages.map((msg: any) => {\n const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg as Messages;\n return {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => <ActionHeader thinks={thinks} />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 图片类型\n if (type === 'ImageMessage') {\n return (\n <div style={{ minWidth: 0, maxWidth: 600 }}>\n <img src={msg.content?.bytes} alt=\"\" style={{ maxWidth: 680 }} />\n </div>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n footer: (() => {\n return (\n extra.noFooter\n ? null\n : (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} />\n </>\n )\n )\n );\n }),\n };\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n <div className={styles.chatFooter}>\n <div className={clsx(styles.flex, styles.gap(8))}>\n {/* 清空按钮 */}\n <Popover\n content={clearConfirmContent}\n title=\"确认清空对话\"\n trigger=\"click\"\n open={clearPopoverVisible}\n onOpenChange={setClearPopoverVisible}\n >\n <div\n className={styles.clearBtn}\n style={{ border: '1px solid #E4E7EC', borderRadius: '50%', height: '35px', width: '35px' }}\n onClick={handleClear}\n >\n <ClearOutlined className={styles.text(16)} />\n </div>\n </Popover>\n {/* 普通文本输入 */}\n <Sender\n value={content}\n // submitType=\"shiftEnter\"\n className={styles.sendWrapper}\n placeholder=\"继续对话...\"\n disabled={disabled}\n loading={loading}\n actions={(_, info) => {\n const { SendButton, LoadingButton } = info.components;\n return (\n <Space size=\"small\">\n <div className={styles.w(20)} />\n\n {mode !== 'single_agent_skill_mode' && uploadButton}\n {mode === 'meta_agent_mode' && (\n <div\n className={styles.flexCenterGap2}\n style={{ visibility: 'hidden' }}\n >\n <i className={styles.iconHuihuarenqun} />\n </div>\n )}\n\n <div className={styles.divider} />\n\n {loading\n ? (\n <LoadingButton onClick={handleStopGenerate} className={styles.stopButton} />\n )\n : (\n <SendButton\n className={styles.sendButton}\n type=\"primary\"\n icon={<ArrowUpOutlined className={styles.text(20)} />}\n disabled={disabled}\n />\n )}\n </Space>\n );\n }}\n onChange={(v) => {\n setContent(v);\n }}\n onSubmit={handleSend}\n onCancel={() => {\n handleStopGenerate();\n }}\n />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
5
+ "mappings": "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",
6
+ "names": ["MarkdownIt", "React", "emptyIcon", "clsx", "arrowDown", "groupIcon", "arrowUp", "_a", "MarkdownGlobalStyle", "reactHtmlParser"]
7
+ }
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ export declare const useStyles: () => {
3
+ wrapper: string;
4
+ navbar: string;
5
+ userAvatar: string;
6
+ avatar: string;
7
+ title: string;
8
+ subtitle: string;
9
+ messageContainer: string;
10
+ emptyWrapper: string;
11
+ emptyImg: string;
12
+ message: string;
13
+ messageRight: string;
14
+ quickReplies: string;
15
+ replyItem: string;
16
+ highlight: string;
17
+ inputBar: string;
18
+ input: string;
19
+ sendWrapper: string;
20
+ stopButton: string;
21
+ sendButton: string;
22
+ uploadBtn: string;
23
+ clearBtn: string;
24
+ chatFooter: string;
25
+ flexCenterGap2: string;
26
+ iconHuihuarenqun: string;
27
+ popoverFooter: string;
28
+ divider: string;
29
+ flexCenterGap4: string;
30
+ iconZengjiaDisabled: string;
31
+ iconZengjiaNormal: string;
32
+ actionHeaderWrapper: string;
33
+ actionHeaderItem: string;
34
+ actionHeaderIcon: string;
35
+ actionHeaderText: string;
36
+ actionHeaderDetail: string;
37
+ actionDetailTitle: string;
38
+ actionHeaderDetailItem: string;
39
+ actionHeaderCost: string;
40
+ } & {
41
+ w: (width: string | number) => string;
42
+ h: (height: string | number) => string;
43
+ p: (padding: string) => string;
44
+ pb: (padding: string | number) => string;
45
+ pt: (padding: string | number) => string;
46
+ pl: (padding: string | number) => string;
47
+ pr: (padding: string | number) => string;
48
+ m: (margin: string) => string;
49
+ mb: (margin: string | number) => string;
50
+ mt: (margin: string | number) => string;
51
+ ml: (margin: string | number) => string;
52
+ mr: (margin: string | number) => string;
53
+ text: (size: string | number) => string;
54
+ weight: (size: number) => string;
55
+ textColor: (c: string) => string;
56
+ bg: (c: string) => string;
57
+ rs: (radius: string | number) => string;
58
+ gap: (g: string | number) => string;
59
+ flex: string;
60
+ flexCenter: string;
61
+ flexBetween: string;
62
+ flexColumn: string;
63
+ flex1: string;
64
+ cursor: (type: string) => string;
65
+ border: (color: string, width?: string) => string;
66
+ boxShadow: (shadow: string) => string;
67
+ transition: (property?: string, duration?: string) => string;
68
+ overflow: (type: string) => string;
69
+ position: (type: string) => string;
70
+ zIndex: (index: number) => string;
71
+ };
72
+ export declare const GlobalStyle: React.FC;