@deep-eye/core 0.7.0 → 0.9.1

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 (116) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +137 -22
  3. package/dist/components/chat/AiConversation.vue.d.ts +28 -0
  4. package/dist/components/chat/AiConversation.vue.d.ts.map +1 -0
  5. package/dist/components/chat/ChatBot.vue.d.ts +48 -0
  6. package/dist/components/chat/ChatBot.vue.d.ts.map +1 -0
  7. package/dist/components/chat/builtInToolRenderers.d.ts +2 -0
  8. package/dist/components/chat/builtInToolRenderers.d.ts.map +1 -0
  9. package/dist/components/chat/components/ArtifactPreview.vue.d.ts +15 -0
  10. package/dist/components/chat/components/ArtifactPreview.vue.d.ts.map +1 -0
  11. package/dist/components/chat/components/AssistantTrace.vue.d.ts +27 -0
  12. package/dist/components/chat/components/AssistantTrace.vue.d.ts.map +1 -0
  13. package/dist/components/chat/components/ChartToolRenderer.vue.d.ts +7 -0
  14. package/dist/components/chat/components/ChartToolRenderer.vue.d.ts.map +1 -0
  15. package/dist/components/chat/components/ChatActionbar.vue.d.ts +26 -0
  16. package/dist/components/chat/components/ChatActionbar.vue.d.ts.map +1 -0
  17. package/dist/components/chat/components/ChatMessage.vue.d.ts +64 -0
  18. package/dist/components/chat/components/ChatMessage.vue.d.ts.map +1 -0
  19. package/dist/components/chat/components/ChatSender.vue.d.ts +58 -0
  20. package/dist/components/chat/components/ChatSender.vue.d.ts.map +1 -0
  21. package/dist/components/chat/components/CodeToolRenderer.vue.d.ts +9 -0
  22. package/dist/components/chat/components/CodeToolRenderer.vue.d.ts.map +1 -0
  23. package/dist/components/chat/components/EmptyState.vue.d.ts +11 -0
  24. package/dist/components/chat/components/EmptyState.vue.d.ts.map +1 -0
  25. package/dist/components/chat/components/MessageBubble.vue.d.ts +64 -0
  26. package/dist/components/chat/components/MessageBubble.vue.d.ts.map +1 -0
  27. package/dist/components/chat/components/MindMapToolRenderer.vue.d.ts +7 -0
  28. package/dist/components/chat/components/MindMapToolRenderer.vue.d.ts.map +1 -0
  29. package/dist/components/chat/components/OpenGenUIToolRenderer.vue.d.ts +7 -0
  30. package/dist/components/chat/components/OpenGenUIToolRenderer.vue.d.ts.map +1 -0
  31. package/dist/components/chat/components/OpenGenerativeUiChartRenderer.vue.d.ts +9 -0
  32. package/dist/components/chat/components/OpenGenerativeUiChartRenderer.vue.d.ts.map +1 -0
  33. package/dist/components/chat/components/OpenGenerativeUiPlanRenderer.vue.d.ts +9 -0
  34. package/dist/components/chat/components/OpenGenerativeUiPlanRenderer.vue.d.ts.map +1 -0
  35. package/dist/components/chat/components/OpenGenerativeUiScheduleRenderer.vue.d.ts +9 -0
  36. package/dist/components/chat/components/OpenGenerativeUiScheduleRenderer.vue.d.ts.map +1 -0
  37. package/dist/components/chat/components/OpenGenerativeUiThemeRenderer.vue.d.ts +7 -0
  38. package/dist/components/chat/components/OpenGenerativeUiThemeRenderer.vue.d.ts.map +1 -0
  39. package/dist/components/chat/components/SearchToolRenderer.vue.d.ts +7 -0
  40. package/dist/components/chat/components/SearchToolRenderer.vue.d.ts.map +1 -0
  41. package/dist/components/chat/components/TextPartRenderer.vue.d.ts +19 -0
  42. package/dist/components/chat/components/TextPartRenderer.vue.d.ts.map +1 -0
  43. package/dist/components/chat/components/ToolCallPart.vue.d.ts +11 -0
  44. package/dist/components/chat/components/ToolCallPart.vue.d.ts.map +1 -0
  45. package/dist/components/chat/components/index.d.ts +17 -0
  46. package/dist/components/chat/components/index.d.ts.map +1 -0
  47. package/dist/components/chat/composables/index.d.ts +3 -0
  48. package/dist/components/chat/composables/index.d.ts.map +1 -0
  49. package/dist/components/chat/composables/useConversation.d.ts +7 -0
  50. package/dist/components/chat/composables/useConversation.d.ts.map +1 -0
  51. package/dist/components/chat/composables/useConversationStream.d.ts +3 -0
  52. package/dist/components/chat/composables/useConversationStream.d.ts.map +1 -0
  53. package/dist/components/chat/index.d.ts +9 -0
  54. package/dist/components/chat/index.d.ts.map +1 -0
  55. package/dist/components/chat/mdoc/ArtifactBlock.vue.d.ts +13 -0
  56. package/dist/components/chat/mdoc/ArtifactBlock.vue.d.ts.map +1 -0
  57. package/dist/components/chat/mdoc/AskUserForm.vue.d.ts +33 -0
  58. package/dist/components/chat/mdoc/AskUserForm.vue.d.ts.map +1 -0
  59. package/dist/components/chat/mdoc/ContentNodes.vue.d.ts +16 -0
  60. package/dist/components/chat/mdoc/ContentNodes.vue.d.ts.map +1 -0
  61. package/dist/components/chat/mdoc/MediaImageLightbox.vue.d.ts +20 -0
  62. package/dist/components/chat/mdoc/MediaImageLightbox.vue.d.ts.map +1 -0
  63. package/dist/components/chat/mdoc/MediaImageStack.vue.d.ts +12 -0
  64. package/dist/components/chat/mdoc/MediaImageStack.vue.d.ts.map +1 -0
  65. package/dist/components/chat/mdoc/artifactDownload.d.ts +31 -0
  66. package/dist/components/chat/mdoc/artifactDownload.d.ts.map +1 -0
  67. package/dist/components/chat/mdoc/builtInRegistry.d.ts +12 -0
  68. package/dist/components/chat/mdoc/builtInRegistry.d.ts.map +1 -0
  69. package/dist/components/chat/mdoc/extractAskForms.d.ts +6 -0
  70. package/dist/components/chat/mdoc/extractAskForms.d.ts.map +1 -0
  71. package/dist/components/chat/mdoc/index.d.ts +8 -0
  72. package/dist/components/chat/mdoc/index.d.ts.map +1 -0
  73. package/dist/components/chat/mdoc/parser.d.ts +41 -0
  74. package/dist/components/chat/mdoc/parser.d.ts.map +1 -0
  75. package/dist/components/chat/mdoc/prompt.d.ts +6 -0
  76. package/dist/components/chat/mdoc/prompt.d.ts.map +1 -0
  77. package/dist/components/chat/mdoc/registry.d.ts +15 -0
  78. package/dist/components/chat/mdoc/registry.d.ts.map +1 -0
  79. package/dist/components/chat/mdoc/sanitize.d.ts +2 -0
  80. package/dist/components/chat/mdoc/sanitize.d.ts.map +1 -0
  81. package/dist/components/chat/mdoc/textContent.d.ts +38 -0
  82. package/dist/components/chat/mdoc/textContent.d.ts.map +1 -0
  83. package/dist/components/chat/openGenerativeUi.d.ts +25 -0
  84. package/dist/components/chat/openGenerativeUi.d.ts.map +1 -0
  85. package/dist/components/chat/presentation.d.ts +27 -0
  86. package/dist/components/chat/presentation.d.ts.map +1 -0
  87. package/dist/components/chat/toolRenderers.d.ts +8 -0
  88. package/dist/components/chat/toolRenderers.d.ts.map +1 -0
  89. package/dist/components/chat/types.d.ts +230 -0
  90. package/dist/components/chat/types.d.ts.map +1 -0
  91. package/dist/components/index.d.ts +3 -0
  92. package/dist/components/index.d.ts.map +1 -0
  93. package/dist/components/visualization/D3MindMap.vue.d.ts +83 -0
  94. package/dist/components/visualization/D3MindMap.vue.d.ts.map +1 -0
  95. package/dist/components/visualization/index.d.ts +5 -0
  96. package/dist/components/visualization/index.d.ts.map +1 -0
  97. package/dist/components/visualization/themes.d.ts +40 -0
  98. package/dist/components/visualization/themes.d.ts.map +1 -0
  99. package/dist/components/visualization/types.d.ts +291 -0
  100. package/dist/components/visualization/types.d.ts.map +1 -0
  101. package/dist/components/visualization/utils.d.ts +44 -0
  102. package/dist/components/visualization/utils.d.ts.map +1 -0
  103. package/dist/composables/index.d.ts +3 -0
  104. package/dist/composables/index.d.ts.map +1 -0
  105. package/dist/composables/useMindMapLayout.d.ts +16 -0
  106. package/dist/composables/useMindMapLayout.d.ts.map +1 -0
  107. package/dist/composables/useMindMapTheme.d.ts +43 -0
  108. package/dist/composables/useMindMapTheme.d.ts.map +1 -0
  109. package/dist/index.cjs +130 -26
  110. package/dist/index.d.ts +5 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +6161 -5415
  113. package/dist/style.css +1 -1
  114. package/dist/types/index.d.ts +12 -0
  115. package/dist/types/index.d.ts.map +1 -0
  116. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  此文件记录 `@deep-eye/core` 的用户可见变更。新版本采用语义化版本,并按 `Added`、`Changed`、`Fixed`、`Removed` 分类记录。
4
4
 
5
+ ## [0.9.1] - 2026-07-28
6
+
7
+ ### Added
8
+
9
+ - `ChatBot` 默认工件侧边栏新增 Preview/Code、复制、下载、展开/收起和关闭操作栏。
10
+
11
+ ### Changed
12
+
13
+ - 工件侧边栏在桌面端与移动端使用更稳定的响应式布局,自定义 `sidebar` 插槽仍可完整替换默认预览。
14
+
15
+ ### Fixed
16
+
17
+ - 工件预览关闭操作恢复为明确的关闭图标与“关闭侧边栏”可访问语义。
18
+
5
19
  ## [0.7.0] - 2026-07-23
6
20
 
7
21
  ### Added
package/README.md CHANGED
@@ -8,18 +8,78 @@
8
8
  pnpm add @deep-eye/core
9
9
  ```
10
10
 
11
+ 引入样式:
12
+
13
+ ```ts
14
+ import '@deep-eye/core/style.css'
15
+ ```
16
+
17
+ ## 快速开始
18
+
19
+ `ChatBot` 提供开箱即用的聊天界面,包含消息列表、输入框和可选侧边栏:
20
+
21
+ ```vue
22
+ <script setup lang="ts">
23
+ import { ref } from 'vue'
24
+ import { ChatBot } from '@deep-eye/core'
25
+ import type { ConversationMessage } from '@deep-eye/core'
26
+ import '@deep-eye/core/style.css'
27
+
28
+ const messages = ref<ConversationMessage[]>([
29
+ { id: '1', role: 'assistant', content: '你好!有什么可以帮助你的吗?' },
30
+ ])
31
+
32
+ function handleSend(content: string, files?: File[]) {
33
+ messages.value.push({
34
+ id: Date.now().toString(),
35
+ role: 'user',
36
+ content,
37
+ })
38
+ // 调用 API 获取回复...
39
+ }
40
+ </script>
41
+
42
+ <template>
43
+ <ChatBot :messages="messages" @send="handleSend" />
44
+ </template>
45
+ ```
46
+
11
47
  ## 组件
12
48
 
49
+ ### ChatBot
50
+
51
+ 完整的聊天机器人界面,采用类似 Claude 的布局,内置 `AiConversation` 与 `ChatSender`,支持工件预览侧边栏。
52
+
53
+ ```vue
54
+ <script setup lang="ts">
55
+ import { ChatBot } from '@deep-eye/core'
56
+ import type { ConversationUiAction } from '@deep-eye/core'
57
+
58
+ function handleAction(action: ConversationUiAction) {
59
+ if (action.type === 'open-artifact') {
60
+ // 点击工件卡片时自动打开侧边栏预览
61
+ console.log('打开工件:', action.title)
62
+ }
63
+ }
64
+ </script>
65
+
66
+ <template>
67
+ <ChatBot :messages="messages" :show-sidebar="true" @send="handleSend" @action="handleAction" />
68
+ </template>
69
+ ```
70
+
71
+ 支持 `#sidebar`、`#empty`、`#sender-prepend`、`#assistant-actionbar` 等插槽,以及 `senderConfig`、`conversationConfig` 透传子组件配置。
72
+
13
73
  ### AI Conversation
14
74
 
15
- 完整的 AI 会话渲染方案,支持流式输出、多模态内容、用户交互表单等。
75
+ 完整的 AI 会话渲染方案,支持流式输出、Markdown / 公式 / 多媒体、用户交互表单等。
16
76
 
17
77
  #### AiConversation
18
78
 
19
79
  渲染完整的会话列表,内置自动滚动、流式动画和操作栏。
20
80
 
21
81
  ```vue
22
- <script setup lang=”ts”>
82
+ <script setup lang="ts">
23
83
  import { ref } from 'vue'
24
84
  import {
25
85
  AiConversation,
@@ -43,9 +103,9 @@ function onCopy(payload: ChatActionbarCopyPayload): void {
43
103
  </script>
44
104
 
45
105
  <template>
46
- <AiConversation :messages=”messages auto-scroll=”smart @copy=”onCopy”>
47
- <template #assistant-actionbar=”{ message }”>
48
- <button type=”button @click=”saveReply(message)”>保存</button>
106
+ <AiConversation :messages="messages" auto-scroll="smart" @copy="onCopy">
107
+ <template #assistant-actionbar="{ message }">
108
+ <button type="button" @click="saveReply(message)">保存</button>
49
109
  </template>
50
110
  </AiConversation>
51
111
  </template>
@@ -57,16 +117,29 @@ function onCopy(payload: ChatActionbarCopyPayload): void {
57
117
 
58
118
  将后端的 OpenAI 兼容 `chat.completion.chunk` SSE 响应交给 `useConversationStream().consume(response)`,即可得到可传入 `AiConversation` 的消息列表。渲染会隐藏 `LLM Running`、`🛠️` 和 `<summary>` 运行标记,但不改写原始消息。
59
119
 
60
- **用户交互表单**
120
+ ```vue
121
+ <script setup lang="ts">
122
+ import { AiConversation, useConversationStream } from '@deep-eye/core'
123
+
124
+ const { messages, status, consume } = useConversationStream()
125
+
126
+ async function fetchReply() {
127
+ const response = await fetch('/api/chat', { method: 'POST' })
128
+ await consume(response)
129
+ }
130
+ </script>
61
131
 
62
- AskUserForm 使用 `ASK_USER_FORM_SYSTEM_PROMPT`;单选自动提交,多选点击”确认”,`required=false` 可跳过。
132
+ <template>
133
+ <AiConversation :messages="messages" />
134
+ </template>
135
+ ```
63
136
 
64
137
  #### ChatSender
65
138
 
66
139
  支持文本输入、文件上传、语音录音和截图的聊天输入框。
67
140
 
68
141
  ```vue
69
- <script setup lang=”ts”>
142
+ <script setup lang="ts">
70
143
  import { ref } from 'vue'
71
144
  import { ChatSender } from '@deep-eye/core'
72
145
 
@@ -80,10 +153,10 @@ function handleSend(content: string, files?: File[]) {
80
153
 
81
154
  <template>
82
155
  <ChatSender
83
- v-model=”message
84
- :show-screenshot=”true
85
- placeholder=”输入消息...”
86
- @send=”handleSend
156
+ v-model="message"
157
+ :show-screenshot="true"
158
+ placeholder="输入消息..."
159
+ @send="handleSend"
87
160
  />
88
161
  </template>
89
162
  ```
@@ -107,34 +180,76 @@ function handleSend(content: string, files?: File[]) {
107
180
 
108
181
  | 组件 | 用途 |
109
182
  | ---------------- | --------------------------------------------------------- |
183
+ | `ChatBot` | 完整聊天界面,含消息区、输入框、工件侧边栏 |
110
184
  | `AiConversation` | 会话列表、自动滚动、AskUserForm 与 `#assistant-actionbar` |
111
185
  | `ChatMessage` | 单条 `ConversationMessage`,支持 `#actionbar` 与 `@copy` |
112
186
  | `ChatActionbar` | 默认复制操作,支持默认插槽追加操作与 `@copy` |
113
187
  | `ChatSender` | 聊天输入框,支持文本、文件、语音和截图 |
114
188
 
189
+ ### 交互组件
190
+
191
+ 消息内容支持 mdoc 标签语法,用于在对话中嵌入工件卡片和动态表单。
192
+
193
+ **工件卡片(Artifact)**
194
+
195
+ 助手回复中使用 `{% artifact %}` 标签生成可预览、可下载的卡片。点击卡片可在 `ChatBot` 侧边栏中预览。
196
+
197
+ ```markdown
198
+ {% artifact id="demo" title="示例页面" type="html" %}
199
+
200
+ <!DOCTYPE html>
201
+ <html><body><h1>Hello World</h1></body></html>
202
+ {% /artifact %}
203
+ ```
204
+
205
+ 支持的文本类型:`html`、`code`、`markdown`、`text`、`svg`、`mermaid`、`react`、`vue`。文件引用类型:`pdf`、`word`、`excel`、`ppt`、`zip`、`file`(需 `src` 属性)。
206
+
207
+ 将 `ARTIFACT_BLOCK_SYSTEM_PROMPT` 拼入 LLM system prompt,引导模型正确输出工件语法。
208
+
209
+ **动态表单(AskUserForm)**
210
+
211
+ 使用 `{% ask-form %}` 收集用户选择。单选自动提交,多选点击「确认」,`required=false` 可跳过。
212
+
213
+ 将 `ASK_USER_FORM_SYSTEM_PROMPT` 拼入 LLM system prompt。`ChatBot` 会在底部 dock 区域展示表单;`AiConversation` 内联渲染。
214
+
215
+ ### Composables
216
+
217
+ | Composable | 用途 |
218
+ | ----------------------- | ------------------------------------------------ |
219
+ | `useConversation` | 管理消息列表,追加 OpenAI chunk 或自定义 delta |
220
+ | `useConversationStream` | 消费 SSE / ReadableStream,内置流式状态与 resume |
221
+
222
+ `useConversation` 仅负责渲染层状态,不包含网络请求、重试或持久化逻辑,可与任意后端 API 组合。
223
+
115
224
  ### D3MindMap
116
225
 
117
226
  基于 D3.js 的思维导图可视化组件。
118
227
 
119
228
  ```vue
120
- <script setup lang=”ts”>
229
+ <script setup lang="ts">
121
230
  import { D3MindMap } from '@deep-eye/core'
122
- import type { MindMapNode } from '@deep-eye/core'
123
-
124
- const data: MindMapNode = {
125
- name: '根节点',
126
- children: [
127
- { name: '子节点 1' },
128
- { name: '子节点 2' },
129
- ],
231
+ import type { MindMapData } from '@deep-eye/core'
232
+
233
+ const data: MindMapData = {
234
+ nodeData: {
235
+ id: 'root',
236
+ topic: '根节点',
237
+ root: true,
238
+ children: [
239
+ { id: '1', topic: '子节点 1' },
240
+ { id: '2', topic: '子节点 2' },
241
+ ],
242
+ },
130
243
  }
131
244
  </script>
132
245
 
133
246
  <template>
134
- <D3MindMap :data=”data height=”600px show-toolbar />
247
+ <D3MindMap :data="data" height="600px" show-toolbar />
135
248
  </template>
136
249
  ```
137
250
 
251
+ 支持多主题、缩放平移、节点折叠展开,以及 PNG / SVG / JSON 导出。
252
+
138
253
  ## Changelog
139
254
 
140
255
  每个功能版本的用户可见变化记录在 [CHANGELOG.md](./CHANGELOG.md)。发布前在文件顶部新增版本,并使用 `Added`、`Changed`、`Fixed` 或 `Removed` 分类。
@@ -0,0 +1,28 @@
1
+ import type { AiConversationExpose, AiConversationProps, ChatActionbarCopyPayload, ConversationMessage, ConversationUiAction } from './types';
2
+ type __VLS_Slots = {
3
+ empty?: () => unknown;
4
+ 'user-avatar'?: () => unknown;
5
+ 'assistant-avatar'?: () => unknown;
6
+ 'assistant-actionbar'?: (props: {
7
+ message: ConversationMessage;
8
+ copied: boolean;
9
+ }) => unknown;
10
+ };
11
+ declare const __VLS_base: import("vue").DefineComponent<AiConversationProps, AiConversationExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ copy: (payload: ChatActionbarCopyPayload) => any;
13
+ action: (payload: ConversationUiAction) => any;
14
+ }, string, import("vue").PublicProps, Readonly<AiConversationProps> & Readonly<{
15
+ onCopy?: ((payload: ChatActionbarCopyPayload) => any) | undefined;
16
+ onAction?: ((payload: ConversationUiAction) => any) | undefined;
17
+ }>, {
18
+ autoScroll: import("./types").AutoScrollMode;
19
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
28
+ //# sourceMappingURL=AiConversation.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiConversation.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/AiConversation.vue"],"names":[],"mappings":"AAiqBA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EAExB,mBAAmB,EAEnB,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAUhB,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;CAC9F,CAAC;AAkqBF,QAAA,MAAM,UAAU;;;;;;;;6EAKd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { ChatSenderProps, AiConversationProps, ConversationMessage, ConversationUiAction } from './types';
2
+ import type { Ref } from 'vue';
3
+ interface Props {
4
+ messages: readonly ConversationMessage[] | Ref<readonly ConversationMessage[]>;
5
+ showSidebar?: boolean;
6
+ sidebarWidth?: string | number;
7
+ senderConfig?: Partial<ChatSenderProps>;
8
+ conversationConfig?: Partial<AiConversationProps>;
9
+ }
10
+ type __VLS_Slots = {
11
+ sidebar?: (props: {
12
+ artifact: ConversationUiAction | null;
13
+ }) => unknown;
14
+ 'sender-prepend'?: () => unknown;
15
+ 'sender-append'?: () => unknown;
16
+ empty?: () => unknown;
17
+ 'user-avatar'?: () => unknown;
18
+ 'assistant-avatar'?: () => unknown;
19
+ 'assistant-actionbar'?: (props: {
20
+ message: unknown;
21
+ copied: boolean;
22
+ }) => unknown;
23
+ };
24
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
25
+ copy: (payload: unknown) => any;
26
+ action: (payload: ConversationUiAction) => any;
27
+ send: (content: string, files?: File[] | undefined) => any;
28
+ "artifact-open": (payload: ConversationUiAction) => any;
29
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
30
+ onCopy?: ((payload: unknown) => any) | undefined;
31
+ onAction?: ((payload: ConversationUiAction) => any) | undefined;
32
+ onSend?: ((content: string, files?: File[] | undefined) => any) | undefined;
33
+ "onArtifact-open"?: ((payload: ConversationUiAction) => any) | undefined;
34
+ }>, {
35
+ showSidebar: boolean;
36
+ sidebarWidth: string | number;
37
+ senderConfig: Partial<ChatSenderProps>;
38
+ conversationConfig: Partial<AiConversationProps>;
39
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
41
+ declare const _default: typeof __VLS_export;
42
+ export default _default;
43
+ type __VLS_WithSlots<T, S> = T & {
44
+ new (): {
45
+ $slots: S;
46
+ };
47
+ };
48
+ //# sourceMappingURL=ChatBot.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatBot.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatBot.vue"],"names":[],"mappings":"AA2UA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAI9B,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,GAAG,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAA;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAClD;AAUD,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAA;IACvE,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;CAClF,CAAC;AAwSF,QAAA,MAAM,UAAU;;;;;;;;;;;iBA9TA,OAAO;kBACN,MAAM,GAAG,MAAM;kBACf,OAAO,CAAC,eAAe,CAAC;wBAClB,OAAO,CAAC,mBAAmB,CAAC;6EA+TjD,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=builtInToolRenderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtInToolRenderers.d.ts","sourceRoot":"","sources":["../../../src/components/chat/builtInToolRenderers.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { ConversationUiAction } from '../types';
2
+ type __VLS_Props = {
3
+ artifact: ConversationUiAction;
4
+ expanded?: boolean;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
+ close: () => any;
8
+ "toggle-expanded": () => any;
9
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ onClose?: (() => any) | undefined;
11
+ "onToggle-expanded"?: (() => any) | undefined;
12
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ //# sourceMappingURL=ArtifactPreview.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArtifactPreview.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ArtifactPreview.vue"],"names":[],"mappings":"AA4TA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAKpD,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAC;AA+hBF,QAAA,MAAM,YAAY;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,27 @@
1
+ import type { PropType } from 'vue';
2
+ import type { AssistantTraceEntry } from '../presentation';
3
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ entries: {
5
+ type: PropType<AssistantTraceEntry[]>;
6
+ default: () => never[];
7
+ };
8
+ isStreaming: {
9
+ type: BooleanConstructor;
10
+ default: boolean;
11
+ };
12
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
13
+ entries: {
14
+ type: PropType<AssistantTraceEntry[]>;
15
+ default: () => never[];
16
+ };
17
+ isStreaming: {
18
+ type: BooleanConstructor;
19
+ default: boolean;
20
+ };
21
+ }>> & Readonly<{}>, {
22
+ entries: AssistantTraceEntry[];
23
+ isStreaming: boolean;
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ //# sourceMappingURL=AssistantTrace.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantTrace.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/AssistantTrace.vue"],"names":[],"mappings":"AA4UA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AA8M1D,QAAA,MAAM,YAAY;;cAGC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;;;;;;;;;cAA/B,QAAQ,CAAC,mBAAmB,EAAE,CAAC;;;;;;;;;;4EAQhD,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,7 @@
1
+ type __VLS_Props = {
2
+ result?: unknown;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
7
+ //# sourceMappingURL=ChartToolRenderer.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartToolRenderer.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChartToolRenderer.vue"],"names":[],"mappings":"AAqIA,KAAK,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA+GxC,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,26 @@
1
+ import type { ChatActionbarCopyPayload, ConversationMessage } from '../types';
2
+ type __VLS_Props = {
3
+ message: ConversationMessage;
4
+ /** Visible reply text. Defaults to message.content when omitted. */
5
+ text?: string;
6
+ };
7
+ type __VLS_Slots = {
8
+ default?: (props: {
9
+ message: ConversationMessage;
10
+ copied: boolean;
11
+ }) => unknown;
12
+ };
13
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ copy: (payload: ChatActionbarCopyPayload) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ onCopy?: ((payload: ChatActionbarCopyPayload) => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
26
+ //# sourceMappingURL=ChatActionbar.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatActionbar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatActionbar.vue"],"names":[],"mappings":"AA+MA,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAI7E,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAGF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;CAChF,CAAC;AAyIF,QAAA,MAAM,UAAU;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { PropType } from 'vue';
2
+ import type { ChatActionbarCopyPayload, ConversationMessage, ConversationTheme, ConversationUiAction } from '../types';
3
+ type __VLS_Slots = {
4
+ 'user-avatar'?: () => unknown;
5
+ 'assistant-avatar'?: () => unknown;
6
+ actionbar?: (props: {
7
+ message: ConversationMessage;
8
+ copied: boolean;
9
+ }) => unknown;
10
+ };
11
+ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
12
+ message: {
13
+ type: PropType<ConversationMessage>;
14
+ required: true;
15
+ };
16
+ theme: {
17
+ type: PropType<ConversationTheme>;
18
+ default: undefined;
19
+ };
20
+ userAvatar: {
21
+ type: StringConstructor;
22
+ default: undefined;
23
+ };
24
+ assistantAvatar: {
25
+ type: StringConstructor;
26
+ default: undefined;
27
+ };
28
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
29
+ copy: (payload: ChatActionbarCopyPayload) => any;
30
+ action: (payload: ConversationUiAction) => any;
31
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
32
+ message: {
33
+ type: PropType<ConversationMessage>;
34
+ required: true;
35
+ };
36
+ theme: {
37
+ type: PropType<ConversationTheme>;
38
+ default: undefined;
39
+ };
40
+ userAvatar: {
41
+ type: StringConstructor;
42
+ default: undefined;
43
+ };
44
+ assistantAvatar: {
45
+ type: StringConstructor;
46
+ default: undefined;
47
+ };
48
+ }>> & Readonly<{
49
+ onCopy?: ((payload: ChatActionbarCopyPayload) => any) | undefined;
50
+ onAction?: ((payload: ConversationUiAction) => any) | undefined;
51
+ }>, {
52
+ theme: ConversationTheme;
53
+ userAvatar: string;
54
+ assistantAvatar: string;
55
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
56
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
57
+ declare const _default: typeof __VLS_export;
58
+ export default _default;
59
+ type __VLS_WithSlots<T, S> = T & {
60
+ new (): {
61
+ $slots: S;
62
+ };
63
+ };
64
+ //# sourceMappingURL=ChatMessage.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatMessage.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatMessage.vue"],"names":[],"mappings":"AA6DA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AAyBjB,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAA;IAClC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAA;CAClF,CAAC;AA+FF,QAAA,MAAM,UAAU;;cAII,QAAQ,CAAC,mBAAmB,CAAC;;;;cAI7B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;cAJ3B,QAAQ,CAAC,mBAAmB,CAAC;;;;cAI7B,QAAQ,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;4EAY7C,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { Component } from 'vue';
2
+ interface AttachmentMenuItem {
3
+ id: string;
4
+ label: string;
5
+ icon: string | Component;
6
+ disabled?: boolean;
7
+ }
8
+ interface Props {
9
+ placeholder?: string;
10
+ disabled?: boolean;
11
+ showAttachment?: boolean;
12
+ showToolbar?: boolean;
13
+ maxRows?: number;
14
+ modelValue?: string;
15
+ showScreenshot?: boolean;
16
+ customMenuItems?: AttachmentMenuItem[];
17
+ }
18
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ send: (content: string, files?: File[] | undefined) => any;
20
+ "update:modelValue": (value: string) => any;
21
+ "voice-click": () => any;
22
+ "voice-record": () => any;
23
+ "voice-start": () => any;
24
+ "voice-stop": () => any;
25
+ "voice-cancel": () => any;
26
+ "audio-device-change": (deviceIndex: number) => any;
27
+ "audio-transcript": (text: string) => any;
28
+ screenshot: () => any;
29
+ "menu-item-click": (itemId: string) => any;
30
+ "attachment-menu-open": () => any;
31
+ "attachment-menu-close": () => any;
32
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
33
+ onSend?: ((content: string, files?: File[] | undefined) => any) | undefined;
34
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
35
+ "onVoice-click"?: (() => any) | undefined;
36
+ "onVoice-record"?: (() => any) | undefined;
37
+ "onVoice-start"?: (() => any) | undefined;
38
+ "onVoice-stop"?: (() => any) | undefined;
39
+ "onVoice-cancel"?: (() => any) | undefined;
40
+ "onAudio-device-change"?: ((deviceIndex: number) => any) | undefined;
41
+ "onAudio-transcript"?: ((text: string) => any) | undefined;
42
+ onScreenshot?: (() => any) | undefined;
43
+ "onMenu-item-click"?: ((itemId: string) => any) | undefined;
44
+ "onAttachment-menu-open"?: (() => any) | undefined;
45
+ "onAttachment-menu-close"?: (() => any) | undefined;
46
+ }>, {
47
+ showToolbar: boolean;
48
+ disabled: boolean;
49
+ placeholder: string;
50
+ showAttachment: boolean;
51
+ maxRows: number;
52
+ modelValue: string;
53
+ showScreenshot: boolean;
54
+ customMenuItems: AttachmentMenuItem[];
55
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
56
+ declare const _default: typeof __VLS_export;
57
+ export default _default;
58
+ //# sourceMappingURL=ChatSender.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatSender.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/ChatSender.vue"],"names":[],"mappings":"AAy/DA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAGpC,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAA;CACvC;AAg7CD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAr7CF,OAAO;cAFV,OAAO;iBADJ,MAAM;oBAEH,OAAO;aAEd,MAAM;gBACH,MAAM;oBACF,OAAO;qBACN,kBAAkB,EAAE;6EAq7CtC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,9 @@
1
+ import type { ConversationToolCall } from '../types';
2
+ type __VLS_Props = {
3
+ toolCall: ConversationToolCall;
4
+ result?: unknown;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ //# sourceMappingURL=CodeToolRenderer.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeToolRenderer.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/CodeToolRenderer.vue"],"names":[],"mappings":"AAwFA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAIpD,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,oBAAoB,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAkGxE,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ title?: string;
3
+ description?: string;
4
+ }
5
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
6
+ title: string;
7
+ description: string;
8
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
11
+ //# sourceMappingURL=EmptyState.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/components/EmptyState.vue"],"names":[],"mappings":"AA4FA,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAkED,QAAA,MAAM,YAAY;WApER,MAAM;iBACA,MAAM;6EAsEpB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}