@next-bricks/ai-portal 0.70.0 → 0.70.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bricks.json +42 -42
- package/dist/chunks/7202.a893b0e6.js.map +1 -1
- package/dist/chunks/action-buttons.68666920.js.map +1 -1
- package/dist/chunks/activity-timeline.96e7aaea.js.map +1 -1
- package/dist/chunks/ai-agents.cffd08a0.js.map +1 -1
- package/dist/chunks/ai-employees.267c3626.js.map +1 -1
- package/dist/chunks/blank-state.648eea95.js.map +1 -1
- package/dist/chunks/chat-input.444c80bb.js.map +1 -1
- package/dist/chunks/chat-panel-welcome.2f7c6c8b.js.map +1 -1
- package/dist/chunks/chat-panel.3160f2e8.js.map +1 -1
- package/dist/chunks/chat-stream.393c8241.js.map +1 -1
- package/dist/chunks/cruise-canvas.bfae3138.js.map +1 -1
- package/dist/chunks/dropdown-select.336442ba.js.map +1 -1
- package/dist/chunks/elevo-card.49b42ed0.js.map +1 -1
- package/dist/chunks/elevo-logo.25e3b889.js.map +1 -1
- package/dist/chunks/elevo-sidebar.a197a77f.js.map +1 -1
- package/dist/chunks/flow-tabs.ee1290c2.js.map +1 -1
- package/dist/chunks/goal-card-list.74ab5767.js.map +1 -1
- package/dist/chunks/home-container.f1829834.js.map +1 -1
- package/dist/chunks/icon-button.545ffb24.js.map +1 -1
- package/dist/chunks/mcp-tools.f132c502.js.map +1 -1
- package/dist/chunks/notice-dropdown.63cb2415.js.map +1 -1
- package/dist/chunks/page-container.2185f2e0.js.map +1 -1
- package/dist/chunks/preview-container.a0ca6e2f.js.map +1 -1
- package/dist/chunks/project-knowledges.51731410.js.map +1 -1
- package/dist/chunks/running-flow.37a428cf.js.map +1 -1
- package/dist/chunks/show-case.44e995fc.js.map +1 -1
- package/dist/chunks/show-cases.c3921ea0.js.map +1 -1
- package/dist/chunks/space-chat-guide.84f4a1e7.js.map +1 -1
- package/dist/chunks/space-logo.994f7a25.js.map +1 -1
- package/dist/chunks/space-workbench.8c064898.js.map +1 -1
- package/dist/chunks/stage-flow.9b6fad93.js.map +1 -1
- package/dist/chunks/stat-with-mini-chart.1509cf8c.js.map +1 -1
- package/dist/chunks/sticky-container.d3f7054e.js.map +1 -1
- package/dist/chunks/tab-list.ee97567f.js.map +1 -1
- package/dist/examples.json +52 -40
- package/dist/{index.8e0adc27.js → index.94998c36.js} +2 -2
- package/dist/{index.8e0adc27.js.map → index.94998c36.js.map} +1 -1
- package/dist/manifest.json +594 -313
- package/dist/types.json +796 -796
- package/dist-types/action-buttons/index.d.ts +10 -1
- package/dist-types/activity-timeline/index.d.ts +10 -1
- package/dist-types/ai-agents/index.d.ts +10 -1
- package/dist-types/ai-employees/index.d.ts +16 -1
- package/dist-types/blank-state/index.d.ts +10 -1
- package/dist-types/chat-input/index.d.ts +37 -1
- package/dist-types/chat-panel/index.d.ts +45 -3
- package/dist-types/chat-stream/index.d.ts +62 -1
- package/dist-types/cruise-canvas/index.d.ts +71 -1
- package/dist-types/dropdown-select/index.d.ts +3 -1
- package/dist-types/elevo-card/index.d.ts +5 -1
- package/dist-types/elevo-logo/index.d.ts +3 -1
- package/dist-types/elevo-sidebar/index.d.ts +19 -2
- package/dist-types/flow-tabs/index.d.ts +5 -1
- package/dist-types/gantt-chart/index.d.ts +3 -1
- package/dist-types/goal-card-list/index.d.ts +8 -1
- package/dist-types/home-container/index.d.ts +4 -1
- package/dist-types/icon-button/index.d.ts +4 -1
- package/dist-types/mcp-tools/index.d.ts +3 -1
- package/dist-types/page-container/index.d.ts +7 -0
- package/dist-types/preview-container/index.d.ts +4 -0
- package/dist-types/project-knowledges/index.d.ts +5 -0
- package/dist-types/running-flow/index.d.ts +3 -0
- package/dist-types/show-case/index.d.ts +5 -0
- package/dist-types/show-cases/index.d.ts +4 -0
- package/dist-types/space-workbench/chat-panel-welcome/index.d.ts +3 -0
- package/dist-types/space-workbench/index.d.ts +7 -0
- package/dist-types/space-workbench/space-chat-guide/index.d.ts +3 -0
- package/dist-types/space-workbench/space-logo/index.d.ts +1 -0
- package/dist-types/stage-flow/index.d.ts +21 -0
- package/dist-types/stat-with-mini-chart/index.d.ts +10 -0
- package/dist-types/sticky-container/index.d.ts +3 -0
- package/dist-types/tab-list/index.d.ts +4 -0
- package/docs/action-buttons.md +59 -10
- package/docs/action-buttons.react.md +80 -0
- package/docs/activity-timeline.md +51 -7
- package/docs/activity-timeline.react.md +109 -0
- package/docs/ai-agents.md +62 -2
- package/docs/ai-agents.react.md +73 -0
- package/docs/ai-employees.md +76 -2
- package/docs/ai-employees.react.md +106 -0
- package/docs/blank-state.md +62 -2
- package/docs/blank-state.react.md +77 -0
- package/docs/chat-box.md +134 -52
- package/docs/chat-box.react.md +142 -0
- package/docs/chat-input.md +117 -1
- package/docs/chat-input.react.md +117 -0
- package/docs/chat-panel-welcome.md +39 -0
- package/docs/chat-panel-welcome.react.md +41 -0
- package/docs/chat-panel.md +86 -3
- package/docs/chat-panel.react.md +109 -0
- package/docs/chat-stream.md +149 -2
- package/docs/chat-stream.react.md +155 -0
- package/docs/cruise-canvas.md +159 -0
- package/docs/cruise-canvas.react.md +159 -0
- package/docs/dropdown-select.md +37 -8
- package/docs/dropdown-select.react.md +144 -0
- package/docs/elevo-card.md +75 -1
- package/docs/elevo-card.react.md +104 -0
- package/docs/elevo-logo.md +13 -1
- package/docs/elevo-logo.react.md +27 -0
- package/docs/elevo-sidebar.md +150 -1
- package/docs/elevo-sidebar.react.md +149 -0
- package/docs/flow-tabs.md +97 -2
- package/docs/flow-tabs.react.md +102 -0
- package/docs/gantt-chart.md +101 -0
- package/docs/gantt-chart.react.md +125 -0
- package/docs/goal-card-list.md +149 -13
- package/docs/goal-card-list.react.md +185 -0
- package/docs/home-container.md +48 -2
- package/docs/home-container.react.md +51 -0
- package/docs/icon-button.md +128 -2
- package/docs/icon-button.react.md +120 -0
- package/docs/mcp-tools.md +105 -2
- package/docs/mcp-tools.react.md +117 -0
- package/docs/notice-dropdown.md +53 -10
- package/docs/notice-dropdown.react.md +167 -0
- package/docs/notice-list.md +53 -5
- package/docs/notice-list.react.md +121 -0
- package/docs/page-container.md +80 -3
- package/docs/page-container.react.md +83 -0
- package/docs/preview-container.md +22 -32
- package/docs/preview-container.react.md +71 -0
- package/docs/project-conversations.md +85 -4
- package/docs/project-conversations.react.md +110 -0
- package/docs/project-knowledges.md +73 -8
- package/docs/project-knowledges.react.md +85 -0
- package/docs/running-flow.md +57 -2
- package/docs/running-flow.react.md +90 -0
- package/docs/show-case.md +48 -3
- package/docs/show-case.react.md +60 -0
- package/docs/show-cases.md +52 -2
- package/docs/show-cases.react.md +92 -0
- package/docs/space-chat-guide.md +32 -0
- package/docs/space-chat-guide.react.md +39 -0
- package/docs/space-logo.md +53 -0
- package/docs/space-logo.react.md +46 -0
- package/docs/space-workbench.md +45 -2
- package/docs/space-workbench.react.md +102 -0
- package/docs/stage-flow.md +122 -26
- package/docs/stage-flow.react.md +112 -0
- package/docs/stat-with-mini-chart.md +64 -159
- package/docs/stat-with-mini-chart.react.md +113 -0
- package/docs/sticky-container.md +56 -3
- package/docs/sticky-container.react.md +60 -0
- package/docs/tab-list.md +74 -3
- package/docs/tab-list.react.md +73 -0
- package/package.json +2 -2
package/docs/chat-stream.md
CHANGED
|
@@ -1,11 +1,158 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
tagName: ai-portal.chat-stream
|
|
3
|
+
displayName: WrappedAiPortalChatStream
|
|
4
|
+
description: AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。
|
|
5
|
+
category: ai-portal
|
|
6
|
+
source: "@next-bricks/ai-portal"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# ai-portal.chat-stream
|
|
10
|
+
|
|
11
|
+
> AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|
|
16
|
+
| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |
|
|
17
|
+
| conversationId | `string \| undefined` | 否 | - | 对话 ID |
|
|
18
|
+
| initialRequest | `RequestStore \| undefined \| null` | 否 | - | 初始请求数据。仅初始设置有效。 |
|
|
19
|
+
| replay | `boolean \| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |
|
|
20
|
+
| replayDelay | `number \| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |
|
|
21
|
+
| supports | `Record<string, boolean> \| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |
|
|
22
|
+
| showHumanActions | `boolean \| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |
|
|
23
|
+
| showFeedback | `boolean \| undefined` | 否 | - | 是否显示反馈按钮 |
|
|
24
|
+
| showFeedbackAfterFailed | `boolean \| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |
|
|
25
|
+
| showFeedbackOnView | `boolean \| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |
|
|
26
|
+
| showUiSwitch | `boolean \| undefined` | 否 | - | 是否显示切换到画布视图的按钮 |
|
|
27
|
+
| hideMermaid | `boolean \| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |
|
|
28
|
+
| previewUrlTemplate | `string \| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |
|
|
29
|
+
| showCases | `ShowCaseType[] \| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |
|
|
30
|
+
| exampleProjects | `ExampleProject[] \| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |
|
|
31
|
+
| tryItOutUrl | `string \| undefined` | 否 | - | "试一试"跳转 URL |
|
|
32
|
+
| aiEmployees | `AIEmployee[] \| undefined` | 否 | - | 可 @ 提及的数字人列表 |
|
|
33
|
+
| commands | `Command[] \| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |
|
|
34
|
+
| uploadOptions | `UploadOptions \| undefined` | 否 | - | 文件上传配置 |
|
|
35
|
+
|
|
36
|
+
## Events
|
|
37
|
+
|
|
38
|
+
| 事件 | detail | 说明 |
|
|
39
|
+
| ---------------- | ------------------------------------------------------------------------------- | -------------------------------- |
|
|
40
|
+
| share | `void` | 用户点击分享时触发 |
|
|
41
|
+
| terminate | `void` | 用户点击终止任务时触发 |
|
|
42
|
+
| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |
|
|
43
|
+
| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |
|
|
44
|
+
| ui.switch | `"canvas"` — 切换目标 UI 模式,值为 "canvas" | 用户点击切换到画布视图按钮时触发 |
|
|
45
|
+
| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |
|
|
46
|
+
| split.change | `boolean` — 是否已切换到分屏模式 | 分屏状态切换时触发 |
|
|
47
|
+
|
|
48
|
+
## Methods
|
|
49
|
+
|
|
50
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
51
|
+
| -------------------- | -------------------------- | ------ | -------------------------------------- |
|
|
52
|
+
| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |
|
|
53
|
+
| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |
|
|
54
|
+
| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |
|
|
55
|
+
| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |
|
|
2
56
|
|
|
3
57
|
## Examples
|
|
4
58
|
|
|
5
59
|
### Basic
|
|
6
60
|
|
|
61
|
+
展示 AI 对话流视图的基本用法,通过 conversationId 加载已有对话。
|
|
62
|
+
|
|
63
|
+
```yaml preview
|
|
64
|
+
brick: ai-portal.chat-stream
|
|
65
|
+
properties:
|
|
66
|
+
conversationId: conv-001
|
|
67
|
+
showFeedback: true
|
|
68
|
+
events:
|
|
69
|
+
share:
|
|
70
|
+
action: console.log
|
|
71
|
+
terminate:
|
|
72
|
+
action: console.log
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### With Feedback
|
|
76
|
+
|
|
77
|
+
开启反馈功能,并在反馈提交后通知组件结果。
|
|
78
|
+
|
|
79
|
+
```yaml preview
|
|
80
|
+
- brick: ai-portal.chat-stream
|
|
81
|
+
properties:
|
|
82
|
+
id: chatStream
|
|
83
|
+
conversationId: conv-001
|
|
84
|
+
showFeedback: true
|
|
85
|
+
showFeedbackAfterFailed: true
|
|
86
|
+
showFeedbackOnView: true
|
|
87
|
+
events:
|
|
88
|
+
feedback.submit:
|
|
89
|
+
useProvider: my-feedback-provider
|
|
90
|
+
args:
|
|
91
|
+
- <% EVENT.detail %>
|
|
92
|
+
callback:
|
|
93
|
+
success:
|
|
94
|
+
target: "#chatStream"
|
|
95
|
+
method: feedbackSubmitDone
|
|
96
|
+
error:
|
|
97
|
+
target: "#chatStream"
|
|
98
|
+
method: feedbackSubmitFailed
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### With UI Switch
|
|
102
|
+
|
|
103
|
+
显示切换到画布视图的按钮,并监听切换事件。
|
|
104
|
+
|
|
105
|
+
```yaml preview
|
|
106
|
+
brick: ai-portal.chat-stream
|
|
107
|
+
properties:
|
|
108
|
+
conversationId: conv-001
|
|
109
|
+
showUiSwitch: true
|
|
110
|
+
events:
|
|
111
|
+
ui.switch:
|
|
112
|
+
action: console.log
|
|
113
|
+
detail.change:
|
|
114
|
+
action: console.log
|
|
115
|
+
split.change:
|
|
116
|
+
action: console.log
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Replay Mode
|
|
120
|
+
|
|
121
|
+
使用回放模式展示历史对话过程。
|
|
122
|
+
|
|
123
|
+
```yaml preview
|
|
124
|
+
brick: ai-portal.chat-stream
|
|
125
|
+
properties:
|
|
126
|
+
conversationId: conv-001
|
|
127
|
+
replay: true
|
|
128
|
+
replayDelay: 1
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### With File Upload and Employees
|
|
132
|
+
|
|
133
|
+
配置文件上传与数字人提及功能。
|
|
134
|
+
|
|
7
135
|
```yaml preview
|
|
8
136
|
brick: ai-portal.chat-stream
|
|
9
137
|
properties:
|
|
10
|
-
|
|
138
|
+
conversationId: conv-001
|
|
139
|
+
uploadOptions:
|
|
140
|
+
enabled: true
|
|
141
|
+
accept: image/*,.pdf
|
|
142
|
+
maxFiles: 3
|
|
143
|
+
aiEmployees:
|
|
144
|
+
- employeeId: emp001
|
|
145
|
+
name: 运维工程师小李
|
|
146
|
+
showCases:
|
|
147
|
+
- conversationId: show-001
|
|
148
|
+
title: 服务器故障排查
|
|
149
|
+
summary: 通过 AI 快速定位服务器异常
|
|
150
|
+
scenario: ops
|
|
151
|
+
exampleProjects:
|
|
152
|
+
- instanceId: proj-001
|
|
153
|
+
name: 示例项目
|
|
154
|
+
tryItOutUrl: /try-it-out
|
|
155
|
+
events:
|
|
156
|
+
share:
|
|
157
|
+
action: console.log
|
|
11
158
|
```
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
tagName: ai-portal.chat-stream
|
|
3
|
+
displayName: WrappedAiPortalChatStream
|
|
4
|
+
description: AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。
|
|
5
|
+
category: ai-portal
|
|
6
|
+
source: "@next-bricks/ai-portal"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# WrappedAiPortalChatStream
|
|
10
|
+
|
|
11
|
+
> AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。
|
|
12
|
+
|
|
13
|
+
## 导入
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { WrappedAiPortalChatStream } from "@easyops/wrapped-components";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Props
|
|
20
|
+
|
|
21
|
+
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|
|
22
|
+
| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |
|
|
23
|
+
| conversationId | `string \| undefined` | 否 | - | 对话 ID |
|
|
24
|
+
| initialRequest | `RequestStore \| undefined \| null` | 否 | - | 初始请求数据。仅初始设置有效。 |
|
|
25
|
+
| replay | `boolean \| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |
|
|
26
|
+
| replayDelay | `number \| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |
|
|
27
|
+
| supports | `Record<string, boolean> \| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |
|
|
28
|
+
| showHumanActions | `boolean \| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |
|
|
29
|
+
| showFeedback | `boolean \| undefined` | 否 | - | 是否显示反馈按钮 |
|
|
30
|
+
| showFeedbackAfterFailed | `boolean \| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |
|
|
31
|
+
| showFeedbackOnView | `boolean \| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |
|
|
32
|
+
| showUiSwitch | `boolean \| undefined` | 否 | - | 是否显示切换到画布视图的按钮 |
|
|
33
|
+
| hideMermaid | `boolean \| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |
|
|
34
|
+
| previewUrlTemplate | `string \| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |
|
|
35
|
+
| showCases | `ShowCaseType[] \| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |
|
|
36
|
+
| exampleProjects | `ExampleProject[] \| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |
|
|
37
|
+
| tryItOutUrl | `string \| undefined` | 否 | - | "试一试"跳转 URL |
|
|
38
|
+
| aiEmployees | `AIEmployee[] \| undefined` | 否 | - | 可 @ 提及的数字人列表 |
|
|
39
|
+
| commands | `Command[] \| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |
|
|
40
|
+
| uploadOptions | `UploadOptions \| undefined` | 否 | - | 文件上传配置 |
|
|
41
|
+
|
|
42
|
+
## Events
|
|
43
|
+
|
|
44
|
+
| 事件 | detail | 说明 |
|
|
45
|
+
| ---------------- | ------------------------------------------------------------------------------- | -------------------------------- |
|
|
46
|
+
| onShare | `void` | 用户点击分享时触发 |
|
|
47
|
+
| onTerminate | `void` | 用户点击终止任务时触发 |
|
|
48
|
+
| onFeedbackSubmit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |
|
|
49
|
+
| onFeedbackOnView | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |
|
|
50
|
+
| onUiSwitch | `"canvas"` — 切换目标 UI 模式,值为 "canvas" | 用户点击切换到画布视图按钮时触发 |
|
|
51
|
+
| onDetailChange | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |
|
|
52
|
+
| onSplitChange | `boolean` — 是否已切换到分屏模式 | 分屏状态切换时触发 |
|
|
53
|
+
|
|
54
|
+
## Methods
|
|
55
|
+
|
|
56
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
57
|
+
| -------------------- | -------------------------- | ------ | -------------------------------------- |
|
|
58
|
+
| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |
|
|
59
|
+
| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |
|
|
60
|
+
| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |
|
|
61
|
+
| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
### Basic
|
|
66
|
+
|
|
67
|
+
展示 AI 对话流视图的基本用法,通过 conversationId 加载已有对话。
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
<WrappedAiPortalChatStream
|
|
71
|
+
conversationId="conv-001"
|
|
72
|
+
showFeedback={true}
|
|
73
|
+
onShare={(e) => console.log(e.detail)}
|
|
74
|
+
onTerminate={(e) => console.log(e.detail)}
|
|
75
|
+
/>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### With Feedback
|
|
79
|
+
|
|
80
|
+
开启反馈功能,并在反馈提交后通知组件结果。
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
const ref = useRef<any>();
|
|
84
|
+
|
|
85
|
+
const handleFeedbackSubmit = async (e: CustomEvent) => {
|
|
86
|
+
try {
|
|
87
|
+
await submitFeedback(e.detail);
|
|
88
|
+
ref.current?.feedbackSubmitDone();
|
|
89
|
+
} catch {
|
|
90
|
+
ref.current?.feedbackSubmitFailed();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
<WrappedAiPortalChatStream
|
|
95
|
+
ref={ref}
|
|
96
|
+
conversationId="conv-001"
|
|
97
|
+
showFeedback={true}
|
|
98
|
+
showFeedbackAfterFailed={true}
|
|
99
|
+
showFeedbackOnView={true}
|
|
100
|
+
onFeedbackSubmit={handleFeedbackSubmit}
|
|
101
|
+
/>;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### With UI Switch
|
|
105
|
+
|
|
106
|
+
显示切换到画布视图的按钮,并监听切换事件。
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
<WrappedAiPortalChatStream
|
|
110
|
+
conversationId="conv-001"
|
|
111
|
+
showUiSwitch={true}
|
|
112
|
+
onUiSwitch={(e) => console.log(e.detail)}
|
|
113
|
+
onDetailChange={(e) => console.log(e.detail)}
|
|
114
|
+
onSplitChange={(e) => console.log(e.detail)}
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Replay Mode
|
|
119
|
+
|
|
120
|
+
使用回放模式展示历史对话过程。
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
<WrappedAiPortalChatStream
|
|
124
|
+
conversationId="conv-001"
|
|
125
|
+
replay={true}
|
|
126
|
+
replayDelay={1}
|
|
127
|
+
/>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### With File Upload and Employees
|
|
131
|
+
|
|
132
|
+
配置文件上传与数字人提及功能。
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
<WrappedAiPortalChatStream
|
|
136
|
+
conversationId="conv-001"
|
|
137
|
+
uploadOptions={{
|
|
138
|
+
enabled: true,
|
|
139
|
+
accept: "image/*,.pdf",
|
|
140
|
+
maxFiles: 3,
|
|
141
|
+
}}
|
|
142
|
+
aiEmployees={[{ employeeId: "emp001", name: "运维工程师小李" }]}
|
|
143
|
+
showCases={[
|
|
144
|
+
{
|
|
145
|
+
conversationId: "show-001",
|
|
146
|
+
title: "服务器故障排查",
|
|
147
|
+
summary: "通过 AI 快速定位服务器异常",
|
|
148
|
+
scenario: "ops",
|
|
149
|
+
},
|
|
150
|
+
]}
|
|
151
|
+
exampleProjects={[{ instanceId: "proj-001", name: "示例项目" }]}
|
|
152
|
+
tryItOutUrl="/try-it-out"
|
|
153
|
+
onShare={(e) => console.log(e.detail)}
|
|
154
|
+
/>
|
|
155
|
+
```
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
tagName: ai-portal.cruise-canvas
|
|
3
|
+
displayName: WrappedAiPortalCruiseCanvas
|
|
4
|
+
description: AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。
|
|
5
|
+
category: ai-portal
|
|
6
|
+
source: "@next-bricks/ai-portal"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# ai-portal.cruise-canvas
|
|
10
|
+
|
|
11
|
+
> AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。
|
|
12
|
+
|
|
13
|
+
## Props
|
|
14
|
+
|
|
15
|
+
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|
|
16
|
+
| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |
|
|
17
|
+
| conversationId | `string \| undefined` | 否 | - | 对话 ID |
|
|
18
|
+
| initialRequest | `RequestStore \| undefined \| null` | 否 | - | 初始请求数据。仅初始设置有效。 |
|
|
19
|
+
| replay | `boolean \| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |
|
|
20
|
+
| replayDelay | `number \| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |
|
|
21
|
+
| supports | `Record<string, boolean> \| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |
|
|
22
|
+
| showHiddenJobs | `boolean \| undefined` | 否 | - | 是否显示隐藏的 Job 节点 |
|
|
23
|
+
| showHumanActions | `boolean \| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |
|
|
24
|
+
| showFeedback | `boolean \| undefined` | 否 | - | 是否显示反馈按钮 |
|
|
25
|
+
| showFeedbackAfterFailed | `boolean \| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |
|
|
26
|
+
| showFeedbackOnView | `boolean \| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |
|
|
27
|
+
| showUiSwitch | `boolean \| undefined` | 否 | - | 是否显示切换到对话流视图的按钮 |
|
|
28
|
+
| hideMermaid | `boolean \| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |
|
|
29
|
+
| showJsxEditor | `boolean \| undefined` | 否 | - | 是否显示 JSX 编辑器按钮 |
|
|
30
|
+
| previewUrlTemplate | `string \| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |
|
|
31
|
+
| showCases | `ShowCaseType[] \| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |
|
|
32
|
+
| exampleProjects | `ExampleProject[] \| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |
|
|
33
|
+
| tryItOutUrl | `string \| undefined` | 否 | - | "试一试"跳转 URL |
|
|
34
|
+
| separateInstructions | `boolean \| undefined` | 否 | - | 是否将任务说明独立展示,而非内联在节点中 |
|
|
35
|
+
| aiEmployees | `AIEmployee[] \| undefined` | 否 | - | 可 @ 提及的数字人列表 |
|
|
36
|
+
| commands | `Command[] \| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |
|
|
37
|
+
| uploadOptions | `UploadOptions \| undefined` | 否 | - | 文件上传配置 |
|
|
38
|
+
|
|
39
|
+
## Events
|
|
40
|
+
|
|
41
|
+
| 事件 | detail | 说明 |
|
|
42
|
+
| ---------------- | ------------------------------------------------------------------------------- | ---------------------------------- |
|
|
43
|
+
| share | `void` | 用户点击分享时触发 |
|
|
44
|
+
| terminate | `void` | 用户点击终止任务时触发 |
|
|
45
|
+
| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |
|
|
46
|
+
| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |
|
|
47
|
+
| ui.switch | `"chat"` — 切换目标 UI 模式,值为 "chat" | 用户点击切换到对话流视图按钮时触发 |
|
|
48
|
+
| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |
|
|
49
|
+
|
|
50
|
+
## Methods
|
|
51
|
+
|
|
52
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
53
|
+
| -------------------- | -------------------------- | ------ | -------------------------------------- |
|
|
54
|
+
| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |
|
|
55
|
+
| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |
|
|
56
|
+
| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |
|
|
57
|
+
| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |
|
|
58
|
+
|
|
59
|
+
## Examples
|
|
60
|
+
|
|
61
|
+
### Basic
|
|
62
|
+
|
|
63
|
+
展示 AI 任务画布的基本用法,通过 conversationId 加载已有对话的执行过程。
|
|
64
|
+
|
|
65
|
+
```yaml preview
|
|
66
|
+
brick: ai-portal.cruise-canvas
|
|
67
|
+
properties:
|
|
68
|
+
conversationId: conv-001
|
|
69
|
+
events:
|
|
70
|
+
share:
|
|
71
|
+
action: console.log
|
|
72
|
+
terminate:
|
|
73
|
+
action: console.log
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### With Feedback
|
|
77
|
+
|
|
78
|
+
开启反馈功能,在任务完成后收集用户反馈。
|
|
79
|
+
|
|
80
|
+
```yaml preview
|
|
81
|
+
- brick: ai-portal.cruise-canvas
|
|
82
|
+
properties:
|
|
83
|
+
id: cruiseCanvas
|
|
84
|
+
conversationId: conv-001
|
|
85
|
+
showFeedback: true
|
|
86
|
+
showFeedbackAfterFailed: true
|
|
87
|
+
showFeedbackOnView: true
|
|
88
|
+
events:
|
|
89
|
+
feedback.submit:
|
|
90
|
+
useProvider: my-feedback-provider
|
|
91
|
+
args:
|
|
92
|
+
- <% EVENT.detail %>
|
|
93
|
+
callback:
|
|
94
|
+
success:
|
|
95
|
+
target: "#cruiseCanvas"
|
|
96
|
+
method: feedbackSubmitDone
|
|
97
|
+
error:
|
|
98
|
+
target: "#cruiseCanvas"
|
|
99
|
+
method: feedbackSubmitFailed
|
|
100
|
+
detail.change:
|
|
101
|
+
action: console.log
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### With UI Switch and Canvas Options
|
|
105
|
+
|
|
106
|
+
启用 UI 切换按钮,并展示隐藏节点和独立说明。
|
|
107
|
+
|
|
108
|
+
```yaml preview
|
|
109
|
+
brick: ai-portal.cruise-canvas
|
|
110
|
+
properties:
|
|
111
|
+
conversationId: conv-001
|
|
112
|
+
showUiSwitch: true
|
|
113
|
+
showHiddenJobs: true
|
|
114
|
+
showHumanActions: true
|
|
115
|
+
separateInstructions: true
|
|
116
|
+
showJsxEditor: true
|
|
117
|
+
events:
|
|
118
|
+
ui.switch:
|
|
119
|
+
action: console.log
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Replay Mode
|
|
123
|
+
|
|
124
|
+
使用回放模式展示历史任务的执行过程。
|
|
125
|
+
|
|
126
|
+
```yaml preview
|
|
127
|
+
brick: ai-portal.cruise-canvas
|
|
128
|
+
properties:
|
|
129
|
+
conversationId: conv-001
|
|
130
|
+
replay: true
|
|
131
|
+
replayDelay: 2
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### With Upload and Show Cases
|
|
135
|
+
|
|
136
|
+
配置文件上传及示例场景,丰富画布的入口展示。
|
|
137
|
+
|
|
138
|
+
```yaml preview
|
|
139
|
+
brick: ai-portal.cruise-canvas
|
|
140
|
+
properties:
|
|
141
|
+
conversationId: conv-001
|
|
142
|
+
uploadOptions:
|
|
143
|
+
enabled: true
|
|
144
|
+
accept: image/*,.pdf
|
|
145
|
+
maxFiles: 3
|
|
146
|
+
showCases:
|
|
147
|
+
- conversationId: show-001
|
|
148
|
+
title: 自动化部署流程
|
|
149
|
+
summary: 通过 AI 自动完成服务部署
|
|
150
|
+
scenario: devops
|
|
151
|
+
exampleProjects:
|
|
152
|
+
- instanceId: proj-001
|
|
153
|
+
name: 示例项目
|
|
154
|
+
tryItOutUrl: /try-it-out
|
|
155
|
+
previewUrlTemplate: /preview/{viewId}
|
|
156
|
+
events:
|
|
157
|
+
share:
|
|
158
|
+
action: console.log
|
|
159
|
+
```
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
tagName: ai-portal.cruise-canvas
|
|
3
|
+
displayName: WrappedAiPortalCruiseCanvas
|
|
4
|
+
description: AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。
|
|
5
|
+
category: ai-portal
|
|
6
|
+
source: "@next-bricks/ai-portal"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# WrappedAiPortalCruiseCanvas
|
|
10
|
+
|
|
11
|
+
> AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。
|
|
12
|
+
|
|
13
|
+
## 导入
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { WrappedAiPortalCruiseCanvas } from "@easyops/wrapped-components";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Props
|
|
20
|
+
|
|
21
|
+
| 属性 | 类型 | 必填 | 默认值 | 说明 |
|
|
22
|
+
| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |
|
|
23
|
+
| conversationId | `string \| undefined` | 否 | - | 对话 ID |
|
|
24
|
+
| initialRequest | `RequestStore \| undefined \| null` | 否 | - | 初始请求数据。仅初始设置有效。 |
|
|
25
|
+
| replay | `boolean \| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |
|
|
26
|
+
| replayDelay | `number \| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |
|
|
27
|
+
| supports | `Record<string, boolean> \| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |
|
|
28
|
+
| showHiddenJobs | `boolean \| undefined` | 否 | - | 是否显示隐藏的 Job 节点 |
|
|
29
|
+
| showHumanActions | `boolean \| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |
|
|
30
|
+
| showFeedback | `boolean \| undefined` | 否 | - | 是否显示反馈按钮 |
|
|
31
|
+
| showFeedbackAfterFailed | `boolean \| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |
|
|
32
|
+
| showFeedbackOnView | `boolean \| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |
|
|
33
|
+
| showUiSwitch | `boolean \| undefined` | 否 | - | 是否显示切换到对话流视图的按钮 |
|
|
34
|
+
| hideMermaid | `boolean \| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |
|
|
35
|
+
| showJsxEditor | `boolean \| undefined` | 否 | - | 是否显示 JSX 编辑器按钮 |
|
|
36
|
+
| previewUrlTemplate | `string \| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |
|
|
37
|
+
| showCases | `ShowCaseType[] \| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |
|
|
38
|
+
| exampleProjects | `ExampleProject[] \| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |
|
|
39
|
+
| tryItOutUrl | `string \| undefined` | 否 | - | "试一试"跳转 URL |
|
|
40
|
+
| separateInstructions | `boolean \| undefined` | 否 | - | 是否将任务说明独立展示,而非内联在节点中 |
|
|
41
|
+
| aiEmployees | `AIEmployee[] \| undefined` | 否 | - | 可 @ 提及的数字人列表 |
|
|
42
|
+
| commands | `Command[] \| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |
|
|
43
|
+
| uploadOptions | `UploadOptions \| undefined` | 否 | - | 文件上传配置 |
|
|
44
|
+
|
|
45
|
+
## Events
|
|
46
|
+
|
|
47
|
+
| 事件 | detail | 说明 |
|
|
48
|
+
| ---------------- | ------------------------------------------------------------------------------- | ---------------------------------- |
|
|
49
|
+
| onShare | `void` | 用户点击分享时触发 |
|
|
50
|
+
| onTerminate | `void` | 用户点击终止任务时触发 |
|
|
51
|
+
| onFeedbackSubmit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |
|
|
52
|
+
| onFeedbackOnView | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |
|
|
53
|
+
| onUiSwitch | `"chat"` — 切换目标 UI 模式,值为 "chat" | 用户点击切换到对话流视图按钮时触发 |
|
|
54
|
+
| onDetailChange | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |
|
|
55
|
+
|
|
56
|
+
## Methods
|
|
57
|
+
|
|
58
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
59
|
+
| -------------------- | -------------------------- | ------ | -------------------------------------- |
|
|
60
|
+
| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |
|
|
61
|
+
| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |
|
|
62
|
+
| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |
|
|
63
|
+
| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
|
|
67
|
+
### Basic
|
|
68
|
+
|
|
69
|
+
展示 AI 任务画布的基本用法,通过 conversationId 加载已有对话的执行过程。
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
<WrappedAiPortalCruiseCanvas
|
|
73
|
+
conversationId="conv-001"
|
|
74
|
+
onShare={(e) => console.log(e.detail)}
|
|
75
|
+
onTerminate={(e) => console.log(e.detail)}
|
|
76
|
+
/>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### With Feedback
|
|
80
|
+
|
|
81
|
+
开启反馈功能,在任务完成后收集用户反馈。
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
const ref = useRef<any>();
|
|
85
|
+
|
|
86
|
+
const handleFeedbackSubmit = async (e: CustomEvent) => {
|
|
87
|
+
try {
|
|
88
|
+
await submitFeedback(e.detail);
|
|
89
|
+
ref.current?.feedbackSubmitDone();
|
|
90
|
+
} catch {
|
|
91
|
+
ref.current?.feedbackSubmitFailed();
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
<WrappedAiPortalCruiseCanvas
|
|
96
|
+
ref={ref}
|
|
97
|
+
conversationId="conv-001"
|
|
98
|
+
showFeedback={true}
|
|
99
|
+
showFeedbackAfterFailed={true}
|
|
100
|
+
showFeedbackOnView={true}
|
|
101
|
+
onFeedbackSubmit={handleFeedbackSubmit}
|
|
102
|
+
onDetailChange={(e) => console.log(e.detail)}
|
|
103
|
+
/>;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### With UI Switch and Canvas Options
|
|
107
|
+
|
|
108
|
+
启用 UI 切换按钮,并展示隐藏节点和独立说明。
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
<WrappedAiPortalCruiseCanvas
|
|
112
|
+
conversationId="conv-001"
|
|
113
|
+
showUiSwitch={true}
|
|
114
|
+
showHiddenJobs={true}
|
|
115
|
+
showHumanActions={true}
|
|
116
|
+
separateInstructions={true}
|
|
117
|
+
showJsxEditor={true}
|
|
118
|
+
onUiSwitch={(e) => console.log(e.detail)}
|
|
119
|
+
/>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Replay Mode
|
|
123
|
+
|
|
124
|
+
使用回放模式展示历史任务的执行过程。
|
|
125
|
+
|
|
126
|
+
```tsx
|
|
127
|
+
<WrappedAiPortalCruiseCanvas
|
|
128
|
+
conversationId="conv-001"
|
|
129
|
+
replay={true}
|
|
130
|
+
replayDelay={2}
|
|
131
|
+
/>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### With Upload and Show Cases
|
|
135
|
+
|
|
136
|
+
配置文件上传及示例场景,丰富画布的入口展示。
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
<WrappedAiPortalCruiseCanvas
|
|
140
|
+
conversationId="conv-001"
|
|
141
|
+
uploadOptions={{
|
|
142
|
+
enabled: true,
|
|
143
|
+
accept: "image/*,.pdf",
|
|
144
|
+
maxFiles: 3,
|
|
145
|
+
}}
|
|
146
|
+
showCases={[
|
|
147
|
+
{
|
|
148
|
+
conversationId: "show-001",
|
|
149
|
+
title: "自动化部署流程",
|
|
150
|
+
summary: "通过 AI 自动完成服务部署",
|
|
151
|
+
scenario: "devops",
|
|
152
|
+
},
|
|
153
|
+
]}
|
|
154
|
+
exampleProjects={[{ instanceId: "proj-001", name: "示例项目" }]}
|
|
155
|
+
tryItOutUrl="/try-it-out"
|
|
156
|
+
previewUrlTemplate="/preview/{viewId}"
|
|
157
|
+
onShare={(e) => console.log(e.detail)}
|
|
158
|
+
/>
|
|
159
|
+
```
|