@mybricks/plugin-ai 0.0.1 → 0.0.3

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 (203) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +164 -0
  2. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/dist/agents/app.js +335 -0
  4. package/dist/agents/app.js.map +1 -0
  5. package/dist/agents/common.js +483 -0
  6. package/dist/agents/common.js.map +1 -0
  7. package/dist/agents/custom.js +16 -0
  8. package/dist/agents/custom.js.map +1 -0
  9. package/dist/agents/index.js +38 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/knowledges/knowledge-base.js +579 -0
  12. package/dist/agents/knowledges/knowledge-base.js.map +1 -0
  13. package/dist/agents/knowledges/knowledge-node.js +228 -0
  14. package/dist/agents/knowledges/knowledge-node.js.map +1 -0
  15. package/dist/agents/knowledges/types.js +105 -0
  16. package/dist/agents/knowledges/types.js.map +1 -0
  17. package/dist/agents/utils/config.js +229 -0
  18. package/dist/agents/utils/config.js.map +1 -0
  19. package/dist/agents/workspace/coding-manager.js +20 -0
  20. package/dist/agents/workspace/coding-manager.js.map +1 -0
  21. package/dist/agents/workspace/components-manager.js +113 -0
  22. package/dist/agents/workspace/components-manager.js.map +1 -0
  23. package/dist/agents/workspace/outline-focus.js +167 -0
  24. package/dist/agents/workspace/outline-focus.js.map +1 -0
  25. package/dist/agents/workspace/outline-info.js +430 -0
  26. package/dist/agents/workspace/outline-info.js.map +1 -0
  27. package/dist/agents/workspace/page-tree-generator.js +70 -0
  28. package/dist/agents/workspace/page-tree-generator.js.map +1 -0
  29. package/dist/agents/workspace/workspace.js +251 -0
  30. package/dist/agents/workspace/workspace.js.map +1 -0
  31. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js +100 -0
  32. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js.map +1 -0
  33. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js +120 -0
  34. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js.map +1 -0
  35. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js +146 -0
  36. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js.map +1 -0
  37. package/dist/agents/workspace-by-knowledges/test.js +242 -0
  38. package/dist/agents/workspace-by-knowledges/test.js.map +1 -0
  39. package/dist/agents/workspace-by-knowledges/utils/components-manager.js +132 -0
  40. package/dist/agents/workspace-by-knowledges/utils/components-manager.js.map +1 -0
  41. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js +167 -0
  42. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js.map +1 -0
  43. package/dist/agents/workspace-by-knowledges/utils/outline-info.js +430 -0
  44. package/dist/agents/workspace-by-knowledges/utils/outline-info.js.map +1 -0
  45. package/dist/agents/workspace-by-knowledges/workspace.js +169 -0
  46. package/dist/agents/workspace-by-knowledges/workspace.js.map +1 -0
  47. package/dist/api/cloud-components.js +85 -0
  48. package/dist/api/cloud-components.js.map +1 -0
  49. package/dist/api-record-replay/manager.js +168 -0
  50. package/dist/api-record-replay/manager.js.map +1 -0
  51. package/dist/api-record-replay/recorder.js +107 -0
  52. package/dist/api-record-replay/recorder.js.map +1 -0
  53. package/dist/api-record-replay/replayer.js +136 -0
  54. package/dist/api-record-replay/replayer.js.map +1 -0
  55. package/dist/components/attachments/index.js +124 -0
  56. package/dist/components/attachments/index.js.map +1 -0
  57. package/dist/components/attachments/index.less.js +8 -0
  58. package/dist/components/attachments/index.less.js.map +1 -0
  59. package/dist/components/icons/index.js +112 -0
  60. package/dist/components/icons/index.js.map +1 -0
  61. package/dist/components/icons/index.less.js +8 -0
  62. package/dist/components/icons/index.less.js.map +1 -0
  63. package/dist/components/mention/index.js +19 -0
  64. package/dist/components/mention/index.js.map +1 -0
  65. package/dist/components/mention/index.less.js +8 -0
  66. package/dist/components/mention/index.less.js.map +1 -0
  67. package/dist/components/messages/index.js +429 -0
  68. package/dist/components/messages/index.js.map +1 -0
  69. package/dist/components/messages/index.less.js +8 -0
  70. package/dist/components/messages/index.less.js.map +1 -0
  71. package/dist/components/sender/index.js +244 -0
  72. package/dist/components/sender/index.js.map +1 -0
  73. package/dist/components/sender/index.less.js +8 -0
  74. package/dist/components/sender/index.less.js.map +1 -0
  75. package/dist/context/RequestStatusTracker.js +44 -0
  76. package/dist/context/RequestStatusTracker.js.map +1 -0
  77. package/dist/context/index.js +45 -0
  78. package/dist/context/index.js.map +1 -0
  79. package/dist/data.js +4 -0
  80. package/dist/data.js.map +1 -0
  81. package/dist/index.js +306 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js +27 -0
  84. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
  85. package/dist/plugin-ai/package.json.js +8 -0
  86. package/dist/plugin-ai/package.json.js.map +1 -0
  87. package/dist/plugin-ai/test/index.js +206 -0
  88. package/dist/plugin-ai/test/index.js.map +1 -0
  89. package/dist/preset/createTemplates.js +29 -0
  90. package/dist/preset/createTemplates.js.map +1 -0
  91. package/dist/preset/index.js +13 -0
  92. package/dist/preset/index.js.map +1 -0
  93. package/dist/preset/prompts.js +34 -0
  94. package/dist/preset/prompts.js.map +1 -0
  95. package/dist/preset/user.js +7 -0
  96. package/dist/preset/user.js.map +1 -0
  97. package/dist/requestAsStream.js +269 -0
  98. package/dist/requestAsStream.js.map +1 -0
  99. package/dist/rxai/node_modules/idb/build/index.js +277 -0
  100. package/dist/rxai/node_modules/idb/build/index.js.map +1 -0
  101. package/dist/rxai/src/agent/base.js +16 -0
  102. package/dist/rxai/src/agent/base.js.map +1 -0
  103. package/dist/rxai/src/agent/planning.js +1076 -0
  104. package/dist/rxai/src/agent/planning.js.map +1 -0
  105. package/dist/rxai/src/agent/rxai.js +254 -0
  106. package/dist/rxai/src/agent/rxai.js.map +1 -0
  107. package/dist/rxai/src/error/base.js +39 -0
  108. package/dist/rxai/src/error/base.js.map +1 -0
  109. package/dist/rxai/src/prompt/base.js +11 -0
  110. package/dist/rxai/src/prompt/base.js.map +1 -0
  111. package/dist/rxai/src/prompt/planning.js +23 -0
  112. package/dist/rxai/src/prompt/planning.js.map +1 -0
  113. package/dist/rxai/src/prompt/tool.js +14 -0
  114. package/dist/rxai/src/prompt/tool.js.map +1 -0
  115. package/dist/rxai/src/request/request.js +123 -0
  116. package/dist/rxai/src/request/request.js.map +1 -0
  117. package/dist/rxai/src/tool/getHistoryRecords.js +65 -0
  118. package/dist/rxai/src/tool/getHistoryRecords.js.map +1 -0
  119. package/dist/rxai/src/tool/util.js +424 -0
  120. package/dist/rxai/src/tool/util.js.map +1 -0
  121. package/dist/rxai/src/utils/events.js +43 -0
  122. package/dist/rxai/src/utils/events.js.map +1 -0
  123. package/dist/rxai/src/utils/idb.js +240 -0
  124. package/dist/rxai/src/utils/idb.js.map +1 -0
  125. package/dist/rxai/src/utils/retry.js +32 -0
  126. package/dist/rxai/src/utils/retry.js.map +1 -0
  127. package/dist/rxai/src/utils/uuid.js +7 -0
  128. package/dist/rxai/src/utils/uuid.js.map +1 -0
  129. package/dist/startView/components/header/header.js +12 -0
  130. package/dist/startView/components/header/header.js.map +1 -0
  131. package/dist/startView/components/header/header.less.js +8 -0
  132. package/dist/startView/components/header/header.less.js.map +1 -0
  133. package/dist/startView/index.js +62 -0
  134. package/dist/startView/index.js.map +1 -0
  135. package/dist/startView/index.less.js +8 -0
  136. package/dist/startView/index.less.js.map +1 -0
  137. package/dist/tools/analyze-and-expand-prd.js +116 -0
  138. package/dist/tools/analyze-and-expand-prd.js.map +1 -0
  139. package/dist/tools/analyze-requirement-and-components.js +208 -0
  140. package/dist/tools/analyze-requirement-and-components.js.map +1 -0
  141. package/dist/tools/answer.js +33 -0
  142. package/dist/tools/answer.js.map +1 -0
  143. package/dist/tools/build-process.js +550 -0
  144. package/dist/tools/build-process.js.map +1 -0
  145. package/dist/tools/coding-subagent-as-tool.js +101 -0
  146. package/dist/tools/coding-subagent-as-tool.js.map +1 -0
  147. package/dist/tools/generate-ui-content.js +528 -0
  148. package/dist/tools/generate-ui-content.js.map +1 -0
  149. package/dist/tools/index.js +31 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/open-dsl.js +49 -0
  152. package/dist/tools/open-dsl.js.map +1 -0
  153. package/dist/tools/refactor-ui-content.js +292 -0
  154. package/dist/tools/refactor-ui-content.js.map +1 -0
  155. package/dist/tools/utils.js +832 -0
  156. package/dist/tools/utils.js.map +1 -0
  157. package/dist/types/index.js +8 -0
  158. package/dist/types/index.js.map +1 -0
  159. package/dist/view/components/header/header.js +59 -0
  160. package/dist/view/components/header/header.js.map +1 -0
  161. package/dist/view/components/header/header.less.js +8 -0
  162. package/dist/view/components/header/header.less.js.map +1 -0
  163. package/dist/view/index.js +184 -0
  164. package/dist/view/index.js.map +1 -0
  165. package/dist/view/index.less.js +8 -0
  166. package/dist/view/index.less.js.map +1 -0
  167. package/package.json +33 -6
  168. package/src/agents/app.ts +0 -173
  169. package/src/agents/common.ts +0 -111
  170. package/src/agents/index.ts +0 -7
  171. package/src/components/icons/index.less +0 -8
  172. package/src/components/icons/index.tsx +0 -24
  173. package/src/components/messages/index.less +0 -806
  174. package/src/components/messages/index.tsx +0 -236
  175. package/src/context/index.ts +0 -21
  176. package/src/data.ts +0 -5
  177. package/src/index.tsx +0 -84
  178. package/src/mock.ts +0 -1267
  179. package/src/startView/index.less +0 -216
  180. package/src/startView/index.tsx +0 -229
  181. package/src/tools/analyze-and-expand-prd.ts +0 -166
  182. package/src/tools/answer-user.ts +0 -35
  183. package/src/tools/focus-element.ts +0 -47
  184. package/src/tools/generate-page.ts +0 -750
  185. package/src/tools/get-component-info-by-ids.ts +0 -166
  186. package/src/tools/get-component-info.ts +0 -53
  187. package/src/tools/get-components-doc-and-prd.ts +0 -137
  188. package/src/tools/get-focus-mybricks-dsl.ts +0 -26
  189. package/src/tools/get-mybricks-dsl.ts +0 -73
  190. package/src/tools/index.ts +0 -25
  191. package/src/tools/modify-component.ts +0 -385
  192. package/src/tools/type.d.ts +0 -12
  193. package/src/tools/utils.ts +0 -62
  194. package/src/types.d.ts +0 -65
  195. package/src/view/components/header/header.less +0 -17
  196. package/src/view/components/header/header.tsx +0 -15
  197. package/src/view/components/index.ts +0 -3
  198. package/src/view/components/messages/messages.less +0 -228
  199. package/src/view/components/messages/messages.tsx +0 -172
  200. package/src/view/components/sender/sender.less +0 -44
  201. package/src/view/components/sender/sender.tsx +0 -62
  202. package/src/view/index.less +0 -5
  203. package/src/view/index.tsx +0 -18
@@ -0,0 +1,429 @@
1
+ import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import React, { useRef, useState, useLayoutEffect, useEffect } from 'react';
3
+ import classNames from 'classnames';
4
+ import markdownit from 'markdown-it';
5
+ import { Loading, Chat, Success } from '../icons/index.js';
6
+ import { AttachmentsList } from '../attachments/index.js';
7
+ import { MentionTag } from '../mention/index.js';
8
+ import { Sender } from '../sender/index.js';
9
+ import { context } from '../../context/index.js';
10
+ import css from './index.less.js';
11
+
12
+ var md = markdownit();
13
+ var Messages = params => {
14
+ var {
15
+ user,
16
+ rxai,
17
+ copilot,
18
+ onSend,
19
+ onMentionClick
20
+ } = params;
21
+ var mainRef = useRef(null);
22
+ var destroysRef = useRef([]);
23
+ var [plans, setPlans] = useState([]);
24
+ var [styleTag] = useState(() => {
25
+ var styleTag = document.createElement('style');
26
+ document.head.appendChild(styleTag);
27
+ var prefix = ".".concat(css['ai-chat-messages'], " .").concat(css['chat-bubble-container'], ":nth-last-child(1)");
28
+ return {
29
+ setStyle: height => {
30
+ styleTag.innerHTML = "".concat(prefix, " {\n min-height: ").concat(height - 1, "px;\n }");
31
+ },
32
+ remove: () => {
33
+ document.head.removeChild(styleTag);
34
+ }
35
+ };
36
+ });
37
+ useLayoutEffect(() => {
38
+ destroysRef.current.push(rxai.events.on('plan', plans => {
39
+ setPlans([...plans]);
40
+ }, true));
41
+ styleTag.setStyle(mainRef.current.clientHeight);
42
+ }, []);
43
+ useEffect(() => {
44
+ var autoScroller = new AutoScroller(mainRef.current, {
45
+ resizeObserverCallback: () => {
46
+ var _mainRef$current;
47
+ var height = (_mainRef$current = mainRef.current) === null || _mainRef$current === void 0 ? void 0 : _mainRef$current.clientHeight;
48
+ if (height && height > 0) {
49
+ styleTag.setStyle(height);
50
+ }
51
+ },
52
+ mutationCallback: mutations => {
53
+ var mutationRecord = mutations[0];
54
+ if (mutationRecord.target === mainRef.current && mutationRecord.addedNodes.length) {
55
+ mainRef.current.scrollTop = mainRef.current.scrollHeight;
56
+ }
57
+ }
58
+ });
59
+ return () => {
60
+ autoScroller.destroy();
61
+ for (var destroy of destroysRef.current) {
62
+ destroy();
63
+ }
64
+ };
65
+ }, []);
66
+ return /*#__PURE__*/React.createElement("main", {
67
+ ref: mainRef,
68
+ className: css['ai-chat-messages']
69
+ }, plans.map((plan, index) => {
70
+ return /*#__PURE__*/React.createElement(Bubble, {
71
+ key: plan.id,
72
+ user: user,
73
+ plan: plan,
74
+ copilot: copilot,
75
+ onSend: onSend,
76
+ onMentionClick: onMentionClick
77
+ });
78
+ }));
79
+ };
80
+ var Bubble = params => {
81
+ var {
82
+ user,
83
+ plan,
84
+ copilot,
85
+ onSend,
86
+ onMentionClick
87
+ } = params;
88
+ var [userMessage, setUserMessage] = useState();
89
+ var destroysRef = useRef([]);
90
+ useLayoutEffect(() => {
91
+ destroysRef.current.push(plan.events.on('userMessage', userMessage => {
92
+ setUserMessage(userMessage);
93
+ }));
94
+ }, []);
95
+ useEffect(() => {
96
+ return () => {
97
+ for (var destroy of destroysRef.current) {
98
+ destroy();
99
+ }
100
+ };
101
+ }, []);
102
+ return userMessage && /*#__PURE__*/React.createElement("div", {
103
+ className: css['chat-bubble-container']
104
+ }, /*#__PURE__*/React.createElement(BubbleUser, {
105
+ user: user,
106
+ message: userMessage,
107
+ plan: plan,
108
+ onMentionClick: onMentionClick
109
+ }), /*#__PURE__*/React.createElement(BubbleCopilot, {
110
+ copilot: copilot,
111
+ plan: plan
112
+ }), /*#__PURE__*/React.createElement(BubbleAction, {
113
+ plan: plan,
114
+ onSend: onSend
115
+ }));
116
+ };
117
+ var BubbleAction = props => {
118
+ var _mentions;
119
+ var {
120
+ plan,
121
+ onSend: _onSend
122
+ } = props;
123
+ var destroysRef = useRef([]);
124
+ var [status, setStatus] = useState();
125
+ var [showRender, setShowRender] = useState(false);
126
+ var senderRef = useRef(null);
127
+ useLayoutEffect(() => {
128
+ destroysRef.current.push(plan.events.on('status', status => {
129
+ setStatus(status);
130
+ }, true));
131
+ }, []);
132
+ useEffect(() => {
133
+ return () => {
134
+ for (var destroy of destroysRef.current) {
135
+ destroy();
136
+ }
137
+ };
138
+ }, []);
139
+ useEffect(() => {
140
+ if (showRender) {
141
+ senderRef.current.setMentions(plan.extension.mentions || []);
142
+ senderRef.current.focus();
143
+ }
144
+ }, [showRender]);
145
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
146
+ className: css['chat-bubble-action']
147
+ }, status !== "pending" && _onSend && ((_mentions = plan.extension.mentions) === null || _mentions === void 0 || (_mentions = _mentions[0]) === null || _mentions === void 0 ? void 0 : _mentions.pageId) && /*#__PURE__*/React.createElement("div", {
148
+ className: classNames(css['chat-bubble-action-chat'], {
149
+ [css['focus']]: showRender
150
+ }),
151
+ "data-mybricks-tip": "基于本次回答继续对话",
152
+ onClick: () => {
153
+ setShowRender(!showRender);
154
+ }
155
+ }, /*#__PURE__*/React.createElement(Chat, null))), showRender && /*#__PURE__*/React.createElement(Sender, {
156
+ ref: senderRef,
157
+ placeholder: "\u60A8\u597D\uFF0C\u6211\u662F".concat(context.name, "\uFF0C\u8BF7\u8BE6\u7EC6\u63CF\u8FF0\u60A8\u7684\u9700\u6C42"),
158
+ onSend: params => {
159
+ _onSend(_objectSpread2(_objectSpread2({}, params), {}, {
160
+ insertAfter: plan
161
+ }));
162
+ setShowRender(false);
163
+ }
164
+ }));
165
+ };
166
+ var BubbleMessage = params => {
167
+ var {
168
+ message
169
+ } = params;
170
+ var messageRef = useRef(null);
171
+ useEffect(() => {
172
+ messageRef.current.innerHTML = md.render(message);
173
+ }, [message]);
174
+ return /*#__PURE__*/React.createElement("span", {
175
+ ref: messageRef
176
+ });
177
+ };
178
+ var BubbleUser = params => {
179
+ var _plan$extension;
180
+ var {
181
+ user,
182
+ message,
183
+ plan,
184
+ onMentionClick
185
+ } = params;
186
+ var mentions = ((_plan$extension = plan.extension) === null || _plan$extension === void 0 ? void 0 : _plan$extension.mentions) || [];
187
+ var content = "";
188
+ var attachments = [];
189
+ if (typeof message.content === "string") {
190
+ content = message.content;
191
+ } else {
192
+ message.content.forEach(item => {
193
+ if (item.type === "text") {
194
+ content = item.text;
195
+ } else if (item.type === "image_url") {
196
+ attachments.push({
197
+ type: "image",
198
+ content: item.image_url.url
199
+ });
200
+ }
201
+ });
202
+ }
203
+ return /*#__PURE__*/React.createElement("article", {
204
+ className: css['chat-bubble']
205
+ }, /*#__PURE__*/React.createElement("header", {
206
+ className: css['chat-bubble-header']
207
+ }, /*#__PURE__*/React.createElement("span", {
208
+ className: css['chat-bubble-header-avatar']
209
+ }, /*#__PURE__*/React.createElement("img", {
210
+ className: css['user-avatar'],
211
+ src: user.avatar
212
+ })), /*#__PURE__*/React.createElement("span", {
213
+ className: css['chat-bubble-header-name']
214
+ }, user.name)), /*#__PURE__*/React.createElement("section", {
215
+ className: classNames(css['chat-message-container'], css['user-message'], {
216
+ [css['mention']]: mentions.length
217
+ })
218
+ }, mentions.length ? /*#__PURE__*/React.createElement(MentionTag, {
219
+ mention: mentions[0],
220
+ focusarea: true,
221
+ onClick: onMentionClick
222
+ }) : null, /*#__PURE__*/React.createElement("span", null, content), attachments.length ? /*#__PURE__*/React.createElement(AttachmentsList, {
223
+ className: css['attachments-list'],
224
+ attachments: attachments
225
+ }) : null));
226
+ };
227
+ var BubbleCopilot = params => {
228
+ var {
229
+ copilot,
230
+ plan
231
+ } = params;
232
+ var destroysRef = useRef([]);
233
+ var [loading, setLoading] = useState(false);
234
+ var [streamMessage, setStreamMessage] = useState("");
235
+ var [summary, setSummary] = useState("");
236
+ var [commands, setCommands] = useState([]);
237
+ var [error, setError] = useState("");
238
+ var [planningMessage, setPlanningMessage] = useState("");
239
+ useLayoutEffect(() => {
240
+ destroysRef.current.push(plan.events.on('loading', loading => {
241
+ setLoading(loading);
242
+ }), plan.events.on('streamMessage', chunk => {
243
+ setStreamMessage(streamMessage => {
244
+ return streamMessage + chunk;
245
+ });
246
+ }), plan.events.on('summary', summary => {
247
+ setSummary(summary);
248
+ }), plan.events.on('commands', commands => {
249
+ setCommands([...commands]);
250
+ setStreamMessage("");
251
+ }), plan.events.on('error', error => {
252
+ setError(error);
253
+ }), plan.events.on('planningMessage', planningMessage => {
254
+ setPlanningMessage(planningMessage);
255
+ }));
256
+ }, []);
257
+ useEffect(() => {
258
+ return () => {
259
+ for (var destroy of destroysRef.current) {
260
+ destroy();
261
+ }
262
+ };
263
+ }, []);
264
+ return /*#__PURE__*/React.createElement("article", {
265
+ className: css['chat-bubble']
266
+ }, /*#__PURE__*/React.createElement("header", {
267
+ className: css['chat-bubble-header']
268
+ }, /*#__PURE__*/React.createElement("span", {
269
+ className: css['chat-bubble-header-name']
270
+ }, copilot.name)), /*#__PURE__*/React.createElement("section", {
271
+ className: classNames(css['chat-message-container'], css['ai-message'])
272
+ }, /*#__PURE__*/React.createElement("div", {
273
+ className: css['markdown-body']
274
+ }, /*#__PURE__*/React.createElement("div", {
275
+ className: css['think']
276
+ }, planningMessage ? /*#__PURE__*/React.createElement(BubbleMessage, {
277
+ message: "".concat(planningMessage).concat(loading ? "..." : "")
278
+ }) : loading ? /*#__PURE__*/React.createElement("span", null, "\u6B63\u5728\u601D\u8003") : null, loading && !planningMessage && /*#__PURE__*/React.createElement(Loading, null)), commands.map((command, index) => {
279
+ if (!command.status || command.status === "error") {
280
+ return null;
281
+ }
282
+ return /*#__PURE__*/React.createElement(BubbleCopilotTool, {
283
+ key: index + command.status,
284
+ command: command,
285
+ last: index === commands.length - 1
286
+ });
287
+ }), error && /*#__PURE__*/React.createElement(BubbleError, {
288
+ message: error,
289
+ plan: plan
290
+ }), summary && /*#__PURE__*/React.createElement(BubbleMessage, {
291
+ message: summary
292
+ }))));
293
+ };
294
+ var BubbleCopilotTool = params => {
295
+ var {
296
+ command,
297
+ last
298
+ } = params;
299
+ var [message, setMessage] = useState("");
300
+ var [expand, setExpand] = useState(false);
301
+ useEffect(() => {
302
+ var _command$events;
303
+ if (command.status === "success") {
304
+ setMessage(command.content.display || command.content.llm);
305
+ if (last) {
306
+ setExpand(true);
307
+ }
308
+ }
309
+ var destory = (_command$events = command.events) === null || _command$events === void 0 ? void 0 : _command$events.on("streamMessage", _ref => {
310
+ var {
311
+ message,
312
+ status
313
+ } = _ref;
314
+ setMessage(message);
315
+ if (status === "start") {
316
+ setExpand(true);
317
+ } else if (status === "complete") {
318
+ if (!last) {
319
+ setExpand(false);
320
+ }
321
+ }
322
+ });
323
+ return () => {
324
+ destory === null || destory === void 0 || destory();
325
+ };
326
+ }, []);
327
+ var renderMessage = shouldRender => shouldRender && message ? /*#__PURE__*/React.createElement("div", {
328
+ className: css['ai-chat-collapsible-response'],
329
+ style: {
330
+ display: expand ? "block" : "none"
331
+ }
332
+ }, /*#__PURE__*/React.createElement(BubbleMessage, {
333
+ message: message
334
+ })) : null;
335
+ return /*#__PURE__*/React.createElement(React.Fragment, null, renderMessage(command.status === "pending"), /*#__PURE__*/React.createElement("div", {
336
+ className: classNames(css['ai-chat-collapsible-code-block'], css['collapsed']),
337
+ onClick: () => {
338
+ if (command.status !== "pending") {
339
+ setExpand(expand => !expand);
340
+ }
341
+ }
342
+ }, /*#__PURE__*/React.createElement("span", {
343
+ className: classNames(css['code-header'], css['collapsed'])
344
+ }, /*#__PURE__*/React.createElement("span", {
345
+ className: classNames(css['code-title'], css['collapsed'])
346
+ }, command.tool.displayName || command.tool.name), command.status === "pending" && /*#__PURE__*/React.createElement("span", {
347
+ className: classNames(css['code-title-status'], css['collapsed'], css['pending'])
348
+ }, /*#__PURE__*/React.createElement(Loading, null)), command.status === "success" && /*#__PURE__*/React.createElement("span", {
349
+ className: classNames(css['code-title-status'], css['collapsed'], css['success'])
350
+ }, /*#__PURE__*/React.createElement(Success, null)))), renderMessage(command.status === "success"));
351
+ };
352
+ var BubbleError = params => {
353
+ var {
354
+ message,
355
+ plan
356
+ } = params;
357
+ return /*#__PURE__*/React.createElement("div", {
358
+ className: css['ai-chat-error-code-block']
359
+ }, /*#__PURE__*/React.createElement("div", {
360
+ className: css['ai-chat-error-code-block-message']
361
+ }, /*#__PURE__*/React.createElement("span", null, message)), !plan.enableRetry ? null : /*#__PURE__*/React.createElement("div", {
362
+ className: css['ai-chat-error-code-block-retry'],
363
+ onClick: () => plan.retry()
364
+ }, "\u91CD\u8BD5"));
365
+ };
366
+ class AutoScroller {
367
+ constructor(container, options) {
368
+ _defineProperty(this, "isLockedToBottom", true);
369
+ _defineProperty(this, "resizeObserver", null);
370
+ _defineProperty(this, "mutationObserver", null);
371
+ this.container = container;
372
+ this.options = options;
373
+ this.isLockedToBottom = true;
374
+ this.init();
375
+ }
376
+ init() {
377
+ // 监听滚动事件
378
+ this.container.addEventListener('scroll', this.handleScroll.bind(this));
379
+
380
+ // 使用ResizeObserver监听内容大小变化
381
+ this.resizeObserver = new ResizeObserver((entries, observer) => {
382
+ if (this.isLockedToBottom) {
383
+ this.scrollToBottom();
384
+ }
385
+ this.options.resizeObserverCallback(entries, observer);
386
+ });
387
+
388
+ // 监听容器内部元素大小变化
389
+ this.resizeObserver.observe(this.container);
390
+
391
+ // 同时监听DOM变化
392
+ this.mutationObserver = new MutationObserver((mutations, observer) => {
393
+ if (this.isLockedToBottom) {
394
+ Promise.resolve().then(() => {
395
+ this.scrollToBottom();
396
+ });
397
+ }
398
+ this.options.mutationCallback(mutations, observer);
399
+ });
400
+ this.mutationObserver.observe(this.container, {
401
+ childList: true,
402
+ subtree: true
403
+ });
404
+ }
405
+ handleScroll() {
406
+ var isAtBottom = this.isAtBottom();
407
+ this.isLockedToBottom = isAtBottom;
408
+ }
409
+ isAtBottom() {
410
+ var threshold = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
411
+ var {
412
+ scrollTop,
413
+ scrollHeight,
414
+ clientHeight
415
+ } = this.container;
416
+ return Math.abs(scrollHeight - scrollTop - clientHeight) <= threshold;
417
+ }
418
+ scrollToBottom() {
419
+ this.container.scrollTop = this.container.scrollHeight;
420
+ }
421
+ destroy() {
422
+ if (this.mutationObserver) this.mutationObserver.disconnect();
423
+ if (this.resizeObserver) this.resizeObserver.disconnect();
424
+ this.container.removeEventListener('scroll', this.handleScroll);
425
+ }
426
+ }
427
+
428
+ export { Messages };
429
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/messages/index.tsx"],"sourcesContent":["import React, { useRef, useState, useEffect, useLayoutEffect } from \"react\"\nimport classNames from \"classnames\"\nimport { Rxai } from \"@mybricks/rxai\"\nimport markdownit from 'markdown-it'\nimport { Extension } from \"../types\";\nimport { Loading, Success, Chat } from \"../icons\";\nimport { AttachmentsList } from \"../attachments\";\nimport { MentionTag } from \"../mention\";\nimport { Mention } from \"../types\";\nimport { Sender, SenderRef, SenderProps } from \"../sender\";\nimport { context } from \"../../context\";\nimport css from \"./index.less\"\n\nconst md = markdownit()\n\ninterface User {\n /** 名称 */\n name: string;\n /** 头像地址 */\n avatar: string;\n}\n\ninterface MessagesParams {\n /** 用户信息 */\n user: User;\n /** ai助手信息 */\n copilot: User;\n\n rxai: Rxai;\n\n onMentionClick?: (mention: Mention) => void;\n\n onSend?: SenderProps['onSend'];\n}\n\ntype Plans = Rxai['cacheMessages'];\n\nconst Messages = (params: MessagesParams) => {\n const { user, rxai, copilot, onSend, onMentionClick } = params;\n\n const mainRef = useRef<HTMLElement>(null);\n const destroysRef = useRef<(() => void)[]>([]);\n const [plans, setPlans] = useState<Plans>([]);\n\n const [styleTag] = useState(() => {\n const styleTag = document.createElement('style')\n document.head.appendChild(styleTag)\n const prefix = `.${css['ai-chat-messages']} .${css['chat-bubble-container']}:nth-last-child(1)`;\n return {\n setStyle: (height: number) => {\n styleTag.innerHTML = `${prefix} {\n min-height: ${height - 1}px;\n }`\n },\n remove: () => {\n document.head.removeChild(styleTag);\n }\n };\n })\n\n useLayoutEffect(() => {\n destroysRef.current.push(rxai.events.on('plan', (plans) => {\n setPlans([...plans])\n }, true))\n\n styleTag.setStyle(mainRef.current!.clientHeight);\n }, [])\n\n useEffect(() => {\n const autoScroller = new AutoScroller(mainRef.current!, {\n resizeObserverCallback: () => {\n const height = mainRef.current?.clientHeight;\n if (height && height > 0) {\n styleTag.setStyle(height)\n }\n },\n mutationCallback: (mutations) => {\n const mutationRecord = mutations[0];\n\n if (mutationRecord.target === mainRef.current && mutationRecord.addedNodes.length) {\n mainRef.current!.scrollTop = mainRef.current!.scrollHeight;\n }\n }\n });\n \n return () => {\n autoScroller.destroy();\n\n for (const destroy of destroysRef.current) {\n destroy()\n }\n }\n }, [])\n\n return (\n <main ref={mainRef} className={css['ai-chat-messages']}>\n {plans.map((plan, index) => {\n return (\n <Bubble\n key={plan.id}\n user={user}\n plan={plan}\n copilot={copilot}\n onSend={onSend}\n onMentionClick={onMentionClick}\n />\n )\n })}\n </main>\n )\n}\n\ntype Plan = Rxai['cacheMessages'][number];\n\ninterface BubbleParams {\n user: User;\n copilot: User;\n plan: Plan;\n onSend?: SenderProps['onSend'];\n onMentionClick?: (mention: Mention) => void;\n}\nconst Bubble = (params: BubbleParams) => {\n const { user, plan, copilot, onSend, onMentionClick } = params;\n const [userMessage, setUserMessage] = useState<ReturnType<Plan['getUserMessage']>>();\n const destroysRef = useRef<(() => void)[]>([]);\n\n useLayoutEffect(() => {\n destroysRef.current.push(\n plan.events.on('userMessage', (userMessage) => {\n setUserMessage(userMessage);\n }),\n )\n }, [])\n\n useEffect(() => {\n return () => {\n for (const destroy of destroysRef.current) {\n destroy()\n }\n }\n }, [])\n\n return userMessage && (\n <div className={css['chat-bubble-container']}>\n <BubbleUser user={user} message={userMessage} plan={plan} onMentionClick={onMentionClick}/>\n <BubbleCopilot copilot={copilot} plan={plan}/>\n <BubbleAction plan={plan} onSend={onSend}/>\n </div>\n )\n}\n\nconst BubbleAction = (props: { plan: Plan, onSend?: SenderProps['onSend']; }) => {\n const { plan, onSend } = props;\n\n const destroysRef = useRef<(() => void)[]>([]);\n const [status, setStatus] = useState<Plan['status']>();\n const [showRender, setShowRender] = useState(false);\n const senderRef = useRef<SenderRef>(null);\n\n useLayoutEffect(() => {\n destroysRef.current.push(\n plan.events.on('status', (status) => {\n setStatus(status)\n }, true),\n )\n }, [])\n\n useEffect(() => {\n return () => {\n for (const destroy of destroysRef.current) {\n destroy()\n }\n }\n }, [])\n\n useEffect(() => {\n if (showRender) {\n senderRef.current!.setMentions((plan.extension as any).mentions || []);\n senderRef.current!.focus();\n }\n }, [showRender])\n\n return (\n <>\n <div className={css['chat-bubble-action']}>\n {/* TODO 兼容处理,没有pageId,不允许追加 */}\n {status !== \"pending\" && onSend && (plan.extension as any).mentions?.[0]?.pageId && <div\n className={classNames(css['chat-bubble-action-chat'], {\n [css['focus']]: showRender\n })}\n data-mybricks-tip={\"基于本次回答继续对话\"}\n onClick={() => {\n setShowRender(!showRender);\n }}\n >\n <Chat />\n </div>}\n </div>\n {showRender && (\n <Sender\n ref={senderRef}\n placeholder={`您好,我是${context.name},请详细描述您的需求`}\n onSend={(params) => {\n onSend!({...params, insertAfter: plan});\n setShowRender(false);\n }}\n />\n )}\n </>\n )\n}\n\ninterface BubbleMessageParams {\n message: string;\n}\nconst BubbleMessage = (params: BubbleMessageParams) => {\n const { message } = params;\n const messageRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n messageRef.current!.innerHTML = md.render(message);\n }, [message])\n\n return <span ref={messageRef} />\n}\n\ninterface BubbleUserParams {\n user: User;\n message: ReturnType<Plan['getUserMessage']>\n plan: Plan;\n onMentionClick?: (mention: Mention) => void;\n}\n\nconst BubbleUser = (params: BubbleUserParams) => {\n const { user, message, plan, onMentionClick } = params;\n const mentions = (plan.extension as Extension)?.mentions || [];\n let content = \"\";\n let attachments: Plan[\"options\"][\"attachments\"] = [];\n\n if (typeof message.content === \"string\") {\n content = message.content\n } else {\n message.content.forEach((item: any) => {\n if (item.type === \"text\") {\n content = item.text\n } else if (item.type === \"image_url\") {\n attachments.push({\n type: \"image\",\n content: item.image_url.url\n });\n }\n })\n }\n\n return (\n <article className={css['chat-bubble']}>\n <header className={css['chat-bubble-header']}>\n <span className={css['chat-bubble-header-avatar']}>\n <img className={css['user-avatar']} src={user.avatar} />\n </span>\n <span className={css['chat-bubble-header-name']}>{user.name}</span>\n </header>\n <section className={classNames(css['chat-message-container'], css['user-message'], {\n [css['mention']]: mentions.length\n })}>\n {mentions.length ? (\n <MentionTag mention={mentions[0]} focusarea={true} onClick={onMentionClick}/>\n ) : null}\n <span>\n {content}\n </span>\n {attachments.length ? (\n <AttachmentsList className={css['attachments-list']} attachments={attachments}/>\n ) : null}\n </section>\n </article>\n )\n}\n\ninterface BubbleCopilotParams {\n copilot: User;\n plan: Plan;\n}\nconst BubbleCopilot = (params: BubbleCopilotParams) => {\n const { copilot, plan } = params;\n const destroysRef = useRef<(() => void)[]>([]);\n const [loading, setLoading] = useState(false);\n const [streamMessage, setStreamMessage] = useState(\"\");\n const [summary, setSummary] = useState(\"\");\n const [commands, setCommands] = useState<Plan['commands']>([]);\n const [error, setError] = useState(\"\");\n const [planningMessage, setPlanningMessage] = useState(\"\")\n\n useLayoutEffect(() => {\n destroysRef.current.push(\n plan.events.on('loading', (loading) => {\n setLoading(loading);\n }),\n plan.events.on('streamMessage', (chunk) => {\n setStreamMessage((streamMessage) => {\n return streamMessage + chunk\n });\n }),\n plan.events.on('summary', (summary) => {\n setSummary(summary);\n }),\n plan.events.on('commands', (commands) => {\n setCommands([...commands]);\n setStreamMessage(\"\");\n }),\n plan.events.on('error', (error) => {\n setError(error);\n }),\n plan.events.on('planningMessage', (planningMessage) => {\n setPlanningMessage(planningMessage);\n })\n )\n }, [])\n\n useEffect(() => {\n return () => {\n for (const destroy of destroysRef.current) {\n destroy()\n }\n }\n }, [])\n\n return (\n <article className={css['chat-bubble']}>\n <header className={css['chat-bubble-header']}>\n {/* <span className={css['chat-bubble-header-avatar']}>\n <img className={css['copilot-avatar']} src={copilot.avatar} />\n </span> */}\n <span className={css['chat-bubble-header-name']}>{copilot.name}</span>\n </header>\n <section className={classNames(css['chat-message-container'], css['ai-message'])}>\n <div className={css['markdown-body']}>\n <div className={css['think']}>\n {planningMessage ? <BubbleMessage message={`${planningMessage}${loading ? \"...\" : \"\"}`} /> : (loading ? <span>正在思考</span> : null)}\n {loading && !planningMessage && <Loading />}\n </div>\n {commands.map((command, index) => {\n if (!command.status || command.status === \"error\") {\n return null;\n }\n return <BubbleCopilotTool key={index + command.status} command={command} last={index === commands.length - 1}/>\n })}\n {error && <BubbleError message={error} plan={plan}/>}\n {summary && <BubbleMessage message={summary} />}\n {/* {streamMessage && <BubbleMessage message={streamMessage} />} */}\n {/* {!streamMessage && loading && (\n <div className={css['think']}>\n <span>正在思考</span>\n <Loading />\n </div>\n )} */}\n </div>\n </section>\n </article>\n )\n}\n\ninterface BubbleCopilotToolParams {\n command: Plan['commands'][number];\n last: boolean;\n}\nconst BubbleCopilotTool = (params: BubbleCopilotToolParams) => {\n const { command, last } = params;\n const [message, setMessage] = useState(\"\");\n const [expand, setExpand] = useState(false);\n\n useEffect(() => {\n if (command.status === \"success\") {\n setMessage(command.content.display || command.content.llm)\n if (last) {\n setExpand(true)\n }\n }\n const destory = command.events?.on(\"streamMessage\", ({ message, status }) => {\n setMessage(message)\n if (status === \"start\") {\n setExpand(true)\n } else if (status === \"complete\") {\n if (!last) {\n setExpand(false)\n }\n }\n })\n\n return () => {\n destory?.();\n }\n }, [])\n\n const renderMessage = (shouldRender: boolean) =>\n shouldRender && message ? (\n <div\n className={css['ai-chat-collapsible-response']}\n style={{ display: expand ? \"block\" : \"none\" }}\n >\n <BubbleMessage message={message} />\n </div>\n ) : null;\n\n return (\n <>\n {renderMessage(command.status === \"pending\")}\n <div\n className={classNames(css['ai-chat-collapsible-code-block'], css['collapsed'])}\n onClick={() => {\n if (command.status !== \"pending\") {\n setExpand((expand) => !expand);\n }\n }}\n >\n <span className={classNames(css['code-header'], css['collapsed'])}>\n <span className={classNames(css['code-title'], css['collapsed'])}>{command.tool.displayName || command.tool.name}</span>\n {command.status === \"pending\" && (\n <span className={classNames(css['code-title-status'], css['collapsed'], css['pending'])}>\n <Loading />\n </span>\n )}\n {command.status === \"success\" && (\n <span className={classNames(css['code-title-status'], css['collapsed'], css['success'])}>\n <Success />\n </span>\n )}\n </span>\n </div>\n {renderMessage(command.status === \"success\")}\n </>\n )\n}\n\ninterface BubbleErrorParams {\n message: string;\n plan: Plan;\n}\nconst BubbleError = (params: BubbleErrorParams) => {\n const { message, plan } = params;\n\n return (\n <div className={css['ai-chat-error-code-block']}>\n <div className={css['ai-chat-error-code-block-message']}>\n <span>{message}</span>\n </div>\n {!plan.enableRetry ? null : (\n <div\n className={css['ai-chat-error-code-block-retry']}\n onClick={() => plan.retry()}\n >重试</div>\n )}\n </div>\n )\n}\n\nexport { Messages }\n\nclass AutoScroller {\n private isLockedToBottom: boolean = true;\n private resizeObserver: ResizeObserver | null = null;\n private mutationObserver: MutationObserver | null = null;\n constructor(private container: HTMLElement, private options: { resizeObserverCallback: ResizeObserverCallback, mutationCallback: MutationCallback }) {\n this.isLockedToBottom = true;\n \n this.init();\n }\n \n init() {\n // 监听滚动事件\n this.container.addEventListener('scroll', this.handleScroll.bind(this));\n \n // 使用ResizeObserver监听内容大小变化\n this.resizeObserver = new ResizeObserver((entries, observer) => {\n if (this.isLockedToBottom) {\n this.scrollToBottom();\n }\n this.options.resizeObserverCallback(entries, observer);\n });\n \n // 监听容器内部元素大小变化\n this.resizeObserver.observe(this.container);\n \n // 同时监听DOM变化\n this.mutationObserver = new MutationObserver((mutations, observer) => {\n if (this.isLockedToBottom) {\n Promise.resolve().then(() => {\n this.scrollToBottom();\n });\n }\n this.options.mutationCallback(mutations, observer);\n });\n \n this.mutationObserver.observe(this.container, {\n childList: true,\n subtree: true,\n });\n }\n \n handleScroll() {\n const isAtBottom = this.isAtBottom();\n this.isLockedToBottom = isAtBottom;\n }\n \n isAtBottom(threshold = 5) {\n const { scrollTop, scrollHeight, clientHeight } = this.container;\n return Math.abs(scrollHeight - scrollTop - clientHeight) <= threshold;\n }\n \n scrollToBottom() {\n this.container.scrollTop = this.container.scrollHeight;\n }\n \n destroy() {\n if (this.mutationObserver) this.mutationObserver.disconnect();\n if (this.resizeObserver) this.resizeObserver.disconnect();\n this.container.removeEventListener('scroll', this.handleScroll);\n }\n}\n"],"names":["md","markdownit","Messages","params","user","rxai","copilot","onSend","onMentionClick","mainRef","useRef","destroysRef","plans","setPlans","useState","styleTag","document","createElement","head","appendChild","prefix","concat","css","setStyle","height","innerHTML","remove","removeChild","useLayoutEffect","current","push","events","on","clientHeight","useEffect","autoScroller","AutoScroller","resizeObserverCallback","_mainRef$current","mutationCallback","mutations","mutationRecord","target","addedNodes","length","scrollTop","scrollHeight","destroy","React","ref","className","map","plan","index","Bubble","key","id","userMessage","setUserMessage","BubbleUser","message","BubbleCopilot","BubbleAction","props","_mentions","status","setStatus","showRender","setShowRender","senderRef","setMentions","extension","mentions","focus","Fragment","pageId","classNames","onClick","Chat","Sender","placeholder","context","name","_objectSpread","insertAfter","BubbleMessage","messageRef","render","_plan$extension","content","attachments","forEach","item","type","text","image_url","url","src","avatar","MentionTag","mention","focusarea","AttachmentsList","loading","setLoading","streamMessage","setStreamMessage","summary","setSummary","commands","setCommands","error","setError","planningMessage","setPlanningMessage","chunk","Loading","command","BubbleCopilotTool","last","BubbleError","setMessage","expand","setExpand","_command$events","display","llm","destory","_ref","renderMessage","shouldRender","style","tool","displayName","Success","enableRetry","retry","constructor","container","options","_defineProperty","isLockedToBottom","init","addEventListener","handleScroll","bind","resizeObserver","ResizeObserver","entries","observer","scrollToBottom","observe","mutationObserver","MutationObserver","Promise","resolve","then","childList","subtree","isAtBottom","threshold","arguments","undefined","Math","abs","disconnect","removeEventListener"],"mappings":";;;;;;;;;;;AAaA,IAAMA,EAAE,GAAGC,UAAU,EAAE;AAwBvB,IAAMC,QAAQ,GAAIC,MAAsB,IAAK;EAC3C,IAAM;IAAEC,IAAI;IAAEC,IAAI;IAAEC,OAAO;IAAEC,MAAM;AAAEC,IAAAA;AAAe,GAAC,GAAGL,MAAM;AAE9D,EAAA,IAAMM,OAAO,GAAGC,MAAM,CAAc,IAAI,CAAC;AACzC,EAAA,IAAMC,WAAW,GAAGD,MAAM,CAAiB,EAAE,CAAC;EAC9C,IAAM,CAACE,KAAK,EAAEC,QAAQ,CAAC,GAAGC,QAAQ,CAAQ,EAAE,CAAC;AAE7C,EAAA,IAAM,CAACC,QAAQ,CAAC,GAAGD,QAAQ,CAAC,MAAM;AAChC,IAAA,IAAMC,QAAQ,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;AAChDD,IAAAA,QAAQ,CAACE,IAAI,CAACC,WAAW,CAACJ,QAAQ,CAAC;AACnC,IAAA,IAAMK,MAAM,GAAA,GAAA,CAAAC,MAAA,CAAOC,GAAG,CAAC,kBAAkB,CAAC,EAAA,IAAA,CAAA,CAAAD,MAAA,CAAKC,GAAG,CAAC,uBAAuB,CAAC,EAAA,oBAAA,CAAoB;IAC/F,OAAO;MACLC,QAAQ,EAAGC,MAAc,IAAK;AAC5BT,QAAAA,QAAQ,CAACU,SAAS,GAAA,EAAA,CAAAJ,MAAA,CAAMD,MAAM,EAAA,4BAAA,CAAA,CAAAC,MAAA,CACdG,MAAM,GAAG,CAAC,EAAA,gBAAA,CACxB;MACJ,CAAC;MACDE,MAAM,EAAEA,MAAM;AACZV,QAAAA,QAAQ,CAACE,IAAI,CAACS,WAAW,CAACZ,QAAQ,CAAC;AACrC,MAAA;KACD;AACH,EAAA,CAAC,CAAC;AAEFa,EAAAA,eAAe,CAAC,MAAM;AACpBjB,IAAAA,WAAW,CAACkB,OAAO,CAACC,IAAI,CAACzB,IAAI,CAAC0B,MAAM,CAACC,EAAE,CAAC,MAAM,EAAGpB,KAAK,IAAK;AACzDC,MAAAA,QAAQ,CAAC,CAAC,GAAGD,KAAK,CAAC,CAAC;IACtB,CAAC,EAAE,IAAI,CAAC,CAAC;IAETG,QAAQ,CAACQ,QAAQ,CAACd,OAAO,CAACoB,OAAO,CAAEI,YAAY,CAAC;EAClD,CAAC,EAAE,EAAE,CAAC;AAENC,EAAAA,SAAS,CAAC,MAAM;IACd,IAAMC,YAAY,GAAG,IAAIC,YAAY,CAAC3B,OAAO,CAACoB,OAAO,EAAG;MACtDQ,sBAAsB,EAAEA,MAAM;AAAA,QAAA,IAAAC,gBAAA;AAC5B,QAAA,IAAMd,MAAM,GAAA,CAAAc,gBAAA,GAAG7B,OAAO,CAACoB,OAAO,MAAA,IAAA,IAAAS,gBAAA,KAAA,MAAA,GAAA,MAAA,GAAfA,gBAAA,CAAiBL,YAAY;AAC5C,QAAA,IAAIT,MAAM,IAAIA,MAAM,GAAG,CAAC,EAAE;AACxBT,UAAAA,QAAQ,CAACQ,QAAQ,CAACC,MAAM,CAAC;AAC3B,QAAA;MACF,CAAC;MACDe,gBAAgB,EAAGC,SAAS,IAAK;AAC/B,QAAA,IAAMC,cAAc,GAAGD,SAAS,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAIC,cAAc,CAACC,MAAM,KAAKjC,OAAO,CAACoB,OAAO,IAAIY,cAAc,CAACE,UAAU,CAACC,MAAM,EAAE;UACjFnC,OAAO,CAACoB,OAAO,CAAEgB,SAAS,GAAGpC,OAAO,CAACoB,OAAO,CAAEiB,YAAY;AAC5D,QAAA;AACF,MAAA;AACF,KAAC,CAAC;AAEF,IAAA,OAAO,MAAM;MACXX,YAAY,CAACY,OAAO,EAAE;AAEtB,MAAA,KAAK,IAAMA,OAAO,IAAIpC,WAAW,CAACkB,OAAO,EAAE;AACzCkB,QAAAA,OAAO,EAAE;AACX,MAAA;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEC,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;AAAMgC,IAAAA,GAAG,EAAExC,OAAQ;IAACyC,SAAS,EAAE5B,GAAG,CAAC,kBAAkB;GAAE,EACpDV,KAAK,CAACuC,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;AAC1B,IAAA,oBACEL,KAAA,CAAA/B,aAAA,CAACqC,MAAM,EAAA;MACLC,GAAG,EAAEH,IAAI,CAACI,EAAG;AACbpD,MAAAA,IAAI,EAAEA,IAAK;AACXgD,MAAAA,IAAI,EAAEA,IAAK;AACX9C,MAAAA,OAAO,EAAEA,OAAQ;AACjBC,MAAAA,MAAM,EAAEA,MAAO;AACfC,MAAAA,cAAc,EAAEA;AAAe,KAChC,CAAC;AAEN,EAAA,CAAC,CACG,CAAC;AAEX;AAWA,IAAM8C,MAAM,GAAInD,MAAoB,IAAK;EACvC,IAAM;IAAEC,IAAI;IAAEgD,IAAI;IAAE9C,OAAO;IAAEC,MAAM;AAAEC,IAAAA;AAAe,GAAC,GAAGL,MAAM;EAC9D,IAAM,CAACsD,WAAW,EAAEC,cAAc,CAAC,GAAG5C,QAAQ,EAAsC;AACpF,EAAA,IAAMH,WAAW,GAAGD,MAAM,CAAiB,EAAE,CAAC;AAE9CkB,EAAAA,eAAe,CAAC,MAAM;AACpBjB,IAAAA,WAAW,CAACkB,OAAO,CAACC,IAAI,CACtBsB,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,aAAa,EAAGyB,WAAW,IAAK;MAC7CC,cAAc,CAACD,WAAW,CAAC;AAC7B,IAAA,CAAC,CACH,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAENvB,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,KAAK,IAAMa,OAAO,IAAIpC,WAAW,CAACkB,OAAO,EAAE;AACzCkB,QAAAA,OAAO,EAAE;AACX,MAAA;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOU,WAAW,iBAChBT,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,uBAAuB;AAAE,GAAA,eAC3C0B,KAAA,CAAA/B,aAAA,CAAC0C,UAAU,EAAA;AAACvD,IAAAA,IAAI,EAAEA,IAAK;AAACwD,IAAAA,OAAO,EAAEH,WAAY;AAACL,IAAAA,IAAI,EAAEA,IAAK;AAAC5C,IAAAA,cAAc,EAAEA;AAAe,GAAC,CAAC,eAC3FwC,KAAA,CAAA/B,aAAA,CAAC4C,aAAa,EAAA;AAACvD,IAAAA,OAAO,EAAEA,OAAQ;AAAC8C,IAAAA,IAAI,EAAEA;AAAK,GAAC,CAAC,eAC9CJ,KAAA,CAAA/B,aAAA,CAAC6C,YAAY,EAAA;AAACV,IAAAA,IAAI,EAAEA,IAAK;AAAC7C,IAAAA,MAAM,EAAEA;AAAO,GAAC,CACvC,CACN;AACH,CAAC;AAED,IAAMuD,YAAY,GAAIC,KAAsD,IAAK;AAAA,EAAA,IAAAC,SAAA;EAC/E,IAAM;IAAEZ,IAAI;AAAE7C,IAAAA,MAAM,EAANA;AAAO,GAAC,GAAGwD,KAAK;AAE9B,EAAA,IAAMpD,WAAW,GAAGD,MAAM,CAAiB,EAAE,CAAC;EAC9C,IAAM,CAACuD,MAAM,EAAEC,SAAS,CAAC,GAAGpD,QAAQ,EAAkB;EACtD,IAAM,CAACqD,UAAU,EAAEC,aAAa,CAAC,GAAGtD,QAAQ,CAAC,KAAK,CAAC;AACnD,EAAA,IAAMuD,SAAS,GAAG3D,MAAM,CAAY,IAAI,CAAC;AAEzCkB,EAAAA,eAAe,CAAC,MAAM;AACpBjB,IAAAA,WAAW,CAACkB,OAAO,CAACC,IAAI,CACtBsB,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,QAAQ,EAAGiC,MAAM,IAAK;MACnCC,SAAS,CAACD,MAAM,CAAC;IACnB,CAAC,EAAE,IAAI,CACT,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAEN/B,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,KAAK,IAAMa,OAAO,IAAIpC,WAAW,CAACkB,OAAO,EAAE;AACzCkB,QAAAA,OAAO,EAAE;AACX,MAAA;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAENb,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIiC,UAAU,EAAE;AACdE,MAAAA,SAAS,CAACxC,OAAO,CAAEyC,WAAW,CAAElB,IAAI,CAACmB,SAAS,CAASC,QAAQ,IAAI,EAAE,CAAC;AACtEH,MAAAA,SAAS,CAACxC,OAAO,CAAE4C,KAAK,EAAE;AAC5B,IAAA;AACF,EAAA,CAAC,EAAE,CAACN,UAAU,CAAC,CAAC;EAEhB,oBACEnB,KAAA,CAAA/B,aAAA,CAAA+B,KAAA,CAAA0B,QAAA,EAAA,IAAA,eACE1B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,oBAAoB;AAAE,GAAA,EAEvC2C,MAAM,KAAK,SAAS,IAAI1D,OAAM,KAAA,CAAAyD,SAAA,GAAKZ,IAAI,CAACmB,SAAS,CAASC,QAAQ,MAAA,IAAA,IAAAR,SAAA,KAAA,MAAA,IAAA,CAAAA,SAAA,GAAhCA,SAAA,CAAmC,CAAC,CAAC,MAAA,IAAA,IAAAA,SAAA,KAAA,MAAA,GAAA,MAAA,GAArCA,SAAA,CAAuCW,MAAM,CAAA,iBAAK3B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;AACnFiC,IAAAA,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,yBAAyB,CAAC,EAAE;AACpD,MAAA,CAACA,GAAG,CAAC,OAAO,CAAC,GAAG6C;AAClB,KAAC,CAAE;AACH,IAAA,mBAAA,EAAmB,YAAa;IAChCU,OAAO,EAAEA,MAAM;MACbT,aAAa,CAAC,CAACD,UAAU,CAAC;AAC5B,IAAA;AAAE,GAAA,eAEFnB,KAAA,CAAA/B,aAAA,CAAC6D,IAAI,MAAE,CACJ,CACF,CAAC,EACLX,UAAU,iBACTnB,KAAA,CAAA/B,aAAA,CAAC8D,MAAM,EAAA;AACL9B,IAAAA,GAAG,EAAEoB,SAAU;AACfW,IAAAA,WAAW,mCAAA3D,MAAA,CAAU4D,OAAO,CAACC,IAAI,EAAA,8DAAA,CAAa;IAC9C3E,MAAM,EAAGJ,MAAM,IAAK;AAClBI,MAAAA,OAAM,CAAA4E,cAAA,CAAAA,cAAA,KAAMhF,MAAM,CAAA,EAAA,EAAA,EAAA;AAAEiF,QAAAA,WAAW,EAAEhC;AAAI,OAAA,CAAC,CAAC;MACvCgB,aAAa,CAAC,KAAK,CAAC;AACtB,IAAA;AAAE,GACH,CAEH,CAAC;AAEP,CAAC;AAKD,IAAMiB,aAAa,GAAIlF,MAA2B,IAAK;EACrD,IAAM;AAAEyD,IAAAA;AAAQ,GAAC,GAAGzD,MAAM;AAC1B,EAAA,IAAMmF,UAAU,GAAG5E,MAAM,CAAiB,IAAI,CAAC;AAE/CwB,EAAAA,SAAS,CAAC,MAAM;IACdoD,UAAU,CAACzD,OAAO,CAAEJ,SAAS,GAAGzB,EAAE,CAACuF,MAAM,CAAC3B,OAAO,CAAC;AACpD,EAAA,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,oBAAOZ,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;AAAMgC,IAAAA,GAAG,EAAEqC;AAAW,GAAE,CAAC;AAClC,CAAC;AASD,IAAM3B,UAAU,GAAIxD,MAAwB,IAAK;AAAA,EAAA,IAAAqF,eAAA;EAC/C,IAAM;IAAEpF,IAAI;IAAEwD,OAAO;IAAER,IAAI;AAAE5C,IAAAA;AAAe,GAAC,GAAGL,MAAM;AACtD,EAAA,IAAMqE,QAAQ,GAAG,CAAA,CAAAgB,eAAA,GAACpC,IAAI,CAACmB,SAAS,MAAA,IAAA,IAAAiB,eAAA,KAAA,MAAA,GAAA,MAAA,GAAfA,eAAA,CAA+BhB,QAAQ,KAAI,EAAE;EAC9D,IAAIiB,OAAO,GAAG,EAAE;EAChB,IAAIC,WAA2C,GAAG,EAAE;AAEpD,EAAA,IAAI,OAAO9B,OAAO,CAAC6B,OAAO,KAAK,QAAQ,EAAE;IACvCA,OAAO,GAAG7B,OAAO,CAAC6B,OAAO;AAC3B,EAAA,CAAC,MAAM;AACL7B,IAAAA,OAAO,CAAC6B,OAAO,CAACE,OAAO,CAAEC,IAAS,IAAK;AACrC,MAAA,IAAIA,IAAI,CAACC,IAAI,KAAK,MAAM,EAAE;QACxBJ,OAAO,GAAGG,IAAI,CAACE,IAAI;AACrB,MAAA,CAAC,MAAM,IAAIF,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;QACpCH,WAAW,CAAC5D,IAAI,CAAC;AACf+D,UAAAA,IAAI,EAAE,OAAO;AACbJ,UAAAA,OAAO,EAAEG,IAAI,CAACG,SAAS,CAACC;AAC1B,SAAC,CAAC;AACJ,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;EAEA,oBACEhD,KAAA,CAAA/B,aAAA,CAAA,SAAA,EAAA;IAASiC,SAAS,EAAE5B,GAAG,CAAC,aAAa;GAAE,eACrC0B,KAAA,CAAA/B,aAAA,CAAA,QAAA,EAAA;IAAQiC,SAAS,EAAE5B,GAAG,CAAC,oBAAoB;GAAE,eAC3C0B,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;IAAMiC,SAAS,EAAE5B,GAAG,CAAC,2BAA2B;GAAE,eAChD0B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;AAAKiC,IAAAA,SAAS,EAAE5B,GAAG,CAAC,aAAa,CAAE;IAAC2E,GAAG,EAAE7F,IAAI,CAAC8F;AAAO,GAAE,CACnD,CAAC,eACPlD,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;IAAMiC,SAAS,EAAE5B,GAAG,CAAC,yBAAyB;GAAE,EAAElB,IAAI,CAAC8E,IAAW,CAC5D,CAAC,eACTlC,KAAA,CAAA/B,aAAA,CAAA,SAAA,EAAA;AAASiC,IAAAA,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,wBAAwB,CAAC,EAAEA,GAAG,CAAC,cAAc,CAAC,EAAE;AACjF,MAAA,CAACA,GAAG,CAAC,SAAS,CAAC,GAAGkD,QAAQ,CAAC5B;KAC5B;GAAE,EACA4B,QAAQ,CAAC5B,MAAM,gBACdI,KAAA,CAAA/B,aAAA,CAACkF,UAAU,EAAA;AAACC,IAAAA,OAAO,EAAE5B,QAAQ,CAAC,CAAC,CAAE;AAAC6B,IAAAA,SAAS,EAAE,IAAK;AAACxB,IAAAA,OAAO,EAAErE;AAAe,GAAC,CAAC,GAC3E,IAAI,eACRwC,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA,IAAA,EACGwE,OACG,CAAC,EACNC,WAAW,CAAC9C,MAAM,gBACjBI,KAAA,CAAA/B,aAAA,CAACqF,eAAe,EAAA;AAACpD,IAAAA,SAAS,EAAE5B,GAAG,CAAC,kBAAkB,CAAE;AAACoE,IAAAA,WAAW,EAAEA;AAAY,GAAC,CAAC,GAC9E,IACG,CACF,CAAC;AAEd,CAAC;AAMD,IAAM7B,aAAa,GAAI1D,MAA2B,IAAK;EACrD,IAAM;IAAEG,OAAO;AAAE8C,IAAAA;AAAK,GAAC,GAAGjD,MAAM;AAChC,EAAA,IAAMQ,WAAW,GAAGD,MAAM,CAAiB,EAAE,CAAC;EAC9C,IAAM,CAAC6F,OAAO,EAAEC,UAAU,CAAC,GAAG1F,QAAQ,CAAC,KAAK,CAAC;EAC7C,IAAM,CAAC2F,aAAa,EAAEC,gBAAgB,CAAC,GAAG5F,QAAQ,CAAC,EAAE,CAAC;EACtD,IAAM,CAAC6F,OAAO,EAAEC,UAAU,CAAC,GAAG9F,QAAQ,CAAC,EAAE,CAAC;EAC1C,IAAM,CAAC+F,QAAQ,EAAEC,WAAW,CAAC,GAAGhG,QAAQ,CAAmB,EAAE,CAAC;EAC9D,IAAM,CAACiG,KAAK,EAAEC,QAAQ,CAAC,GAAGlG,QAAQ,CAAC,EAAE,CAAC;EACtC,IAAM,CAACmG,eAAe,EAAEC,kBAAkB,CAAC,GAAGpG,QAAQ,CAAC,EAAE,CAAC;AAE1Dc,EAAAA,eAAe,CAAC,MAAM;AACpBjB,IAAAA,WAAW,CAACkB,OAAO,CAACC,IAAI,CACtBsB,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,SAAS,EAAGuE,OAAO,IAAK;MACrCC,UAAU,CAACD,OAAO,CAAC;IACrB,CAAC,CAAC,EACFnD,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,eAAe,EAAGmF,KAAK,IAAK;MACzCT,gBAAgB,CAAED,aAAa,IAAK;QAClC,OAAOA,aAAa,GAAGU,KAAK;AAC9B,MAAA,CAAC,CAAC;IACJ,CAAC,CAAC,EACF/D,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,SAAS,EAAG2E,OAAO,IAAK;MACrCC,UAAU,CAACD,OAAO,CAAC;IACrB,CAAC,CAAC,EACFvD,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,UAAU,EAAG6E,QAAQ,IAAK;AACvCC,MAAAA,WAAW,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC;MAC1BH,gBAAgB,CAAC,EAAE,CAAC;IACtB,CAAC,CAAC,EACFtD,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,OAAO,EAAG+E,KAAK,IAAK;MACjCC,QAAQ,CAACD,KAAK,CAAC;IACjB,CAAC,CAAC,EACF3D,IAAI,CAACrB,MAAM,CAACC,EAAE,CAAC,iBAAiB,EAAGiF,eAAe,IAAK;MACrDC,kBAAkB,CAACD,eAAe,CAAC;AACrC,IAAA,CAAC,CACH,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAEN/E,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,KAAK,IAAMa,OAAO,IAAIpC,WAAW,CAACkB,OAAO,EAAE;AACzCkB,QAAAA,OAAO,EAAE;AACX,MAAA;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEC,KAAA,CAAA/B,aAAA,CAAA,SAAA,EAAA;IAASiC,SAAS,EAAE5B,GAAG,CAAC,aAAa;GAAE,eACrC0B,KAAA,CAAA/B,aAAA,CAAA,QAAA,EAAA;IAAQiC,SAAS,EAAE5B,GAAG,CAAC,oBAAoB;GAAE,eAI3C0B,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;IAAMiC,SAAS,EAAE5B,GAAG,CAAC,yBAAyB;GAAE,EAAEhB,OAAO,CAAC4E,IAAW,CAC/D,CAAC,eACTlC,KAAA,CAAA/B,aAAA,CAAA,SAAA,EAAA;IAASiC,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,wBAAwB,CAAC,EAAEA,GAAG,CAAC,YAAY,CAAC;GAAE,eAC/E0B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,eAAe;GAAE,eACnC0B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,OAAO;AAAE,GAAA,EAC1B2F,eAAe,gBAAGjE,KAAA,CAAA/B,aAAA,CAACoE,aAAa,EAAA;IAACzB,OAAO,EAAA,EAAA,CAAAvC,MAAA,CAAK4F,eAAe,CAAA,CAAA5F,MAAA,CAAGkF,OAAO,GAAG,KAAK,GAAG,EAAE;AAAG,GAAE,CAAC,GAAIA,OAAO,gBAAGvD,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA,IAAA,EAAM,0BAAU,CAAC,GAAG,IAAK,EAChIsF,OAAO,IAAI,CAACU,eAAe,iBAAIjE,KAAA,CAAA/B,aAAA,CAACmG,OAAO,EAAA,IAAE,CACvC,CAAC,EACLP,QAAQ,CAAC1D,GAAG,CAAC,CAACkE,OAAO,EAAEhE,KAAK,KAAK;IAChC,IAAI,CAACgE,OAAO,CAACpD,MAAM,IAAIoD,OAAO,CAACpD,MAAM,KAAK,OAAO,EAAE;AACjD,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,oBAAOjB,KAAA,CAAA/B,aAAA,CAACqG,iBAAiB,EAAA;AAAC/D,MAAAA,GAAG,EAAEF,KAAK,GAAGgE,OAAO,CAACpD,MAAO;AAACoD,MAAAA,OAAO,EAAEA,OAAQ;AAACE,MAAAA,IAAI,EAAElE,KAAK,KAAKwD,QAAQ,CAACjE,MAAM,GAAG;AAAE,KAAC,CAAC;EACjH,CAAC,CAAC,EACDmE,KAAK,iBAAI/D,KAAA,CAAA/B,aAAA,CAACuG,WAAW,EAAA;AAAC5D,IAAAA,OAAO,EAAEmD,KAAM;AAAC3D,IAAAA,IAAI,EAAEA;GAAM,CAAC,EACnDuD,OAAO,iBAAI3D,KAAA,CAAA/B,aAAA,CAACoE,aAAa,EAAA;AAACzB,IAAAA,OAAO,EAAE+C;GAAU,CAQ3C,CACE,CACF,CAAC;AAEd,CAAC;AAMD,IAAMW,iBAAiB,GAAInH,MAA+B,IAAK;EAC7D,IAAM;IAAEkH,OAAO;AAAEE,IAAAA;AAAK,GAAC,GAAGpH,MAAM;EAChC,IAAM,CAACyD,OAAO,EAAE6D,UAAU,CAAC,GAAG3G,QAAQ,CAAC,EAAE,CAAC;EAC1C,IAAM,CAAC4G,MAAM,EAAEC,SAAS,CAAC,GAAG7G,QAAQ,CAAC,KAAK,CAAC;AAE3CoB,EAAAA,SAAS,CAAC,MAAM;AAAA,IAAA,IAAA0F,eAAA;AACd,IAAA,IAAIP,OAAO,CAACpD,MAAM,KAAK,SAAS,EAAE;AAChCwD,MAAAA,UAAU,CAACJ,OAAO,CAAC5B,OAAO,CAACoC,OAAO,IAAIR,OAAO,CAAC5B,OAAO,CAACqC,GAAG,CAAC;AAC1D,MAAA,IAAIP,IAAI,EAAE;QACRI,SAAS,CAAC,IAAI,CAAC;AACjB,MAAA;AACF,IAAA;AACA,IAAA,IAAMI,OAAO,GAAA,CAAAH,eAAA,GAAGP,OAAO,CAACtF,MAAM,MAAA,IAAA,IAAA6F,eAAA,KAAA,MAAA,GAAA,MAAA,GAAdA,eAAA,CAAgB5F,EAAE,CAAC,eAAe,EAAEgG,IAAA,IAAyB;MAAA,IAAxB;QAAEpE,OAAO;AAAEK,QAAAA;AAAO,OAAC,GAAA+D,IAAA;MACtEP,UAAU,CAAC7D,OAAO,CAAC;MACnB,IAAIK,MAAM,KAAK,OAAO,EAAE;QACtB0D,SAAS,CAAC,IAAI,CAAC;AACjB,MAAA,CAAC,MAAM,IAAI1D,MAAM,KAAK,UAAU,EAAE;QAChC,IAAI,CAACsD,IAAI,EAAE;UACTI,SAAS,CAAC,KAAK,CAAC;AAClB,QAAA;AACF,MAAA;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACXI,MAAAA,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,MAAA,IAAPA,OAAO,EAAI;IACb,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAME,aAAa,GAAIC,YAAqB,IAC1CA,YAAY,IAAItE,OAAO,gBACrBZ,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;AACEiC,IAAAA,SAAS,EAAE5B,GAAG,CAAC,8BAA8B,CAAE;AAC/C6G,IAAAA,KAAK,EAAE;AAAEN,MAAAA,OAAO,EAAEH,MAAM,GAAG,OAAO,GAAG;AAAO;AAAE,GAAA,eAE9C1E,KAAA,CAAA/B,aAAA,CAACoE,aAAa,EAAA;AAACzB,IAAAA,OAAO,EAAEA;GAAU,CAC/B,CAAC,GACJ,IAAI;AAEV,EAAA,oBACEZ,KAAA,CAAA/B,aAAA,CAAA+B,KAAA,CAAA0B,QAAA,EAAA,IAAA,EACGuD,aAAa,CAACZ,OAAO,CAACpD,MAAM,KAAK,SAAS,CAAC,eAC5CjB,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;AACEiC,IAAAA,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,gCAAgC,CAAC,EAAEA,GAAG,CAAC,WAAW,CAAC,CAAE;IAC/EuD,OAAO,EAAEA,MAAM;AACb,MAAA,IAAIwC,OAAO,CAACpD,MAAM,KAAK,SAAS,EAAE;AAChC0D,QAAAA,SAAS,CAAED,MAAM,IAAK,CAACA,MAAM,CAAC;AAChC,MAAA;AACF,IAAA;GAAE,eAEF1E,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;IAAMiC,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,aAAa,CAAC,EAAEA,GAAG,CAAC,WAAW,CAAC;GAAE,eAChE0B,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;IAAMiC,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,YAAY,CAAC,EAAEA,GAAG,CAAC,WAAW,CAAC;GAAE,EAAE+F,OAAO,CAACe,IAAI,CAACC,WAAW,IAAIhB,OAAO,CAACe,IAAI,CAAClD,IAAW,CAAC,EACvHmC,OAAO,CAACpD,MAAM,KAAK,SAAS,iBAC3BjB,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;AAAMiC,IAAAA,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,mBAAmB,CAAC,EAAEA,GAAG,CAAC,WAAW,CAAC,EAAEA,GAAG,CAAC,SAAS,CAAC;AAAE,GAAA,eACtF0B,KAAA,CAAA/B,aAAA,CAACmG,OAAO,MAAE,CACN,CACP,EACAC,OAAO,CAACpD,MAAM,KAAK,SAAS,iBAC3BjB,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA;AAAMiC,IAAAA,SAAS,EAAE0B,UAAU,CAACtD,GAAG,CAAC,mBAAmB,CAAC,EAAEA,GAAG,CAAC,WAAW,CAAC,EAAEA,GAAG,CAAC,SAAS,CAAC;AAAE,GAAA,eACtF0B,KAAA,CAAA/B,aAAA,CAACqH,OAAO,EAAA,IAAE,CACN,CAEJ,CACH,CAAC,EACLL,aAAa,CAACZ,OAAO,CAACpD,MAAM,KAAK,SAAS,CAC3C,CAAC;AAEP,CAAC;AAMD,IAAMuD,WAAW,GAAIrH,MAAyB,IAAK;EACjD,IAAM;IAAEyD,OAAO;AAAER,IAAAA;AAAK,GAAC,GAAGjD,MAAM;EAEhC,oBACE6C,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,0BAA0B;GAAE,eAC9C0B,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;IAAKiC,SAAS,EAAE5B,GAAG,CAAC,kCAAkC;AAAE,GAAA,eACtD0B,KAAA,CAAA/B,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO2C,OAAc,CAClB,CAAC,EACL,CAACR,IAAI,CAACmF,WAAW,GAAG,IAAI,gBACvBvF,KAAA,CAAA/B,aAAA,CAAA,KAAA,EAAA;AACEiC,IAAAA,SAAS,EAAE5B,GAAG,CAAC,gCAAgC,CAAE;AACjDuD,IAAAA,OAAO,EAAEA,MAAMzB,IAAI,CAACoF,KAAK;GAAG,EAC7B,cAAO,CAEP,CAAC;AAEV,CAAC;AAID,MAAMpG,YAAY,CAAC;AAIjBqG,EAAAA,WAAWA,CAASC,SAAsB,EAAUC,OAA+F,EAAE;AAAAC,IAAAA,eAAA,2BAHjH,IAAI,CAAA;AAAAA,IAAAA,eAAA,yBACQ,IAAI,CAAA;AAAAA,IAAAA,eAAA,2BACA,IAAI,CAAA;IAAA,IAAA,CACpCF,SAAsB,GAAtBA,SAAsB;IAAA,IAAA,CAAUC,OAA+F,GAA/FA,OAA+F;IACjJ,IAAI,CAACE,gBAAgB,GAAG,IAAI;IAE5B,IAAI,CAACC,IAAI,EAAE;AACb,EAAA;AAEAA,EAAAA,IAAIA,GAAG;AACL;AACA,IAAA,IAAI,CAACJ,SAAS,CAACK,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACC,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEvE;IACA,IAAI,CAACC,cAAc,GAAG,IAAIC,cAAc,CAAC,CAACC,OAAO,EAAEC,QAAQ,KAAK;MAC9D,IAAI,IAAI,CAACR,gBAAgB,EAAE;QACzB,IAAI,CAACS,cAAc,EAAE;AACvB,MAAA;MACA,IAAI,CAACX,OAAO,CAACtG,sBAAsB,CAAC+G,OAAO,EAAEC,QAAQ,CAAC;AACxD,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACH,cAAc,CAACK,OAAO,CAAC,IAAI,CAACb,SAAS,CAAC;;AAE3C;IACA,IAAI,CAACc,gBAAgB,GAAG,IAAIC,gBAAgB,CAAC,CAACjH,SAAS,EAAE6G,QAAQ,KAAK;MACpE,IAAI,IAAI,CAACR,gBAAgB,EAAE;AACzBa,QAAAA,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAM;UAC3B,IAAI,CAACN,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;AACJ,MAAA;MACA,IAAI,CAACX,OAAO,CAACpG,gBAAgB,CAACC,SAAS,EAAE6G,QAAQ,CAAC;AACpD,IAAA,CAAC,CAAC;IAEF,IAAI,CAACG,gBAAgB,CAACD,OAAO,CAAC,IAAI,CAACb,SAAS,EAAE;AAC5CmB,MAAAA,SAAS,EAAE,IAAI;AACfC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AACJ,EAAA;AAEAd,EAAAA,YAAYA,GAAG;AACb,IAAA,IAAMe,UAAU,GAAG,IAAI,CAACA,UAAU,EAAE;IACpC,IAAI,CAAClB,gBAAgB,GAAGkB,UAAU;AACpC,EAAA;AAEAA,EAAAA,UAAUA,GAAgB;AAAA,IAAA,IAAfC,SAAS,GAAAC,SAAA,CAAArH,MAAA,GAAA,CAAA,IAAAqH,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC;IACtB,IAAM;MAAEpH,SAAS;MAAEC,YAAY;AAAEb,MAAAA;KAAc,GAAG,IAAI,CAACyG,SAAS;IAChE,OAAOyB,IAAI,CAACC,GAAG,CAACtH,YAAY,GAAGD,SAAS,GAAGZ,YAAY,CAAC,IAAI+H,SAAS;AACvE,EAAA;AAEAV,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACZ,SAAS,CAAC7F,SAAS,GAAG,IAAI,CAAC6F,SAAS,CAAC5F,YAAY;AACxD,EAAA;AAEAC,EAAAA,OAAOA,GAAG;IACR,IAAI,IAAI,CAACyG,gBAAgB,EAAE,IAAI,CAACA,gBAAgB,CAACa,UAAU,EAAE;IAC7D,IAAI,IAAI,CAACnB,cAAc,EAAE,IAAI,CAACA,cAAc,CAACmB,UAAU,EAAE;IACzD,IAAI,CAAC3B,SAAS,CAAC4B,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACtB,YAAY,CAAC;AACjE,EAAA;AACF;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../plugin-ai/node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".index_loading-shimmer__5nvVP {\n -webkit-text-fill-color: transparent;\n animation-duration: 3s;\n animation-iteration-count: infinite;\n animation-name: index_loading-shimmer__5nvVP;\n background: #adadad linear-gradient(to right, #adadad 0, #1a1a1abf 40%, #1a1a1abf 60%, #adadad 100%);\n -webkit-background-clip: text;\n background-clip: text;\n background-repeat: no-repeat;\n background-size: 50% 200%;\n display: inline-block;\n}\n@keyframes index_loading-shimmer__5nvVP {\n 0% {\n background-position: -100% 0;\n }\n 100% {\n background-position: 250% 0;\n }\n}\n.index_ai-chat-messages__i1Rz4 {\n font-size: 12px;\n overflow: hidden auto;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n}\n.index_ai-chat-messages__i1Rz4 > .index_chat-bubble-container__zU-LF:nth-last-child(2) {\n display: table;\n}\n.index_ai-chat-messages__i1Rz4::-webkit-scrollbar-thumb {\n background-color: transparent !important;\n}\n.index_ai-chat-messages__i1Rz4:hover {\n background: transparent;\n}\n.index_ai-chat-messages__i1Rz4:hover::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.3) !important;\n}\n.index_ai-chat-messages__i1Rz4:has(.index_ai-chat-messages-skeleton__VTW-F) {\n padding: 16px;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-chat-messages-skeleton-header__E1xZt {\n display: flex;\n align-items: center;\n justify-content: start;\n gap: 8px;\n margin-bottom: 8px;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-chat-messages-skeleton-header__E1xZt.index_user__xtiSF {\n flex-direction: row-reverse;\n justify-content: end;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-chat-messages-skeleton-header__E1xZt.index_user__xtiSF .index_uipaas-skeleton-paragraph__XwEGv {\n align-items: end;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-chat-messages-skeleton-item__KJv0N {\n width: 100%;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-container__zU-LF {\n width: 100%;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble__hSNE5 {\n display: flex;\n flex-direction: column;\n color: #333;\n border-radius: 6px;\n border: 1px solid transparent;\n padding: 8px 13px 0;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble__hSNE5:has(.index_has-popover__IQ-lW) .index_chat-bubble-options__mXCoa,\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble__hSNE5:hover .index_chat-bubble-options__mXCoa {\n opacity: 1;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble__hSNE5 .index_chat-message-container__OolNo:has(.index_user-message__qB5Pt) {\n padding: 8px 13px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-action__GfKXE {\n display: flex;\n flex-direction: column;\n color: #AAA;\n border-radius: 6px;\n border: 1px solid transparent;\n padding: 0 13px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-action__GfKXE svg {\n width: 14px;\n height: 14px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-action__GfKXE .index_chat-bubble-action-chat__0Bg70 {\n cursor: pointer;\n width: 14px;\n height: 14px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-action__GfKXE .index_chat-bubble-action-chat__0Bg70.index_focus__L6GAX {\n color: var(--mybricks-color-primary, #FA6400);\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-action__GfKXE .index_chat-bubble-action-chat__0Bg70:hover {\n color: var(--mybricks-color-primary, #FA6400);\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu {\n display: flex;\n align-items: center;\n justify-content: start;\n gap: 8px;\n padding-bottom: 8px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu .index_chat-bubble-header-avatar__FlADk {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n box-sizing: content-box;\n border: 2px solid transparent;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu .index_chat-bubble-header-avatar__FlADk .index_copilot-avatar__802gu {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu .index_chat-bubble-header-avatar__FlADk .index_user-avatar__IRN8w {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu:has(.index_user-avatar__IRN8w) {\n justify-content: end;\n flex-direction: row-reverse;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-header__PlDPu .index_chat-bubble-header-name__rm9Es {\n font-size: 12px;\n color: #999;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-message-container__OolNo {\n user-select: text;\n width: 100%;\n font-size: 12px;\n border-radius: 6px;\n padding: 0;\n}\n + .index_ai-chat-messages__i1Rz4 .index_chat-message-container__OolNo {\n margin-top: 8px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-message-container__OolNo .index_chat-box-attachment-image__NQ3LU {\n margin-bottom: 0;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-message-container__OolNo .index_chat-box-attachment-image-item__FdpW- {\n max-width: 100px;\n width: auto;\n height: auto;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-options__mXCoa {\n padding: 10px 10px 0;\n opacity: 0;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-options__mXCoa .index_chat-bubble-option-container__tiL4Y {\n display: flex;\n align-items: center;\n justify-content: start;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-option-icon__lfk21 {\n font-size: 12px;\n padding: 4px;\n color: #00000080;\n}\n + .index_ai-chat-messages__i1Rz4 .index_chat-bubble-option-icon__lfk21 {\n margin-left: 6px;\n}\n.index_ai-chat-messages__i1Rz4 .index_chat-bubble-option-icon__lfk21 + .index_chat-bubble-option-more__Juqab {\n margin-left: 6px;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_welcome-message-self-introduction__Tw9RJ {\n margin-top: 8px;\n margin-bottom: 16px;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 8px;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW {\n flex-shrink: 0;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border: 1px solid #eeeeee;\n border-radius: 6px;\n color: #666;\n background-color: #f3f3f3;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW .index_shortcuts-item-label__4sfwR {\n font-size: 12px;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW .index_shortcuts-item-icon__i3-eD {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 8px;\n font-size: 12px;\n background: #666;\n border-radius: 6px;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-blue__5rlwU {\n color: #0871f0;\n border-color: #d0e5ff;\n background-color: #ecf4ff;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-blue__5rlwU .index_shortcuts-item-icon__i3-eD {\n color: #fff;\n background-color: #2885f6;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-orange__nTRW0 {\n color: #f9a254;\n border-color: #fae7d5;\n background-color: #fff4e2;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-orange__nTRW0 .index_shortcuts-item-icon__i3-eD {\n background-color: #f9a254;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-green__eonQC {\n color: #70bc70;\n border-color: #d4eed4;\n background-color: #ecffec;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-green__eonQC .index_shortcuts-item-icon__i3-eD {\n background-color: #70bc70;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-gray__bZKBo {\n border-color: transparent;\n}\n.index_ai-chat-messages__i1Rz4 .index_welcome-message__aIn52 .index_shortcuts__phpXo .index_shortcuts-item__Q1koW.index_shortcuts-theme-gray__bZKBo:hover {\n background-color: #f7f7f7;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt {\n width: fit-content;\n max-width: calc(100% - 16px);\n align-self: flex-end;\n align-items: end;\n background: #fff;\n border-radius: 6px;\n padding: 8px;\n border-color: transparent;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt .index_chat-bubble-option-container__tiL4Y {\n justify-content: end;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt .index_mentions-container__gvQGj {\n display: inline-flex;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt span {\n font-size: 12px;\n line-height: 20px;\n white-space: pre-wrap;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt:has(.index_mentions-container__gvQGj) span {\n margin-left: 4px;\n}\n.index_ai-chat-messages__i1Rz4 .index_user-message__qB5Pt .index_attachments-list__GdIFm {\n padding-top: 8px;\n justify-content: flex-end;\n}\n.index_ai-chat-messages__i1Rz4 .index_mention__-UilH > :first-child {\n margin-right: 4px;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-message__6zohG {\n width: 100%;\n}\n.index_ai-chat-messages__i1Rz4 .index_ai-message__6zohG.index_error-message__u9PpU {\n background-color: #fff2f2;\n border-color: #fd9696;\n color: #f44;\n}\n.index_ai-chat-markdown__BwJ1z {\n color: #333;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.index_ai-chat-markdown__BwJ1z p {\n margin: 8px 0;\n}\n.index_ai-chat-markdown__BwJ1z h1,\n.index_ai-chat-markdown__BwJ1z h2,\n.index_ai-chat-markdown__BwJ1z h3,\n.index_ai-chat-markdown__BwJ1z h4,\n.index_ai-chat-markdown__BwJ1z h5,\n.index_ai-chat-markdown__BwJ1z h6 {\n margin-top: 20px;\n margin-bottom: 10px;\n font-weight: 600;\n line-height: 1.5;\n}\n.index_ai-chat-markdown__BwJ1z h1 {\n font-size: 2em;\n border-bottom: 1px solid #eaecef;\n padding-bottom: 0.3em;\n}\n.index_ai-chat-markdown__BwJ1z h2 {\n font-size: 1.5em;\n border-bottom: 1px solid #eaecef;\n padding-bottom: 0.3em;\n}\n.index_ai-chat-markdown__BwJ1z h3 {\n font-size: 1.25em;\n}\n.index_ai-chat-markdown__BwJ1z h4 {\n font-size: 1em;\n}\n.index_ai-chat-markdown__BwJ1z h5 {\n font-size: 0.875em;\n}\n.index_ai-chat-markdown__BwJ1z h6 {\n font-size: 0.85em;\n color: #6a737d;\n}\n.index_ai-chat-markdown__BwJ1z a {\n color: #0366d6;\n text-decoration: none;\n}\n.index_ai-chat-markdown__BwJ1z a:hover {\n text-decoration: underline;\n}\n.index_ai-chat-markdown__BwJ1z img,\n.index_ai-chat-markdown__BwJ1z .index_markdown-image__ZG-rv {\n max-width: 100%;\n height: auto;\n margin: 10px 0;\n border-radius: 6px;\n display: block;\n}\n.index_ai-chat-markdown__BwJ1z .index_markdown-image-container__evt-a {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n}\n.index_ai-chat-markdown__BwJ1z .index_markdown-image-clickable__4cgxg {\n cursor: pointer;\n max-width: 100%;\n height: auto;\n}\n.index_ai-chat-markdown__BwJ1z .index_missing-image__WGMwr {\n color: #666;\n background-color: #f3f3f3;\n border: 1px dashed #ccc;\n border-radius: 6px;\n padding: 8px 12px;\n display: inline-block;\n margin: 10px 0;\n}\n.index_ai-chat-markdown__BwJ1z blockquote {\n padding: 0 1em;\n color: #6a737d;\n border-left: 0.25em solid #dfe2e5;\n margin: 16px 0;\n}\n.index_ai-chat-markdown__BwJ1z blockquote > p {\n margin-top: 0;\n margin-bottom: 0;\n}\n.index_ai-chat-markdown__BwJ1z table {\n width: fit-content;\n border-collapse: separate;\n border-spacing: 0;\n margin: 16px 0;\n overflow-x: auto;\n display: block;\n font-size: 12px;\n border-radius: 6px;\n background-color: #fff;\n border: 1px solid #eaeaea;\n}\n.index_ai-chat-markdown__BwJ1z table thead td,\n.index_ai-chat-markdown__BwJ1z table th,\n.index_ai-chat-markdown__BwJ1z table td {\n padding: 10px 16px;\n border-bottom: 1px solid #eaeaea;\n border-right: none;\n text-align: left;\n word-break: break-word;\n}\n.index_ai-chat-markdown__BwJ1z table th:last-child,\n.index_ai-chat-markdown__BwJ1z table td:last-child {\n border-right: none;\n}\n.index_ai-chat-markdown__BwJ1z table tr:last-child td {\n border-bottom: none;\n}\n.index_ai-chat-markdown__BwJ1z table th:first-child {\n border-top-left-radius: 4px;\n}\n.index_ai-chat-markdown__BwJ1z table th:last-child {\n border-top-right-radius: 4px;\n}\n.index_ai-chat-markdown__BwJ1z table tr:last-child td:first-child {\n border-bottom-left-radius: 4px;\n}\n.index_ai-chat-markdown__BwJ1z table tr:last-child td:last-child {\n border-bottom-right-radius: 4px;\n}\n.index_ai-chat-markdown__BwJ1z table th {\n background-color: #f6f8fa;\n font-weight: 600;\n border-bottom: 1px solid #eaeaea;\n position: sticky;\n top: 0;\n z-index: 1;\n}\n.index_ai-chat-markdown__BwJ1z table tr:hover {\n background-color: #f1f8ff !important;\n}\n.index_ai-chat-markdown__BwJ1z ol,\n.index_ai-chat-markdown__BwJ1z ul {\n margin-block-start: 0;\n margin-block-end: 0;\n margin-inline-start: 0;\n margin-inline-end: 0;\n padding-inline-start: 0;\n margin: 8px 0;\n padding-left: 0;\n}\n.index_ai-chat-markdown__BwJ1z ol ol,\n.index_ai-chat-markdown__BwJ1z ul ol,\n.index_ai-chat-markdown__BwJ1z ol li,\n.index_ai-chat-markdown__BwJ1z ul li {\n padding-left: 1em;\n}\n.index_ai-chat-markdown__BwJ1z li {\n position: relative;\n margin: 4px 0;\n padding-left: 1rem;\n list-style-type: none;\n}\n.index_ai-chat-markdown__BwJ1z ul li:before {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0.75em;\n width: 3px;\n height: 3px;\n background-color: currentColor;\n border-radius: 50%;\n}\n.index_ai-chat-markdown__BwJ1z ol {\n counter-reset: item;\n}\n.index_ai-chat-markdown__BwJ1z ol li {\n padding-left: 0;\n counter-increment: item;\n}\n.index_ai-chat-markdown__BwJ1z ol li:before {\n content: counter(item) \".\";\n margin-right: 4px;\n}\n.index_ai-chat-markdown__BwJ1z > *:first-child {\n margin-top: 0;\n}\n.index_ai-chat-markdown__BwJ1z > *:first-child > *:first-child {\n margin-top: 0;\n}\n.index_ai-chat-markdown__BwJ1z > *:last-child {\n margin-bottom: 0;\n}\n.index_ai-chat-markdown__BwJ1z > *:last-child > *:last-child {\n margin-bottom: 0;\n}\n.index_ai-chat-markdown__BwJ1z code {\n font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n background-color: #1b1f230d;\n border-radius: 6px;\n font-size: 85%;\n padding: 0.2em 0.4em;\n text-wrap: auto;\n}\n.index_ai-chat-markdown__BwJ1z pre {\n margin: 0;\n overflow: hidden auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.index_ai-chat-markdown__BwJ1z pre code {\n padding: 0;\n background-color: transparent;\n font-size: 100%;\n white-space: pre;\n text-wrap: auto;\n}\n.index_ai-chat-markdown__BwJ1z hr {\n border: 0;\n height: 1px;\n background-color: #eaecef;\n margin: 16px 0;\n}\n.index_ai-chat-markdown__BwJ1z .index_indent-2__1iNzJ {\n margin-left: 1rem;\n}\n.index_ai-chat-markdown__BwJ1z .index_indent-4__bKXph {\n margin-left: 2rem;\n}\n.index_ai-chat-markdown__BwJ1z .index_indent-6__nPzjB {\n margin-left: 3rem;\n}\n.index_ai-chat-markdown__BwJ1z .index_indent-8__73HWp {\n margin-left: 4rem;\n}\n.index_ai-chat-markdown__BwJ1z li {\n margin-bottom: 0.25rem;\n}\n.index_ai-chat-markdown__BwJ1z strong {\n font-weight: 700;\n}\n.index_ai-chat-markdown__BwJ1z em {\n font-style: italic;\n}\n.index_ai-chat-markdown__BwJ1z code {\n background-color: #0000000d;\n border-radius: 6px;\n padding: 0.2em 0.4em;\n font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n font-size: 85%;\n text-wrap: auto;\n}\n.index_ai-chat-markdown__BwJ1z .index_loading-shimmer__5nvVP {\n -webkit-text-fill-color: transparent;\n animation-delay: 0.5s;\n animation-duration: 3s;\n animation-iteration-count: infinite;\n animation-name: index_loading-shimmer__5nvVP;\n background: #adadad linear-gradient(to right, #adadad 0, #1a1a1abf 40%, #1a1a1abf 60%, #adadad 100%);\n -webkit-background-clip: text;\n background-clip: text;\n background-repeat: no-repeat;\n background-size: 50% 200%;\n display: inline-block;\n}\n.index_ai-chat-request-resource__bPkLm {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #0366d6;\n background-color: #e3f2fd85;\n border-radius: 6px;\n padding: 4px 8px;\n font-size: 12px;\n}\n.index_ai-chat-request-resource-message__W2QqY {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.index_ai-chat-request-resource-button__imvDU {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n cursor: pointer;\n}\n.index_ai-chat-request-resource-icon-success__4H-Wm {\n font-size: 12px;\n color: #05aa2d;\n}\n.index_ai-chat-request-resource-icon-failed__UuovU {\n font-size: 12px;\n color: #d54941;\n}\n.index_ai-chat-error-code-block__SCCqL {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: #d54941;\n background-color: #fff0ed;\n border-radius: 6px;\n border: 1px solid #ffd8d2;\n padding: 4px 8px;\n gap: 8px;\n}\n.index_ai-chat-error-code-block-retry__6LLPI {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n min-width: fit-content;\n color: #d54941;\n background: #fff;\n cursor: pointer;\n font-size: 12px;\n padding: 0 8px;\n border: 1px solid #ffd8d2;\n border-radius: 6px;\n}\n.index_ai-chat-error-code-block-retry__6LLPI span {\n white-space: nowrap;\n}\n.index_ai-chat-error-code-block-retry__6LLPI:hover {\n border-radius: 6px;\n}\n.index_ai-chat-error-code-block-message__B4RYS {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-size: 12px;\n overflow: hidden;\n}\n.index_ai-chat-error-code-block-message__B4RYS span {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n.index_ai-chat-collapsible-code-block__wQEps {\n cursor: pointer;\n background-color: #f3f3f3;\n border-radius: 6px;\n margin-bottom: 8px;\n padding: 6px;\n will-change: padding, height, transform;\n transform-origin: top;\n}\n.index_ai-chat-collapsible-code-block__wQEps:has(.index_collapsed__3t5Xu) {\n padding: 4px 8px;\n transform: translateY(-1px);\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko {\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n border-radius: 6px;\n min-height: 22px;\n padding-bottom: 8px;\n box-sizing: content-box;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko:has(.index_collapsed__3t5Xu) {\n padding-bottom: 0;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title__iwshu {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: currentColor;\n font-weight: 400;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm svg {\n width: 10px;\n height: 10px;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_pending__KhuUS {\n transform: translate(-2px);\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_success__O7uIb {\n color: #05aa2d;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_success__O7uIb svg {\n width: 14px;\n height: 14px;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_error__PShyx {\n color: #d54941;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_error__PShyx svg {\n transform: translate(-2px, 0px);\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-title-status__ATAZm.index_aborted__pfK1o {\n color: #faad14;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-toggle-button__-Agui {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n cursor: pointer;\n border: none;\n color: #666;\n background-color: transparent;\n border-radius: 6px;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-toggle-button__-Agui:hover {\n color: #333;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-toggle-button__-Agui.index_expanded__QEFU2 {\n transform: rotate(0);\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-header__d5Yko .index_code-toggle-button__-Agui.index_collapsed__3t5Xu {\n transform: rotate(-90deg);\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-content__XSVtj {\n background-color: #fff;\n border-radius: 6px;\n width: 100%;\n overflow: hidden;\n transform-origin: top;\n}\n.index_ai-chat-collapsible-code-block__wQEps .index_code-content__XSVtj .index_code-content-inner__42GA- {\n padding: 8px 12px;\n}\n.index_ai-chat-collapsible-response__PLh0p {\n margin-bottom: 8px;\n}\n.index_think__-4-Jg {\n display: flex;\n align-items: center;\n}\n.index_think__-4-Jg svg {\n width: 10px;\n height: 10px;\n margin-left: 4px;\n}\n.index_markdown-body__F2Zfu {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;\n font-size: 12px;\n line-height: 1.6;\n color: #24292e;\n word-wrap: break-word;\n}\n.index_markdown-body__F2Zfu > *:first-child {\n margin-top: 0;\n}\n.index_markdown-body__F2Zfu > *:first-child > *:first-child {\n margin-top: 0;\n}\n.index_markdown-body__F2Zfu > *:last-child {\n margin-bottom: 0;\n}\n.index_markdown-body__F2Zfu > *:last-child > *:last-child {\n margin-bottom: 0;\n}\n.index_markdown-body__F2Zfu h1,\n.index_markdown-body__F2Zfu h2,\n.index_markdown-body__F2Zfu h3,\n.index_markdown-body__F2Zfu h4,\n.index_markdown-body__F2Zfu h5,\n.index_markdown-body__F2Zfu h6 {\n margin-top: 16px;\n margin-bottom: 8px;\n font-weight: 600;\n line-height: 1;\n}\n.index_markdown-body__F2Zfu h1 {\n font-size: 14px;\n}\n.index_markdown-body__F2Zfu h2 {\n font-size: 13px;\n}\n.index_markdown-body__F2Zfu p {\n margin-top: 0;\n margin-bottom: 8px;\n white-space: pre-wrap;\n}\n.index_markdown-body__F2Zfu code {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 12px;\n border-radius: 6px;\n text-wrap: auto;\n}\n.index_markdown-body__F2Zfu pre {\n padding: 16px;\n overflow: auto;\n font-size: 12px;\n line-height: 1.45;\n background-color: #f6f8fa;\n border-radius: 6px;\n}\n.index_markdown-body__F2Zfu blockquote {\n padding: 0 1em;\n color: #6a737d;\n border-left: 0.25em solid #dfe2e5;\n margin: 0 0 16px 0;\n}\n.index_markdown-body__F2Zfu table {\n border-spacing: 0;\n border-collapse: collapse;\n margin-top: 0;\n margin-bottom: 8px;\n}\n.index_markdown-body__F2Zfu table th,\n.index_markdown-body__F2Zfu table td {\n padding: 6px 13px;\n border: 1px solid #dfe2e5;\n}\n.index_markdown-body__F2Zfu table th {\n font-weight: 600;\n background-color: #f6f8fa;\n}\n.index_markdown-body__F2Zfu ul,\n.index_markdown-body__F2Zfu ol {\n padding-left: 16px;\n margin-top: 0;\n margin-bottom: 8px;\n}\n.index_markdown-body__F2Zfu li {\n word-wrap: break-all;\n list-style: outside;\n}\n.index_markdown-body__F2Zfu li > *:first-child {\n margin-top: 0;\n margin-bottom: 0;\n}\n.index_markdown-body__F2Zfu li > *:first-child > *:first-child {\n margin-top: 0;\n}\n.index_markdown-body__F2Zfu li > *:last-child {\n margin-bottom: 0;\n}\n.index_markdown-body__F2Zfu li > *:last-child > *:last-child {\n margin-bottom: 0;\n}\n";
4
+ var css = {"ai-chat-messages":"index_ai-chat-messages__i1Rz4","chat-bubble-container":"index_chat-bubble-container__zU-LF","chat-bubble":"index_chat-bubble__hSNE5","chat-message-container":"index_chat-message-container__OolNo","user-message":"index_user-message__qB5Pt","chat-bubble-action":"index_chat-bubble-action__GfKXE","chat-bubble-action-chat":"index_chat-bubble-action-chat__0Bg70","focus":"index_focus__L6GAX","chat-bubble-header":"index_chat-bubble-header__PlDPu","chat-bubble-header-avatar":"index_chat-bubble-header-avatar__FlADk","user-avatar":"index_user-avatar__IRN8w","chat-bubble-header-name":"index_chat-bubble-header-name__rm9Es","attachments-list":"index_attachments-list__GdIFm","mention":"index_mention__-UilH","ai-message":"index_ai-message__6zohG","ai-chat-error-code-block":"index_ai-chat-error-code-block__SCCqL","ai-chat-error-code-block-retry":"index_ai-chat-error-code-block-retry__6LLPI","ai-chat-error-code-block-message":"index_ai-chat-error-code-block-message__B4RYS","ai-chat-collapsible-code-block":"index_ai-chat-collapsible-code-block__wQEps","collapsed":"index_collapsed__3t5Xu","code-header":"index_code-header__d5Yko","code-title":"index_code-title__iwshu","code-title-status":"index_code-title-status__ATAZm","pending":"index_pending__KhuUS","success":"index_success__O7uIb","ai-chat-collapsible-response":"index_ai-chat-collapsible-response__PLh0p","think":"index_think__-4-Jg","markdown-body":"index_markdown-body__F2Zfu"};
5
+ styleInject(css_248z);
6
+
7
+ export { css as default };
8
+ //# sourceMappingURL=index.less.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.less.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}