@next-bricks/ai-portal 0.70.4 → 0.70.5

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.
@@ -1,16 +1,7 @@
1
1
  {
2
- "ai-portal.cruise-canvas": {
3
- "doc": "---\ntagName: ai-portal.cruise-canvas\ndisplayName: WrappedAiPortalCruiseCanvas\ndescription: AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.cruise-canvas\n\n> AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |\n| conversationId | `string \\| undefined` | 否 | - | 对话 ID |\n| initialRequest | `RequestStore \\| undefined \\| null` | 否 | - | 初始请求数据。仅初始设置有效。 |\n| replay | `boolean \\| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |\n| replayDelay | `number \\| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |\n| supports | `Record<string, boolean> \\| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |\n| showHiddenJobs | `boolean \\| undefined` | 否 | - | 是否显示隐藏的 Job 节点 |\n| showHumanActions | `boolean \\| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |\n| showFeedback | `boolean \\| undefined` | 否 | - | 是否显示反馈按钮 |\n| showFeedbackAfterFailed | `boolean \\| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |\n| showFeedbackOnView | `boolean \\| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |\n| showUiSwitch | `boolean \\| undefined` | 否 | - | 是否显示切换到对话流视图的按钮 |\n| hideMermaid | `boolean \\| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |\n| showJsxEditor | `boolean \\| undefined` | 否 | - | 是否显示 JSX 编辑器按钮 |\n| previewUrlTemplate | `string \\| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |\n| showCases | `ShowCaseType[] \\| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |\n| exampleProjects | `ExampleProject[] \\| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |\n| tryItOutUrl | `string \\| undefined` | 否 | - | \"试一试\"跳转 URL |\n| separateInstructions | `boolean \\| undefined` | 否 | - | 是否将任务说明独立展示,而非内联在节点中 |\n| aiEmployees | `AIEmployee[] \\| undefined` | 否 | - | 可 @ 提及的数字人列表 |\n| commands | `Command[] \\| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |\n| uploadOptions | `UploadOptions \\| undefined` | 否 | - | 文件上传配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ---------------- | ------------------------------------------------------------------------------- | ---------------------------------- |\n| share | `void` | 用户点击分享时触发 |\n| terminate | `void` | 用户点击终止任务时触发 |\n| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |\n| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |\n| ui.switch | `\"chat\"` — 切换目标 UI 模式,值为 \"chat\" | 用户点击切换到对话流视图按钮时触发 |\n| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| -------------------- | -------------------------- | ------ | -------------------------------------- |\n| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |\n| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |\n| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |\n| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |\n\n## Examples\n\n### Basic\n\n展示 AI 任务画布的基本用法,通过 conversationId 加载已有对话的执行过程。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\nevents:\n share:\n action: console.log\n terminate:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"terminate\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Feedback\n\n开启反馈功能,在任务完成后收集用户反馈。\n\n```yaml preview\n- brick: ai-portal.cruise-canvas\n properties:\n id: cruiseCanvas\n conversationId: conv-001\n showFeedback: true\n showFeedbackAfterFailed: true\n showFeedbackOnView: true\n events:\n feedback.submit:\n useProvider: my-feedback-provider\n args:\n - <% EVENT.detail %>\n callback:\n success:\n target: \"#cruiseCanvas\"\n method: feedbackSubmitDone\n error:\n target: \"#cruiseCanvas\"\n method: feedbackSubmitFailed\n detail.change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# show-feedback\n# show-feedback-after-failed\n# show-feedback-on-view\n# id=\"cruiseCanvas\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const cruiseCanvas = document.getElementById(\"cruiseCanvas\");\n# cruiseCanvas.addEventListener(\"feedback.submit\", (e) => {\n# const provider = document.createElement(\"my-feedback-provider\");\n# const promise = Promise.resolve(provider.resolve(e.detail));\n# promise.then((r) => {\n# const brick = document.querySelector(\"#cruiseCanvas\");\n# brick.feedbackSubmitDone();\n# });\n# promise.catch((r) => {\n# const brick = document.querySelector(\"#cruiseCanvas\");\n# brick.feedbackSubmitFailed();\n# });\n# });\n# cruiseCanvas.addEventListener(\"detail.change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With UI Switch and Canvas Options\n\n启用 UI 切换按钮,并展示隐藏节点和独立说明。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n showUiSwitch: true\n showHiddenJobs: true\n showHumanActions: true\n separateInstructions: true\n showJsxEditor: true\nevents:\n ui.switch:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# show-ui-switch\n# show-hidden-jobs\n# show-human-actions\n# separate-instructions\n# show-jsx-editor\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"ui.switch\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Replay Mode\n\n使用回放模式展示历史任务的执行过程。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n replay: true\n replayDelay: 2\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# replay\n# replay-delay=\"2\"\n# ></ai-portal.cruise-canvas>\n# \n```\n\n### With Upload and Show Cases\n\n配置文件上传及示例场景,丰富画布的入口展示。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n uploadOptions:\n enabled: true\n accept: image/*,.pdf\n maxFiles: 3\n showCases:\n - conversationId: show-001\n title: 自动化部署流程\n summary: 通过 AI 自动完成服务部署\n scenario: devops\n exampleProjects:\n - instanceId: proj-001\n name: 示例项目\n tryItOutUrl: /try-it-out\n previewUrlTemplate: /preview/{viewId}\nevents:\n share:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# try-it-out-url=\"/try-it-out\"\n# preview-url-template=\"/preview/{viewId}\"\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.uploadOptions = {\n# enabled: true,\n# accept: \"image/*,.pdf\",\n# maxFiles: 3,\n# };\n# brick_1.showCases = [\n# {\n# conversationId: \"show-001\",\n# title: \"自动化部署流程\",\n# summary: \"通过 AI 自动完成服务部署\",\n# scenario: \"devops\",\n# },\n# ];\n# brick_1.exampleProjects = [\n# {\n# instanceId: \"proj-001\",\n# name: \"示例项目\",\n# },\n# ];\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
4
- },
5
2
  "ai-portal.chat-box": {
6
3
  "doc": "---\ntagName: ai-portal.chat-box\ndisplayName: WrappedAiPortalChatBox\ndescription: 大型聊天输入框,用于首页,支持命令联想、@提及数字人、文件上传等功能。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.chat-box\n\n> 大型聊天输入框,用于首页,支持命令联想、@提及数字人、文件上传等功能。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ------------- | ---------------------------- | ---- | ------ | ----------------------------------- |\n| disabled | `boolean \\| undefined` | 否 | - | 是否禁用输入框 |\n| placeholder | `string \\| undefined` | 否 | - | 输入框占位文字 |\n| autoFocus | `boolean \\| undefined` | 否 | - | 是否自动聚焦 |\n| aiEmployees | `AIEmployee[] \\| undefined` | 否 | - | 可 @ 提及的数字人列表 |\n| commands | `Command[] \\| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |\n| uploadOptions | `UploadOptions \\| undefined` | 否 | - | 文件上传配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| -------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |\n| message.submit | `string` — 用户输入的消息文本内容 | 用户提交消息时触发(已废弃,请使用 chat.submit 事件) |\n| chat.submit | `ChatPayload` — { content: 消息内容, files: 上传的文件列表, cmd: 命令载荷, aiEmployeeId: @提及的数字人 ID } | 用户提交聊天消息时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| ------------ | ------------------------- | ------ | ------------------ |\n| setValue | `(value: string) => void` | `void` | 设置输入框的值 |\n| getValue | `() => void` | `void` | 获取输入框当前的值 |\n| focusOnInput | `() => void` | `void` | 使输入框获得焦点 |\n\n## Slots\n\n| 名称 | 说明 |\n| ------- | -------------------------------------------- |\n| actions | 操作栏左侧插槽,用于放置动作按钮等自定义内容 |\n\n## Examples\n\n### Basic\n\n展示大型聊天输入框的基本用法,配置占位文字和提交事件监听。\n\n```yaml preview\nbrick: ai-portal.chat-box\nproperties:\n placeholder: 请输入您的问题,按 Enter 发送\nevents:\n chat.submit:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-box\n# placeholder=\"请输入您的问题,按 Enter 发送\"\n# id=\"brick-1\"\n# ></ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"chat.submit\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Action Buttons\n\n通过 actions 插槽添加动作按钮,实现深度思考和联网搜索等功能入口。\n\n```yaml preview\nbrick: ai-portal.chat-box\nproperties:\n placeholder: 请输入您的问题\nchildren:\n - brick: ai-portal.action-buttons\n slot: actions\n properties:\n items:\n - key: think\n text: 深度思考\n icon:\n lib: antd\n theme: outlined\n icon: reddit\n - key: networking\n text: 联网搜索\n icon:\n lib: antd\n theme: outlined\n icon: global\nevents:\n chat.submit:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-box placeholder=\"请输入您的问题\" id=\"brick-1\">\n# <ai-portal.action-buttons\n# slot=\"actions\"\n# id=\"brick-2\"\n# ></ai-portal.action-buttons>\n# </ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"chat.submit\", (e) => {\n# console.log(e.detail);\n# });\n# \n# const brick_2 = document.getElementById(\"brick-2\");\n# brick_2.items = [\n# {\n# key: \"think\",\n# text: \"深度思考\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"reddit\",\n# },\n# },\n# {\n# key: \"networking\",\n# text: \"联网搜索\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"global\",\n# },\n# },\n# ];\n# </script>\n# \n```\n\n### With File Upload\n\n配置 uploadOptions 属性,启用文件上传功能。\n\n```yaml preview\nbrick: ai-portal.chat-box\nproperties:\n placeholder: 请输入您的问题,或拖入文件\n uploadOptions:\n enabled: true\n accept: image/*,.pdf\n maxFiles: 5\n maxSize: 10485760\n readableAccept: 图片或 PDF\n readableMaxSize: 10MB\nevents:\n chat.submit:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-box\n# placeholder=\"请输入您的问题,或拖入文件\"\n# id=\"brick-1\"\n# ></ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.uploadOptions = {\n# enabled: true,\n# accept: \"image/*,.pdf\",\n# maxFiles: 5,\n# maxSize: 10485760,\n# readableAccept: \"图片或 PDF\",\n# readableMaxSize: \"10MB\",\n# };\n# brick_1.addEventListener(\"chat.submit\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With AI Employees\n\n配置 aiEmployees 属性,支持在输入时 @ 提及数字人。\n\n```yaml preview\nbrick: ai-portal.chat-box\nproperties:\n placeholder: 输入 @ 可提及数字人\n aiEmployees:\n - employeeId: emp001\n name: 运维工程师小李\n - employeeId: emp002\n name: 数据分析师小张\nevents:\n chat.submit:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-box\n# placeholder=\"输入 @ 可提及数字人\"\n# id=\"brick-1\"\n# ></ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.aiEmployees = [\n# {\n# employeeId: \"emp001\",\n# name: \"运维工程师小李\",\n# },\n# {\n# employeeId: \"emp002\",\n# name: \"数据分析师小张\",\n# },\n# ];\n# brick_1.addEventListener(\"chat.submit\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Programmatic Control\n\n通过方法调用控制输入框,实现预填内容和焦点管理。\n\n```yaml preview\n- brick: eo-button\n properties:\n textContent: 填写示例问题\n events:\n click:\n target: \"#chatBox\"\n method: setValue\n args:\n - 如何优化服务器性能?\n- brick: ai-portal.chat-box\n properties:\n id: chatBox\n placeholder: 请输入您的问题\n events:\n chat.submit:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <eo-button id=\"brick-1\">填写示例问题</eo-button>\n# <ai-portal.chat-box\n# placeholder=\"请输入您的问题\"\n# id=\"chatBox\"\n# ></ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"click\", (e) => {\n# const brick = document.querySelector(\"#chatBox\");\n# brick.setValue(\"如何优化服务器性能?\");\n# });\n# \n# const chatBox = document.getElementById(\"chatBox\");\n# chatBox.addEventListener(\"chat.submit\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
7
4
  },
8
- "ai-portal.home-container": {
9
- "doc": "---\ntagName: ai-portal.home-container\ndisplayName: WrappedAiPortalHomeContainer\ndescription: AI Portal 首页容器,通过 sticky 属性控制顶部吸附行为,内容通过默认插槽传入。\ncategory: layout-component\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.home-container\n\n> AI Portal 首页容器,通过 sticky 属性控制顶部吸附行为,内容通过默认插槽传入。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ------ | --------- | ---- | ------ | ----------------------------------------------------------------- |\n| sticky | `boolean` | 否 | - | 是否启用顶部吸附样式,通过 CSS 属性选择器控制布局,不触发重新渲染 |\n\n## Slots\n\n| 名称 | 说明 |\n| ------- | ------------ |\n| default | 页面内容区域 |\n\n## Examples\n\n### Basic\n\n作为页面内容的包裹容器,传入子构件。\n\n```yaml preview\nbrick: ai-portal.home-container\nchildren:\n - brick: span\n properties:\n textContent: Hello world\n style:\n padding: 16px\n display: block\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.home-container>\n# <span style=\"padding: 16px; display: block\">Hello world</span>\n# </ai-portal.home-container>\n# \n```\n\n### With Sticky\n\n启用 sticky 吸附样式的首页容器。\n\n```yaml preview\nbrick: ai-portal.home-container\nproperties:\n sticky: true\nchildren:\n - brick: span\n properties:\n textContent: 吸附布局内容\n style:\n padding: 16px\n display: block\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.home-container sticky>\n# <span style=\"padding: 16px; display: block\">吸附布局内容</span>\n# </ai-portal.home-container>\n# \n```\n"
10
- },
11
- "ai-portal.stat-with-mini-chart": {
12
- "doc": "---\ntagName: ai-portal.stat-with-mini-chart\ndisplayName: WrappedAiPortalStatWithMiniChart\ndescription: 带迷你折线图的统计数据展示构件,在统计数值旁边渲染一个迷你折线图。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.stat-with-mini-chart\n\n> 带迷你折线图的统计数据展示构件,在统计数值旁边渲染一个迷你折线图。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------- | -------------------------- | ---- | ---------------------- | --------------------------------------------------- |\n| label | `string` | 否 | - | 统计指标标签名称 |\n| value | `string` | 否 | - | 统计数值文本 |\n| size | `\"medium\" \\| \"small\"` | 否 | `\"medium\"` | 展示尺寸,medium 时图表高度为 92px,small 时为 55px |\n| lineColor | `string` | 否 | `\"var(--color-brand)\"` | 折线颜色 |\n| showArea | `boolean` | 否 | - | 是否在折线下方显示渐变填充区域 |\n| min | `number` | 否 | - | 指定 y 轴最小值,未指定时从数据中计算 |\n| max | `number` | 否 | - | 指定 y 轴最大值,未指定时从数据中计算 |\n| xField | `string` | 否 | `\"0\"` | x 轴字段名(数据中时间字段的 key) |\n| yField | `string` | 否 | `\"1\"` | y 轴字段名(数据中数值字段的 key) |\n| data | `Record<string, number>[]` | 否 | - | 图表数据源,每项为包含 xField 和 yField 字段的对象 |\n\n## Examples\n\n### 基础使用(medium 尺寸)\n\n展示带标签、数值和迷你折线图的统计卡片,默认 medium 尺寸。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: 请求数\n value: \"563.5\"\n xField: time\n yField: request_total\n lineColor: \"#295DFF\"\n data:\n - request_total: 642.2\n time: 1730597995.403\n - request_total: 621.3\n time: 1730599200\n - request_total: 600.2\n time: 1730601000\n - request_total: 601.9666666666667\n time: 1730602800\n - request_total: 592.4\n time: 1730604600\n - request_total: 567.8666666666667\n time: 1730606400\n - request_total: 651.3333333333334\n time: 1730608200\n - request_total: 571.9677419354839\n time: 1730610000\n - request_total: 550.2\n time: 1730611800\n - request_total: 563.5\n time: 1730683800\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"请求数\"\n# value=\"563.5\"\n# x-field=\"time\"\n# y-field=\"request_total\"\n# line-color=\"#295DFF\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# request_total: 642.2,\n# time: 1730597995.403,\n# },\n# {\n# request_total: 621.3,\n# time: 1730599200,\n# },\n# {\n# request_total: 600.2,\n# time: 1730601000,\n# },\n# {\n# request_total: 601.9666666666667,\n# time: 1730602800,\n# },\n# {\n# request_total: 592.4,\n# time: 1730604600,\n# },\n# {\n# request_total: 567.8666666666667,\n# time: 1730606400,\n# },\n# {\n# request_total: 651.3333333333334,\n# time: 1730608200,\n# },\n# {\n# request_total: 571.9677419354839,\n# time: 1730610000,\n# },\n# {\n# request_total: 550.2,\n# time: 1730611800,\n# },\n# {\n# request_total: 563.5,\n# time: 1730683800,\n# },\n# ];\n# </script>\n# \n```\n\n### Small 尺寸\n\nsmall 尺寸时图表高度为 55px,标签和数值紧凑排列在图表左侧。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: 请求数\n value: \"563.5\"\n size: small\n xField: time\n yField: request_total\n lineColor: \"#295DFF\"\n data:\n - request_total: 642.2\n time: 1730597995.403\n - request_total: 621.3\n time: 1730599200\n - request_total: 600.2\n time: 1730601000\n - request_total: 601.9666666666667\n time: 1730602800\n - request_total: 592.4\n time: 1730604600\n - request_total: 567.8666666666667\n time: 1730606400\n - request_total: 651.3333333333334\n time: 1730608200\n - request_total: 571.9677419354839\n time: 1730610000\n - request_total: 550.2\n time: 1730611800\n - request_total: 563.5\n time: 1730683800\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"请求数\"\n# value=\"563.5\"\n# size=\"small\"\n# x-field=\"time\"\n# y-field=\"request_total\"\n# line-color=\"#295DFF\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# request_total: 642.2,\n# time: 1730597995.403,\n# },\n# {\n# request_total: 621.3,\n# time: 1730599200,\n# },\n# {\n# request_total: 600.2,\n# time: 1730601000,\n# },\n# {\n# request_total: 601.9666666666667,\n# time: 1730602800,\n# },\n# {\n# request_total: 592.4,\n# time: 1730604600,\n# },\n# {\n# request_total: 567.8666666666667,\n# time: 1730606400,\n# },\n# {\n# request_total: 651.3333333333334,\n# time: 1730608200,\n# },\n# {\n# request_total: 571.9677419354839,\n# time: 1730610000,\n# },\n# {\n# request_total: 550.2,\n# time: 1730611800,\n# },\n# {\n# request_total: 563.5,\n# time: 1730683800,\n# },\n# ];\n# </script>\n# \n```\n\n### 带填充区域和 y 轴范围\n\n开启 showArea 并指定 min/max 固定 y 轴范围。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: CPU 使用率\n value: \"78.5%\"\n xField: time\n yField: cpu\n lineColor: \"#FF6B6B\"\n showArea: true\n min: 0\n max: 100\n data:\n - cpu: 65.2\n time: 1730597995\n - cpu: 72.1\n time: 1730599200\n - cpu: 78.5\n time: 1730601000\n - cpu: 80.3\n time: 1730602800\n - cpu: 75.6\n time: 1730604600\n - cpu: 70.2\n time: 1730606400\n - cpu: 78.5\n time: 1730608200\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"CPU 使用率\"\n# value=\"78.5%\"\n# x-field=\"time\"\n# y-field=\"cpu\"\n# line-color=\"#FF6B6B\"\n# show-area\n# min=\"0\"\n# max=\"100\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# cpu: 65.2,\n# time: 1730597995,\n# },\n# {\n# cpu: 72.1,\n# time: 1730599200,\n# },\n# {\n# cpu: 78.5,\n# time: 1730601000,\n# },\n# {\n# cpu: 80.3,\n# time: 1730602800,\n# },\n# {\n# cpu: 75.6,\n# time: 1730604600,\n# },\n# {\n# cpu: 70.2,\n# time: 1730606400,\n# },\n# {\n# cpu: 78.5,\n# time: 1730608200,\n# },\n# ];\n# </script>\n# \n```\n"
13
- },
14
5
  "ai-portal.elevo-sidebar": {
15
6
  "doc": "---\ntagName: ai-portal.elevo-sidebar\ndisplayName: WrappedAiPortalElevoSidebar\ndescription: Elevo AI 侧边栏,包含 Logo 导航、新建对话、历史记录、项目列表及个人账户操作,支持折叠和抽屉两种行为模式。\ncategory: layout-component\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.elevo-sidebar\n\n> Elevo AI 侧边栏,包含 Logo 导航、新建对话、历史记录、项目列表及个人账户操作,支持折叠和抽屉两种行为模式。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ------------------------ | ----------------------- | ---- | ----------- | ---------------------------------------------------------------------- |\n| userInstanceId | `string` | 否 | - | 当前用户的实例 ID,用于显示头像和用户名 |\n| behavior | `\"default\" \\| \"drawer\"` | 否 | - | 侧边栏行为模式,`\"default\"` 为常驻展开/折叠,`\"drawer\"` 为抽屉覆盖模式 |\n| logoUrl | `string` | 否 | - | Logo 区域的跳转链接 |\n| newChatUrl | `string` | 否 | - | 新建对话按钮的跳转链接 |\n| newChatLinkWhenCollapsed | `boolean` | 否 | - | 侧边栏折叠时是否仍显示新建对话快捷入口 |\n| historyUrlTemplate | `string` | 否 | - | 对话历史记录条目的链接模板,支持 `{{conversationId}}` 等占位符 |\n| historyActions | `ActionType[]` | 否 | - | 对话历史记录条目的操作按钮列表 |\n| showProjects | `boolean` | 否 | - | 是否显示项目列表区块 |\n| projectUrlTemplate | `string` | 否 | - | 项目条目的链接模板,支持 `{{instanceId}}` 等占位符 |\n| projectActions | `ActionType[]` | 否 | - | 项目条目的操作按钮列表 |\n| personalActions | `ActionType[]` | 否 | - | 个人账户区域的自定义操作列表,未设置时显示默认的退出登录和切换语言选项 |\n| links | `SidebarLink[]` | 否 | - | 侧边栏顶部的自定义链接列表,显示在新建对话按钮下方 |\n| canAddProject | `boolean` | 否 | `true` | 是否显示新建项目按钮 |\n| myLinks | `SidebarLink[]` | 否 | - | 历史区域顶部的\"我的\"快捷链接列表 |\n| scope | `\"default\" \\| \"space\"` | 否 | `\"default\"` | 视图模式,`\"space\"` 时显示空间导航(SpaceNav)替换历史记录 |\n| spaceNav | `SpaceNavProps` | 否 | - | scope 为 `\"space\"` 时的空间导航配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |\n| logout | `void` | 点击退出登录时触发 |\n| action.click | `ActionClickDetail` — { action: 点击的操作项(含 project 等扩展字段), item: 当前对话历史记录项, project: 关联的项目(可选) } | 点击对话历史操作按钮时触发 |\n| project.action.click | `ProjectActionClickDetail` — { action: 点击的操作项, project: 当前项目对象 } | 点击项目操作按钮时触发 |\n| add.project | `void` | 点击新建项目按钮时触发 |\n| add.serviceflow | `void` | 点击新建服务流按钮时触发(scope 为 space 时有效) |\n| personal.action.click | `PersonalActionClickDetail` — { action: 点击的操作项 } | 点击个人操作按钮时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| ---------------- | ---------------------------------- | ------ | -------------------------------------------- |\n| pullHistory | `(delay: number) => void` | `void` | 延迟一段时间后拉取最新对话历史 |\n| open | `() => void` | `void` | 展开侧边栏(behavior 为 drawer 时有效) |\n| close | `() => void` | `void` | 折叠侧边栏(behavior 为 drawer 时有效) |\n| removeProject | `(projectId: string) => void` | `void` | 从历史列表中移除指定项目及其对话 |\n| addProject | `(project: Project) => void` | `void` | 向项目列表中追加一个新项目 |\n| moveConversation | `(conversationId: string) => void` | `void` | 将指定对话标记为已移入项目,从历史列表中隐藏 |\n\n## Examples\n\n### Basic\n\n基础用法,展示默认侧边栏。\n\n```yaml preview\nbrick: ai-portal.elevo-sidebar\nproperties:\n userInstanceId: \"user-001\"\n logoUrl: \"/\"\n newChatUrl: \"/chat/new\"\n historyUrlTemplate: \"/chat/{{conversationId}}\"\nevents:\n logout:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.elevo-sidebar\n# user-instance-id=\"user-001\"\n# logo-url=\"/\"\n# new-chat-url=\"/chat/new\"\n# history-url-template=\"/chat/{{conversationId}}\"\n# id=\"brick-1\"\n# ></ai-portal.elevo-sidebar>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"logout\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Projects\n\n启用项目列表,并配置项目操作按钮。\n\n```yaml preview\nbrick: ai-portal.elevo-sidebar\nproperties:\n userInstanceId: \"user-001\"\n logoUrl: \"/\"\n newChatUrl: \"/chat/new\"\n historyUrlTemplate: \"/chat/{{conversationId}}\"\n showProjects: true\n canAddProject: true\n projectUrlTemplate: \"/project/{{instanceId}}\"\n projectActions:\n - key: delete\n text: 删除\n icon:\n lib: antd\n icon: delete\n danger: true\nevents:\n logout:\n action: \"console.log\"\n add.project:\n action: \"console.log\"\n project.action.click:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.elevo-sidebar\n# user-instance-id=\"user-001\"\n# logo-url=\"/\"\n# new-chat-url=\"/chat/new\"\n# history-url-template=\"/chat/{{conversationId}}\"\n# show-projects\n# can-add-project\n# project-url-template=\"/project/{{instanceId}}\"\n# id=\"brick-1\"\n# ></ai-portal.elevo-sidebar>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.projectActions = [\n# {\n# key: \"delete\",\n# text: \"删除\",\n# icon: {\n# lib: \"antd\",\n# icon: \"delete\",\n# },\n# danger: true,\n# },\n# ];\n# brick_1.addEventListener(\"logout\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"add.project\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"project.action.click\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Drawer Mode\n\n抽屉模式下,点击折叠按钮后侧边栏以覆盖层形式展开。\n\n```yaml preview\nbrick: ai-portal.elevo-sidebar\nproperties:\n userInstanceId: \"user-001\"\n behavior: drawer\n logoUrl: \"/\"\n newChatUrl: \"/chat/new\"\n historyUrlTemplate: \"/chat/{{conversationId}}\"\nevents:\n logout:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.elevo-sidebar\n# user-instance-id=\"user-001\"\n# behavior=\"drawer\"\n# logo-url=\"/\"\n# new-chat-url=\"/chat/new\"\n# history-url-template=\"/chat/{{conversationId}}\"\n# id=\"brick-1\"\n# ></ai-portal.elevo-sidebar>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"logout\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Custom Links and Personal Actions\n\n配置顶部自定义链接和个人账户自定义操作。\n\n```yaml preview\nbrick: ai-portal.elevo-sidebar\nproperties:\n userInstanceId: \"user-001\"\n logoUrl: \"/\"\n newChatUrl: \"/chat/new\"\n historyUrlTemplate: \"/chat/{{conversationId}}\"\n links:\n - title: 工作台\n url: /workbench\n icon:\n lib: antd\n icon: appstore\n myLinks:\n - title: 我的收藏\n url: /favorites\n personalActions:\n - key: profile\n text: 个人资料\n icon:\n lib: antd\n icon: user\n - key: logout\n text: 退出登录\n icon:\n lib: fa\n prefix: fas\n icon: arrow-right-from-bracket\nevents:\n personal.action.click:\n action: \"console.log\"\n action.click:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.elevo-sidebar\n# user-instance-id=\"user-001\"\n# logo-url=\"/\"\n# new-chat-url=\"/chat/new\"\n# history-url-template=\"/chat/{{conversationId}}\"\n# id=\"brick-1\"\n# ></ai-portal.elevo-sidebar>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.links = [\n# {\n# title: \"工作台\",\n# url: \"/workbench\",\n# icon: {\n# lib: \"antd\",\n# icon: \"appstore\",\n# },\n# },\n# ];\n# brick_1.myLinks = [\n# {\n# title: \"我的收藏\",\n# url: \"/favorites\",\n# },\n# ];\n# brick_1.personalActions = [\n# {\n# key: \"profile\",\n# text: \"个人资料\",\n# icon: {\n# lib: \"antd\",\n# icon: \"user\",\n# },\n# },\n# {\n# key: \"logout\",\n# text: \"退出登录\",\n# icon: {\n# lib: \"fa\",\n# prefix: \"fas\",\n# icon: \"arrow-right-from-bracket\",\n# },\n# },\n# ];\n# brick_1.addEventListener(\"personal.action.click\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"action.click\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
16
7
  },
@@ -23,12 +14,12 @@
23
14
  "ai-portal.mcp-tools": {
24
15
  "doc": "---\ntagName: ai-portal.mcp-tools\ndisplayName: WrappedAiPortalMcpTools\ndescription: MCP 工具列表组件,按服务分组展示工具信息,支持按平台分类过滤和吸顶标签栏。\ncategory: display-component\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.mcp-tools\n\n> MCP 工具列表组件,按服务分组展示工具信息,支持按平台分类过滤和吸顶标签栏。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------- | ----------- | ---- | ------ | -------------------------------------------------------------------------- |\n| list | `McpTool[]` | 否 | - | MCP 工具列表数据,按 server.id 自动分组并归属平台分类 |\n| stickyTop | `number` | 否 | - | 平台过滤标签栏的吸顶偏移量(px),设置后标签栏使用吸顶容器,未设置则不吸顶 |\n\n## Examples\n\n### Basic\n\n展示基础 MCP 工具列表,按服务分组展示。\n\n```yaml preview\nbrick: ai-portal.mcp-tools\nproperties:\n list:\n - name: list_hosts\n title: 查询主机列表\n description: 查询 CMDB 中的主机资源列表,支持按条件过滤。\n server:\n id: cmdb\n name: CMDB\n - name: get_host_detail\n title: 获取主机详情\n description: 根据主机实例 ID 获取主机的详细信息,包括配置、状态等。\n server:\n id: cmdb\n name: CMDB\n - name: list_alerts\n title: 查询告警列表\n description: 获取当前活跃告警列表,支持按严重性筛选。\n server:\n id: alert\n name: 监控事件\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.mcp-tools id=\"brick-1\"></ai-portal.mcp-tools>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"list_hosts\",\n# title: \"查询主机列表\",\n# description: \"查询 CMDB 中的主机资源列表,支持按条件过滤。\",\n# server: {\n# id: \"cmdb\",\n# name: \"CMDB\",\n# },\n# },\n# {\n# name: \"get_host_detail\",\n# title: \"获取主机详情\",\n# description: \"根据主机实例 ID 获取主机的详细信息,包括配置、状态等。\",\n# server: {\n# id: \"cmdb\",\n# name: \"CMDB\",\n# },\n# },\n# {\n# name: \"list_alerts\",\n# title: \"查询告警列表\",\n# description: \"获取当前活跃告警列表,支持按严重性筛选。\",\n# server: {\n# id: \"alert\",\n# name: \"监控事件\",\n# },\n# },\n# ];\n# </script>\n# \n```\n\n### With Custom Icons\n\n为工具配置自定义图标,增强视觉区分。\n\n```yaml preview\nbrick: ai-portal.mcp-tools\nproperties:\n list:\n - name: deploy_app\n title: 部署应用\n description: 向 Kubernetes 集群部署应用,支持指定命名空间和镜像版本。\n icon:\n lib: antd\n icon: cloud-upload\n server:\n id: kubernetes\n name: Kubernetes\n - name: scale_deployment\n title: 弹性伸缩\n description: 调整 Kubernetes Deployment 的副本数量。\n icon:\n lib: antd\n icon: apartment\n server:\n id: kubernetes\n name: Kubernetes\n - name: execute_llm\n title: 调用大模型\n description: 向大模型发送请求并获取响应。\n icon:\n lib: antd\n icon: robot\n server:\n id: llm\n name: 大模型\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.mcp-tools id=\"brick-1\"></ai-portal.mcp-tools>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"deploy_app\",\n# title: \"部署应用\",\n# description: \"向 Kubernetes 集群部署应用,支持指定命名空间和镜像版本。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"cloud-upload\",\n# },\n# server: {\n# id: \"kubernetes\",\n# name: \"Kubernetes\",\n# },\n# },\n# {\n# name: \"scale_deployment\",\n# title: \"弹性伸缩\",\n# description: \"调整 Kubernetes Deployment 的副本数量。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"apartment\",\n# },\n# server: {\n# id: \"kubernetes\",\n# name: \"Kubernetes\",\n# },\n# },\n# {\n# name: \"execute_llm\",\n# title: \"调用大模型\",\n# description: \"向大模型发送请求并获取响应。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"robot\",\n# },\n# server: {\n# id: \"llm\",\n# name: \"大模型\",\n# },\n# },\n# ];\n# </script>\n# \n```\n\n### With Sticky Tabs\n\n启用吸顶平台过滤标签栏,适合内容较多的场景。\n\n```yaml preview\nbrick: ai-portal.mcp-tools\nproperties:\n stickyTop: 0\n list:\n - name: list_hosts\n title: 查询主机列表\n description: 查询 CMDB 中的主机资源列表,支持按条件过滤。\n server:\n id: cmdb\n name: CMDB\n - name: create_page\n title: 创建页面\n description: 在低代码平台中创建一个新的页面。\n server:\n id: web-builder\n name: 低代码\n - name: list_dashboards\n title: 查询仪表盘\n description: 获取 Grafana 中所有仪表盘列表。\n server:\n id: grafana\n name: Grafana\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.mcp-tools sticky-top=\"0\" id=\"brick-1\"></ai-portal.mcp-tools>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"list_hosts\",\n# title: \"查询主机列表\",\n# description: \"查询 CMDB 中的主机资源列表,支持按条件过滤。\",\n# server: {\n# id: \"cmdb\",\n# name: \"CMDB\",\n# },\n# },\n# {\n# name: \"create_page\",\n# title: \"创建页面\",\n# description: \"在低代码平台中创建一个新的页面。\",\n# server: {\n# id: \"web-builder\",\n# name: \"低代码\",\n# },\n# },\n# {\n# name: \"list_dashboards\",\n# title: \"查询仪表盘\",\n# description: \"获取 Grafana 中所有仪表盘列表。\",\n# server: {\n# id: \"grafana\",\n# name: \"Grafana\",\n# },\n# },\n# ];\n# </script>\n# \n```\n"
25
16
  },
26
- "ai-portal.chat-stream": {
27
- "doc": "---\ntagName: ai-portal.chat-stream\ndisplayName: WrappedAiPortalChatStream\ndescription: AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.chat-stream\n\n> AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |\n| conversationId | `string \\| undefined` | 否 | - | 对话 ID |\n| initialRequest | `RequestStore \\| undefined \\| null` | 否 | - | 初始请求数据。仅初始设置有效。 |\n| replay | `boolean \\| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |\n| replayDelay | `number \\| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |\n| supports | `Record<string, boolean> \\| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |\n| showHumanActions | `boolean \\| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |\n| showFeedback | `boolean \\| undefined` | 否 | - | 是否显示反馈按钮 |\n| showFeedbackAfterFailed | `boolean \\| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |\n| showFeedbackOnView | `boolean \\| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |\n| showUiSwitch | `boolean \\| undefined` | 否 | - | 是否显示切换到画布视图的按钮 |\n| hideMermaid | `boolean \\| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |\n| previewUrlTemplate | `string \\| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |\n| showCases | `ShowCaseType[] \\| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |\n| exampleProjects | `ExampleProject[] \\| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |\n| tryItOutUrl | `string \\| undefined` | 否 | - | \"试一试\"跳转 URL |\n| aiEmployees | `AIEmployee[] \\| undefined` | 否 | - | 可 @ 提及的数字人列表 |\n| commands | `Command[] \\| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |\n| uploadOptions | `UploadOptions \\| undefined` | 否 | - | 文件上传配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ---------------- | ------------------------------------------------------------------------------- | -------------------------------- |\n| share | `void` | 用户点击分享时触发 |\n| terminate | `void` | 用户点击终止任务时触发 |\n| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |\n| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |\n| ui.switch | `\"canvas\"` — 切换目标 UI 模式,值为 \"canvas\" | 用户点击切换到画布视图按钮时触发 |\n| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |\n| split.change | `boolean` — 是否已切换到分屏模式 | 分屏状态切换时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| -------------------- | -------------------------- | ------ | -------------------------------------- |\n| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |\n| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |\n| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |\n| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |\n\n## Examples\n\n### Basic\n\n展示 AI 对话流视图的基本用法,通过 conversationId 加载已有对话。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n showFeedback: true\nevents:\n share:\n action: console.log\n terminate:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-feedback\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"terminate\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Feedback\n\n开启反馈功能,并在反馈提交后通知组件结果。\n\n```yaml preview\n- brick: ai-portal.chat-stream\n properties:\n id: chatStream\n conversationId: conv-001\n showFeedback: true\n showFeedbackAfterFailed: true\n showFeedbackOnView: true\n events:\n feedback.submit:\n useProvider: my-feedback-provider\n args:\n - <% EVENT.detail %>\n callback:\n success:\n target: \"#chatStream\"\n method: feedbackSubmitDone\n error:\n target: \"#chatStream\"\n method: feedbackSubmitFailed\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-feedback\n# show-feedback-after-failed\n# show-feedback-on-view\n# id=\"chatStream\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const chatStream = document.getElementById(\"chatStream\");\n# chatStream.addEventListener(\"feedback.submit\", (e) => {\n# const provider = document.createElement(\"my-feedback-provider\");\n# const promise = Promise.resolve(provider.resolve(e.detail));\n# promise.then((r) => {\n# const brick = document.querySelector(\"#chatStream\");\n# brick.feedbackSubmitDone();\n# });\n# promise.catch((r) => {\n# const brick = document.querySelector(\"#chatStream\");\n# brick.feedbackSubmitFailed();\n# });\n# });\n# </script>\n# \n```\n\n### With UI Switch\n\n显示切换到画布视图的按钮,并监听切换事件。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n showUiSwitch: true\nevents:\n ui.switch:\n action: console.log\n detail.change:\n action: console.log\n split.change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-ui-switch\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"ui.switch\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"detail.change\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"split.change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Replay Mode\n\n使用回放模式展示历史对话过程。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n replay: true\n replayDelay: 1\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# replay\n# replay-delay=\"1\"\n# ></ai-portal.chat-stream>\n# \n```\n\n### With File Upload and Employees\n\n配置文件上传与数字人提及功能。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n uploadOptions:\n enabled: true\n accept: image/*,.pdf\n maxFiles: 3\n aiEmployees:\n - employeeId: emp001\n name: 运维工程师小李\n showCases:\n - conversationId: show-001\n title: 服务器故障排查\n summary: 通过 AI 快速定位服务器异常\n scenario: ops\n exampleProjects:\n - instanceId: proj-001\n name: 示例项目\n tryItOutUrl: /try-it-out\nevents:\n share:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# try-it-out-url=\"/try-it-out\"\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.uploadOptions = {\n# enabled: true,\n# accept: \"image/*,.pdf\",\n# maxFiles: 3,\n# };\n# brick_1.aiEmployees = [\n# {\n# employeeId: \"emp001\",\n# name: \"运维工程师小李\",\n# },\n# ];\n# brick_1.showCases = [\n# {\n# conversationId: \"show-001\",\n# title: \"服务器故障排查\",\n# summary: \"通过 AI 快速定位服务器异常\",\n# scenario: \"ops\",\n# },\n# ];\n# brick_1.exampleProjects = [\n# {\n# instanceId: \"proj-001\",\n# name: \"示例项目\",\n# },\n# ];\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
28
- },
29
17
  "ai-portal.ai-employees": {
30
18
  "doc": "---\ntagName: ai-portal.ai-employees\ndisplayName: WrappedAiPortalAiEmployees\ndescription: AI 数字人卡片列表,按行业和角色分组展示,支持 Tab 切换行业和点击跳转。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.ai-employees\n\n> AI 数字人卡片列表,按行业和角色分组展示,支持 Tab 切换行业和点击跳转。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------- | ------------------------- | ---- | ------ | ----------------------------------------------------------------------- |\n| list | `Employee[] \\| undefined` | 否 | - | 数字人列表数据 |\n| industries | `string[] \\| undefined` | 否 | - | 行业列表,用于指定 Tab 的顺序,未在此列表中的行业将按出现顺序附加在末尾 |\n| urlTemplate | `string \\| undefined` | 否 | - | 跳转到数字人详情页的 URL 模板,支持 {name} 等数字人字段插值 |\n| stickyTop | `number \\| undefined` | 否 | - | 行业 Tab 栏吸顶时距顶部的距离(px),不设置则不吸顶 |\n\n## Examples\n\n### Basic\n\n展示 AI 数字人卡片列表,按行业 Tab 分组浏览。\n\n```yaml preview\nbrick: ai-portal.ai-employees\nproperties:\n list:\n - name: 运维工程师小李\n industry: IT\n role: 运维专家\n description: 专注于服务器运维和故障处理。\n - name: 开发工程师小王\n industry: IT\n role: 开发专家\n description: 擅长全栈开发和架构设计。\n - name: 数据分析师小张\n industry: 金融\n role: 数据分析\n description: 专注于金融数据分析和风险评估。\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.ai-employees id=\"brick-1\"></ai-portal.ai-employees>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"运维工程师小李\",\n# industry: \"IT\",\n# role: \"运维专家\",\n# description: \"专注于服务器运维和故障处理。\",\n# },\n# {\n# name: \"开发工程师小王\",\n# industry: \"IT\",\n# role: \"开发专家\",\n# description: \"擅长全栈开发和架构设计。\",\n# },\n# {\n# name: \"数据分析师小张\",\n# industry: \"金融\",\n# role: \"数据分析\",\n# description: \"专注于金融数据分析和风险评估。\",\n# },\n# ];\n# </script>\n# \n```\n\n### With URL Template\n\n配置 urlTemplate 属性,使每个数字人卡片点击后跳转到对应详情页。\n\n```yaml preview\nbrick: ai-portal.ai-employees\nproperties:\n urlTemplate: /employees/{name}\n list:\n - name: 运维工程师小李\n industry: IT\n role: 运维专家\n description: 专注于服务器运维和故障处理。\n - name: 开发工程师小王\n industry: IT\n role: 开发专家\n description: 擅长全栈开发和架构设计。\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.ai-employees\n# url-template=\"/employees/{name}\"\n# id=\"brick-1\"\n# ></ai-portal.ai-employees>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"运维工程师小李\",\n# industry: \"IT\",\n# role: \"运维专家\",\n# description: \"专注于服务器运维和故障处理。\",\n# },\n# {\n# name: \"开发工程师小王\",\n# industry: \"IT\",\n# role: \"开发专家\",\n# description: \"擅长全栈开发和架构设计。\",\n# },\n# ];\n# </script>\n# \n```\n\n### With Industries and Sticky Tab\n\n配置 industries 和 stickyTop 属性,控制行业 Tab 顺序及吸顶效果。\n\n```yaml preview\nbrick: ai-portal.ai-employees\nproperties:\n industries:\n - 金融\n - IT\n stickyTop: 0\n list:\n - name: 数据分析师小张\n industry: 金融\n role: 数据分析\n description: 专注于金融数据分析和风险评估。\n - name: 运维工程师小李\n industry: IT\n role: 运维专家\n description: 专注于服务器运维和故障处理。\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.ai-employees sticky-top=\"0\" id=\"brick-1\"></ai-portal.ai-employees>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.industries = [\"金融\", \"IT\"];\n# brick_1.list = [\n# {\n# name: \"数据分析师小张\",\n# industry: \"金融\",\n# role: \"数据分析\",\n# description: \"专注于金融数据分析和风险评估。\",\n# },\n# {\n# name: \"运维工程师小李\",\n# industry: \"IT\",\n# role: \"运维专家\",\n# description: \"专注于服务器运维和故障处理。\",\n# },\n# ];\n# </script>\n# \n```\n"
31
19
  },
20
+ "ai-portal.chat-stream": {
21
+ "doc": "---\ntagName: ai-portal.chat-stream\ndisplayName: WrappedAiPortalChatStream\ndescription: AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.chat-stream\n\n> AI 对话流视图,以聊天气泡形式展示对话过程,支持文件上传、命令联想、回放及用户反馈等功能。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |\n| conversationId | `string \\| undefined` | 否 | - | 对话 ID |\n| initialRequest | `RequestStore \\| undefined \\| null` | 否 | - | 初始请求数据。仅初始设置有效。 |\n| replay | `boolean \\| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |\n| replayDelay | `number \\| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |\n| supports | `Record<string, boolean> \\| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |\n| showHumanActions | `boolean \\| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |\n| showFeedback | `boolean \\| undefined` | 否 | - | 是否显示反馈按钮 |\n| showFeedbackAfterFailed | `boolean \\| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |\n| showFeedbackOnView | `boolean \\| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |\n| showUiSwitch | `boolean \\| undefined` | 否 | - | 是否显示切换到画布视图的按钮 |\n| hideMermaid | `boolean \\| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |\n| previewUrlTemplate | `string \\| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |\n| showCases | `ShowCaseType[] \\| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |\n| exampleProjects | `ExampleProject[] \\| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |\n| tryItOutUrl | `string \\| undefined` | 否 | - | \"试一试\"跳转 URL |\n| aiEmployees | `AIEmployee[] \\| undefined` | 否 | - | 可 @ 提及的数字人列表 |\n| commands | `Command[] \\| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |\n| uploadOptions | `UploadOptions \\| undefined` | 否 | - | 文件上传配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ---------------- | ------------------------------------------------------------------------------- | -------------------------------- |\n| share | `void` | 用户点击分享时触发 |\n| terminate | `void` | 用户点击终止任务时触发 |\n| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |\n| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |\n| ui.switch | `\"canvas\"` — 切换目标 UI 模式,值为 \"canvas\" | 用户点击切换到画布视图按钮时触发 |\n| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |\n| split.change | `boolean` — 是否已切换到分屏模式 | 分屏状态切换时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| -------------------- | -------------------------- | ------ | -------------------------------------- |\n| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |\n| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |\n| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |\n| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |\n\n## Examples\n\n### Basic\n\n展示 AI 对话流视图的基本用法,通过 conversationId 加载已有对话。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n showFeedback: true\nevents:\n share:\n action: console.log\n terminate:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-feedback\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"terminate\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Feedback\n\n开启反馈功能,并在反馈提交后通知组件结果。\n\n```yaml preview\n- brick: ai-portal.chat-stream\n properties:\n id: chatStream\n conversationId: conv-001\n showFeedback: true\n showFeedbackAfterFailed: true\n showFeedbackOnView: true\n events:\n feedback.submit:\n useProvider: my-feedback-provider\n args:\n - <% EVENT.detail %>\n callback:\n success:\n target: \"#chatStream\"\n method: feedbackSubmitDone\n error:\n target: \"#chatStream\"\n method: feedbackSubmitFailed\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-feedback\n# show-feedback-after-failed\n# show-feedback-on-view\n# id=\"chatStream\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const chatStream = document.getElementById(\"chatStream\");\n# chatStream.addEventListener(\"feedback.submit\", (e) => {\n# const provider = document.createElement(\"my-feedback-provider\");\n# const promise = Promise.resolve(provider.resolve(e.detail));\n# promise.then((r) => {\n# const brick = document.querySelector(\"#chatStream\");\n# brick.feedbackSubmitDone();\n# });\n# promise.catch((r) => {\n# const brick = document.querySelector(\"#chatStream\");\n# brick.feedbackSubmitFailed();\n# });\n# });\n# </script>\n# \n```\n\n### With UI Switch\n\n显示切换到画布视图的按钮,并监听切换事件。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n showUiSwitch: true\nevents:\n ui.switch:\n action: console.log\n detail.change:\n action: console.log\n split.change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# show-ui-switch\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"ui.switch\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"detail.change\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"split.change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Replay Mode\n\n使用回放模式展示历史对话过程。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n replay: true\n replayDelay: 1\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# replay\n# replay-delay=\"1\"\n# ></ai-portal.chat-stream>\n# \n```\n\n### With File Upload and Employees\n\n配置文件上传与数字人提及功能。\n\n```yaml preview\nbrick: ai-portal.chat-stream\nproperties:\n conversationId: conv-001\n uploadOptions:\n enabled: true\n accept: image/*,.pdf\n maxFiles: 3\n aiEmployees:\n - employeeId: emp001\n name: 运维工程师小李\n showCases:\n - conversationId: show-001\n title: 服务器故障排查\n summary: 通过 AI 快速定位服务器异常\n scenario: ops\n exampleProjects:\n - instanceId: proj-001\n name: 示例项目\n tryItOutUrl: /try-it-out\nevents:\n share:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-stream\n# conversation-id=\"conv-001\"\n# try-it-out-url=\"/try-it-out\"\n# id=\"brick-1\"\n# ></ai-portal.chat-stream>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.uploadOptions = {\n# enabled: true,\n# accept: \"image/*,.pdf\",\n# maxFiles: 3,\n# };\n# brick_1.aiEmployees = [\n# {\n# employeeId: \"emp001\",\n# name: \"运维工程师小李\",\n# },\n# ];\n# brick_1.showCases = [\n# {\n# conversationId: \"show-001\",\n# title: \"服务器故障排查\",\n# summary: \"通过 AI 快速定位服务器异常\",\n# scenario: \"ops\",\n# },\n# ];\n# brick_1.exampleProjects = [\n# {\n# instanceId: \"proj-001\",\n# name: \"示例项目\",\n# },\n# ];\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
22
+ },
32
23
  "ai-portal.ai-agents": {
33
24
  "doc": "---\ntagName: ai-portal.ai-agents\ndisplayName: WrappedAiPortalAiAgents\ndescription: AI Agents 卡片列表,展示可用的 AI 智能体,支持点击跳转到对应详情页。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.ai-agents\n\n> AI Agents 卡片列表,展示可用的 AI 智能体,支持点击跳转到对应详情页。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------- | ---------------------- | ---- | ------ | ------------------------------------------------------------- |\n| list | `Agent[] \\| undefined` | 否 | - | AI Agent 列表数据 |\n| urlTemplate | `string \\| undefined` | 否 | - | 跳转到 Agent 详情页的 URL 模板,支持 {name} 等 Agent 字段插值 |\n\n## Examples\n\n### Basic\n\n展示 AI Agents 卡片列表的基本用法。\n\n```yaml preview\nbrick: ai-portal.ai-agents\nproperties:\n list:\n - name: 运维专家\n description: 擅长处理服务器运维、故障排查和性能优化等问题。\n icon:\n lib: antd\n icon: tool\n tags:\n - 运维\n - 故障排查\n - name: 数据分析师\n description: 专注于数据处理、报表生成和趋势分析。\n icon:\n lib: antd\n icon: bar-chart\n tags:\n - 数据\n - 分析\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.ai-agents id=\"brick-1\"></ai-portal.ai-agents>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"运维专家\",\n# description: \"擅长处理服务器运维、故障排查和性能优化等问题。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"tool\",\n# },\n# tags: [\"运维\", \"故障排查\"],\n# },\n# {\n# name: \"数据分析师\",\n# description: \"专注于数据处理、报表生成和趋势分析。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"bar-chart\",\n# },\n# tags: [\"数据\", \"分析\"],\n# },\n# ];\n# </script>\n# \n```\n\n### With URL Template\n\n配置 urlTemplate 属性,使每个 Agent 卡片点击后跳转到对应详情页。\n\n```yaml preview\nbrick: ai-portal.ai-agents\nproperties:\n urlTemplate: /agents/{name}\n list:\n - name: 运维专家\n description: 擅长处理服务器运维、故障排查和性能优化等问题。\n icon:\n lib: antd\n icon: tool\n tags:\n - 运维\n - name: 数据分析师\n description: 专注于数据处理、报表生成和趋势分析。\n icon:\n lib: antd\n icon: bar-chart\n tags:\n - 数据\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.ai-agents\n# url-template=\"/agents/{name}\"\n# id=\"brick-1\"\n# ></ai-portal.ai-agents>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# name: \"运维专家\",\n# description: \"擅长处理服务器运维、故障排查和性能优化等问题。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"tool\",\n# },\n# tags: [\"运维\"],\n# },\n# {\n# name: \"数据分析师\",\n# description: \"专注于数据处理、报表生成和趋势分析。\",\n# icon: {\n# lib: \"antd\",\n# icon: \"bar-chart\",\n# },\n# tags: [\"数据\"],\n# },\n# ];\n# </script>\n# \n```\n"
34
25
  },
@@ -47,12 +38,12 @@
47
38
  "ai-portal.action-buttons": {
48
39
  "doc": "---\ntagName: ai-portal.action-buttons\ndisplayName: WrappedAiPortalActionButtons\ndescription: 动作按钮组,支持选中状态切换,用于聊天框的功能入口。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.action-buttons\n\n> 动作按钮组,支持选中状态切换,用于聊天框的功能入口。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------- | ----------------------------- | ---- | ------ | ---------------------------------------------------------- |\n| items | `ActionItem[] \\| undefined` | 否 | - | 按钮列表配置,每项包含文本、唯一键值及可选图标 |\n| activeKey | `string \\| null \\| undefined` | 否 | - | 当前选中按钮的键值,选中后显示删除图标,再次点击可取消选中 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ------ | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| change | `ActionItem \\| null` — { key: 按钮键值, text: 按钮文本, icon: 按钮图标 } \\| null — 选中时为选中的 ActionItem,取消选中时为 null | 选中或取消选中动作按钮时触发 |\n\n## Examples\n\n### Basic\n\n展示动作按钮组的基本用法,点击按钮切换选中状态。\n\n```yaml preview\nbrick: ai-portal.chat-box\nchildren:\n - brick: ai-portal.action-buttons\n slot: actions\n properties:\n items:\n - key: think\n text: 深度思考\n icon:\n lib: antd\n theme: outlined\n icon: reddit\n - key: networking\n text: 联网搜索\n icon:\n lib: antd\n theme: outlined\n icon: global\n events:\n change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.chat-box>\n# <ai-portal.action-buttons\n# slot=\"actions\"\n# id=\"brick-1\"\n# ></ai-portal.action-buttons>\n# </ai-portal.chat-box>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.items = [\n# {\n# key: \"think\",\n# text: \"深度思考\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"reddit\",\n# },\n# },\n# {\n# key: \"networking\",\n# text: \"联网搜索\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"global\",\n# },\n# },\n# ];\n# brick_1.addEventListener(\"change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With activeKey\n\n通过 `activeKey` 属性预设选中的按钮。\n\n```yaml preview\nbrick: ai-portal.action-buttons\nproperties:\n activeKey: think\n items:\n - key: think\n text: 深度思考\n icon:\n lib: antd\n theme: outlined\n icon: reddit\n - key: networking\n text: 联网搜索\n icon:\n lib: antd\n theme: outlined\n icon: global\nevents:\n change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.action-buttons\n# active-key=\"think\"\n# id=\"brick-1\"\n# ></ai-portal.action-buttons>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.items = [\n# {\n# key: \"think\",\n# text: \"深度思考\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"reddit\",\n# },\n# },\n# {\n# key: \"networking\",\n# text: \"联网搜索\",\n# icon: {\n# lib: \"antd\",\n# theme: \"outlined\",\n# icon: \"global\",\n# },\n# },\n# ];\n# brick_1.addEventListener(\"change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
49
40
  },
50
- "ai-portal.project-conversations": {
51
- "doc": "---\ntagName: ai-portal.project-conversations\ndisplayName: WrappedAiPortalProjectConversations\ndescription: 项目会话列表构件,展示项目中的会话记录,支持目标分类、操作菜单。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.project-conversations\n\n> 项目会话列表构件,展示项目中的会话记录,支持目标分类、操作菜单。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------- | ---------------- | ---- | ------ | ---------------------------------------------------------------------------- |\n| list | `Conversation[]` | 否 | - | 会话列表数据,为 undefined 时显示加载状态 |\n| urlTemplate | `string` | 否 | - | 会话详情链接模板,支持使用会话字段插值,如 /conversations/{{conversationId}} |\n| actions | `ActionType[]` | 否 | - | 操作菜单配置,每项会话行尾显示可操作的菜单项 |\n| goals | `Goal[]` | 否 | - | 目标列表,用于显示会话关联的目标名称 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ------------ | ------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| goal.click | `Conversation` — { conversationId: 会话ID, title: 会话标题, startTime: 开始时间, goalInstanceId: 目标实例ID } | 点击会话关联的目标标签时触发 |\n| action.click | `ActionClickDetail` — { action: 操作项配置, item: 所属会话数据 } | 点击操作菜单项时触发 |\n\n## Examples\n\n### 基础使用\n\n展示会话列表,当 list 为 undefined 时显示加载态。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n list:\n - conversationId: \"conv-a\"\n title: 标题一\n description: 这是一段描述\n startTime: 1757904096\n - conversationId: \"conv-b\"\n title: 标题二\n startTime: 1757863597\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"标题一\",\n# description: \"这是一段描述\",\n# startTime: 1757904096,\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"标题二\",\n# startTime: 1757863597,\n# },\n# ];\n# </script>\n# \n```\n\n### 带目标分类\n\n配置 goals 后会话卡片会显示关联的目标名称标签。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n goals:\n - instanceId: \"GOAL0001\"\n title: \"提升研发效率\"\n - instanceId: \"GOAL0002\"\n title: \"降低故障率\"\n list:\n - conversationId: \"conv-a\"\n title: 关联目标的会话\n startTime: 1757904096\n goalInstanceId: \"GOAL0001\"\n - conversationId: \"conv-b\"\n title: 全局会话(无目标)\n startTime: 1757863597\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.goals = [\n# {\n# instanceId: \"GOAL0001\",\n# title: \"提升研发效率\",\n# },\n# {\n# instanceId: \"GOAL0002\",\n# title: \"降低故障率\",\n# },\n# ];\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"关联目标的会话\",\n# startTime: 1757904096,\n# goalInstanceId: \"GOAL0001\",\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"全局会话(无目标)\",\n# startTime: 1757863597,\n# },\n# ];\n# </script>\n# \n```\n\n### 带操作菜单\n\n配置 actions 后每行显示可操作的菜单项。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n actions:\n - text: \"删除\"\n event: \"delete\"\n icon:\n lib: \"antd\"\n icon: \"delete\"\n list:\n - conversationId: \"conv-a\"\n title: 会话标题一\n description: 这是一段描述\n startTime: 1757904096\n username: \"alice\"\n - conversationId: \"conv-b\"\n title: 会话标题二\n startTime: 1757863597\nevents:\n action.click:\n action: console.log\n args:\n - \"操作点击:\"\n - \"<% EVENT.detail %>\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.actions = [\n# {\n# text: \"删除\",\n# event: \"delete\",\n# icon: {\n# lib: \"antd\",\n# icon: \"delete\",\n# },\n# },\n# ];\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"会话标题一\",\n# description: \"这是一段描述\",\n# startTime: 1757904096,\n# username: \"alice\",\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"会话标题二\",\n# startTime: 1757863597,\n# },\n# ];\n# brick_1.addEventListener(\"action.click\", (e) => {\n# console.log(\"操作点击:\", e.detail);\n# });\n# </script>\n# \n```\n\n### 加载状态\n\nlist 为 undefined 时显示加载中状态。\n\n```yaml preview\nbrick: ai-portal.project-conversations\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations></ai-portal.project-conversations>\n# \n```\n"
52
- },
53
41
  "ai-portal.goal-card-list": {
54
42
  "doc": "---\ntagName: ai-portal.goal-card-list\ndisplayName: WrappedAiPortalGoalCardList\ndescription: 目标卡片列表,以分层卡片形式展示目标项,支持内联编辑标题、状态切换、新建对话及追加子目标。\ncategory: display-component\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.goal-card-list\n\n> 目标卡片列表,以分层卡片形式展示目标项,支持内联编辑标题、状态切换、新建对话及追加子目标。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------- | --------------------- | ---- | ------ | --------------------------------------------------------- |\n| goalList | `GoalItem[]` | 否 | - | 目标列表数据,支持多层级(通过 `level` 字段区分父子层级) |\n| cardStyle | `React.CSSProperties` | 否 | - | 卡片的自定义样式 |\n| activeKey | `string` | 否 | - | 当前激活卡片的 instanceId,匹配的卡片会高亮显示 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ------------------ | ---------------------------------------------------------------------------------------------------- | -------------------------------- |\n| item.click | `GoalItem` — { title: 目标标题, state: 目标状态, id: 序号, instanceId: 实例ID, level: 层级 } | 点击目标卡片时触发 |\n| item.status.change | `GoalItem` — { title: 目标标题, state: 更新后的目标状态, id: 序号, instanceId: 实例ID, level: 层级 } | 目标状态切换时触发 |\n| item.title.change | `GoalItem` — { title: 更新后的标题, state: 目标状态, id: 序号, instanceId: 实例ID, level: 层级 } | 目标标题内联编辑完成时触发 |\n| item.new.chat | `GoalItem` — { title: 目标标题, state: 目标状态, id: 序号, instanceId: 实例ID, level: 层级 } | 点击目标卡片的新建对话按钮时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| --------------- | ------------------------------------------------ | ------ | ---------------------------- |\n| appendChildDone | `(pendingId: string, newItem: GoalItem) => void` | `void` | 将待定子目标提交为正式目标项 |\n\n## Examples\n\n### Basic\n\n展示基础目标卡片列表,包含多种状态的目标项。\n\n```yaml preview\nbrick: ai-portal.goal-card-list\nproperties:\n style:\n width: 600px\n goalList:\n - title: 页面流程绘制\n id: 100124\n state: ready\n instanceId: abc1\n level: 0\n - title: 原型与设计绘制\n id: 100125\n state: working\n instanceId: bdc9\n level: 0\n - title: 设计稿绘制\n id: 100126\n state: completed\n instanceId: d76a\n level: 0\nevents:\n item.click:\n action: \"console.log\"\n item.status.change:\n action: \"console.log\"\n item.title.change:\n action: \"console.log\"\n item.new.chat:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.goal-card-list\n# style=\"width: 600px\"\n# id=\"brick-1\"\n# ></ai-portal.goal-card-list>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.goalList = [\n# {\n# title: \"页面流程绘制\",\n# id: 100124,\n# state: \"ready\",\n# instanceId: \"abc1\",\n# level: 0,\n# },\n# {\n# title: \"原型与设计绘制\",\n# id: 100125,\n# state: \"working\",\n# instanceId: \"bdc9\",\n# level: 0,\n# },\n# {\n# title: \"设计稿绘制\",\n# id: 100126,\n# state: \"completed\",\n# instanceId: \"d76a\",\n# level: 0,\n# },\n# ];\n# brick_1.addEventListener(\"item.click\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"item.status.change\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"item.title.change\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"item.new.chat\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Active Item\n\n配置 activeKey 高亮激活当前选中的目标卡片。\n\n```yaml preview\nbrick: ai-portal.goal-card-list\nproperties:\n style:\n width: 600px\n activeKey: bdc9\n goalList:\n - title: 页面流程绘制\n id: 100124\n state: ready\n instanceId: abc1\n level: 0\n - title: 原型与设计绘制\n id: 100125\n state: working\n instanceId: bdc9\n level: 0\n - title: 设计稿绘制\n id: 100126\n state: completed\n instanceId: d76a\n level: 0\nevents:\n item.click:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.goal-card-list\n# style=\"width: 600px\"\n# active-key=\"bdc9\"\n# id=\"brick-1\"\n# ></ai-portal.goal-card-list>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.goalList = [\n# {\n# title: \"页面流程绘制\",\n# id: 100124,\n# state: \"ready\",\n# instanceId: \"abc1\",\n# level: 0,\n# },\n# {\n# title: \"原型与设计绘制\",\n# id: 100125,\n# state: \"working\",\n# instanceId: \"bdc9\",\n# level: 0,\n# },\n# {\n# title: \"设计稿绘制\",\n# id: 100126,\n# state: \"completed\",\n# instanceId: \"d76a\",\n# level: 0,\n# },\n# ];\n# brick_1.addEventListener(\"item.click\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Hierarchical Goals\n\n展示多层级目标,子目标通过 level 字段缩进显示。\n\n```yaml preview\nbrick: ai-portal.goal-card-list\nproperties:\n style:\n width: 600px\n goalList:\n - title: 产品研发\n id: 1001\n state: working\n instanceId: parent1\n level: 0\n - title: 需求分析\n id: 1002\n state: completed\n instanceId: child1\n level: 1\n - title: UI 设计\n id: 1003\n state: working\n instanceId: child2\n level: 1\n - title: 数据架构\n id: 1004\n state: ready\n instanceId: parent2\n level: 0\nevents:\n item.click:\n action: \"console.log\"\n item.status.change:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.goal-card-list\n# style=\"width: 600px\"\n# id=\"brick-1\"\n# ></ai-portal.goal-card-list>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.goalList = [\n# {\n# title: \"产品研发\",\n# id: 1001,\n# state: \"working\",\n# instanceId: \"parent1\",\n# level: 0,\n# },\n# {\n# title: \"需求分析\",\n# id: 1002,\n# state: \"completed\",\n# instanceId: \"child1\",\n# level: 1,\n# },\n# {\n# title: \"UI 设计\",\n# id: 1003,\n# state: \"working\",\n# instanceId: \"child2\",\n# level: 1,\n# },\n# {\n# title: \"数据架构\",\n# id: 1004,\n# state: \"ready\",\n# instanceId: \"parent2\",\n# level: 0,\n# },\n# ];\n# brick_1.addEventListener(\"item.click\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"item.status.change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Custom Card Style\n\n为卡片配置自定义样式。\n\n```yaml preview\nbrick: ai-portal.goal-card-list\nproperties:\n cardStyle:\n borderRadius: 8px\n marginBottom: 8px\n style:\n width: 600px\n goalList:\n - title: 前端架构升级\n id: 2001\n state: ready\n instanceId: item1\n level: 0\n - title: 性能优化\n id: 2002\n state: working\n instanceId: item2\n level: 0\nevents:\n item.click:\n action: \"console.log\"\n item.new.chat:\n action: \"console.log\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.goal-card-list\n# style=\"width: 600px\"\n# id=\"brick-1\"\n# ></ai-portal.goal-card-list>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.cardStyle = {\n# borderRadius: \"8px\",\n# marginBottom: \"8px\",\n# };\n# brick_1.goalList = [\n# {\n# title: \"前端架构升级\",\n# id: 2001,\n# state: \"ready\",\n# instanceId: \"item1\",\n# level: 0,\n# },\n# {\n# title: \"性能优化\",\n# id: 2002,\n# state: \"working\",\n# instanceId: \"item2\",\n# level: 0,\n# },\n# ];\n# brick_1.addEventListener(\"item.click\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"item.new.chat\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
55
43
  },
44
+ "ai-portal.project-conversations": {
45
+ "doc": "---\ntagName: ai-portal.project-conversations\ndisplayName: WrappedAiPortalProjectConversations\ndescription: 项目会话列表构件,展示项目中的会话记录,支持目标分类、操作菜单。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.project-conversations\n\n> 项目会话列表构件,展示项目中的会话记录,支持目标分类、操作菜单。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------- | ---------------- | ---- | ------ | ---------------------------------------------------------------------------- |\n| list | `Conversation[]` | 否 | - | 会话列表数据,为 undefined 时显示加载状态 |\n| urlTemplate | `string` | 否 | - | 会话详情链接模板,支持使用会话字段插值,如 /conversations/{{conversationId}} |\n| actions | `ActionType[]` | 否 | - | 操作菜单配置,每项会话行尾显示可操作的菜单项 |\n| goals | `Goal[]` | 否 | - | 目标列表,用于显示会话关联的目标名称 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ------------ | ------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| goal.click | `Conversation` — { conversationId: 会话ID, title: 会话标题, startTime: 开始时间, goalInstanceId: 目标实例ID } | 点击会话关联的目标标签时触发 |\n| action.click | `ActionClickDetail` — { action: 操作项配置, item: 所属会话数据 } | 点击操作菜单项时触发 |\n\n## Examples\n\n### 基础使用\n\n展示会话列表,当 list 为 undefined 时显示加载态。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n list:\n - conversationId: \"conv-a\"\n title: 标题一\n description: 这是一段描述\n startTime: 1757904096\n - conversationId: \"conv-b\"\n title: 标题二\n startTime: 1757863597\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"标题一\",\n# description: \"这是一段描述\",\n# startTime: 1757904096,\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"标题二\",\n# startTime: 1757863597,\n# },\n# ];\n# </script>\n# \n```\n\n### 带目标分类\n\n配置 goals 后会话卡片会显示关联的目标名称标签。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n goals:\n - instanceId: \"GOAL0001\"\n title: \"提升研发效率\"\n - instanceId: \"GOAL0002\"\n title: \"降低故障率\"\n list:\n - conversationId: \"conv-a\"\n title: 关联目标的会话\n startTime: 1757904096\n goalInstanceId: \"GOAL0001\"\n - conversationId: \"conv-b\"\n title: 全局会话(无目标)\n startTime: 1757863597\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.goals = [\n# {\n# instanceId: \"GOAL0001\",\n# title: \"提升研发效率\",\n# },\n# {\n# instanceId: \"GOAL0002\",\n# title: \"降低故障率\",\n# },\n# ];\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"关联目标的会话\",\n# startTime: 1757904096,\n# goalInstanceId: \"GOAL0001\",\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"全局会话(无目标)\",\n# startTime: 1757863597,\n# },\n# ];\n# </script>\n# \n```\n\n### 带操作菜单\n\n配置 actions 后每行显示可操作的菜单项。\n\n```yaml preview\nbrick: ai-portal.project-conversations\nproperties:\n actions:\n - text: \"删除\"\n event: \"delete\"\n icon:\n lib: \"antd\"\n icon: \"delete\"\n list:\n - conversationId: \"conv-a\"\n title: 会话标题一\n description: 这是一段描述\n startTime: 1757904096\n username: \"alice\"\n - conversationId: \"conv-b\"\n title: 会话标题二\n startTime: 1757863597\nevents:\n action.click:\n action: console.log\n args:\n - \"操作点击:\"\n - \"<% EVENT.detail %>\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations id=\"brick-1\"></ai-portal.project-conversations>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.actions = [\n# {\n# text: \"删除\",\n# event: \"delete\",\n# icon: {\n# lib: \"antd\",\n# icon: \"delete\",\n# },\n# },\n# ];\n# brick_1.list = [\n# {\n# conversationId: \"conv-a\",\n# title: \"会话标题一\",\n# description: \"这是一段描述\",\n# startTime: 1757904096,\n# username: \"alice\",\n# },\n# {\n# conversationId: \"conv-b\",\n# title: \"会话标题二\",\n# startTime: 1757863597,\n# },\n# ];\n# brick_1.addEventListener(\"action.click\", (e) => {\n# console.log(\"操作点击:\", e.detail);\n# });\n# </script>\n# \n```\n\n### 加载状态\n\nlist 为 undefined 时显示加载中状态。\n\n```yaml preview\nbrick: ai-portal.project-conversations\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-conversations></ai-portal.project-conversations>\n# \n```\n"
46
+ },
56
47
  "ai-portal.project-knowledges": {
57
48
  "doc": "---\ntagName: ai-portal.project-knowledges\ndisplayName: WrappedAiPortalProjectKnowledges\ndescription: 项目知识库列表构件,展示项目中的知识条目,支持操作菜单和点击跳转。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.project-knowledges\n\n> 项目知识库列表构件,展示项目中的知识条目,支持操作菜单和点击跳转。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------- | -------------- | ---- | ------ | -------------------------------------------- |\n| list | `Knowledge[]` | 否 | - | 知识列表数据,为 undefined 时显示加载状态 |\n| urlTemplate | `string` | 否 | - | 知识详情链接模板,支持使用知识字段插值 |\n| actions | `ActionType[]` | 否 | - | 操作菜单配置,每条知识行尾显示可操作的菜单项 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ------------ | --------------------------------------------------------------------------------------------------- | -------------------- |\n| action.click | `ActionClickDetail` — { action: 操作项配置, item: 所属知识数据 } | 点击操作菜单项时触发 |\n| item.click | `Knowledge` — { instanceId: 知识ID, name: 知识名称, description: 描述, time: 时间戳, user: 创建人 } | 点击知识条目时触发 |\n\n## Examples\n\n### 基础使用\n\n展示知识库列表,当 list 为 undefined 时显示加载态。\n\n```yaml preview\nbrick: ai-portal.project-knowledges\nproperties:\n list:\n - instanceId: \"knowledge-a\"\n name: \"服务器排查手册\"\n description: \"包含常见服务器故障的排查步骤\"\n time: 1757904096\n user: \"alice\"\n - instanceId: \"knowledge-b\"\n name: \"数据库优化指南\"\n time: 1757863597\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-knowledges id=\"brick-1\"></ai-portal.project-knowledges>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.list = [\n# {\n# instanceId: \"knowledge-a\",\n# name: \"服务器排查手册\",\n# description: \"包含常见服务器故障的排查步骤\",\n# time: 1757904096,\n# user: \"alice\",\n# },\n# {\n# instanceId: \"knowledge-b\",\n# name: \"数据库优化指南\",\n# time: 1757863597,\n# },\n# ];\n# </script>\n# \n```\n\n### 带操作菜单\n\n配置 actions 后每条知识行尾显示可操作的菜单项。\n\n```yaml preview\nbrick: ai-portal.project-knowledges\nproperties:\n actions:\n - text: \"删除\"\n event: \"delete\"\n icon:\n lib: \"antd\"\n icon: \"delete\"\n list:\n - instanceId: \"knowledge-a\"\n name: \"服务器排查手册\"\n description: \"包含常见服务器故障的排查步骤\"\n time: 1757904096\n user: \"alice\"\n - instanceId: \"knowledge-b\"\n name: \"数据库优化指南\"\n time: 1757863597\nevents:\n action.click:\n action: console.log\n args:\n - \"操作点击:\"\n - \"<% EVENT.detail %>\"\n item.click:\n action: console.log\n args:\n - \"知识点击:\"\n - \"<% EVENT.detail %>\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-knowledges id=\"brick-1\"></ai-portal.project-knowledges>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.actions = [\n# {\n# text: \"删除\",\n# event: \"delete\",\n# icon: {\n# lib: \"antd\",\n# icon: \"delete\",\n# },\n# },\n# ];\n# brick_1.list = [\n# {\n# instanceId: \"knowledge-a\",\n# name: \"服务器排查手册\",\n# description: \"包含常见服务器故障的排查步骤\",\n# time: 1757904096,\n# user: \"alice\",\n# },\n# {\n# instanceId: \"knowledge-b\",\n# name: \"数据库优化指南\",\n# time: 1757863597,\n# },\n# ];\n# brick_1.addEventListener(\"action.click\", (e) => {\n# console.log(\"操作点击:\", e.detail);\n# });\n# brick_1.addEventListener(\"item.click\", (e) => {\n# console.log(\"知识点击:\", e.detail);\n# });\n# </script>\n# \n```\n\n### 加载状态\n\nlist 为 undefined 时显示加载中状态。\n\n```yaml preview\nbrick: ai-portal.project-knowledges\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.project-knowledges></ai-portal.project-knowledges>\n# \n```\n"
58
49
  },
@@ -106,5 +97,14 @@
106
97
  },
107
98
  "ai-portal.space-workbench": {
108
99
  "doc": "---\ntagName: ai-portal.space-workbench\ndisplayName: WrappedAiPortalSpaceWorkbench\ndescription: 协作空间工作台,集成顶部导航、侧边栏(知识库、业务实例)、聊天区域和服务流等核心功能的一体化工作台构件。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.space-workbench\n\n> 协作空间工作台,集成顶部导航、侧边栏(知识库、业务实例)、聊天区域和服务流等核心功能的一体化工作台构件。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------------- | ----------------- | ---- | ------ | ---------------------- |\n| spaceDetail | `SpaceDetail` | 是 | - | 空间详情信息,必填 |\n| notifyCenterUrl | `string` | 是 | - | 消息中心跳转链接,必填 |\n| notices | `NoticeItem[]` | 否 | - | 消息通知列表 |\n| knowledges | `KnowledgeItem[]` | 否 | - | 知识库列表 |\n| uploadOptions | `UploadOptions` | 否 | - | 文件上传配置选项 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| --------------- | ------------------------------------------------------------------------------------------ | ---------------------- |\n| go.back | `void` | 点击返回按钮时触发 |\n| members.click | `void` | 点击成员按钮时触发 |\n| notice.click | `NoticeItem` — { id: 消息ID, type: 消息类型, isRead: 是否已读, title: 标题, time: 时间戳 } | 点击消息通知项时触发 |\n| mark.all.read | `void` | 点击全部已读按钮时触发 |\n| space.edit | `void` | 点击编辑空间按钮时触发 |\n| knowledge.click | `KnowledgeItem` — 知识条目数据 | 点击知识条目时触发 |\n| knowledge.add | `void` | 点击添加知识按钮时触发 |\n\n## Examples\n\n### 基础使用\n\n展示包含空间信息、消息通知的协作空间工作台。\n\n```yaml preview\nbrick: ai-portal.space-workbench\nproperties:\n spaceDetail:\n name: \"产品设计空间\"\n instanceId: \"space-001\"\n description: \"这是一个用于产品设计协作的空间\"\n notifyCenterUrl: \"/notify-center\"\n notices:\n - id: \"msg-1\"\n isRead: false\n type: \"project\"\n title: \"协作流【研发设计】已完成\"\n - id: \"msg-2\"\n isRead: false\n type: \"space\"\n title: \"协作流【协作流名称】 - 【活动名称】需要人工确认\"\n - id: \"msg-3\"\n type: \"account\"\n isRead: true\n title: \"【项目协作功能】已发布\"\nevents:\n go.back:\n action: console.log\n args:\n - \"点击了返回按钮\"\n members.click:\n action: console.log\n args:\n - \"点击了成员按钮\"\n notice.click:\n action: console.log\n args:\n - \"点击了消息:\"\n - \"<% EVENT.detail %>\"\n mark.all.read:\n action: console.log\n args:\n - \"点击了全部已读\"\n space.edit:\n action: console.log\n args:\n - \"点击了编辑空间\"\n knowledge.click:\n action: console.log\n args:\n - \"点击了知识:\"\n - \"<% EVENT.detail %>\"\n knowledge.add:\n action: console.log\n args:\n - \"点击了添加知识\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.space-workbench\n# notify-center-url=\"/notify-center\"\n# id=\"brick-1\"\n# ></ai-portal.space-workbench>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.spaceDetail = {\n# name: \"产品设计空间\",\n# instanceId: \"space-001\",\n# description: \"这是一个用于产品设计协作的空间\",\n# };\n# brick_1.notices = [\n# {\n# id: \"msg-1\",\n# isRead: false,\n# type: \"project\",\n# title: \"协作流【研发设计】已完成\",\n# },\n# {\n# id: \"msg-2\",\n# isRead: false,\n# type: \"space\",\n# title: \"协作流【协作流名称】 - 【活动名称】需要人工确认\",\n# },\n# {\n# id: \"msg-3\",\n# type: \"account\",\n# isRead: true,\n# title: \"【项目协作功能】已发布\",\n# },\n# ];\n# brick_1.addEventListener(\"go.back\", (e) => {\n# console.log(\"点击了返回按钮\");\n# });\n# brick_1.addEventListener(\"members.click\", (e) => {\n# console.log(\"点击了成员按钮\");\n# });\n# brick_1.addEventListener(\"notice.click\", (e) => {\n# console.log(\"点击了消息:\", e.detail);\n# });\n# brick_1.addEventListener(\"mark.all.read\", (e) => {\n# console.log(\"点击了全部已读\");\n# });\n# brick_1.addEventListener(\"space.edit\", (e) => {\n# console.log(\"点击了编辑空间\");\n# });\n# brick_1.addEventListener(\"knowledge.click\", (e) => {\n# console.log(\"点击了知识:\", e.detail);\n# });\n# brick_1.addEventListener(\"knowledge.add\", (e) => {\n# console.log(\"点击了添加知识\");\n# });\n# </script>\n# \n```\n\n### 无消息通知\n\n空间没有消息通知时的展示。\n\n```yaml preview\nbrick: ai-portal.space-workbench\nproperties:\n spaceDetail:\n name: \"研发协作空间\"\n instanceId: \"space-002\"\n description: \"研发团队的协作空间\"\n notifyCenterUrl: \"/notify-center\"\n notices: []\nevents:\n go.back:\n action: console.log\n args:\n - \"返回\"\n members.click:\n action: console.log\n args:\n - \"查看成员\"\n space.edit:\n action: console.log\n args:\n - \"编辑空间\"\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.space-workbench\n# notify-center-url=\"/notify-center\"\n# id=\"brick-1\"\n# ></ai-portal.space-workbench>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.spaceDetail = {\n# name: \"研发协作空间\",\n# instanceId: \"space-002\",\n# description: \"研发团队的协作空间\",\n# };\n# brick_1.notices = [];\n# brick_1.addEventListener(\"go.back\", (e) => {\n# console.log(\"返回\");\n# });\n# brick_1.addEventListener(\"members.click\", (e) => {\n# console.log(\"查看成员\");\n# });\n# brick_1.addEventListener(\"space.edit\", (e) => {\n# console.log(\"编辑空间\");\n# });\n# </script>\n# \n```\n"
100
+ },
101
+ "ai-portal.home-container": {
102
+ "doc": "---\ntagName: ai-portal.home-container\ndisplayName: WrappedAiPortalHomeContainer\ndescription: AI Portal 首页容器,通过 sticky 属性控制顶部吸附行为,内容通过默认插槽传入。\ncategory: layout-component\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.home-container\n\n> AI Portal 首页容器,通过 sticky 属性控制顶部吸附行为,内容通过默认插槽传入。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ------ | --------- | ---- | ------ | ----------------------------------------------------------------- |\n| sticky | `boolean` | 否 | - | 是否启用顶部吸附样式,通过 CSS 属性选择器控制布局,不触发重新渲染 |\n\n## Slots\n\n| 名称 | 说明 |\n| ------- | ------------ |\n| default | 页面内容区域 |\n\n## Examples\n\n### Basic\n\n作为页面内容的包裹容器,传入子构件。\n\n```yaml preview\nbrick: ai-portal.home-container\nchildren:\n - brick: span\n properties:\n textContent: Hello world\n style:\n padding: 16px\n display: block\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.home-container>\n# <span style=\"padding: 16px; display: block\">Hello world</span>\n# </ai-portal.home-container>\n# \n```\n\n### With Sticky\n\n启用 sticky 吸附样式的首页容器。\n\n```yaml preview\nbrick: ai-portal.home-container\nproperties:\n sticky: true\nchildren:\n - brick: span\n properties:\n textContent: 吸附布局内容\n style:\n padding: 16px\n display: block\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.home-container sticky>\n# <span style=\"padding: 16px; display: block\">吸附布局内容</span>\n# </ai-portal.home-container>\n# \n```\n"
103
+ },
104
+ "ai-portal.cruise-canvas": {
105
+ "doc": "---\ntagName: ai-portal.cruise-canvas\ndisplayName: WrappedAiPortalCruiseCanvas\ndescription: AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。\ncategory: ai-portal\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.cruise-canvas\n\n> AI 任务执行画布,以节点图形式展示任务的执行过程,支持任务回放、反馈及 UI 切换等功能。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| ----------------------- | -------------------------------------- | ---- | ------ | -------------------------------------------------------- |\n| conversationId | `string \\| undefined` | 否 | - | 对话 ID |\n| initialRequest | `RequestStore \\| undefined \\| null` | 否 | - | 初始请求数据。仅初始设置有效。 |\n| replay | `boolean \\| undefined` | 否 | - | 是否启用回放。仅初始设置有效。 |\n| replayDelay | `number \\| undefined` | 否 | `2` | 设置回放时消息之间的时间间隔,单位为秒。仅初始设置有效。 |\n| supports | `Record<string, boolean> \\| undefined` | 否 | - | 功能开关配置,键为功能名,值为是否启用 |\n| showHiddenJobs | `boolean \\| undefined` | 否 | - | 是否显示隐藏的 Job 节点 |\n| showHumanActions | `boolean \\| undefined` | 否 | - | 是否显示 Human-in-the-loop 操作按钮 |\n| showFeedback | `boolean \\| undefined` | 否 | - | 是否显示反馈按钮 |\n| showFeedbackAfterFailed | `boolean \\| undefined` | 否 | - | 是否在任务失败时也显示反馈按钮 |\n| showFeedbackOnView | `boolean \\| undefined` | 否 | - | 是否在查看生成视图时显示反馈按钮 |\n| showUiSwitch | `boolean \\| undefined` | 否 | - | 是否显示切换到对话流视图的按钮 |\n| hideMermaid | `boolean \\| undefined` | 否 | - | 是否隐藏 Mermaid 图表渲染,通过 CSS 属性选择器控制样式 |\n| showJsxEditor | `boolean \\| undefined` | 否 | - | 是否显示 JSX 编辑器按钮 |\n| previewUrlTemplate | `string \\| undefined` | 否 | - | 生成视图预览页的 URL 模板,支持 {viewId} 等字段插值 |\n| showCases | `ShowCaseType[] \\| undefined` | 否 | - | 示例场景列表,用于在空对话时展示快速入口 |\n| exampleProjects | `ExampleProject[] \\| undefined` | 否 | - | 示例项目列表,用于展示可参考的已有项目 |\n| tryItOutUrl | `string \\| undefined` | 否 | - | \"试一试\"跳转 URL |\n| separateInstructions | `boolean \\| undefined` | 否 | - | 是否将任务说明独立展示,而非内联在节点中 |\n| aiEmployees | `AIEmployee[] \\| undefined` | 否 | - | 可 @ 提及的数字人列表 |\n| commands | `Command[] \\| undefined` | 否 | - | 命令列表,支持通过 / 或搜索触发联想 |\n| uploadOptions | `UploadOptions \\| undefined` | 否 | - | 文件上传配置 |\n\n## Events\n\n| 事件 | detail | 说明 |\n| ---------------- | ------------------------------------------------------------------------------- | ---------------------------------- |\n| share | `void` | 用户点击分享时触发 |\n| terminate | `void` | 用户点击终止任务时触发 |\n| feedback.submit | `FeedbackDetail` — { plan: 计划步骤列表, result: 结果列表, feedback: 反馈文本 } | 用户提交反馈时触发 |\n| feedback.on.view | `string` — 生成视图的 viewId | 用户查看生成视图时的反馈事件触发 |\n| ui.switch | `\"chat\"` — 切换目标 UI 模式,值为 \"chat\" | 用户点击切换到对话流视图按钮时触发 |\n| detail.change | `ConversationDetail` — { projectId: 关联的项目 ID } | 对话详情信息变化时触发 |\n\n## Methods\n\n| 方法 | 参数 | 返回值 | 说明 |\n| -------------------- | -------------------------- | ------ | -------------------------------------- |\n| resumed | `() => void` | `void` | 通知组件任务已恢复,用于继续中断的对话 |\n| feedbackSubmitDone | `() => void` | `void` | 通知组件反馈提交成功 |\n| feedbackSubmitFailed | `() => void` | `void` | 通知组件反馈提交失败 |\n| feedbackOnViewDone | `(viewId: string) => void` | `void` | 通知组件查看视图的反馈处理完成 |\n\n## Examples\n\n### Basic\n\n展示 AI 任务画布的基本用法,通过 conversationId 加载已有对话的执行过程。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\nevents:\n share:\n action: console.log\n terminate:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# brick_1.addEventListener(\"terminate\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With Feedback\n\n开启反馈功能,在任务完成后收集用户反馈。\n\n```yaml preview\n- brick: ai-portal.cruise-canvas\n properties:\n id: cruiseCanvas\n conversationId: conv-001\n showFeedback: true\n showFeedbackAfterFailed: true\n showFeedbackOnView: true\n events:\n feedback.submit:\n useProvider: my-feedback-provider\n args:\n - <% EVENT.detail %>\n callback:\n success:\n target: \"#cruiseCanvas\"\n method: feedbackSubmitDone\n error:\n target: \"#cruiseCanvas\"\n method: feedbackSubmitFailed\n detail.change:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# show-feedback\n# show-feedback-after-failed\n# show-feedback-on-view\n# id=\"cruiseCanvas\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const cruiseCanvas = document.getElementById(\"cruiseCanvas\");\n# cruiseCanvas.addEventListener(\"feedback.submit\", (e) => {\n# const provider = document.createElement(\"my-feedback-provider\");\n# const promise = Promise.resolve(provider.resolve(e.detail));\n# promise.then((r) => {\n# const brick = document.querySelector(\"#cruiseCanvas\");\n# brick.feedbackSubmitDone();\n# });\n# promise.catch((r) => {\n# const brick = document.querySelector(\"#cruiseCanvas\");\n# brick.feedbackSubmitFailed();\n# });\n# });\n# cruiseCanvas.addEventListener(\"detail.change\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### With UI Switch and Canvas Options\n\n启用 UI 切换按钮,并展示隐藏节点和独立说明。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n showUiSwitch: true\n showHiddenJobs: true\n showHumanActions: true\n separateInstructions: true\n showJsxEditor: true\nevents:\n ui.switch:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# show-ui-switch\n# show-hidden-jobs\n# show-human-actions\n# separate-instructions\n# show-jsx-editor\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.addEventListener(\"ui.switch\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n\n### Replay Mode\n\n使用回放模式展示历史任务的执行过程。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n replay: true\n replayDelay: 2\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# replay\n# replay-delay=\"2\"\n# ></ai-portal.cruise-canvas>\n# \n```\n\n### With Upload and Show Cases\n\n配置文件上传及示例场景,丰富画布的入口展示。\n\n```yaml preview\nbrick: ai-portal.cruise-canvas\nproperties:\n conversationId: conv-001\n uploadOptions:\n enabled: true\n accept: image/*,.pdf\n maxFiles: 3\n showCases:\n - conversationId: show-001\n title: 自动化部署流程\n summary: 通过 AI 自动完成服务部署\n scenario: devops\n exampleProjects:\n - instanceId: proj-001\n name: 示例项目\n tryItOutUrl: /try-it-out\n previewUrlTemplate: /preview/{viewId}\nevents:\n share:\n action: console.log\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.cruise-canvas\n# conversation-id=\"conv-001\"\n# try-it-out-url=\"/try-it-out\"\n# preview-url-template=\"/preview/{viewId}\"\n# id=\"brick-1\"\n# ></ai-portal.cruise-canvas>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.uploadOptions = {\n# enabled: true,\n# accept: \"image/*,.pdf\",\n# maxFiles: 3,\n# };\n# brick_1.showCases = [\n# {\n# conversationId: \"show-001\",\n# title: \"自动化部署流程\",\n# summary: \"通过 AI 自动完成服务部署\",\n# scenario: \"devops\",\n# },\n# ];\n# brick_1.exampleProjects = [\n# {\n# instanceId: \"proj-001\",\n# name: \"示例项目\",\n# },\n# ];\n# brick_1.addEventListener(\"share\", (e) => {\n# console.log(e.detail);\n# });\n# </script>\n# \n```\n"
106
+ },
107
+ "ai-portal.stat-with-mini-chart": {
108
+ "doc": "---\ntagName: ai-portal.stat-with-mini-chart\ndisplayName: WrappedAiPortalStatWithMiniChart\ndescription: 带迷你折线图的统计数据展示构件,在统计数值旁边渲染一个迷你折线图。\ncategory: \"\"\nsource: \"@next-bricks/ai-portal\"\n---\n\n# ai-portal.stat-with-mini-chart\n\n> 带迷你折线图的统计数据展示构件,在统计数值旁边渲染一个迷你折线图。\n\n## Props\n\n| 属性 | 类型 | 必填 | 默认值 | 说明 |\n| --------- | -------------------------- | ---- | ---------------------- | --------------------------------------------------- |\n| label | `string` | 否 | - | 统计指标标签名称 |\n| value | `string` | 否 | - | 统计数值文本 |\n| size | `\"medium\" \\| \"small\"` | 否 | `\"medium\"` | 展示尺寸,medium 时图表高度为 92px,small 时为 55px |\n| lineColor | `string` | 否 | `\"var(--color-brand)\"` | 折线颜色 |\n| showArea | `boolean` | 否 | - | 是否在折线下方显示渐变填充区域 |\n| min | `number` | 否 | - | 指定 y 轴最小值,未指定时从数据中计算 |\n| max | `number` | 否 | - | 指定 y 轴最大值,未指定时从数据中计算 |\n| xField | `string` | 否 | `\"0\"` | x 轴字段名(数据中时间字段的 key) |\n| yField | `string` | 否 | `\"1\"` | y 轴字段名(数据中数值字段的 key) |\n| data | `Record<string, number>[]` | 否 | - | 图表数据源,每项为包含 xField 和 yField 字段的对象 |\n\n## Examples\n\n### 基础使用(medium 尺寸)\n\n展示带标签、数值和迷你折线图的统计卡片,默认 medium 尺寸。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: 请求数\n value: \"563.5\"\n xField: time\n yField: request_total\n lineColor: \"#295DFF\"\n data:\n - request_total: 642.2\n time: 1730597995.403\n - request_total: 621.3\n time: 1730599200\n - request_total: 600.2\n time: 1730601000\n - request_total: 601.9666666666667\n time: 1730602800\n - request_total: 592.4\n time: 1730604600\n - request_total: 567.8666666666667\n time: 1730606400\n - request_total: 651.3333333333334\n time: 1730608200\n - request_total: 571.9677419354839\n time: 1730610000\n - request_total: 550.2\n time: 1730611800\n - request_total: 563.5\n time: 1730683800\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"请求数\"\n# value=\"563.5\"\n# x-field=\"time\"\n# y-field=\"request_total\"\n# line-color=\"#295DFF\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# request_total: 642.2,\n# time: 1730597995.403,\n# },\n# {\n# request_total: 621.3,\n# time: 1730599200,\n# },\n# {\n# request_total: 600.2,\n# time: 1730601000,\n# },\n# {\n# request_total: 601.9666666666667,\n# time: 1730602800,\n# },\n# {\n# request_total: 592.4,\n# time: 1730604600,\n# },\n# {\n# request_total: 567.8666666666667,\n# time: 1730606400,\n# },\n# {\n# request_total: 651.3333333333334,\n# time: 1730608200,\n# },\n# {\n# request_total: 571.9677419354839,\n# time: 1730610000,\n# },\n# {\n# request_total: 550.2,\n# time: 1730611800,\n# },\n# {\n# request_total: 563.5,\n# time: 1730683800,\n# },\n# ];\n# </script>\n# \n```\n\n### Small 尺寸\n\nsmall 尺寸时图表高度为 55px,标签和数值紧凑排列在图表左侧。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: 请求数\n value: \"563.5\"\n size: small\n xField: time\n yField: request_total\n lineColor: \"#295DFF\"\n data:\n - request_total: 642.2\n time: 1730597995.403\n - request_total: 621.3\n time: 1730599200\n - request_total: 600.2\n time: 1730601000\n - request_total: 601.9666666666667\n time: 1730602800\n - request_total: 592.4\n time: 1730604600\n - request_total: 567.8666666666667\n time: 1730606400\n - request_total: 651.3333333333334\n time: 1730608200\n - request_total: 571.9677419354839\n time: 1730610000\n - request_total: 550.2\n time: 1730611800\n - request_total: 563.5\n time: 1730683800\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"请求数\"\n# value=\"563.5\"\n# size=\"small\"\n# x-field=\"time\"\n# y-field=\"request_total\"\n# line-color=\"#295DFF\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# request_total: 642.2,\n# time: 1730597995.403,\n# },\n# {\n# request_total: 621.3,\n# time: 1730599200,\n# },\n# {\n# request_total: 600.2,\n# time: 1730601000,\n# },\n# {\n# request_total: 601.9666666666667,\n# time: 1730602800,\n# },\n# {\n# request_total: 592.4,\n# time: 1730604600,\n# },\n# {\n# request_total: 567.8666666666667,\n# time: 1730606400,\n# },\n# {\n# request_total: 651.3333333333334,\n# time: 1730608200,\n# },\n# {\n# request_total: 571.9677419354839,\n# time: 1730610000,\n# },\n# {\n# request_total: 550.2,\n# time: 1730611800,\n# },\n# {\n# request_total: 563.5,\n# time: 1730683800,\n# },\n# ];\n# </script>\n# \n```\n\n### 带填充区域和 y 轴范围\n\n开启 showArea 并指定 min/max 固定 y 轴范围。\n\n```yaml preview\nbrick: ai-portal.stat-with-mini-chart\nproperties:\n label: CPU 使用率\n value: \"78.5%\"\n xField: time\n yField: cpu\n lineColor: \"#FF6B6B\"\n showArea: true\n min: 0\n max: 100\n data:\n - cpu: 65.2\n time: 1730597995\n - cpu: 72.1\n time: 1730599200\n - cpu: 78.5\n time: 1730601000\n - cpu: 80.3\n time: 1730602800\n - cpu: 75.6\n time: 1730604600\n - cpu: 70.2\n time: 1730606400\n - cpu: 78.5\n time: 1730608200\n# -- YAML DELIMITER (1nbbm8) --\n# <ai-portal.stat-with-mini-chart\n# label=\"CPU 使用率\"\n# value=\"78.5%\"\n# x-field=\"time\"\n# y-field=\"cpu\"\n# line-color=\"#FF6B6B\"\n# show-area\n# min=\"0\"\n# max=\"100\"\n# id=\"brick-1\"\n# ></ai-portal.stat-with-mini-chart>\n# \n# <script>\n# const brick_1 = document.getElementById(\"brick-1\");\n# brick_1.data = [\n# {\n# cpu: 65.2,\n# time: 1730597995,\n# },\n# {\n# cpu: 72.1,\n# time: 1730599200,\n# },\n# {\n# cpu: 78.5,\n# time: 1730601000,\n# },\n# {\n# cpu: 80.3,\n# time: 1730602800,\n# },\n# {\n# cpu: 75.6,\n# time: 1730604600,\n# },\n# {\n# cpu: 70.2,\n# time: 1730606400,\n# },\n# {\n# cpu: 78.5,\n# time: 1730608200,\n# },\n# ];\n# </script>\n# \n```\n"
109
109
  }
110
110
  }
@@ -0,0 +1,2 @@
1
+ (()=>{"use strict";var e,t,r,a,n,o,l,i,s,c,d,h,f,u,m,b,p,v,P,g,x,y,w,k={42455:(e,t,r)=>{var a={"./chat-box":()=>Promise.all([r.e(1341),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(410),r.e(128),r.e(2919),r.e(1919),r.e(9435),r.e(9271),r.e(6573)]).then((()=>()=>r(94669))),"./elevo-sidebar":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(128),r.e(2919),r.e(794),r.e(7771)]).then((()=>()=>r(17295))),"./icon-button":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(1541)]).then((()=>()=>r(68845))),"./show-cases":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(4332)]).then((()=>()=>r(64604))),"./mcp-tools":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(7087)]).then((()=>()=>r(91375))),"./ai-employees":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(6729)]).then((()=>()=>r(80749))),"./chat-stream":()=>Promise.all([r.e(1341),r.e(3793),r.e(7888),r.e(3840),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(410),r.e(128),r.e(2919),r.e(1302),r.e(1321),r.e(5188),r.e(1919),r.e(6277),r.e(4864),r.e(5452),r.e(1999),r.e(366)]).then((()=>()=>r(23182))),"./call-tool":()=>Promise.all([r.e(410),r.e(2919),r.e(5234)]).then((()=>()=>r(24963))),"./save-request-store":()=>Promise.all([r.e(410),r.e(8539)]).then((()=>()=>r(93291))),"./load-request-store":()=>Promise.all([r.e(410),r.e(8539)]).then((()=>()=>r(93291))),"./clear-request-store":()=>Promise.all([r.e(410),r.e(8539)]).then((()=>()=>r(93291))),"./set-chat-mentioned-employee":()=>Promise.all([r.e(410),r.e(1731)]).then((()=>()=>r(40036))),"./ai-agents":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(304)]).then((()=>()=>r(50520))),"./set-chat-command":()=>Promise.all([r.e(410),r.e(5944)]).then((()=>()=>r(93757))),"./page-container":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(128),r.e(5020)]).then((()=>()=>r(7476))),"./tab-list":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(9873)]).then((()=>()=>r(48581))),"./dropdown-select":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(9053)]).then((()=>()=>r(26001))),"./preview-container":()=>Promise.all([r.e(3793),r.e(7888),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(410),r.e(128),r.e(1321),r.e(5188),r.e(8775)]).then((()=>()=>r(54519))),"./action-buttons":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(6109)]).then((()=>()=>r(27725))),"./goal-card-list":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(4322)]).then((()=>()=>r(96318))),"./project-conversations":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(1302),r.e(2697)]).then((()=>()=>r(36709))),"./project-knowledges":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(1302),r.e(7908)]).then((()=>()=>r(73388))),"./activity-timeline":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(1302),r.e(9576)]).then((()=>()=>r(59544))),"./chat-input":()=>Promise.all([r.e(1341),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(128),r.e(2919),r.e(1919),r.e(9435),r.e(9271),r.e(7218)]).then((()=>()=>r(45962))),"./elevo-logo":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(5064)]).then((()=>()=>r(52404))),"./show-case":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(3901)]).then((()=>()=>r(2865))),"./blank-state":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(1291)]).then((()=>()=>r(3019))),"./sticky-container":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(5144)]).then((()=>()=>r(46544))),"./elevo-card":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7923)]).then((()=>()=>r(5527))),"./flow-tabs":()=>Promise.all([r.e(1341),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(5764)]).then((()=>()=>r(42252))),"./stage-flow":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(410),r.e(7195)]).then((()=>()=>r(68268))),"./running-flow":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(9789)]).then((()=>()=>r(69897))),"./notice-dropdown":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(4595)]).then((()=>()=>r(72419))),"./notice-list":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(1302),r.e(4595),r.e(9780)]).then((()=>()=>r(70976))),"./chat-panel":()=>Promise.all([r.e(1341),r.e(3793),r.e(7888),r.e(3840),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(410),r.e(128),r.e(2919),r.e(1321),r.e(5188),r.e(1919),r.e(6277),r.e(4864),r.e(288)]).then((()=>()=>r(11552))),"./space-logo":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(6733)]).then((()=>()=>r(84136))),"./chat-panel-welcome":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(4519)]).then((()=>()=>r(40558))),"./space-chat-guide":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(128),r.e(2919),r.e(1429)]).then((()=>()=>r(21696))),"./space-workbench":()=>Promise.all([r.e(1341),r.e(3793),r.e(7888),r.e(3840),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(410),r.e(128),r.e(2919),r.e(1302),r.e(1321),r.e(5188),r.e(1919),r.e(6277),r.e(4864),r.e(1380),r.e(551),r.e(6715)]).then((()=>()=>r(99991))),"./home-container":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(3172)]).then((()=>()=>r(6492))),"./cruise-canvas":()=>Promise.all([r.e(1341),r.e(3793),r.e(7888),r.e(3840),r.e(8324),r.e(3363),r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7177),r.e(1030),r.e(410),r.e(128),r.e(2919),r.e(1302),r.e(1321),r.e(5188),r.e(1919),r.e(6277),r.e(5452),r.e(3186),r.e(2267)]).then((()=>()=>r(99631))),"./stat-with-mini-chart":()=>Promise.all([r.e(8769),r.e(870),r.e(981),r.e(4419),r.e(7345)]).then((()=>()=>r(45657)))},n=(e,t)=>(r.R=t,t=r.o(a,e)?a[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),r.R=void 0,t),o=(e,t)=>{if(r.S){var a="default",n=r.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return r.S[a]=e,r.I(a,t)}};r.d(t,{get:()=>n,init:()=>o})}},j={};function S(e){var t=j[e];if(void 0!==t)return t.exports;var r=j[e]={id:e,loaded:!1,exports:{}};return k[e].call(r.exports,r,r.exports,S),r.loaded=!0,r.exports}S.m=k,S.c=j,S.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return S.d(t,{a:t}),t},S.d=(e,t)=>{for(var r in t)S.o(t,r)&&!S.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},S.f={},S.e=e=>Promise.all(Object.keys(S.f).reduce(((t,r)=>(S.f[r](e,t),t)),[])),S.u=e=>"chunks/"+({288:"chat-panel",304:"ai-agents",366:"chat-stream",1291:"blank-state",1429:"space-chat-guide",1541:"icon-button",1731:"set-chat-mentioned-employee",2267:"cruise-canvas",2697:"project-conversations",3172:"home-container",3901:"show-case",4322:"goal-card-list",4332:"show-cases",4519:"chat-panel-welcome",4595:"notice-dropdown",5020:"page-container",5064:"elevo-logo",5144:"sticky-container",5234:"call-tool",5764:"flow-tabs",5944:"set-chat-command",6109:"action-buttons",6573:"chat-box",6715:"space-workbench",6729:"ai-employees",6733:"space-logo",7087:"mcp-tools",7195:"stage-flow",7218:"chat-input",7345:"stat-with-mini-chart",7771:"elevo-sidebar",7908:"project-knowledges",7923:"elevo-card",8539:"load-request-store",8775:"preview-container",9053:"dropdown-select",9576:"activity-timeline",9780:"notice-list",9789:"running-flow",9873:"tab-list"}[e]||e)+"."+{114:"af61e48a",288:"63207d2f",304:"cffd08a0",366:"393c8241",551:"ae5171a6",721:"f43de0ef",726:"392de709",794:"214aa08f",871:"42c14164",879:"a469d051",948:"c96c7036",1045:"0906fc23",1097:"05983e91",1120:"fd177648",1122:"95231c39",1136:"456f1c68",1215:"78630d79",1291:"648eea95",1341:"bd8f14f2",1429:"b9f77cb5",1541:"545ffb24",1731:"69199eec",1889:"803775eb",1931:"2abee15e",1940:"afcdea49",1999:"f9846bc3",2052:"ef23d12a",2260:"9564eb16",2267:"bfae3138",2277:"b026624f",2357:"b6f1e719",2432:"352ae272",2449:"b46fc22a",2508:"15c05669",2510:"91062655",2593:"783fb42e",2697:"4cc72f40",3003:"a607b32b",3144:"4088b5d1",3171:"9d323cbe",3172:"f1829834",3186:"ca53075a",3208:"0796f5be",3331:"bb7b4c1c",3363:"d64d8e2a",3419:"28287d23",3744:"06d6d911",3793:"03162dd0",3816:"fc867cd4",3840:"6080d56e",3901:"44e995fc",3935:"3b6a2f5d",4041:"6b503155",4190:"7612613e",4228:"692fa030",4281:"ddad94d5",4306:"9e8251b7",4322:"74ab5767",4332:"c3921ea0",4474:"5fd3e9c8",4491:"539d30f8",4519:"2f7c6c8b",4595:"63cb2415",4609:"e21567a0",4658:"18d5ee4d",4735:"24157512",4765:"03d9c7c5",4864:"beefe6d5",5020:"2185f2e0",5032:"2e4fb116",5064:"25e3b889",5065:"9616e9d3",5144:"d3f7054e",5191:"ce5dfec4",5234:"a3219d5e",5250:"5294dc23",5307:"28ab7643",5384:"564ae2e4",5399:"ef4bb3aa",5452:"bb5140b0",5498:"298984c7",5548:"498b312d",5552:"53024929",5727:"93a1388d",5764:"ee1290c2",5807:"0b926b80",5936:"5bba7f2f",5944:"182747cc",6023:"843ea4a1",6029:"6fe4c192",6109:"68666920",6161:"d7e3ea42",6277:"c8a6013f",6376:"c35ff317",6450:"3e0a0900",6519:"3ce478ef",6530:"6d9e7c8b",6573:"060b8727",6715:"9d48eec0",6729:"267c3626",6733:"994f7a25",6773:"239d3ea4",7087:"f132c502",7146:"b327120d",7195:"9b6fad93",7218:"e913e9ed",7302:"3117acc5",7345:"1509cf8c",7353:"02afd00b",7367:"d389861e",7721:"c985db03",7729:"1ccf3e2a",7733:"dbb66cbc",7771:"dfaaf9d1",7842:"d5a94411",7888:"61a7cdf2",7908:"51731410",7923:"49b42ed0",8231:"89b65f56",8263:"d9eaafab",8311:"69ab488d",8324:"5ac013ff",8348:"2fbb3b7e",8539:"a6effafd",8588:"0bce58e7",8633:"1b8bb39e",8755:"1525c38d",8757:"5cde95c7",8775:"a0ca6e2f",8936:"b9a73775",8989:"ddf83737",9034:"7ff08734",9053:"336442ba",9251:"52df4857",9263:"affcdb7b",9271:"2786528c",9515:"b58eb80e",9559:"3db56cb0",9576:"96e7aaea",9634:"71192f72",9780:"9a78cc87",9789:"37a428cf",9831:"f659ce60",9844:"c3062a6b",9873:"ee97567f"}[e]+".js",S.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),S.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="@next-bricks/ai-portal:",S.l=(r,a,n,o)=>{if(e[r])e[r].push(a);else{var l,i;if(void 0!==n)for(var s=document.getElementsByTagName("script"),c=0;c<s.length;c++){var d=s[c];if(d.getAttribute("src")==r||d.getAttribute("data-webpack")==t+n){l=d;break}}l||(i=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,S.nc&&l.setAttribute("nonce",S.nc),l.setAttribute("data-webpack",t+n),l.src=r),e[r]=[a];var h=(t,a)=>{l.onerror=l.onload=null,clearTimeout(f);var n=e[r];if(delete e[r],l.parentNode&&l.parentNode.removeChild(l),n&&n.forEach((e=>e(a))),t)return t(a)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=h.bind(null,l.onerror),l.onload=h.bind(null,l.onload),i&&document.head.appendChild(l)}},S.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},S.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{S.S={};var e={},t={};S.I=(r,a)=>{a||(a=[]);var n=t[r];if(n||(n=t[r]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[r])return e[r];S.o(S.S,r)||(S.S[r]={});var o=S.S[r],l="@next-bricks/ai-portal",i=(e,t,r,a)=>{var n=o[e]=o[e]||{},i=n[t];(!i||!i.loaded&&(!a!=!i.eager?a:l>i.from))&&(n[t]={get:r,from:l,eager:!!a})},s=[];return"default"===r&&(i("@babel/parser","7.27.7",(()=>S.e(6773).then((()=>()=>S(46773))))),i("@easyops-cn/brick-next-pipes","0.7.6",(()=>Promise.all([S.e(4306),S.e(1030),S.e(1302),S.e(5310)]).then((()=>()=>S(34306))))),i("@next-core/cook","2.5.14",(()=>Promise.all([S.e(1122),S.e(580)]).then((()=>()=>S(61122))))),i("@next-core/easyops-runtime","0.15.35",(()=>Promise.all([S.e(1097),S.e(7177),S.e(1030),S.e(410),S.e(128),S.e(2919),S.e(1321),S.e(5188),S.e(9933),S.e(5310),S.e(1732)]).then((()=>()=>S(11097))))),i("@next-core/element","1.2.21",(()=>S.e(1045).then((()=>()=>S(21045))))),i("@next-core/http","1.2.16",(()=>S.e(8989).then((()=>()=>S(48989))))),i("@next-core/i18n","1.0.93",(()=>Promise.all([S.e(7177),S.e(410),S.e(671),S.e(5552)]).then((()=>()=>S(75552))))),i("@next-core/inject","1.0.65",(()=>Promise.all([S.e(1030),S.e(9933),S.e(2277)]).then((()=>()=>S(72277))))),i("@next-core/loader","1.6.21",(()=>S.e(5399).then((()=>()=>S(35399))))),i("@next-core/pipes","2.0.38",(()=>Promise.all([S.e(1919),S.e(6519)]).then((()=>()=>S(76519))))),i("@next-core/react-element","1.0.40",(()=>Promise.all([S.e(8769),S.e(870),S.e(9435),S.e(114)]).then((()=>()=>S(20114))))),i("@next-core/react-runtime","1.11.4",(()=>Promise.all([S.e(6376),S.e(8769),S.e(981),S.e(1030),S.e(128),S.e(1380)]).then((()=>()=>S(16376))))),i("@next-core/runtime","1.72.10",(()=>Promise.all([S.e(948),S.e(7177),S.e(1030),S.e(410),S.e(2919),S.e(1302),S.e(1321),S.e(5188),S.e(1732),S.e(9718)]).then((()=>()=>S(30948))))),i("@next-core/supply","2.3.11",(()=>Promise.all([S.e(1030),S.e(1302),S.e(9933),S.e(9559)]).then((()=>()=>S(49559))))),i("@next-core/theme","1.6.1",(()=>Promise.all([S.e(1889),S.e(2052)]).then((()=>()=>S(51889))))),i("@next-core/utils/general","1.8.11",(()=>S.e(871).then((()=>()=>S(40871))))),i("@next-core/utils/storyboard","1.8.11",(()=>Promise.all([S.e(1030),S.e(410),S.e(1321),S.e(7146)]).then((()=>()=>S(97146))))),i("history","4.10.1",(()=>S.e(3003).then((()=>()=>S(65384))))),i("i18next-browser-languagedetector","7.2.2",(()=>S.e(726).then((()=>()=>S(50726))))),i("i18next","22.5.1",(()=>S.e(2357).then((()=>()=>S(2357))))),i("js-yaml","3.14.1",(()=>S.e(9515).then((()=>()=>S(19515))))),i("lodash","4.17.21",(()=>S.e(5250).then((()=>()=>S(45250))))),i("moment/locale/zh-cn.js","2.30.1",(()=>Promise.all([S.e(7721),S.e(9844)]).then((()=>()=>S(61329))))),i("moment","2.30.1",(()=>Promise.all([S.e(7721),S.e(9844)]).then((()=>()=>S(99420))))),i("react-dom","0.0.0-experimental-ee8509801-20230117",(()=>Promise.all([S.e(3144),S.e(8769)]).then((()=>()=>S(43144))))),i("react","0.0.0-experimental-ee8509801-20230117",(()=>S.e(4041).then((()=>()=>S(14041)))))),e[r]=s.length?Promise.all(s).then((()=>e[r]=1)):1}}})(),(()=>{var e;S.g.importScripts&&(e=S.g.location+"");var t=S.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),S.p=e})(),r=e=>{var t=e=>e.split(".").map((e=>+e==e?+e:e)),r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=r[1]?t(r[1]):[];return r[2]&&(a.length++,a.push.apply(a,t(r[2]))),r[3]&&(a.push([]),a.push.apply(a,t(r[3]))),a},a=(e,t)=>{e=r(e),t=r(t);for(var a=0;;){if(a>=e.length)return a<t.length&&"u"!=(typeof t[a])[0];var n=e[a],o=(typeof n)[0];if(a>=t.length)return"u"==o;var l=t[a],i=(typeof l)[0];if(o!=i)return"o"==o&&"n"==i||"s"==i||"u"==o;if("o"!=o&&"u"!=o&&n!=l)return n<l;a++}},n=e=>{var t=e[0],r="";if(1===e.length)return"*";if(t+.5){r+=0==t?">=":-1==t?"<":1==t?"^":2==t?"~":t>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,r+="u"==(typeof(i=e[o]))[0]?"-":(a>0?".":"")+(a=2,i);return r}var l=[];for(o=1;o<e.length;o++){var i=e[o];l.push(0===i?"not("+s()+")":1===i?"("+s()+" || "+s()+")":2===i?l.pop()+" "+l.pop():n(i))}return s();function s(){return l.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,t)=>{if(0 in e){t=r(t);var a=e[0],n=a<0;n&&(a=-a-1);for(var l=0,i=1,s=!0;;i++,l++){var c,d,h=i<e.length?(typeof e[i])[0]:"";if(l>=t.length||"o"==(d=(typeof(c=t[l]))[0]))return!s||("u"==h?i>a&&!n:""==h!=n);if("u"==d){if(!s||"u"!=h)return!1}else if(s)if(h==d)if(i<=a){if(c!=e[i])return!1}else{if(n?c>e[i]:c<e[i])return!1;c!=e[i]&&(s=!1)}else if("s"!=h&&"n"!=h){if(n||i<=a)return!1;s=!1,i--}else{if(i<=a||d<h!=n)return!1;s=!1}else"s"!=h&&"n"!=h&&(s=!1,i--)}}var f=[],u=f.pop.bind(f);for(l=1;l<e.length;l++){var m=e[l];f.push(1==m?u()|u():2==m?u()&u():m?o(m,t):!u())}return!!u()},l=(e,t)=>e&&S.o(e,t),i=e=>(e.loaded=1,e.get()),s=e=>Object.keys(e).reduce(((t,r)=>(e[r].eager&&(t[r]=e[r]),t)),{}),c=(e,t,r,n)=>{var l=n?s(e[t]):e[t];return(t=Object.keys(l).reduce(((e,t)=>!o(r,t)||e&&!a(e,t)?e:t),0))&&l[t]},d=(e,t,r)=>{var n=r?s(e[t]):e[t];return Object.keys(n).reduce(((e,t)=>!e||!n[e].loaded&&a(e,t)?t:e),0)},h=(e,t,r,a)=>"Unsatisfied version "+r+" from "+(r&&e[t][r].from)+" of shared singleton module "+t+" (required "+n(a)+")",f=(e,t,r,a,o)=>{var l=e[r];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+r+" found in shared scope "+t+".\nAvailable versions: "+Object.keys(l).map((e=>e+" from "+l[e].from)).join(", ")},u=e=>{throw new Error(e)},m=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},p=(e,t,r)=>r?r():((e,t)=>u("Shared module "+t+" doesn't exist in shared scope "+e))(e,t),v=(b=e=>function(t,r,a,n,o){var l=S.I(t);return l&&l.then&&!a?l.then(e.bind(e,t,S.S[t],r,!1,n,o)):e(t,S.S[t],r,a,n,o)})(((e,t,r,a,n,o)=>{if(!l(t,r))return p(e,r,o);var s=c(t,r,n,a);return s?i(s):o?o():void u(f(t,e,r,n,a))})),P=b(((e,t,r,a,n,s)=>{if(!l(t,r))return p(e,r,s);var c=d(t,r,a);return o(n,c)||m(h(t,r,c,n)),i(t[r][c])})),g={},x={41030:()=>P("default","lodash",!1,[1,4,17,21],(()=>S.e(5250).then((()=>()=>S(45250))))),21302:()=>P("default","moment",!1,[1,2,30,1],(()=>Promise.all([S.e(7721),S.e(9844)]).then((()=>()=>S(99420))))),55310:()=>P("default","js-yaml",!1,[0],(()=>S.e(9515).then((()=>()=>S(19515))))),40580:()=>P("default","@babel/parser",!1,[0],(()=>S.e(6773).then((()=>()=>S(46773))))),67177:()=>P("default","@next-core/i18n",!1,[1,1,0,87],(()=>Promise.all([S.e(410),S.e(671),S.e(3171)]).then((()=>()=>S(75552))))),40410:()=>P("default","@next-core/utils/general",!1,[1,1,8,8],(()=>S.e(871).then((()=>()=>S(40871))))),60128:()=>P("default","@next-core/runtime",!1,[1,1,71,4],(()=>Promise.all([S.e(948),S.e(7177),S.e(1030),S.e(410),S.e(2919),S.e(1302),S.e(1321),S.e(5188),S.e(1732),S.e(9718)]).then((()=>()=>S(30948))))),22919:()=>P("default","@next-core/http",!1,[1,1,2,14],(()=>S.e(8989).then((()=>()=>S(48989))))),71321:()=>P("default","@next-core/cook",!1,[0],(()=>Promise.all([S.e(1122),S.e(580)]).then((()=>()=>S(61122))))),95188:()=>P("default","@next-core/utils/storyboard",!1,[1,1,8,8],(()=>S.e(4765).then((()=>()=>S(97146))))),59933:()=>P("default","@next-core/pipes",!1,[0],(()=>Promise.all([S.e(1919),S.e(6519)]).then((()=>()=>S(76519))))),11732:()=>P("default","history",!1,[0],(()=>S.e(3003).then((()=>()=>S(65384))))),848:()=>P("default","i18next-browser-languagedetector",!1,[0],(()=>S.e(726).then((()=>()=>S(50726))))),75630:()=>P("default","i18next",!1,[0],(()=>S.e(2357).then((()=>()=>S(2357))))),61919:()=>P("default","@easyops-cn/brick-next-pipes",!1,[2,0,7,3],(()=>Promise.all([S.e(4306),S.e(1030),S.e(1302),S.e(5310)]).then((()=>()=>S(34306))))),18769:()=>v("default","react",!1,[6,0,0,0,,"experimental-ee8509801-20230117"],(()=>S.e(4041).then((()=>()=>S(14041))))),90870:()=>v("default","@next-core/element",!1,[1,1,2,19],(()=>S.e(1045).then((()=>()=>S(21045))))),59435:()=>v("default","react-dom",!1,[6,0,0,0,,"experimental-ee8509801-20230117"],(()=>S.e(3144).then((()=>()=>S(43144))))),30981:()=>v("default","@next-core/react-element",!1,[1,1,0,38],(()=>Promise.all([S.e(870),S.e(9435),S.e(7733)]).then((()=>()=>S(20114))))),1380:()=>P("default","@next-core/easyops-runtime",!1,[2,0,15,23],(()=>Promise.all([S.e(1097),S.e(7177),S.e(410),S.e(2919),S.e(1321),S.e(5188),S.e(9933),S.e(5310),S.e(1732)]).then((()=>()=>S(11097))))),26036:()=>P("default","moment/locale/zh-cn.js",!1,[1,2,30,1],(()=>Promise.all([S.e(7721),S.e(9844)]).then((()=>()=>S(61329))))),29283:()=>P("default","@next-core/inject",!1,[0],(()=>Promise.all([S.e(9933),S.e(4658)]).then((()=>()=>S(72277))))),45599:()=>P("default","@next-core/loader",!1,[0],(()=>S.e(5399).then((()=>()=>S(35399))))),94167:()=>P("default","@next-core/supply",!1,[0],(()=>Promise.all([S.e(9933),S.e(1940)]).then((()=>()=>S(49559))))),34419:()=>P("default","@next-core/theme",!1,[1,1,6,1],(()=>S.e(1889).then((()=>()=>S(51889))))),58772:()=>v("default","@next-core/react-runtime",!1,[1,1,11,4],(()=>Promise.all([S.e(6376),S.e(1380)]).then((()=>()=>S(16376)))))},y={128:[60128],410:[40410],580:[40580],671:[848,75630],870:[90870],981:[30981],1030:[41030],1302:[21302],1321:[71321],1380:[1380],1732:[11732],1919:[61919],2919:[22919],4419:[34419],5188:[95188],5310:[55310],6277:[58772],7177:[67177],8769:[18769],9435:[59435],9718:[26036,29283,45599,94167],9933:[59933]},w={},S.f.consumes=(e,t)=>{S.o(y,e)&&y[e].forEach((e=>{if(S.o(g,e))return t.push(g[e]);if(!w[e]){var r=t=>{g[e]=0,S.m[e]=r=>{delete S.c[e],r.exports=t()}};w[e]=!0;var a=t=>{delete g[e],S.m[e]=r=>{throw delete S.c[e],t}};try{var n=x[e]();n.then?t.push(g[e]=n.then(r).catch(a)):r(n)}catch(e){a(e)}}}))},(()=>{S.b=document.baseURI||self.location.href;var e={2641:0};S.f.j=(t,r)=>{var a=S.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(1(3(02|21|80)|030|28|732|919)|5(188|310|80)|87(0|69)|9(435|718|81|933)|(29|44)19|410|671|7177)$/.test(t))e[t]=0;else{var n=new Promise(((r,n)=>a=e[t]=[r,n]));r.push(a[2]=n);var o=S.p+S.u(t),l=new Error;S.l(o,(r=>{if(S.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var n=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,a[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var a,n,[o,l,i]=r,s=0;if(o.some((t=>0!==e[t]))){for(a in l)S.o(l,a)&&(S.m[a]=l[a]);i&&i(S)}for(t&&t(r);s<o.length;s++)n=o[s],S.o(e,n)&&e[n]&&e[n][0](),e[n]=0},r=globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),S.nc=void 0;var E=S(42455);window["bricks/ai-portal"]=E})();
2
+ //# sourceMappingURL=index.d9596ec7.js.map