@qfei-design/make-ai-assistant 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PUBLIC_API.md CHANGED
@@ -37,16 +37,20 @@ Fetch SSE 实现时,从 `/sse` 入口导入 `createSseAssistantTransport`。
37
37
 
38
38
  ## React exports
39
39
 
40
- - `MakeAiAssistant`:默认右侧居中浮动入口与右侧抽屉;支持受控开关、自定义 launcher,以及
40
+ - `MakeAiAssistant`:默认右下角浮动入口与右侧抽屉;支持受控开关、自定义 launcher,以及
41
41
  `brandName` 对默认“{品牌名} AI 助手”标题的覆盖。`title` 可覆盖完整标题;`assistantName` /
42
42
  `userName` / `userAvatarUrl` 可显示当前登录人的名称和头像;未传入时用户侧不显示身份信息。
43
43
  `subtitle` 用于显示宿主传入的当前对象(兼容移除旧接入中的“只读分析 ·”前缀);`privacyNotice`
44
44
  会在对象右侧的问号 Tooltip 中展示,并根据图标与可用视口选择相邻方向,而非单独的广播行。头栏默认高度为 50px,可通过 `headerHeight` 或
45
- `--make-ai-header-height` 覆盖。浮动入口位置可通过
46
- `--make-ai-launcher-top`、`--make-ai-launcher-right` `--make-ai-launcher-mobile-right` 覆盖。
47
- 桌面端抽屉可从左边缘 12px 热区向左拖宽,初始计算宽度(默认 432px,或宿主的
45
+ `--make-ai-header-height` 覆盖。内置浮动入口可通过 `launcherPosition` 设置为 `bottom-left`、
46
+ `bottom-right`、`top-left`、`top-right`、`left-center` `right-center`;默认值为 `bottom-right`。
47
+ 自定义 `launcher` 自行负责位置。标准位置只读取对应锚点的
48
+ `--make-ai-launcher-left`、`--make-ai-launcher-right`、`--make-ai-launcher-top` 或
49
+ `--make-ai-launcher-bottom` 变量;窄屏使用对应的 `--make-ai-launcher-mobile-*` 变量,另一侧始终为
50
+ `auto`。
51
+ 桌面端抽屉可从左边缘 12px 热区向左拖宽,初始计算宽度(默认 480px,或宿主的
48
52
  `--make-ai-drawer-width`)同时作为拖拽下限;热区激活时展示 2px 主题色提示线,宿主可通过
49
- `--make-ai-drawer-resize-line` 覆盖其颜色;手柄支持左右方向键微调。小于 560px 的视口保持全宽,
53
+ `--make-ai-drawer-resize-line` 覆盖其颜色;手柄支持左右方向键微调。不大于 560px 的视口保持全宽,
50
54
  不提供宽度调整。
51
55
  面板按自身容器宽度适配:达到 560px 时扩展内容区间距和阅读宽度,达到 760px 时 Markdown 表格
52
56
  优先按可用宽度分列并换行;宿主可使用 `--make-ai-panel-gutter-wide` 覆盖扩展状态内边距。
@@ -65,16 +69,14 @@ Fetch SSE 实现时,从 `/sse` 入口导入 `createSseAssistantTransport`。
65
69
  - `ReactArtifactTemplateRegistry`
66
70
  - `formatArtifactValue`
67
71
 
68
- `MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 均支持 `theme?: MakeAiTheme`。`primary` 为必填,
69
- 其余可选字段包括 `primaryHover`、`onPrimary`、`background`、`surface`、`surfaceStrong`、`text`、
70
- `textSecondary`、`border`、`overlay` 和 `onOverlay`。主题仅写入组件根节点的局部
71
- `--make-ai-theme-*` 变量,不覆盖宿主全局样式。颜色优先级为 `theme` 属性 >
72
- `--make-ai-theme-*` 变量 > 其他 `--make-ai-*` 覆盖变量 > 宿主 `--make-color-*` 变量 > 包内默认值;传入
73
- `theme` 后,未提供的可选颜色也会由 `primary` 派生,确保 AI 包不混入宿主另一套颜色。边框、表面、阴影、
74
- Tooltip、强调图标和拖拽线均会跟随主题主色,语义成功/告警/错误色保持独立。主色偏浅时,宿主应提供有足够对比度的
75
- `onPrimary`。`ArtifactRenderer` 的平台内置模板会将主题变量
76
- 直接写入既有 Artifact 根节点,不新增 DOM 包装;自定义模板可从 `ArtifactTemplateRenderContext.theme` 与
77
- `themeStyle` 读取同一主题并应用到自身根节点。
72
+ `MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 均支持 `theme?: MakeAiTheme`。标题栏、内容背景、正文、通用边框和用户消息的默认色固定,
73
+ 不会因宿主主题色变化:标题栏与承载面为白色,内容区为 `#f7f9fc`,正文为 `#15233d`,用户发送消息为
74
+ `#2f6df6` 蓝底白字。主题色只用于竖线、圆点、图标、输入框焦点、发送按钮和标签等强调元素。`primary` 为必填,
75
+ `primaryHover` 与 `onPrimary` 可选;内置强调色依次读取 `theme` 属性、`--make-ai-theme-primary` 系列、
76
+ `--make-ai-accent`、宿主 `--make-color-primary` 和包内默认值。`background`、`surface`、`surfaceStrong`、
77
+ `text`、`textSecondary`、`border`、`overlay` `onOverlay` 为兼容保留字段,不再改变内置默认样式,
78
+ 但会继续写入局部 `--make-ai-theme-*` 变量,供自定义 Artifact 模板通过
79
+ `ArtifactTemplateRenderContext.theme` 与 `themeStyle` 自行使用。语义成功/告警/错误色保持独立。
78
80
 
79
81
  `ArtifactRenderer`、`AssistantPanel` 和 `MakeAiAssistant` 支持 `onActionError`。当宿主
80
82
  `onAction` 同步抛错或返回 rejected Promise 时,包会把错误、动作和上下文交还给
@@ -85,8 +87,11 @@ Promise rejection。`onActionError` 自身同步抛错或返回 rejected Promise
85
87
  成功回答的复制操作以图标按钮展示,悬浮或聚焦时显示“复制”提示,保留“复制回答”的无障碍名称,
86
88
  只复制该 assistant message 的文本内容;复制失败只在本地 UI 反馈并记录不含回答正文的错误类型。AI 回答正文会按标题、
87
89
  段落、列表、强调、反引号代码片段和 Markdown 表格行做轻量结构化展示;该渲染不执行 HTML、JSX、
88
- CSS 或 JavaScript。默认内容字号为 12px,Markdown-like 回答正文默认字号为 11px,可通过
89
- `--make-ai-font-size-body` `--make-ai-font-size-markdown` 覆盖。只有当
90
+ CSS 或 JavaScript。对话排版默认分为四级:标题和用户问题为 14px、AI 正文与结构化结果数据为
91
+ 13px、身份/状态/操作等辅助信息为 12px、来源/时间/复制反馈等非关键注释为 11px。宿主可通过
92
+ `--make-ai-font-size-heading`、`--make-ai-font-size-body`、`--make-ai-font-size-markdown`、
93
+ `--make-ai-font-size-meta` 与 `--make-ai-font-size-caption` 覆盖对应层级。旧
94
+ `--make-ai-font-size-ui` 仅保留给复制、重新生成与复制反馈的兼容范围,不会影响新的辅助与注释层。只有当
90
95
  `transport.regenerate()` 存在且 `features.regeneration` 没有显式关闭时,图标化“重新生成”才会显示;
91
96
  它会复用该回答前一条用户消息和旧 assistant message 发起替换请求,并在当前 UI 中替换旧回答,
92
97
  不额外插入重复的用户气泡。用户滚离底部时,UI 不会强制自动跳到底部,而是显示仅含图标且保留
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @qfei-design/make-ai-assistant
2
2
 
3
- 面向 Make Console 与所有 Make App 的 AI 助手前端包。它提供统一的右侧居中浮动入口、右侧抽屉、流式会话状态、版本化 Artifact 协议、平台默认结果模板和 App 扩展机制。
3
+ 面向 Make Console 与所有 Make App 的 AI 助手前端包。它提供统一的右下角浮动入口、右侧抽屉、流式会话状态、版本化 Artifact 协议、平台默认结果模板和 App 扩展机制。
4
4
 
5
5
  ## Install
6
6
 
@@ -34,13 +34,33 @@ export function AppAssistant() {
34
34
  }
35
35
  ```
36
36
 
37
- `MakeAiAssistant` 默认渲染右侧居中的动效入口和右侧抽屉。宿主可以使用 `open` / `onOpenChange`
38
- 受控管理开关,也可以用 `AssistantPanel` 嵌入自己的容器;浮动入口位置可通过
39
- `--make-ai-launcher-top`、`--make-ai-launcher-right` `--make-ai-launcher-mobile-right`
40
- 覆盖。浮动入口首次打开后,关闭抽屉只隐藏 Drawer,不卸载 `AssistantPanel`,因此不会中断
37
+ `MakeAiAssistant` 默认渲染右下角的动效入口和右侧抽屉。宿主可以使用 `open` / `onOpenChange`
38
+ 受控管理开关,也可以用 `AssistantPanel` 嵌入自己的容器。内置浮动入口可通过 `launcherPosition`
39
+ 设置为 `bottom-left`、`bottom-right`、`top-left`、`top-right`、`left-center` `right-center`;默认值为
40
+ `bottom-right`。`launcher` 自定义渲染器自行负责位置。浮动入口首次打开后,关闭抽屉只隐藏 Drawer,不卸载 `AssistantPanel`,因此不会中断
41
41
  正在进行的生成;重新打开时会按用户关闭前的滚动意图恢复消息位置,空闲时聚焦输入框,生成中
42
42
  聚焦停止按钮。只有点击“停止生成”、新建对话、切换 App/reinitialize 或宿主卸载根组件时才会取消当前请求。
43
43
 
44
+ 标准位置确定锚点后,宿主可在 `MakeAiAssistant` 外层通过 CSS 变量微调偏移:
45
+ `--make-ai-launcher-left`、`--make-ai-launcher-right`、`--make-ai-launcher-top`、
46
+ `--make-ai-launcher-bottom`;窄屏可使用对应的 `--make-ai-launcher-mobile-left`、
47
+ `--make-ai-launcher-mobile-right`、`--make-ai-launcher-mobile-top`、
48
+ `--make-ai-launcher-mobile-bottom` 覆盖。每个标准位置只读取对应锚点的变量,另一侧始终为
49
+ `auto`;例如 `bottom-right` 使用 `right` 与 `bottom`,避免无关变量改变位置。比如:
50
+
51
+ ```tsx
52
+ <div className="sales-ai">
53
+ <MakeAiAssistant launcherPosition="bottom-right" {...assistantProps} />
54
+ </div>
55
+ ```
56
+
57
+ ```css
58
+ .sales-ai {
59
+ --make-ai-launcher-right: 24px;
60
+ --make-ai-launcher-bottom: 24px;
61
+ }
62
+ ```
63
+
44
64
  默认会话会显示“AI 助手”身份;用户侧默认不显示名称,宿主传入 `userName` 或
45
65
  `userAvatarUrl` 后才会在用户气泡上方展示当前登录人的名称或头像。宿主可通过 `brandName`
46
66
  覆盖默认的 `Make` 品牌,面板会显示为“{品牌名} AI 助手”;传入 `title` 时则使用完整标题覆盖。
@@ -53,9 +73,9 @@ AI transport;进度和可重试错误会显示在对应的 AI 回合中。
53
73
 
54
74
  ## Theme integration
55
75
 
56
- `MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 都支持同一个 `theme` 属性。传入宿主主色后,
57
- 入口、图标、只读标签、焦点、主操作、进度点、结构化结果、边框、浅色表面、浮层阴影及抽屉拖拽线会从该主色派生,
58
- 避免与宿主应用主题割裂;成功、告警和错误仍使用独立语义色。
76
+ `MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 都支持同一个 `theme` 属性。标题栏、内容背景、正文、通用边框和用户消息的默认色固定,
77
+ 不会因宿主主题色变化:标题栏与承载面为白色,内容区为 `#f7f9fc`,正文为 `#15233d`,用户发送消息为
78
+ `#2f6df6` 蓝底白字。主题色只用于竖线、圆点、图标、输入框焦点、发送按钮和标签等强调元素;成功、告警和错误仍使用独立语义色。
59
79
 
60
80
  ```tsx
61
81
  import type { MakeAiTheme } from "@qfei-design/make-ai-assistant/react";
@@ -64,46 +84,36 @@ const hostTheme: MakeAiTheme = {
64
84
  primary: "#0f8277",
65
85
  primaryHover: "#09685f",
66
86
  onPrimary: "#f7fffc",
67
- background: "#f5fbf8",
68
- surface: "#eef8f4",
69
- surfaceStrong: "#dff2eb",
70
- text: "#173f38",
71
- textSecondary: "#3c685f",
72
- border: "#b8d8cf",
73
- overlay: "#123f37",
74
- onOverlay: "#f7fffc",
75
87
  };
76
88
 
77
89
  <MakeAiAssistant theme={hostTheme} {...assistantProps} />;
78
90
  ```
79
91
 
80
- `primary` 为必填项;其余字段可省略并直接由主色派生,因此传入 `theme` 后不会再混入宿主已有的其他颜色变量。
81
- 若主色偏浅,请传入具有足够对比度的
82
- `onPrimary`。优先级为 `theme` 属性 > `--make-ai-theme-*` 变量 > 其他 `--make-ai-*` 变量 >
83
- 宿主 `--make-color-*` 变量 > 包内默认值。
84
- 不使用 React 属性时,也可在组件外层设置 `--make-ai-theme-primary`、`--make-ai-theme-primary-hover`、
85
- `--make-ai-theme-on-primary`、`--make-ai-theme-bg`、`--make-ai-theme-surface`、`--make-ai-theme-text` 和
86
- `--make-ai-theme-surface-strong`、`--make-ai-theme-text-secondary`、`--make-ai-theme-border`、
87
- `--make-ai-theme-overlay`、`--make-ai-theme-on-overlay`;这些变量只在 AI 包的命名空间内生效。
88
- 平台内置 Artifact 会把主题变量直接写入原有根节点,不增加布局或 DOM 层级;自定义模板如返回自定义组件或
89
- Fragment,可从 `renderContext.themeStyle` 取到同一组变量并应用到自身根节点。
92
+ `primary` 为必填项,`primaryHover` `onPrimary` 可选;若主色偏浅,请传入具有足够对比度的
93
+ `onPrimary`。内置 UI 的强调色优先级为 `theme` 属性 > `--make-ai-theme-primary`、
94
+ `--make-ai-theme-primary-hover`、`--make-ai-theme-on-primary` > `--make-ai-accent` >
95
+ 宿主 `--make-color-primary` > 包内默认值。`background`、`surface`、`text` 等中性色字段为兼容保留,
96
+ 不会改变内置默认样式;它们仍会写入 `renderContext.themeStyle`,供自定义 Artifact 模板自行使用。
90
97
 
91
- 桌面端抽屉默认宽度为 432px,且该初始宽度是用户拖拽时的最小宽度。最大宽度默认是 `min(1024px, 72vw)`,宿主可通过 `maxDrawerWidth` 传入像素值覆盖;小于最小宽度的配置会回退至最小宽度。鼠标移至抽屉左边缘的 12px 热区时才会显示 2px 主题色拖拽提示线(可通过 `--make-ai-drawer-resize-line` 覆盖),可向左拖宽;获得焦点后也可用左、右方向键以 16px 调整宽度。小于 560px 的视口保持全宽展示,不显示拖拽手柄。
98
+ 桌面端抽屉默认宽度为 480px,且该初始宽度是用户拖拽时的最小宽度。最大宽度默认是 `min(1024px, 72vw)`,宿主可通过 `maxDrawerWidth` 传入像素值覆盖;小于最小宽度的配置会回退至最小宽度。鼠标移至抽屉左边缘的 12px 热区时才会显示 2px 主题色拖拽提示线(可通过 `--make-ai-drawer-resize-line` 覆盖),可向左拖宽;获得焦点后也可用左、右方向键以 16px 调整宽度。不大于 560px 的视口保持全宽展示,不显示拖拽手柄。
92
99
 
93
100
  面板使用容器查询而非页面视口响应宽度:回答区、结构化结果、代码块和 Markdown 表格会随抽屉可用宽度扩展;达到 760px 时,表格优先按可用宽度分列并换行,长段落和列表仍限制在 96ch 内以保障阅读性。窄容器中的 Markdown 表格保留横向滚动保护,并使用细窄、跟随主题色的滚动条。宿主可通过 `--make-ai-panel-gutter-wide` 覆盖扩展抽屉的内边距。
94
101
 
95
102
  成功的 AI 回答会显示仅含图标的复制按钮,鼠标悬浮或键盘聚焦时显示“复制”提示,按钮保留
96
103
  “复制回答”的无障碍名称;复制只处理该回答的文本内容,失败时会在本地 UI 内提示,不会把回答正文写入日志。AI 回答正文会按标题、
97
104
  段落、列表、强调、代码片段和 Markdown 表格行做轻量结构化展示,不执行 HTML,也不引入 Markdown
98
- 运行时依赖。默认内容字号为 12px,Markdown-like 回答正文默认字号为 11px,宿主可通过
99
- `--make-ai-font-size-body` 与 `--make-ai-font-size-markdown` 覆盖。只有当宿主 transport
105
+ 运行时依赖。对话排版默认分为四级:标题和用户问题为 14px、AI 正文与结构化结果数据为 13px、身份/状态/操作等辅助信息为
106
+ 12px、来源/时间/复制反馈等非关键注释为 11px。宿主可通过
107
+ `--make-ai-font-size-heading`、`--make-ai-font-size-body`、`--make-ai-font-size-markdown`、
108
+ `--make-ai-font-size-meta` 与 `--make-ai-font-size-caption` 覆盖对应层级。旧
109
+ `--make-ai-font-size-ui` 仅保留给复制、重新生成与复制反馈的兼容范围,不会影响新的辅助与注释层。只有当宿主 transport
100
110
  实现可安全替换旧回答的 `regenerate()` 时,UI 才显示仅含图标的“重新生成”按钮,悬浮或聚焦时
101
111
  显示“重新生成”提示,并复用该回答前一条用户问题
102
112
  替换旧回答,不额外插入重复的用户气泡。用户滚离底部后,面板会显示仅含图标的“回到最新消息”
103
113
  按钮,避免在阅读历史时强制跳到底部。
104
114
 
105
- `run.progress` 会累积为可折叠的处理步骤。流式生成中步骤默认展开,完成后默认折叠并保留在
106
- 对应 AI 回合下;这些过程文本不进入最终回答正文。单次处理步骤最多 50 条且累计 20,000 字符,
115
+ `run.progress` 会累积为处理步骤,仅在对应的 AI 回合处于生成中时显示。完成、失败或从历史恢复后不再展示
116
+ 这些处理步骤,且过程文本不进入最终回答正文。单次处理步骤最多 50 条且累计 20,000 字符,
107
117
  超限会进入可重试错误状态。`suggestions` 省略时使用包内默认推荐问题,传入自定义数组时使用
108
118
  宿主内容,传入 `[]` 时隐藏推荐问题。
109
119
 
@@ -25,6 +25,11 @@ export declare function AssistantPanel(props: AssistantPanelProps): import("reac
25
25
  export interface MakeAiAssistantProps extends Omit<AssistantPanelProps, "onClose"> {
26
26
  open?: boolean;
27
27
  defaultOpen?: boolean;
28
+ /**
29
+ * Placement for the package-provided floating launcher. Custom `launcher`
30
+ * renderers own their positioning.
31
+ */
32
+ launcherPosition?: MakeAiLauncherPosition;
28
33
  /**
29
34
  * Maximum desktop drawer width in pixels. Values below the drawer minimum use
30
35
  * the minimum instead. Defaults to `min(1024px, 72vw)`.
@@ -37,4 +42,5 @@ export interface MakeAiAssistantProps extends Omit<AssistantPanelProps, "onClose
37
42
  }) => ReactNode;
38
43
  hideLauncher?: boolean;
39
44
  }
40
- export declare function MakeAiAssistant({ defaultOpen, hideLauncher, launcher, maxDrawerWidth, onOpenChange, open: controlledOpen, ...panelProps }: MakeAiAssistantProps): import("react").JSX.Element;
45
+ export type MakeAiLauncherPosition = "bottom-left" | "bottom-right" | "top-left" | "top-right" | "left-center" | "right-center";
46
+ export declare function MakeAiAssistant({ defaultOpen, hideLauncher, launcher, launcherPosition, maxDrawerWidth, onOpenChange, open: controlledOpen, ...panelProps }: MakeAiAssistantProps): import("react").JSX.Element;
@@ -5,25 +5,25 @@ import type { CSSProperties } from "react";
5
5
  export interface MakeAiTheme {
6
6
  /** 宿主主色,用于入口、强调、焦点与主要操作。 */
7
7
  primary: string;
8
- /** 主色的悬浮态;未提供时由主色与文字色自动混合。 */
8
+ /** 主色的悬浮态;未提供时由主色与内置固定深色自动混合。 */
9
9
  primaryHover?: string;
10
10
  /** 主色背景上的前景色;主色偏浅时应显式传入深色。 */
11
11
  onPrimary?: string;
12
- /** 面板基础背景色。 */
12
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
13
13
  background?: string;
14
- /** 卡片、输入框等承载内容的表面色。 */
14
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
15
15
  surface?: string;
16
- /** 禁用态、头像底色和轨道等更深一层的表面色。 */
16
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
17
17
  surfaceStrong?: string;
18
- /** 主文字色。 */
18
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
19
19
  text?: string;
20
- /** 辅助说明、次要标签和坐标文字色。 */
20
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
21
21
  textSecondary?: string;
22
- /** 分隔线与边框色。 */
22
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
23
23
  border?: string;
24
- /** Tooltip 等高对比浮层背景色。 */
24
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
25
25
  overlay?: string;
26
- /** 浮层背景上的前景色。 */
26
+ /** 内置中性色不读取此字段;保留并透传给自定义 Artifact 模板。 */
27
27
  onOverlay?: string;
28
28
  }
29
29
  export type MakeAiThemeStyle = CSSProperties & {
package/dist/react.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),l=require("react"),Y=require("./index.cjs"),m=require("./conversation-Cv1wdvCR.cjs"),ft=e=>e?.trim()||void 0,F=(e,s)=>ft(e)??s,Le=e=>{const s=ft(e?.primary);if(s)return{"--make-ai-theme-primary":s,"--make-ai-theme-primary-hover":F(e?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, var(--make-ai-theme-text))"),"--make-ai-theme-on-primary":F(e?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":F(e?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":F(e?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":F(e?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":F(e?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":F(e?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":F(e?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":F(e?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":F(e?.onOverlay,"#fcfcff")}},lt=(e,s)=>!s||!l.isValidElement(e)||typeof e.type!="string"?e:l.cloneElement(e,{style:{...e.props.style,...s}});function gt({artifact:e,context:s,fallback:a,onAction:r,onActionError:n,registry:i,theme:c}){const u=Le(c),v=Y.resolveArtifactTemplate(i,e,s);if(!v){const T=a?a(e):t.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[t.jsx("strong",{children:"暂不支持展示此结果"}),t.jsxs("span",{children:["结果类型:",e.kind]})]});return lt(T,u)}const g={context:s,onAction:r,onActionError:n,theme:c,themeStyle:u},w=v.template.render(e,s,g);return lt(w,u)}const X=(e,s,a)=>{if(e==null||e==="")return"—";if(typeof e=="boolean")return e?"是":"否";if(typeof e!="number")return`${e}${s?.unit??""}`;const r=s?.precision,n={maximumFractionDigits:r??2,minimumFractionDigits:r};s?.style==="currency"&&s.currency?(n.style="currency",n.currency=s.currency):s?.style==="percent"&&(n.style="percent");try{const i=s?.style==="percent"?e/100:e;return`${new Intl.NumberFormat(a,n).format(i)}${s?.unit??""}`}catch{return`${e}${s?.unit??""}`}},xt=e=>{let s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const r of e)s=Math.min(s,r),a=Math.max(a,r);return Number.isFinite(s)&&Number.isFinite(a)?{min:s,max:a}:{min:0,max:0}},_t=(e,s,a)=>{if(!a.onAction)return;const r=i=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:e.id,artifactId:s.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:e.intent})},n=i=>{if(a.onActionError){try{Promise.resolve(a.onActionError(i,e,s)).catch(r)}catch(c){r(c)}return}console.error("[make-ai-assistant] host action failed",{actionId:e.id,artifactId:s.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:e.intent})};try{Promise.resolve(a.onAction(e,s)).catch(n)}catch(i){n(i)}},ce=(e,s)=>e.actions?.length&&s.onAction?t.jsx("div",{className:"make-ai-artifact__actions",children:e.actions.map(a=>t.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>_t(a,{artifact:e,context:s.context},s),children:[a.label,t.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,le=(e,s,a="",r)=>t.jsxs("section",{"aria-label":e.title??`${e.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":e.presentation?.density,"data-artifact-kind":e.kind,style:r,children:[e.title?t.jsx("h4",{className:"make-ai-artifact__title",children:e.title}):null,e.summary?t.jsx("p",{className:"make-ai-artifact__summary",children:e.summary}):null,s]}),Bt=({artifact:e,renderContext:s})=>{const a=e.data.delta,r=a?X(a.value,a.format==="percent"?{style:"percent"}:void 0,s.context.locale):void 0;return le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__metric-value",children:X(e.data.value,e.data.format,s.context.locale)}),a?t.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[t.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),t.jsx("span",{children:r}),a.label?t.jsx("span",{children:a.label}):null]}):null,e.data.context?t.jsx("p",{className:"make-ai-artifact__context",children:e.data.context}):null,ce(e,s)]}),"make-ai-artifact--metric",s.themeStyle)},Ut=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__comparison",children:e.data.items.map(a=>t.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[t.jsx("span",{children:a.label}),t.jsx("strong",{children:X(a.value,a.format,s.context.locale)}),a.hint?t.jsx("small",{children:a.hint}):null]},a.id))}),ce(e,s)]}),"make-ai-artifact--comparison",s.themeStyle),zt=({artifact:e,renderContext:s})=>{const a=e.data.series.flatMap(c=>c.points.map(u=>u.y)),{max:r,min:n}=xt(a),i=r-n||1;return le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__trend",children:e.data.series.map(c=>t.jsxs("div",{className:"make-ai-artifact__trend-series",children:[t.jsx("div",{className:"make-ai-artifact__trend-label",children:c.label}),t.jsx("div",{className:"make-ai-artifact__trend-bars",children:c.points.map((u,v)=>{const g=18+(u.y-n)/i*70;return t.jsxs("div",{className:"make-ai-artifact__trend-point",children:[t.jsx("span",{"aria-label":`${u.x}: ${X(u.y,c.format,s.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${g}%`},title:`${u.x}: ${X(u.y,c.format,s.context.locale)}`}),t.jsx("small",{children:u.x})]},`${u.x}-${v}`)})})]},c.id))}),ce(e,s)]}),"make-ai-artifact--trend",s.themeStyle)},qt=({artifact:e,renderContext:s})=>{const{max:a}=xt(e.data.items.map(n=>Math.abs(n.value))),r=Math.max(a,1);return le(e,t.jsxs(t.Fragment,{children:[t.jsx("ol",{className:"make-ai-artifact__ranking",children:e.data.items.map((n,i)=>t.jsxs("li",{children:[t.jsx("span",{className:"make-ai-artifact__rank",children:i+1}),t.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[t.jsx("span",{children:n.label}),n.description?t.jsx("small",{children:n.description}):null]}),t.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:t.jsx("span",{style:{width:`${Math.abs(n.value)/r*100}%`}})}),t.jsx("strong",{children:X(n.value,n.format,s.context.locale)})]},n.id))}),ce(e,s)]}),"make-ai-artifact--ranking",s.themeStyle)},Xt=(e,s)=>s.action??{id:`open-${s.id}`,label:s.title??s.id,intent:"open-record",target:{entityKey:e.data.entity.key,recordId:s.id}},Yt=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__record-list",children:e.data.records.length===0?t.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):e.data.records.map(a=>{const r=Xt(e,a),n=t.jsxs(t.Fragment,{children:[t.jsx("strong",{children:a.title??a.id}),t.jsx("span",{className:"make-ai-artifact__record-values",children:e.data.columns.map(i=>t.jsxs("span",{children:[t.jsx("small",{children:i.label}),X(a.values[i.key],i.format,s.context.locale)]},i.key))}),s.onAction?t.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return s.onAction?t.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>_t(r,{artifact:e,context:s.context},s),children:n},a.id):t.jsx("div",{className:"make-ai-artifact__record",children:n},a.id)})}),e.data.total!==void 0?t.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",e.data.total," 条"]}):null,ce(e,s)]}),"make-ai-artifact--record-list",s.themeStyle),Gt=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`,children:[t.jsx("span",{"aria-hidden":"true",children:e.data.tone==="success"?"✓":e.data.tone==="warning"?"!":e.data.tone==="danger"?"×":"i"}),t.jsx("p",{children:e.data.body})]}),ce(e,s)]}),"make-ai-artifact--notice",s.themeStyle),oe=(e,s,a)=>({id:e,kinds:[s],priority:0,render:a}),Zt=[oe("platform.metric.default","metric",(e,s,a)=>t.jsx(Bt,{artifact:e,renderContext:a})),oe("platform.comparison.default","comparison",(e,s,a)=>t.jsx(Ut,{artifact:e,renderContext:a})),oe("platform.trend.default","trend",(e,s,a)=>t.jsx(zt,{artifact:e,renderContext:a})),oe("platform.ranking.default","ranking",(e,s,a)=>t.jsx(qt,{artifact:e,renderContext:a})),oe("platform.record-list.default","record-list",(e,s,a)=>t.jsx(Yt,{artifact:e,renderContext:a})),oe("platform.notice.default","notice",(e,s,a)=>t.jsx(Gt,{artifact:e,renderContext:a}))],vt=Y.createArtifactTemplateRegistry(Zt).templates,jt=(e=vt)=>Y.createArtifactTemplateRegistry(e),Qt=e=>`${e}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Jt="Make",es=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],yt=(e,s)=>s??`${e?.trim()||Jt} AI 助手`,ts=e=>e??es,ss=/^只读分析\s*[·•]\s*/u,as=(e,s)=>e?.trim().replace(ss,"").trim()||`当前对象:${s??"未命名应用"}`,ns=432,At=1024,rs=.72,dt=16,D=16,xe=8,Re=(e,s,a)=>Math.min(Math.max(e,Math.min(s,a)),a),is=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0,os=(e,s,a)=>{const r=Math.min(At,a*rs);return Math.max(e,Math.min(s??r,a))},mt=(e,s,a)=>Math.min(Math.max(e,s),Math.max(s,a)),cs=(e,s,a,r)=>{const n=Math.min(Math.max(s.width,1),Math.max(1,r-D*2)),i=Math.min(Math.max(s.height,1),Math.max(1,a-D*2)),c=e.left+e.width/2,u=e.top+e.height/2,g=[{left:e.right+xe,placement:"right",top:u-i/2},{left:e.left-xe-n,placement:"left",top:u-i/2},{left:c-n/2,placement:"bottom",top:e.bottom+xe},{left:c-n/2,placement:"top",top:e.top-xe-i}].find(({left:w,top:T})=>w>=D&&T>=D&&w+n<=r-D&&T+i<=a-D);return g||{left:mt(c-n/2,D,r-D-n),placement:"bottom",top:mt(e.bottom+xe,D,a-D-i)}},ls=e=>typeof e=="number"?Number.isFinite(e)?`${e}px`:void 0:e?.trim()||void 0;class k extends Error{}const Me=(e,s)=>{if(!(typeof e!="object"||e===null))return e[s]},ds=e=>{const s=Me(e,"status");return typeof s=="number"?s:Me(Me(e,"response"),"status")},ms=e=>{const s=Me(e,"code"),a=ds(e),r=e instanceof Error?e.message:"",n=[s,r].filter(v=>typeof v=="string").join(" ").toLowerCase(),c=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(n),u=typeof a=="number"&&a>=500||/server|service|服务器|服务异常/.test(n);return c?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:u?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},ut=e=>{try{const s=e?.return?.();if(!s)return;Promise.resolve(s).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(s){console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})}},us=async e=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(e);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const s=document.createElement("textarea");s.value=e,s.setAttribute("readonly",""),s.style.position="fixed",s.style.inset="0 auto auto 0",s.style.opacity="0",document.body.append(s),s.select();const a=document.execCommand("copy");if(s.remove(),!a)throw new Error("Clipboard copy failed")},kt=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),t.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),ps=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),hs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M8 8h10v12H8z"}),t.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),fs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),gs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("circle",{cx:"12",cy:"12",r:"8"}),t.jsx("path",{d:"M9.8 9.4a2.35 2.35 0 1 1 3.93 1.73c-.96.86-1.73 1.42-1.73 2.87"}),t.jsx("path",{d:"M12 17h.01"})]}),xs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 4v11"}),t.jsx("path",{d:"m7 10 5 5 5-5"}),t.jsx("path",{d:"M5 20h14"})]}),_s=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"M12 5v14M5 12h14"})}),vs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),t.jsx("path",{d:"M7 12h14"})]}),It=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),js=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("circle",{cx:"12",cy:"12",r:"8"}),t.jsx("path",{d:"M12 8v4.5"}),t.jsx("path",{d:"M12 16h.01"})]}),Ne=({className:e=""})=>t.jsx("span",{className:`make-ai-assistant__avatar ${e}`.trim(),"aria-hidden":"true",children:t.jsx(kt,{})}),ys=({src:e})=>e?t.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:t.jsx("img",{alt:"",src:e})}):null,As=({userAvatarUrl:e,userName:s})=>{const a=s?.trim();return!a&&!e?null:t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?t.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,t.jsx(ys,{src:e})]})},Ce=e=>{const s=e.trim();if(!(!s.startsWith("|")||!s.endsWith("|")))return s.slice(1,-1).split("|").map(a=>a.trim())},ks=e=>e.length>0&&e.every(s=>/^:?-{3,}:?$/.test(s)),Is=(e,s)=>{const a=Ce(e[s]??""),r=Ce(e[s+1]??"");if(!a||!r||a.length!==r.length||!ks(r))return;const n=[];let i=s+2;for(;i<e.length;){const c=Ce(e[i]??"");if(!c||c.length!==a.length)break;n.push(c),i+=1}return{headers:a,lastIndex:i-1,rows:n}},bs=e=>{const s=[],a=[],r=[],n=[],i=e.replace(/\r\n?/g,`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),l=require("react"),G=require("./index.cjs"),p=require("./conversation-Cv1wdvCR.cjs"),gt=e=>e?.trim()||void 0,P=(e,s)=>gt(e)??s,Oe=e=>{const s=gt(e?.primary);if(s)return{"--make-ai-theme-primary":s,"--make-ai-theme-primary-hover":P(e?.primaryHover,"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"),"--make-ai-theme-on-primary":P(e?.onPrimary,"#fcfcff"),"--make-ai-theme-bg":P(e?.background,"color-mix(in srgb, var(--make-ai-theme-primary) 2%, #fcfcff)"),"--make-ai-theme-surface":P(e?.surface,"color-mix(in srgb, var(--make-ai-theme-primary) 4%, var(--make-ai-theme-bg))"),"--make-ai-theme-surface-strong":P(e?.surfaceStrong,"color-mix(in srgb, var(--make-ai-theme-primary) 8%, var(--make-ai-theme-bg))"),"--make-ai-theme-text":P(e?.text,"color-mix(in srgb, var(--make-ai-theme-primary) 12%, #252631)"),"--make-ai-theme-text-secondary":P(e?.textSecondary,"color-mix(in srgb, var(--make-ai-theme-text) 74%, var(--make-ai-theme-primary))"),"--make-ai-theme-border":P(e?.border,"color-mix(in srgb, var(--make-ai-theme-primary) 14%, var(--make-ai-theme-bg))"),"--make-ai-theme-overlay":P(e?.overlay,"color-mix(in srgb, var(--make-ai-theme-text) 88%, var(--make-ai-theme-primary))"),"--make-ai-theme-on-overlay":P(e?.onOverlay,"#fcfcff")}},dt=(e,s)=>!s||!l.isValidElement(e)||typeof e.type!="string"?e:l.cloneElement(e,{style:{...e.props.style,...s}});function xt({artifact:e,context:s,fallback:a,onAction:r,onActionError:n,registry:i,theme:c}){const m=Oe(c),x=G.resolveArtifactTemplate(i,e,s);if(!x){const M=a?a(e):t.jsxs("section",{className:"make-ai-artifact make-ai-artifact--unsupported",role:"status",children:[t.jsx("strong",{children:"暂不支持展示此结果"}),t.jsxs("span",{children:["结果类型:",e.kind]})]});return dt(M,m)}const f={context:s,onAction:r,onActionError:n,theme:c,themeStyle:m},T=x.template.render(e,s,f);return dt(T,m)}const Y=(e,s,a)=>{if(e==null||e==="")return"—";if(typeof e=="boolean")return e?"是":"否";if(typeof e!="number")return`${e}${s?.unit??""}`;const r=s?.precision,n={maximumFractionDigits:r??2,minimumFractionDigits:r};s?.style==="currency"&&s.currency?(n.style="currency",n.currency=s.currency):s?.style==="percent"&&(n.style="percent");try{const i=s?.style==="percent"?e/100:e;return`${new Intl.NumberFormat(a,n).format(i)}${s?.unit??""}`}catch{return`${e}${s?.unit??""}`}},_t=e=>{let s=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;for(const r of e)s=Math.min(s,r),a=Math.max(a,r);return Number.isFinite(s)&&Number.isFinite(a)?{min:s,max:a}:{min:0,max:0}},vt=(e,s,a)=>{if(!a.onAction)return;const r=i=>{console.error("[make-ai-assistant] host action error handler failed",{actionId:e.id,artifactId:s.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:e.intent})},n=i=>{if(a.onActionError){try{Promise.resolve(a.onActionError(i,e,s)).catch(r)}catch(c){r(c)}return}console.error("[make-ai-assistant] host action failed",{actionId:e.id,artifactId:s.artifact.id,errorType:i instanceof Error?i.name:typeof i,intent:e.intent})};try{Promise.resolve(a.onAction(e,s)).catch(n)}catch(i){n(i)}},ce=(e,s)=>e.actions?.length&&s.onAction?t.jsx("div",{className:"make-ai-artifact__actions",children:e.actions.map(a=>t.jsxs("button",{className:`make-ai-artifact__action make-ai-artifact__action--${a.appearance??"link"}`,type:"button",onClick:()=>vt(a,{artifact:e,context:s.context},s),children:[a.label,t.jsx("span",{"aria-hidden":"true",children:"→"})]},a.id))}):null,le=(e,s,a="",r)=>t.jsxs("section",{"aria-label":e.title??`${e.kind} result`,className:`make-ai-artifact ${a}`.trim(),"data-artifact-density":e.presentation?.density,"data-artifact-kind":e.kind,style:r,children:[e.title?t.jsx("h4",{className:"make-ai-artifact__title",children:e.title}):null,e.summary?t.jsx("p",{className:"make-ai-artifact__summary",children:e.summary}):null,s]}),Bt=({artifact:e,renderContext:s})=>{const a=e.data.delta,r=a?Y(a.value,a.format==="percent"?{style:"percent"}:void 0,s.context.locale):void 0;return le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__metric-value",children:Y(e.data.value,e.data.format,s.context.locale)}),a?t.jsxs("div",{className:`make-ai-artifact__delta make-ai-artifact__delta--${a.direction??"flat"}`,children:[t.jsx("span",{"aria-hidden":"true",children:a.direction==="up"?"↗":a.direction==="down"?"↘":"→"}),t.jsx("span",{children:r}),a.label?t.jsx("span",{children:a.label}):null]}):null,e.data.context?t.jsx("p",{className:"make-ai-artifact__context",children:e.data.context}):null,ce(e,s)]}),"make-ai-artifact--metric",s.themeStyle)},Ut=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__comparison",children:e.data.items.map(a=>t.jsxs("div",{className:"make-ai-artifact__comparison-item",children:[t.jsx("span",{children:a.label}),t.jsx("strong",{children:Y(a.value,a.format,s.context.locale)}),a.hint?t.jsx("small",{children:a.hint}):null]},a.id))}),ce(e,s)]}),"make-ai-artifact--comparison",s.themeStyle),zt=({artifact:e,renderContext:s})=>{const a=e.data.series.flatMap(c=>c.points.map(m=>m.y)),{max:r,min:n}=_t(a),i=r-n||1;return le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__trend",children:e.data.series.map(c=>t.jsxs("div",{className:"make-ai-artifact__trend-series",children:[t.jsx("div",{className:"make-ai-artifact__trend-label",children:c.label}),t.jsx("div",{className:"make-ai-artifact__trend-bars",children:c.points.map((m,x)=>{const f=18+(m.y-n)/i*70;return t.jsxs("div",{className:"make-ai-artifact__trend-point",children:[t.jsx("span",{"aria-label":`${m.x}: ${Y(m.y,c.format,s.context.locale)}`,className:"make-ai-artifact__trend-bar",role:"img",style:{height:`${f}%`},title:`${m.x}: ${Y(m.y,c.format,s.context.locale)}`}),t.jsx("small",{children:m.x})]},`${m.x}-${x}`)})})]},c.id))}),ce(e,s)]}),"make-ai-artifact--trend",s.themeStyle)},qt=({artifact:e,renderContext:s})=>{const{max:a}=_t(e.data.items.map(n=>Math.abs(n.value))),r=Math.max(a,1);return le(e,t.jsxs(t.Fragment,{children:[t.jsx("ol",{className:"make-ai-artifact__ranking",children:e.data.items.map((n,i)=>t.jsxs("li",{children:[t.jsx("span",{className:"make-ai-artifact__rank",children:i+1}),t.jsxs("span",{className:"make-ai-artifact__ranking-label",children:[t.jsx("span",{children:n.label}),n.description?t.jsx("small",{children:n.description}):null]}),t.jsx("span",{className:"make-ai-artifact__ranking-track","aria-hidden":"true",children:t.jsx("span",{style:{width:`${Math.abs(n.value)/r*100}%`}})}),t.jsx("strong",{children:Y(n.value,n.format,s.context.locale)})]},n.id))}),ce(e,s)]}),"make-ai-artifact--ranking",s.themeStyle)},Xt=(e,s)=>s.action??{id:`open-${s.id}`,label:s.title??s.id,intent:"open-record",target:{entityKey:e.data.entity.key,recordId:s.id}},Yt=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"make-ai-artifact__record-list",children:e.data.records.length===0?t.jsx("p",{className:"make-ai-artifact__empty",children:"没有符合条件的记录"}):e.data.records.map(a=>{const r=Xt(e,a),n=t.jsxs(t.Fragment,{children:[t.jsx("strong",{children:a.title??a.id}),t.jsx("span",{className:"make-ai-artifact__record-values",children:e.data.columns.map(i=>t.jsxs("span",{children:[t.jsx("small",{children:i.label}),Y(a.values[i.key],i.format,s.context.locale)]},i.key))}),s.onAction?t.jsx("span",{"aria-hidden":"true",children:"›"}):null]});return s.onAction?t.jsx("button",{className:"make-ai-artifact__record",type:"button",onClick:()=>vt(r,{artifact:e,context:s.context},s),children:n},a.id):t.jsx("div",{className:"make-ai-artifact__record",children:n},a.id)})}),e.data.total!==void 0?t.jsxs("p",{className:"make-ai-artifact__record-total",children:["共 ",e.data.total," 条"]}):null,ce(e,s)]}),"make-ai-artifact--record-list",s.themeStyle),Gt=({artifact:e,renderContext:s})=>le(e,t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:`make-ai-artifact__notice make-ai-artifact__notice--${e.data.tone}`,children:[t.jsx("span",{"aria-hidden":"true",children:e.data.tone==="success"?"✓":e.data.tone==="warning"?"!":e.data.tone==="danger"?"×":"i"}),t.jsx("p",{children:e.data.body})]}),ce(e,s)]}),"make-ai-artifact--notice",s.themeStyle),oe=(e,s,a)=>({id:e,kinds:[s],priority:0,render:a}),Zt=[oe("platform.metric.default","metric",(e,s,a)=>t.jsx(Bt,{artifact:e,renderContext:a})),oe("platform.comparison.default","comparison",(e,s,a)=>t.jsx(Ut,{artifact:e,renderContext:a})),oe("platform.trend.default","trend",(e,s,a)=>t.jsx(zt,{artifact:e,renderContext:a})),oe("platform.ranking.default","ranking",(e,s,a)=>t.jsx(qt,{artifact:e,renderContext:a})),oe("platform.record-list.default","record-list",(e,s,a)=>t.jsx(Yt,{artifact:e,renderContext:a})),oe("platform.notice.default","notice",(e,s,a)=>t.jsx(Gt,{artifact:e,renderContext:a}))],jt=G.createArtifactTemplateRegistry(Zt).templates,yt=(e=jt)=>G.createArtifactTemplateRegistry(e),Qt=e=>`${e}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,Jt="Make",es=["总结当前页面数据","找出需要关注的记录","列出我有权限查看的数据对象"],At=(e,s)=>s??`${e?.trim()||Jt} AI 助手`,ts=e=>e??es,ss=/^只读分析\s*[·•]\s*/u,as=(e,s)=>e?.trim().replace(ss,"").trim()||`当前对象:${s??"未命名应用"}`,ns=480,kt=1024,rs=.72,mt=16,V=16,xe=8,Ce=(e,s,a)=>Math.min(Math.max(e,Math.min(s,a)),a),is=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0,os=(e,s,a)=>{const r=Math.min(kt,a*rs);return Math.max(e,Math.min(s??r,a))},ut=(e,s,a)=>Math.min(Math.max(e,s),Math.max(s,a)),cs=(e,s,a,r)=>{const n=Math.min(Math.max(s.width,1),Math.max(1,r-V*2)),i=Math.min(Math.max(s.height,1),Math.max(1,a-V*2)),c=e.left+e.width/2,m=e.top+e.height/2,f=[{left:e.right+xe,placement:"right",top:m-i/2},{left:e.left-xe-n,placement:"left",top:m-i/2},{left:c-n/2,placement:"bottom",top:e.bottom+xe},{left:c-n/2,placement:"top",top:e.top-xe-i}].find(({left:T,top:M})=>T>=V&&M>=V&&T+n<=r-V&&M+i<=a-V);return f||{left:ut(c-n/2,V,r-V-n),placement:"bottom",top:ut(e.bottom+xe,V,a-V-i)}},ls=e=>typeof e=="number"?Number.isFinite(e)?`${e}px`:void 0:e?.trim()||void 0;class k extends Error{}const Te=(e,s)=>{if(!(typeof e!="object"||e===null))return e[s]},ds=e=>{const s=Te(e,"status");return typeof s=="number"?s:Te(Te(e,"response"),"status")},ms=e=>{const s=Te(e,"code"),a=ds(e),r=e instanceof Error?e.message:"",n=[s,r].filter(x=>typeof x=="string").join(" ").toLowerCase(),c=globalThis.navigator?.onLine===!1||/network|fetch|timeout|offline|connection|网络|连接|超时/.test(n),m=typeof a=="number"&&a>=500||/server|service|服务器|服务异常/.test(n);return c?{actionLabel:"重新连接",description:"请检查网络后再试。",kind:"network",label:"网络连接",title:"网络连接不可用"}:m?{actionLabel:"重新加载",description:"服务暂时未能响应,请稍后重试。",kind:"service",label:"服务异常",title:"服务暂时不可用"}:{actionLabel:"重新加载",description:"请稍后重试;若问题持续出现,请联系管理员。",kind:"unknown",label:"加载异常",title:"暂时无法加载对话"}},pt=e=>{try{const s=e?.return?.();if(!s)return;Promise.resolve(s).catch(a=>{console.error("[make-ai-assistant] transport iterator close failed",{errorType:a instanceof Error?a.name:typeof a})})}catch(s){console.error("[make-ai-assistant] transport iterator close failed",{errorType:s instanceof Error?s.name:typeof s})}},us=async e=>{if(globalThis.navigator?.clipboard?.writeText){await globalThis.navigator.clipboard.writeText(e);return}if(typeof document>"u"||!document.body)throw new Error("Clipboard API is unavailable");const s=document.createElement("textarea");s.value=e,s.setAttribute("readonly",""),s.style.position="fixed",s.style.inset="0 auto auto 0",s.style.opacity="0",document.body.append(s),s.select();const a=document.execCommand("copy");if(s.remove(),!a)throw new Error("Clipboard copy failed")},It=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 2.8c.5 4.4 2.8 6.8 7.2 7.2-4.4.5-6.8 2.8-7.2 7.2-.5-4.4-2.8-6.8-7.2-7.2 4.4-.5 6.8-2.8 7.2-7.2Z"}),t.jsx("path",{d:"M18.3 16.1c.2 1.8 1.2 2.8 3 3-1.8.2-2.8 1.2-3 3-.2-1.8-1.2-2.8-3-3 1.8-.2 2.8-1.2 3-3Z"})]}),ps=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"m6 6 12 12M18 6 6 18"})}),hs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M8 8h10v12H8z"}),t.jsx("path",{d:"M6 16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),fs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),gs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("circle",{cx:"12",cy:"12",r:"8"}),t.jsx("path",{d:"M9.8 9.4a2.35 2.35 0 1 1 3.93 1.73c-.96.86-1.73 1.42-1.73 2.87"}),t.jsx("path",{d:"M12 17h.01"})]}),xs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M12 4v11"}),t.jsx("path",{d:"m7 10 5 5 5-5"}),t.jsx("path",{d:"M5 20h14"})]}),_s=()=>t.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:t.jsx("path",{d:"M12 5v14M5 12h14"})}),vs=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"m4 4 17 8-17 8 3-8-3-8Z"}),t.jsx("path",{d:"M7 12h14"})]}),bt=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M20 11a8 8 0 0 0-14.7-4.4L4 8"}),t.jsx("path",{d:"M4 4v4h4"}),t.jsx("path",{d:"M4 13a8 8 0 0 0 14.7 4.4L20 16"}),t.jsx("path",{d:"M20 20v-4h-4"})]}),js=()=>t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:[t.jsx("circle",{cx:"12",cy:"12",r:"8"}),t.jsx("path",{d:"M12 8v4.5"}),t.jsx("path",{d:"M12 16h.01"})]}),Me=({className:e=""})=>t.jsx("span",{className:`make-ai-assistant__avatar ${e}`.trim(),"aria-hidden":"true",children:t.jsx(It,{})}),ys=({src:e})=>e?t.jsx("span",{className:"make-ai-assistant__user-avatar","aria-hidden":"true",children:t.jsx("img",{alt:"",src:e})}):null,As=({userAvatarUrl:e,userName:s})=>{const a=s?.trim();return!a&&!e?null:t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[a?t.jsx("span",{className:"make-ai-assistant__message-sender",children:a}):null,t.jsx(ys,{src:e})]})},$e=e=>{const s=e.trim();if(!(!s.startsWith("|")||!s.endsWith("|")))return s.slice(1,-1).split("|").map(a=>a.trim())},ks=e=>e.length>0&&e.every(s=>/^:?-{3,}:?$/.test(s)),Is=(e,s)=>{const a=$e(e[s]??""),r=$e(e[s+1]??"");if(!a||!r||a.length!==r.length||!ks(r))return;const n=[];let i=s+2;for(;i<e.length;){const c=$e(e[i]??"");if(!c||c.length!==a.length)break;n.push(c),i+=1}return{headers:a,lastIndex:i-1,rows:n}},bs=e=>{const s=[],a=[],r=[],n=[],i=e.replace(/\r\n?/g,`
2
2
  `).split(`
3
- `),c=()=>{const g=a.join(`
4
- `).trim();a.length=0,g&&s.push({type:"paragraph",text:g})},u=()=>{r.length&&s.push({type:"list",items:r.splice(0)})},v=()=>{const g=n.join(`
5
- `).trim();n.length=0,g&&s.push({type:"pre",text:g})};for(let g=0;g<i.length;g+=1){const w=i[g]??"",T=w.trim();if(!T){c(),u(),v();continue}const R=Is(i,g);if(R){c(),u(),v(),s.push({headers:R.headers,rows:R.rows,type:"table"}),g=R.lastIndex;continue}const C=/^(#{1,6})\s+(.+)$/.exec(T);if(C){c(),u(),v();const E=(C[2]??"").replace(/\s+#+\s*$/,"").trim();E&&s.push({type:"heading",level:C[1]?.length,text:E});continue}if(/^\s*\|.+\|\s*$/.test(w)){c(),u(),n.push(w.trim());continue}const A=/^\s*[-*]\s+(.+)$/.exec(w);if(A){c(),v(),r.push(A[1]?.trim()??"");continue}u(),v(),a.push(T)}return c(),u(),v(),s},_e=e=>{const s=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let r=0;for(const n of e.matchAll(a)){const i=n[0],c=n.index??0;c>r&&s.push(e.slice(r,c)),i.startsWith("**")?s.push(t.jsx("strong",{children:i.slice(2,-2)},`${c}-strong`)):s.push(t.jsx("code",{children:i.slice(1,-1)},`${c}-code`)),r=c+i.length}return r<e.length&&s.push(e.slice(r)),s},ws=({content:e})=>{const s=bs(e);return s.length?t.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:s.map((a,r)=>{if(a.type==="heading"){const n=a.level<=2?"h3":"h4";return t.jsx(n,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:_e(a.text)},`${r}-heading`)}return a.type==="paragraph"?t.jsx("p",{children:_e(a.text)},`${r}-paragraph`):a.type==="pre"?t.jsx("pre",{children:t.jsx("code",{children:a.text})},`${r}-pre`):a.type==="table"?t.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:t.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[t.jsx("thead",{children:t.jsx("tr",{children:a.headers.map((n,i)=>t.jsx("th",{scope:"col",children:_e(n)},`${i}-${n}`))})}),t.jsx("tbody",{children:a.rows.map((n,i)=>t.jsx("tr",{children:n.map((c,u)=>t.jsx("td",{children:_e(c)},`${u}-${c}`))},`${i}-${n.join("|")}`))})]})},`${r}-table`):t.jsx("ul",{children:a.items.map((n,i)=>t.jsx("li",{children:_e(n)},`${i}-${n}`))},`${r}-list`)})}):null},bt=({assistantName:e})=>t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[t.jsx(Ne,{className:"make-ai-assistant__avatar--message"}),t.jsx("span",{className:"make-ai-assistant__message-sender",children:e})]}),wt=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="streaming")return a.id}},Ts=e=>{for(let s=e.messages.length-1;s>=0;s-=1)if(e.messages[s].role==="user")return s;return-1},Tt=e=>{const s=Ts(e);if(!(s<0))for(let a=e.messages.length-1;a>s;a-=1){const r=e.messages[a];if(r.role==="assistant")return r.id}},Ms=e=>{if(e.status==="idle")for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="complete")return a.id}},Ns=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="user")return a}},Es=(e,s)=>{const a=e.messages.findIndex(r=>r.id===s&&r.role==="user");return{...e,error:void 0,progress:void 0,status:"streaming",messages:a<0?e.messages:e.messages.slice(0,a+1)}},Ss=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=48,pt=(e="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":e,$e=(e,s)=>{typeof e.scrollTo=="function"?e.scrollTo({top:e.scrollHeight,behavior:s}):e.scrollTop=e.scrollHeight},Mt=({error:e,onRetry:s})=>t.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[t.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[t.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:t.jsx(js,{})}),t.jsx("strong",{children:"请求未完成"})]}),t.jsx("span",{className:"make-ai-assistant__message-status-message",children:e.message}),e.retryable&&s?t.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:s,children:[t.jsx(It,{}),"重新发送"]}):null]}),Rs=({error:e,onRetry:s})=>{const a=ms(e);return t.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":a.kind,role:"alert",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:t.jsxs("svg",{viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M5 12a7 7 0 0 1 13.4-2.8A4.5 4.5 0 0 1 18 18H7.5A4.5 4.5 0 0 1 5 12Z"}),t.jsx("path",{d:"m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6"})]})}),t.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-label",children:a.label}),t.jsx("h3",{children:a.title}),t.jsx("p",{children:a.description})]}),t.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:s,children:[t.jsx(It,{}),a.actionLabel]})]})},Nt=({active:e,steps:s})=>{if(!e||!s?.length)return null;const a=s[s.length-1]??"处理中";return t.jsxs("details",{className:"make-ai-assistant__process",open:!0,children:[t.jsxs("summary",{children:[t.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:a})]}),t.jsxs("span",{className:"make-ai-assistant__process-count",children:[s.length," 步"]})]}),t.jsx("ol",{children:s.map((r,n)=>t.jsxs("li",{"data-step-active":n===s.length-1?!0:void 0,children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:r})]},`${n}-${r}`))})]})},Cs=({copyFeedback:e,onCopy:s,onRegenerate:a})=>!s&&!a?null:t.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?t.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:t.jsx(hs,{})}):null,a?t.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:t.jsx(fs,{})}):null,e?t.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":e.status,role:"status",children:e.message}):null]}),ht=({assistantName:e,error:s,onRetry:a,progress:r})=>{const n=s?"error":"progress";return s?.message??r?.message?t.jsx("article",{"aria-label":`${e}的${n==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${n}`,"data-message-role":"assistant","data-message-state":n,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[t.jsx(bt,{assistantName:e}),t.jsx("div",{className:"make-ai-assistant__message-stack",children:s?t.jsx(Mt,{error:s,onRetry:a}):t.jsx(Nt,{active:!0,steps:r?.steps})})]})}):null},$s=(e,s,a,r,n,i,c,u,v,g,w,T,R,C)=>{const A=Tt(e),E=wt(e),H=Ms(e);let M;return e.messages.map(h=>{const I=h.role==="assistant",K=M;I||(M=h);const b=h.id===E,G=h.id===A?e.error:void 0,$=h.error??G,L=!I&&!!(v?.trim()||g),P=I?c:v?.trim()||"用户",f=I&&h.status==="complete"&&!$&&(h.content.trim()||h.id===H);return t.jsx("article",{"aria-label":`${P}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${h.role}`,"data-message-role":h.role,"data-message-state":$?"error":void 0,"data-message-status":h.status,"data-message-has-identity":I||L?!0:void 0,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[I?t.jsx(bt,{assistantName:c}):L?t.jsx(As,{userAvatarUrl:g,userName:v}):null,t.jsxs("div",{className:"make-ai-assistant__message-stack",children:[h.content?I?t.jsx(ws,{content:h.content}):t.jsx("div",{className:"make-ai-assistant__bubble",children:h.content}):h.status==="streaming"?t.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${c}正在思考`,children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]}):null,I?t.jsx(Nt,{active:b&&e.status==="streaming",steps:h.progressSteps}):null,$?t.jsx(Mt,{error:$,onRetry:G?u:void 0}):null,h.artifacts.map(S=>t.jsx(gt,{artifact:S,context:s,onAction:n,onActionError:i,registry:a,theme:r},S.id)),f?t.jsx(Cs,{copyFeedback:w?.messageId===h.id?{message:w.message,status:w.status}:void 0,onCopy:h.content.trim()?()=>R(h.id,h.content):void 0,onRegenerate:T&&h.id===H&&K?()=>C({userMessage:K,assistantMessage:h}):void 0}):null]})]})},h.id)})};function Et({assistantName:e="AI 助手",brandName:s,context:a,onAction:r,onActionError:n,onClose:i,onNewConversation:c,headerHeight:u,privacyNotice:v,registry:g,subtitle:w,suggestions:T,title:R,theme:C,transport:A,userAvatarUrl:E,userName:H,visible:M}){const h=yt(s,R),I=v?.trim(),K=as(w,a.app.name),b=ls(u),G=Le(C),$=G||b?{...G,...b?{"--make-ai-internal-header-height":b}:{}}:void 0,[L,P]=l.useState(""),[f,S]=l.useState(m.createAssistantConversationState),B=l.useRef(f);B.current=f;const[J,Z]=l.useState(void 0),[ve,Q]=l.useState(void 0),[de,je]=l.useState(0),[p,j]=l.useState(()=>A.loadConversation?"loading":"ready"),[V,ee]=l.useState(void 0),[St,U]=l.useState(!1),[te,Oe]=l.useState(!1),[me,Fe]=l.useState(void 0),se=l.useRef(void 0),ae=l.useRef(void 0),ne=l.useRef(0),De=l.useRef(null),ue=l.useRef(null),Pe=l.useRef(null),Ve=l.useRef(null),We=l.useRef(null),He=l.useRef(null),z=l.useRef(!0),Ke=l.useRef(a.app.id),Be=l.useRef(M),Ue=l.useId(),ze=l.useMemo(()=>g??jt(),[g]),qe=l.useMemo(()=>ts(T),[T]),Xe=()=>{const o=Ve.current,_=We.current;if(!o||!_||typeof window>"u")return;const x=cs(o.getBoundingClientRect(),_.getBoundingClientRect(),window.innerHeight,window.innerWidth);Fe(y=>y?.left===x.left&&y.top===x.top&&y.placement===x.placement?y:x)},Ye=()=>Oe(!0),Ge=()=>Oe(!1),Rt=me?{left:`${me.left}px`,top:`${me.top}px`}:void 0;l.useLayoutEffect(()=>{if(!te||!I){Fe(void 0);return}Xe()},[te,I]),l.useEffect(()=>{if(!te||!I)return;const o=()=>Xe();return window.addEventListener("resize",o),window.addEventListener("scroll",o,!0),()=>{window.removeEventListener("resize",o),window.removeEventListener("scroll",o,!0)}},[te,I]);const ye=o=>{const _=se.current,x=ae.current?.iterator;return!_&&!x?!1:(ne.current+=1,se.current=void 0,ae.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:o}),_?.abort(),ut(x),!0)};l.useEffect(()=>()=>{ye("unmount")},[]),l.useEffect(()=>{const o=A.loadConversation,_=Ke.current!==a.app.id;if(Ke.current=a.app.id,ye("reinitialize"),_&&(P(""),z.current=!0),Z(void 0),Q(void 0),U(!1),S(m.createAssistantConversationState()),!o){ee(void 0),j("ready");return}const x=new AbortController;return ee(void 0),j("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),o.call(A,a,{signal:x.signal}).then(y=>{x.signal.aborted||(S(m.createAssistantConversationState(y)),j("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:y.messages.length}))}).catch(y=>{x.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:y instanceof Error?y.name:typeof y}),ee(y),j("error"))}),()=>x.abort()},[a.app.id,de,A]),l.useEffect(()=>{const o=ue.current;if(!o||!z.current)return;U(!1);const _=requestAnimationFrame(()=>{if(!z.current)return;const x=f.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";$e(o,x)});return()=>cancelAnimationFrame(_)},[f.messages,f.progress,f.status]),l.useEffect(()=>{const o=M&&!Be.current;if(Be.current=M,!o)return;const _=requestAnimationFrame(()=>{const x=ue.current;if(x&&z.current){U(!1);const pe=B.current.status==="streaming"?"auto":pt();$e(x,pe)}else x&&U(B.current.messages.length>0);const y=Pe.current;(y&&!y.disabled?y:He.current??De.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(_)},[M]);const Ct=()=>{const o=ue.current;if(!o)return;const _=Ss(o);z.current=_,U(!_&&B.current.messages.length>0)},$t=()=>{const o=ue.current;if(!o)return;z.current=!0,U(!1);const _=pt();$e(o,_)},Ze=async(o,_)=>{const x=o.trim(),y=B.current,W=_?.regenerateFrom,pe=A.regenerate;if(!x||p!=="ready"||y.status==="streaming"||se.current||W&&!pe)return;if(m.countCodePointsUpTo(x,m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){Z(`输入内容过长,请控制在 ${m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const Ie={id:W?.userMessage.id??Qt("user"),content:x},be=W?Es(y,W.userMessage.id):m.appendUserMessage(y,Ie),we=new AbortController,re=ne.current+1;ne.current=re,se.current=we,Z(void 0),Q(void 0),U(!z.current&&y.messages.length>0),W||P(""),S(be);try{let q=!1,N,et=0,tt=0,st=0,Ee=0,he=0;const fe=new Map,at=new Set,nt=new Set([...be.messages.map(Te=>Te.id),Ie.id]),ge=new Set,rt=Y.createArtifactCapabilities(ze),it={signal:we.signal};let Se;if(W){if(!pe)throw new k("当前 AI 助手不支持重新生成");Se=pe({threadId:be.threadId,message:Ie,assistantMessage:{id:W.assistantMessage.id,content:W.assistantMessage.content},context:a,capabilities:rt},it)}else Se=A.run({threadId:be.threadId,message:Ie,context:a,capabilities:rt},it);const ot=Se[Symbol.asyncIterator]();for(ae.current={iterator:ot,requestVersion:re};;){const Te=await ot.next();if(ne.current!==re||Te.done)break;let d;try{d=m.parseAssistantEvent(Te.value)}catch(O){throw new k(O instanceof Error?O.message:"Invalid assistant event")}if(d.type==="message.start"){if(N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(N??=d.runId,tt+=1,tt>m.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new k("AI 助手单次响应消息数量超过限制");if(nt.has(d.messageId))throw new k("AI 助手响应包含重复的 message id");nt.add(d.messageId),ge.add(d.messageId),fe.set(d.messageId,0)}if(d.type==="message.delta"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");const O=fe.get(d.messageId)??0,ie=m.countCodePointsUpTo(d.delta,m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-he);if(he+ie>m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new k("AI 助手响应文本超过大小限制");he+=ie,fe.set(d.messageId,O+ie)}if(d.type==="message.replace"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");const O=fe.get(d.messageId)??0,ie=m.countCodePointsUpTo(d.content,m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),ct=he-O+ie;if(ct>m.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new k("AI 助手响应文本超过大小限制");he=ct,fe.set(d.messageId,ie)}if(d.type==="run.progress"){if(N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(N??=d.runId,st+=1,st>m.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new k("AI 助手处理过程数量超过限制");const O=m.countCodePointsUpTo(d.message,m.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-Ee);if(Ee+O>m.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new k("AI 助手处理过程文本超过大小限制");Ee+=O}if(d.type==="artifact"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");if(et+=1,et>m.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new k("AI 助手单次响应 Artifact 数量超过限制");if(at.has(d.artifact.id))throw new k("AI 助手响应包含重复的 Artifact id");at.add(d.artifact.id)}if(d.type==="message.complete"&&!ge.delete(d.messageId))throw new k("AI 助手响应事件顺序无效");if(d.type==="run.complete"&&N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(d.type==="run.cancelled"&&d.runId!==void 0&&N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(S(O=>m.reduceAssistantEvent(O,d)),d.type==="error"||d.type==="run.cancelled"||d.type==="run.complete"){q=!0;break}}if(!q)throw new k("AI 助手流式响应在终止事件前结束")}catch(q){if(ne.current!==re)return;if(we.signal.aborted){S(N=>m.reduceAssistantEvent(N,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:q instanceof Error?q.name:typeof q}),S(N=>m.reduceAssistantEvent(N,{type:"error",code:"TRANSPORT_ERROR",message:q instanceof k?q.message:"连接失败,请重试",retryable:!0}))}finally{ne.current===re&&se.current===we&&(se.current=void 0),ae.current?.requestVersion===re&&(ut(ae.current.iterator),ae.current=void 0)}},Ae=o=>Ze(o),Lt=o=>Ze(o.userMessage.content,{regenerateFrom:o}),Ot=async(o,_)=>{try{await us(_),Q({messageId:o,message:"已复制",status:"success"})}catch(x){console.error("[make-ai-assistant] copy answer failed",{errorType:x instanceof Error?x.name:typeof x}),Q({messageId:o,message:"复制失败",status:"error"})}},Ft=o=>{o.preventDefault(),Ae(L)},Dt=o=>{o.key==="Enter"&&!o.shiftKey&&!o.nativeEvent.isComposing&&(o.preventDefault(),Ae(L))},Pt=()=>{ye("stop")&&S(o=>m.reduceAssistantEvent(o,{type:"run.cancelled"}))},Vt=()=>{ye("new-conversation"),P(""),Z(void 0),Q(void 0),U(!1),z.current=!0,S(m.createAssistantConversationState()),c?.()},Qe=A.features?.remoteCancellation===!1?"停止接收":"停止生成",Wt=wt(f),Ht=Tt(f),ke=Ns(f),Kt=typeof A.regenerate=="function"&&A.features?.regeneration!==!1,Je=()=>{ke&&Ae(ke.content)};return t.jsxs("section",{className:"make-ai-assistant make-ai-assistant__panel",ref:De,style:$,children:[t.jsxs("header",{className:"make-ai-assistant__header",children:[t.jsx(Ne,{}),t.jsxs("div",{className:"make-ai-assistant__header-content",children:[t.jsxs("div",{className:"make-ai-assistant__header-title-row",children:[t.jsx("h2",{className:"make-ai-assistant__header-title",title:h,children:h}),t.jsx("span",{className:"make-ai-assistant__read-only-tag",children:"只读"})]}),t.jsxs("div",{className:"make-ai-assistant__header-context",children:[t.jsx("p",{title:K,children:K}),I?t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-describedby":Ue,"aria-label":`使用提示:${I}`,className:"make-ai-assistant__header-context-help","data-tooltip":I,ref:Ve,role:"note",tabIndex:0,onBlur:Ge,onFocus:Ye,onPointerEnter:Ye,onPointerLeave:Ge,children:t.jsx(gs,{})}),t.jsx("span",{"aria-hidden":!te,className:"make-ai-assistant__header-context-tooltip","data-placement":me?.placement,"data-positioned":me?!0:void 0,"data-visible":te||void 0,id:Ue,ref:We,role:"tooltip",style:Rt,children:I})]}):null]})]}),t.jsxs("div",{className:"make-ai-assistant__header-actions",children:[A.features?.newConversation!==!1?t.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:Vt,children:t.jsx(_s,{})}):null,i?t.jsx("button",{"aria-label":`关闭 ${h}`,className:"make-ai-assistant__icon-button",type:"button",onClick:i,children:t.jsx(ps,{})}):null]})]}),t.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:ue,role:"log",onScroll:Ct,children:[p==="loading"?t.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[t.jsx(Ne,{}),t.jsx("h3",{children:"正在恢复对话"}),t.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):p==="error"?t.jsx("div",{className:"make-ai-assistant__empty",children:t.jsx(Rs,{error:V,onRetry:()=>je(o=>o+1)})}):f.messages.length===0?t.jsxs("div",{className:"make-ai-assistant__empty",children:[t.jsx(Ne,{}),t.jsx("h3",{children:"有什么可以帮你?"}),t.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):$s(f,a,ze,C,r,n,e,ke?Je:void 0,H,E,ve,Kt,(o,_)=>{Ot(o,_)},o=>{Lt(o)}),f.progress&&!Wt?t.jsx(ht,{assistantName:e,progress:f.progress}):null,f.error&&!Ht?t.jsx(ht,{assistantName:e,error:f.error,onRetry:ke?Je:void 0}):null]}),St?t.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:$t,children:t.jsx(xs,{})}):null,t.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[p==="ready"&&qe.length>0&&f.messages.length===0?t.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:qe.map((o,_)=>t.jsx("button",{type:"button",onClick:()=>{Ae(o)},children:o},`${_}-${o}`))}):null,t.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:Ft,children:[t.jsx("textarea",{"aria-label":`向 ${e} 提问`,"aria-describedby":J?"make-ai-composer-error":void 0,"aria-invalid":J?!0:void 0,autoFocus:!0,disabled:p!=="ready"||f.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:Pe,rows:2,value:L,onChange:o=>{P(o.currentTarget.value),Z(void 0)},onKeyDown:Dt}),f.status==="streaming"?t.jsx("button",{"aria-label":Qe,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":Qe,ref:He,type:"button",onClick:Pt,children:t.jsx("span",{"aria-hidden":"true"})}):t.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:p!=="ready"||!L.trim(),type:"submit",children:t.jsx(vs,{})})]}),J?t.jsx("p",{id:"make-ai-composer-error",role:"alert",children:J}):null,t.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Ls(e){return t.jsx(Et,{...e,visible:!0})}function Os({defaultOpen:e=!1,hideLauncher:s=!1,launcher:a,maxDrawerWidth:r,onOpenChange:n,open:i,...c}){const u=yt(c.brandName,c.title),[v,g]=l.useState(e),[w,T]=l.useState(()=>e||i===!0),R=l.useRef(null),C=l.useRef(null),A=l.useRef(void 0),[E,H]=l.useState(),[M,h]=l.useState(ns),[I,K]=l.useState(!1),b=i??v,G=Le(c.theme),$=is(r),L=()=>os(M,$,typeof window>"u"?At:window.innerWidth),P=L(),f=E===void 0?void 0:Re(E,M,P),S=f===void 0&&$===void 0?void 0:{...f===void 0?{}:{"--make-ai-internal-drawer-width":`${f}px`},...$===void 0?{}:{"--make-ai-internal-drawer-max-width":`max(var(--make-ai-internal-drawer-min-width), ${$}px)`}};l.useLayoutEffect(()=>{f!==void 0&&f!==E&&H(f)},[f,E]);const B=()=>{if(f!==void 0)return f;const p=C.current?.getBoundingClientRect().width;return p&&Number.isFinite(p)&&p>0?p:M},J=p=>{if(p.button!==0)return;const j=B(),V=E===void 0?j:M;h(V),A.current={minimumWidth:V,pointerId:p.pointerId,startWidth:j,startX:p.clientX},K(!0),typeof p.currentTarget.setPointerCapture=="function"&&p.currentTarget.setPointerCapture(p.pointerId),p.preventDefault()},Z=p=>{const j=A.current;if(!j||j.pointerId!==p.pointerId)return;const V=Re(j.startWidth+j.startX-p.clientX,j.minimumWidth,L());H(V)},ve=p=>{const j=A.current;!j||j.pointerId!==p.pointerId||(A.current=void 0,K(!1))},Q=p=>{const j=p.key==="ArrowLeft"?dt:p.key==="ArrowRight"?-dt:void 0;if(j===void 0)return;p.preventDefault();const V=B(),ee=E===void 0?V:M;h(ee),H(Re(V+j,ee,L()))},de=p=>{i===void 0&&g(p),n?.(p),p||requestAnimationFrame(()=>R.current?.focus())},je=()=>de(!b);return l.useEffect(()=>{b&&T(!0)},[b]),l.useEffect(()=>{if(!b)return;const p=j=>{j.key==="Escape"&&(de(!1),requestAnimationFrame(()=>R.current?.focus()))};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[n,b]),t.jsxs("div",{className:"make-ai-assistant","data-open":b||void 0,style:G,children:[!s&&(!b||a)?a?a({open:b,toggle:je}):t.jsxs("button",{"aria-label":b?`关闭 ${u}`:`打开 ${u}`,"aria-expanded":b,className:"make-ai-assistant__launcher",ref:R,type:"button",onClick:je,children:[t.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),t.jsx(kt,{})]}):null,w?t.jsxs("aside",{"aria-label":u,"aria-modal":"false",className:"make-ai-assistant__drawer","data-resizing":I||void 0,hidden:!b,ref:C,role:"dialog",style:S,children:[t.jsx("div",{"aria-label":"调整对话框宽度","aria-orientation":"vertical","aria-valuemax":P,"aria-valuemin":M,"aria-valuenow":f??M,className:"make-ai-assistant__drawer-resize-handle",role:"separator",tabIndex:0,onKeyDown:Q,onPointerCancel:ve,onPointerDown:J,onPointerMove:Z,onPointerUp:ve}),t.jsx(Et,{...c,onClose:()=>de(!1),visible:b})]}):null]})}exports.createArtifactCapabilities=Y.createArtifactCapabilities;exports.createArtifactTemplateRegistry=Y.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=Y.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=Y.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=m.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=m.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=m.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=m.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=m.appendUserMessage;exports.createAssistantConversationState=m.createAssistantConversationState;exports.parseArtifact=m.parseArtifact;exports.parseAssistantEvent=m.parseAssistantEvent;exports.reduceAssistantEvent=m.reduceAssistantEvent;exports.validateArtifact=m.validateArtifact;exports.ArtifactRenderer=gt;exports.AssistantPanel=Ls;exports.MakeAiAssistant=Os;exports.createPlatformArtifactRegistry=jt;exports.formatArtifactValue=X;exports.platformArtifactTemplates=vt;
3
+ `),c=()=>{const f=a.join(`
4
+ `).trim();a.length=0,f&&s.push({type:"paragraph",text:f})},m=()=>{r.length&&s.push({type:"list",items:r.splice(0)})},x=()=>{const f=n.join(`
5
+ `).trim();n.length=0,f&&s.push({type:"pre",text:f})};for(let f=0;f<i.length;f+=1){const T=i[f]??"",M=T.trim();if(!M){c(),m(),x();continue}const F=Is(i,f);if(F){c(),m(),x(),s.push({headers:F.headers,rows:F.rows,type:"table"}),f=F.lastIndex;continue}const E=/^(#{1,6})\s+(.+)$/.exec(M);if(E){c(),m(),x();const R=(E[2]??"").replace(/\s+#+\s*$/,"").trim();R&&s.push({type:"heading",level:E[1]?.length,text:R});continue}if(/^\s*\|.+\|\s*$/.test(T)){c(),m(),n.push(T.trim());continue}const I=/^\s*[-*]\s+(.+)$/.exec(T);if(I){c(),x(),r.push(I[1]?.trim()??"");continue}m(),x(),a.push(M)}return c(),m(),x(),s},_e=e=>{const s=[],a=/(\*\*[^*]+\*\*|`[^`]+`)/g;let r=0;for(const n of e.matchAll(a)){const i=n[0],c=n.index??0;c>r&&s.push(e.slice(r,c)),i.startsWith("**")?s.push(t.jsx("strong",{children:i.slice(2,-2)},`${c}-strong`)):s.push(t.jsx("code",{children:i.slice(1,-1)},`${c}-code`)),r=c+i.length}return r<e.length&&s.push(e.slice(r)),s},ws=({content:e})=>{const s=bs(e);return s.length?t.jsx("div",{className:"make-ai-assistant__bubble make-ai-assistant__assistant-text",children:s.map((a,r)=>{if(a.type==="heading"){const n=a.level<=2?"h3":"h4";return t.jsx(n,{className:`make-ai-assistant__markdown-heading make-ai-assistant__markdown-heading--${a.level}`,children:_e(a.text)},`${r}-heading`)}return a.type==="paragraph"?t.jsx("p",{children:_e(a.text)},`${r}-paragraph`):a.type==="pre"?t.jsx("pre",{children:t.jsx("code",{children:a.text})},`${r}-pre`):a.type==="table"?t.jsx("div",{"aria-label":"表格内容,可横向滚动",className:"make-ai-assistant__markdown-table-scroll",role:"region",tabIndex:0,children:t.jsxs("table",{className:"make-ai-assistant__markdown-table",children:[t.jsx("thead",{children:t.jsx("tr",{children:a.headers.map((n,i)=>t.jsx("th",{scope:"col",children:_e(n)},`${i}-${n}`))})}),t.jsx("tbody",{children:a.rows.map((n,i)=>t.jsx("tr",{children:n.map((c,m)=>t.jsx("td",{children:_e(c)},`${m}-${c}`))},`${i}-${n.join("|")}`))})]})},`${r}-table`):t.jsx("ul",{children:a.items.map((n,i)=>t.jsx("li",{children:_e(n)},`${i}-${n}`))},`${r}-list`)})}):null},wt=({assistantName:e})=>t.jsxs("div",{className:"make-ai-assistant__message-identity",children:[t.jsx(Me,{className:"make-ai-assistant__avatar--message"}),t.jsx("span",{className:"make-ai-assistant__message-sender",children:e})]}),Tt=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="streaming")return a.id}},Ts=e=>{for(let s=e.messages.length-1;s>=0;s-=1)if(e.messages[s].role==="user")return s;return-1},Mt=e=>{const s=Ts(e);if(!(s<0))for(let a=e.messages.length-1;a>s;a-=1){const r=e.messages[a];if(r.role==="assistant")return r.id}},Ms=e=>{if(e.status==="idle")for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="assistant"&&a.status==="complete")return a.id}},Ns=e=>{for(let s=e.messages.length-1;s>=0;s-=1){const a=e.messages[s];if(a.role==="user")return a}},Es=(e,s)=>{const a=e.messages.findIndex(r=>r.id===s&&r.role==="user");return{...e,error:void 0,progress:void 0,status:"streaming",messages:a<0?e.messages:e.messages.slice(0,a+1)}},Ss=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=48,ht=(e="smooth")=>globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":e,Le=(e,s)=>{typeof e.scrollTo=="function"?e.scrollTo({top:e.scrollHeight,behavior:s}):e.scrollTop=e.scrollHeight},Nt=({error:e,onRetry:s})=>t.jsxs("div",{className:"make-ai-assistant__message-status make-ai-assistant__message-status--error","data-error-presentation":"request-failed",role:"alert",children:[t.jsxs("div",{className:"make-ai-assistant__message-status-header",children:[t.jsx("span",{className:"make-ai-assistant__message-status-icon","aria-hidden":"true",children:t.jsx(js,{})}),t.jsx("strong",{children:"请求未完成"})]}),t.jsx("span",{className:"make-ai-assistant__message-status-message",children:e.message}),e.retryable&&s?t.jsxs("button",{className:"make-ai-assistant__retry",type:"button",onClick:s,children:[t.jsx(bt,{}),"重新发送"]}):null]}),Rs=({error:e,onRetry:s})=>{const a=ms(e);return t.jsxs("section",{"aria-live":"assertive",className:"make-ai-assistant__load-failure","data-load-failure-kind":a.kind,role:"alert",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-icon","aria-hidden":"true",children:t.jsxs("svg",{viewBox:"0 0 24 24",children:[t.jsx("path",{d:"M5 12a7 7 0 0 1 13.4-2.8A4.5 4.5 0 0 1 18 18H7.5A4.5 4.5 0 0 1 5 12Z"}),t.jsx("path",{d:"m9.2 14.8 5.6-5.6M9.2 9.2l5.6 5.6"})]})}),t.jsxs("div",{className:"make-ai-assistant__load-failure-copy",children:[t.jsx("span",{className:"make-ai-assistant__load-failure-label",children:a.label}),t.jsx("h3",{children:a.title}),t.jsx("p",{children:a.description})]}),t.jsxs("button",{className:"make-ai-assistant__retry make-ai-assistant__retry--primary",type:"button",onClick:s,children:[t.jsx(bt,{}),a.actionLabel]})]})},Et=({active:e,steps:s})=>{if(!e||!s?.length)return null;const a=s[s.length-1]??"处理中";return t.jsxs("details",{className:"make-ai-assistant__process",open:!0,children:[t.jsxs("summary",{children:[t.jsxs("span",{className:"make-ai-assistant__progress",role:"status",children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:a})]}),t.jsxs("span",{className:"make-ai-assistant__process-count",children:[s.length," 步"]})]}),t.jsx("ol",{children:s.map((r,n)=>t.jsxs("li",{"data-step-active":n===s.length-1?!0:void 0,children:[t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{children:r})]},`${n}-${r}`))})]})},Cs=({copyFeedback:e,onCopy:s,onRegenerate:a})=>!s&&!a?null:t.jsxs("div",{className:"make-ai-assistant__reply-actions","aria-label":"回复操作",children:[s?t.jsx("button",{"aria-label":"复制回答",className:"make-ai-assistant__reply-action make-ai-assistant__reply-copy","data-tooltip":"复制",type:"button",onClick:s,children:t.jsx(hs,{})}):null,a?t.jsx("button",{"aria-label":"重新生成",className:"make-ai-assistant__reply-action make-ai-assistant__reply-regenerate","data-tooltip":"重新生成",type:"button",onClick:a,children:t.jsx(fs,{})}):null,e?t.jsx("span",{className:"make-ai-assistant__reply-feedback","data-copy-status":e.status,role:"status",children:e.message}):null]}),ft=({assistantName:e,error:s,onRetry:a,progress:r})=>{const n=s?"error":"progress";return s?.message??r?.message?t.jsx("article",{"aria-label":`${e}的${n==="error"?"错误消息":"状态消息"}`,className:`make-ai-assistant__message make-ai-assistant__message--assistant make-ai-assistant__message--${n}`,"data-message-role":"assistant","data-message-state":n,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[t.jsx(wt,{assistantName:e}),t.jsx("div",{className:"make-ai-assistant__message-stack",children:s?t.jsx(Nt,{error:s,onRetry:a}):t.jsx(Et,{active:!0,steps:r?.steps})})]})}):null},$s=(e,s,a,r,n,i,c,m,x,f,T,M,F,E)=>{const I=Mt(e),R=Tt(e),C=Ms(e);let $;return e.messages.map(u=>{const A=u.role==="assistant",Z=$;A||($=u);const K=u.id===R,b=u.id===I?e.error:void 0,B=u.error??b,S=!A&&!!(x?.trim()||f),D=A?c:x?.trim()||"用户",v=A&&u.status==="complete"&&!B&&(u.content.trim()||u.id===C);return t.jsx("article",{"aria-label":`${D}的消息`,className:`make-ai-assistant__message make-ai-assistant__message--${u.role}`,"data-message-role":u.role,"data-message-state":B?"error":void 0,"data-message-status":u.status,"data-message-has-identity":A||S?!0:void 0,children:t.jsxs("div",{className:"make-ai-assistant__message-turn",children:[A?t.jsx(wt,{assistantName:c}):S?t.jsx(As,{userAvatarUrl:f,userName:x}):null,t.jsxs("div",{className:"make-ai-assistant__message-stack",children:[u.content?A?t.jsx(ws,{content:u.content}):t.jsx("div",{className:"make-ai-assistant__bubble",children:u.content}):u.status==="streaming"?t.jsxs("div",{className:"make-ai-assistant__typing","aria-label":`${c}正在思考`,children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]}):null,A?t.jsx(Et,{active:K&&e.status==="streaming",steps:u.progressSteps}):null,B?t.jsx(Nt,{error:B,onRetry:b?m:void 0}):null,u.artifacts.map(j=>t.jsx(xt,{artifact:j,context:s,onAction:n,onActionError:i,registry:a,theme:r},j.id)),v?t.jsx(Cs,{copyFeedback:T?.messageId===u.id?{message:T.message,status:T.status}:void 0,onCopy:u.content.trim()?()=>F(u.id,u.content):void 0,onRegenerate:M&&u.id===C&&Z?()=>E({userMessage:Z,assistantMessage:u}):void 0}):null]})]})},u.id)})};function St({assistantName:e="AI 助手",brandName:s,context:a,onAction:r,onActionError:n,onClose:i,onNewConversation:c,headerHeight:m,privacyNotice:x,registry:f,subtitle:T,suggestions:M,title:F,theme:E,transport:I,userAvatarUrl:R,userName:C,visible:$}){const u=At(s,F),A=x?.trim(),Z=as(T,a.app.name),K=ls(m),b=Oe(E),B=b||K?{...b,...K?{"--make-ai-internal-header-height":K}:{}}:void 0,[S,D]=l.useState(""),[v,j]=l.useState(p.createAssistantConversationState),Q=l.useRef(v);Q.current=v;const[J,ee]=l.useState(void 0),[Ne,U]=l.useState(void 0),[Ee,de]=l.useState(0),[W,h]=l.useState(()=>I.loadConversation?"loading":"ready"),[w,L]=l.useState(void 0),[ve,z]=l.useState(!1),[te,Fe]=l.useState(!1),[me,De]=l.useState(void 0),se=l.useRef(void 0),ae=l.useRef(void 0),ne=l.useRef(0),Pe=l.useRef(null),ue=l.useRef(null),Ve=l.useRef(null),We=l.useRef(null),He=l.useRef(null),Ke=l.useRef(null),q=l.useRef(!0),Be=l.useRef(a.app.id),Ue=l.useRef($),ze=l.useId(),qe=l.useMemo(()=>f??yt(),[f]),Xe=l.useMemo(()=>ts(M),[M]),Ye=()=>{const o=We.current,_=He.current;if(!o||!_||typeof window>"u")return;const g=cs(o.getBoundingClientRect(),_.getBoundingClientRect(),window.innerHeight,window.innerWidth);De(y=>y?.left===g.left&&y.top===g.top&&y.placement===g.placement?y:g)},Ge=()=>Fe(!0),Ze=()=>Fe(!1),Rt=me?{left:`${me.left}px`,top:`${me.top}px`}:void 0;l.useLayoutEffect(()=>{if(!te||!A){De(void 0);return}Ye()},[te,A]),l.useEffect(()=>{if(!te||!A)return;const o=()=>Ye();return window.addEventListener("resize",o),window.addEventListener("scroll",o,!0),()=>{window.removeEventListener("resize",o),window.removeEventListener("scroll",o,!0)}},[te,A]);const je=o=>{const _=se.current,g=ae.current?.iterator;return!_&&!g?!1:(ne.current+=1,se.current=void 0,ae.current=void 0,console.info("[make-ai-assistant] local run cancellation requested",{reason:o}),_?.abort(),pt(g),!0)};l.useEffect(()=>()=>{je("unmount")},[]),l.useEffect(()=>{const o=I.loadConversation,_=Be.current!==a.app.id;if(Be.current=a.app.id,je("reinitialize"),_&&(D(""),q.current=!0),ee(void 0),U(void 0),z(!1),j(p.createAssistantConversationState()),!o){L(void 0),h("ready");return}const g=new AbortController;return L(void 0),h("loading"),console.info("[make-ai-assistant] conversation load start",{appId:a.app.id}),o.call(I,a,{signal:g.signal}).then(y=>{g.signal.aborted||(j(p.createAssistantConversationState(y)),h("ready"),console.info("[make-ai-assistant] conversation load success",{appId:a.app.id,messageCount:y.messages.length}))}).catch(y=>{g.signal.aborted||(console.error("[make-ai-assistant] conversation load failed",{appId:a.app.id,errorType:y instanceof Error?y.name:typeof y}),L(y),h("error"))}),()=>g.abort()},[a.app.id,Ee,I]),l.useEffect(()=>{const o=ue.current;if(!o||!q.current)return;z(!1);const _=requestAnimationFrame(()=>{if(!q.current)return;const g=v.status==="streaming"||globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";Le(o,g)});return()=>cancelAnimationFrame(_)},[v.messages,v.progress,v.status]),l.useEffect(()=>{const o=$&&!Ue.current;if(Ue.current=$,!o)return;const _=requestAnimationFrame(()=>{const g=ue.current;if(g&&q.current){z(!1);const pe=Q.current.status==="streaming"?"auto":ht();Le(g,pe)}else g&&z(Q.current.messages.length>0);const y=Ve.current;(y&&!y.disabled?y:Ke.current??Pe.current?.querySelector("button:not(:disabled)"))?.focus()});return()=>cancelAnimationFrame(_)},[$]);const Ct=()=>{const o=ue.current;if(!o)return;const _=Ss(o);q.current=_,z(!_&&Q.current.messages.length>0)},$t=()=>{const o=ue.current;if(!o)return;q.current=!0,z(!1);const _=ht();Le(o,_)},Qe=async(o,_)=>{const g=o.trim(),y=Q.current,H=_?.regenerateFrom,pe=I.regenerate;if(!g||W!=="ready"||y.status==="streaming"||se.current||H&&!pe)return;if(p.countCodePointsUpTo(g,p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)>p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters){ee(`输入内容过长,请控制在 ${p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters} 个字符以内`);return}const ke={id:H?.userMessage.id??Qt("user"),content:g},Ie=H?Es(y,H.userMessage.id):p.appendUserMessage(y,ke),be=new AbortController,re=ne.current+1;ne.current=re,se.current=be,ee(void 0),U(void 0),z(!q.current&&y.messages.length>0),H||D(""),j(Ie);try{let X=!1,N,tt=0,st=0,at=0,Se=0,he=0;const fe=new Map,nt=new Set,rt=new Set([...Ie.messages.map(we=>we.id),ke.id]),ge=new Set,it=G.createArtifactCapabilities(qe),ot={signal:be.signal};let Re;if(H){if(!pe)throw new k("当前 AI 助手不支持重新生成");Re=pe({threadId:Ie.threadId,message:ke,assistantMessage:{id:H.assistantMessage.id,content:H.assistantMessage.content},context:a,capabilities:it},ot)}else Re=I.run({threadId:Ie.threadId,message:ke,context:a,capabilities:it},ot);const ct=Re[Symbol.asyncIterator]();for(ae.current={iterator:ct,requestVersion:re};;){const we=await ct.next();if(ne.current!==re||we.done)break;let d;try{d=p.parseAssistantEvent(we.value)}catch(O){throw new k(O instanceof Error?O.message:"Invalid assistant event")}if(d.type==="message.start"){if(N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(N??=d.runId,st+=1,st>p.MAKE_AI_CONVERSATION_LIMITS.assistantMessagesPerRun)throw new k("AI 助手单次响应消息数量超过限制");if(rt.has(d.messageId))throw new k("AI 助手响应包含重复的 message id");rt.add(d.messageId),ge.add(d.messageId),fe.set(d.messageId,0)}if(d.type==="message.delta"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");const O=fe.get(d.messageId)??0,ie=p.countCodePointsUpTo(d.delta,p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters-he);if(he+ie>p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new k("AI 助手响应文本超过大小限制");he+=ie,fe.set(d.messageId,O+ie)}if(d.type==="message.replace"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");const O=fe.get(d.messageId)??0,ie=p.countCodePointsUpTo(d.content,p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters),lt=he-O+ie;if(lt>p.MAKE_AI_CONVERSATION_LIMITS.messageCharacters)throw new k("AI 助手响应文本超过大小限制");he=lt,fe.set(d.messageId,ie)}if(d.type==="run.progress"){if(N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(N??=d.runId,at+=1,at>p.MAKE_AI_CONVERSATION_LIMITS.progressStepsPerRun)throw new k("AI 助手处理过程数量超过限制");const O=p.countCodePointsUpTo(d.message,p.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun-Se);if(Se+O>p.MAKE_AI_CONVERSATION_LIMITS.progressCharactersPerRun)throw new k("AI 助手处理过程文本超过大小限制");Se+=O}if(d.type==="artifact"){if(!ge.has(d.messageId))throw new k("AI 助手响应事件顺序无效");if(tt+=1,tt>p.MAKE_AI_CONVERSATION_LIMITS.artifactsPerRun)throw new k("AI 助手单次响应 Artifact 数量超过限制");if(nt.has(d.artifact.id))throw new k("AI 助手响应包含重复的 Artifact id");nt.add(d.artifact.id)}if(d.type==="message.complete"&&!ge.delete(d.messageId))throw new k("AI 助手响应事件顺序无效");if(d.type==="run.complete"&&N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(d.type==="run.cancelled"&&d.runId!==void 0&&N!==void 0&&N!==d.runId)throw new k("AI 助手响应 run id 不一致");if(j(O=>p.reduceAssistantEvent(O,d)),d.type==="error"||d.type==="run.cancelled"||d.type==="run.complete"){X=!0;break}}if(!X)throw new k("AI 助手流式响应在终止事件前结束")}catch(X){if(ne.current!==re)return;if(be.signal.aborted){j(N=>p.reduceAssistantEvent(N,{type:"run.cancelled"}));return}console.error("[make-ai-assistant] assistant run failed",{appId:a.app.id,errorType:X instanceof Error?X.name:typeof X}),j(N=>p.reduceAssistantEvent(N,{type:"error",code:"TRANSPORT_ERROR",message:X instanceof k?X.message:"连接失败,请重试",retryable:!0}))}finally{ne.current===re&&se.current===be&&(se.current=void 0),ae.current?.requestVersion===re&&(pt(ae.current.iterator),ae.current=void 0)}},ye=o=>Qe(o),Lt=o=>Qe(o.userMessage.content,{regenerateFrom:o}),Ot=async(o,_)=>{try{await us(_),U({messageId:o,message:"已复制",status:"success"})}catch(g){console.error("[make-ai-assistant] copy answer failed",{errorType:g instanceof Error?g.name:typeof g}),U({messageId:o,message:"复制失败",status:"error"})}},Ft=o=>{o.preventDefault(),ye(S)},Dt=o=>{o.key==="Enter"&&!o.shiftKey&&!o.nativeEvent.isComposing&&(o.preventDefault(),ye(S))},Pt=()=>{je("stop")&&j(o=>p.reduceAssistantEvent(o,{type:"run.cancelled"}))},Vt=()=>{je("new-conversation"),D(""),ee(void 0),U(void 0),z(!1),q.current=!0,j(p.createAssistantConversationState()),c?.()},Je=I.features?.remoteCancellation===!1?"停止接收":"停止生成",Wt=Tt(v),Ht=Mt(v),Ae=Ns(v),Kt=typeof I.regenerate=="function"&&I.features?.regeneration!==!1,et=()=>{Ae&&ye(Ae.content)};return t.jsxs("section",{className:"make-ai-assistant make-ai-assistant__panel",ref:Pe,style:B,children:[t.jsxs("header",{className:"make-ai-assistant__header",children:[t.jsx(Me,{}),t.jsxs("div",{className:"make-ai-assistant__header-content",children:[t.jsxs("div",{className:"make-ai-assistant__header-title-row",children:[t.jsx("h2",{className:"make-ai-assistant__header-title",title:u,children:u}),t.jsx("span",{className:"make-ai-assistant__read-only-tag",children:"只读"})]}),t.jsxs("div",{className:"make-ai-assistant__header-context",children:[t.jsx("p",{title:Z,children:Z}),A?t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-describedby":ze,"aria-label":`使用提示:${A}`,className:"make-ai-assistant__header-context-help","data-tooltip":A,ref:We,role:"note",tabIndex:0,onBlur:Ze,onFocus:Ge,onPointerEnter:Ge,onPointerLeave:Ze,children:t.jsx(gs,{})}),t.jsx("span",{"aria-hidden":!te,className:"make-ai-assistant__header-context-tooltip","data-placement":me?.placement,"data-positioned":me?!0:void 0,"data-visible":te||void 0,id:ze,ref:He,role:"tooltip",style:Rt,children:A})]}):null]})]}),t.jsxs("div",{className:"make-ai-assistant__header-actions",children:[I.features?.newConversation!==!1?t.jsx("button",{"aria-label":"新建对话",className:"make-ai-assistant__icon-button",type:"button",onClick:Vt,children:t.jsx(_s,{})}):null,i?t.jsx("button",{"aria-label":`关闭 ${u}`,className:"make-ai-assistant__icon-button",type:"button",onClick:i,children:t.jsx(ps,{})}):null]})]}),t.jsxs("div",{className:"make-ai-assistant__body","aria-live":"polite","aria-relevant":"additions text",ref:ue,role:"log",onScroll:Ct,children:[W==="loading"?t.jsxs("div",{className:"make-ai-assistant__empty",role:"status",children:[t.jsx(Me,{}),t.jsx("h3",{children:"正在恢复对话"}),t.jsx("p",{children:"正在读取当前 App 的历史消息…"})]}):W==="error"?t.jsx("div",{className:"make-ai-assistant__empty",children:t.jsx(Rs,{error:w,onRetry:()=>de(o=>o+1)})}):v.messages.length===0?t.jsxs("div",{className:"make-ai-assistant__empty",children:[t.jsx(Me,{}),t.jsx("h3",{children:"有什么可以帮你?"}),t.jsx("p",{children:"我会结合当前 App、页面位置和宿主允许的上下文回答,并把过程与结果分开展示。"})]}):$s(v,a,qe,E,r,n,e,Ae?et:void 0,C,R,Ne,Kt,(o,_)=>{Ot(o,_)},o=>{Lt(o)}),v.progress&&!Wt?t.jsx(ft,{assistantName:e,progress:v.progress}):null,v.error&&!Ht?t.jsx(ft,{assistantName:e,error:v.error,onRetry:Ae?et:void 0}):null]}),ve?t.jsx("button",{"aria-label":"回到最新消息",className:"make-ai-assistant__back-to-latest",type:"button",onClick:$t,children:t.jsx(xs,{})}):null,t.jsxs("footer",{className:"make-ai-assistant__composer-region",children:[W==="ready"&&Xe.length>0&&v.messages.length===0?t.jsx("div",{className:"make-ai-assistant__suggestions","aria-label":"推荐问题",children:Xe.map((o,_)=>t.jsx("button",{type:"button",onClick:()=>{ye(o)},children:o},`${_}-${o}`))}):null,t.jsxs("form",{className:"make-ai-assistant__composer",onSubmit:Ft,children:[t.jsx("textarea",{"aria-label":`向 ${e} 提问`,"aria-describedby":J?"make-ai-composer-error":void 0,"aria-invalid":J?!0:void 0,autoFocus:!0,disabled:W!=="ready"||v.status==="streaming",placeholder:`询问当前 ${a.app.name??"App"} 中的数据…`,ref:Ve,rows:2,value:S,onChange:o=>{D(o.currentTarget.value),ee(void 0)},onKeyDown:Dt}),v.status==="streaming"?t.jsx("button",{"aria-label":Je,className:"make-ai-assistant__send make-ai-assistant__send--stop","data-tooltip":Je,ref:Ke,type:"button",onClick:Pt,children:t.jsx("span",{"aria-hidden":"true"})}):t.jsx("button",{"aria-label":"发送",className:"make-ai-assistant__send",disabled:W!=="ready"||!S.trim(),type:"submit",children:t.jsx(vs,{})})]}),J?t.jsx("p",{id:"make-ai-composer-error",role:"alert",children:J}):null,t.jsx("p",{children:"AI 生成的结果可能存在偏差,重要数据请核对明细。"})]})]})}function Ls(e){return t.jsx(St,{...e,visible:!0})}function Os({defaultOpen:e=!1,hideLauncher:s=!1,launcher:a,launcherPosition:r="bottom-right",maxDrawerWidth:n,onOpenChange:i,open:c,...m}){const x=At(m.brandName,m.title),[f,T]=l.useState(e),[M,F]=l.useState(()=>e||c===!0),E=l.useRef(null),I=l.useRef(null),R=l.useRef(void 0),[C,$]=l.useState(),[u,A]=l.useState(ns),[Z,K]=l.useState(!1),b=c??f,B=Oe(m.theme),S=is(n),D=()=>os(u,S,typeof window>"u"?kt:window.innerWidth),v=D(),j=C===void 0?void 0:Ce(C,u,v),Q=j===void 0&&S===void 0?void 0:{...j===void 0?{}:{"--make-ai-internal-drawer-width":`${j}px`},...S===void 0?{}:{"--make-ai-internal-drawer-max-width":`max(var(--make-ai-internal-drawer-min-width), ${S}px)`}};l.useLayoutEffect(()=>{j!==void 0&&j!==C&&$(j)},[j,C]);const J=()=>{if(j!==void 0)return j;const h=I.current?.getBoundingClientRect().width;return h&&Number.isFinite(h)&&h>0?h:u},ee=h=>{if(h.button!==0)return;const w=J(),L=C===void 0?w:u;A(L),R.current={minimumWidth:L,pointerId:h.pointerId,startWidth:w,startX:h.clientX},K(!0),typeof h.currentTarget.setPointerCapture=="function"&&h.currentTarget.setPointerCapture(h.pointerId),h.preventDefault()},Ne=h=>{const w=R.current;if(!w||w.pointerId!==h.pointerId)return;const L=Ce(w.startWidth+w.startX-h.clientX,w.minimumWidth,D());$(L)},U=h=>{const w=R.current;!w||w.pointerId!==h.pointerId||(R.current=void 0,K(!1))},Ee=h=>{const w=h.key==="ArrowLeft"?mt:h.key==="ArrowRight"?-mt:void 0;if(w===void 0)return;h.preventDefault();const L=J(),ve=C===void 0?L:u;A(ve),$(Ce(L+w,ve,D()))},de=h=>{c===void 0&&T(h),i?.(h),h||requestAnimationFrame(()=>E.current?.focus())},W=()=>de(!b);return l.useEffect(()=>{b&&F(!0)},[b]),l.useEffect(()=>{if(!b)return;const h=w=>{w.key==="Escape"&&(de(!1),requestAnimationFrame(()=>E.current?.focus()))};return document.addEventListener("keydown",h),()=>document.removeEventListener("keydown",h)},[i,b]),t.jsxs("div",{className:"make-ai-assistant","data-open":b||void 0,style:B,children:[!s&&(!b||a)?a?a({open:b,toggle:W}):t.jsxs("button",{"aria-label":b?`关闭 ${x}`:`打开 ${x}`,"aria-expanded":b,className:"make-ai-assistant__launcher","data-launcher-position":r,ref:E,type:"button",onClick:W,children:[t.jsx("span",{className:"make-ai-assistant__launcher-orbit","aria-hidden":"true"}),t.jsx(It,{})]}):null,M?t.jsxs("aside",{"aria-label":x,"aria-modal":"false",className:"make-ai-assistant__drawer","data-resizing":Z||void 0,hidden:!b,ref:I,role:"dialog",style:Q,children:[t.jsx("div",{"aria-label":"调整对话框宽度","aria-orientation":"vertical","aria-valuemax":v,"aria-valuemin":u,"aria-valuenow":j??u,className:"make-ai-assistant__drawer-resize-handle",role:"separator",tabIndex:0,onKeyDown:Ee,onPointerCancel:U,onPointerDown:ee,onPointerMove:Ne,onPointerUp:U}),t.jsx(St,{...m,onClose:()=>de(!1),visible:b})]}):null]})}exports.createArtifactCapabilities=G.createArtifactCapabilities;exports.createArtifactTemplateRegistry=G.createArtifactTemplateRegistry;exports.extendArtifactTemplateRegistry=G.extendArtifactTemplateRegistry;exports.resolveArtifactTemplate=G.resolveArtifactTemplate;exports.MAKE_AI_ARTIFACT_KINDS=p.MAKE_AI_ARTIFACT_KINDS;exports.MAKE_AI_ARTIFACT_LIMITS=p.MAKE_AI_ARTIFACT_LIMITS;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION=p.MAKE_AI_ARTIFACT_SCHEMA_VERSION;exports.MAKE_AI_CONVERSATION_LIMITS=p.MAKE_AI_CONVERSATION_LIMITS;exports.appendUserMessage=p.appendUserMessage;exports.createAssistantConversationState=p.createAssistantConversationState;exports.parseArtifact=p.parseArtifact;exports.parseAssistantEvent=p.parseAssistantEvent;exports.reduceAssistantEvent=p.reduceAssistantEvent;exports.validateArtifact=p.validateArtifact;exports.ArtifactRenderer=xt;exports.AssistantPanel=Ls;exports.MakeAiAssistant=Os;exports.createPlatformArtifactRegistry=yt;exports.formatArtifactValue=Y;exports.platformArtifactTemplates=jt;