@qfei-design/make-ai-assistant 0.2.7 → 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 +10 -12
- package/README.md +11 -24
- package/dist/react/theme.d.ts +9 -9
- package/dist/react.cjs +2 -2
- package/dist/react.mjs +2 -2
- package/dist/styles.css +39 -26
- package/package.json +1 -1
package/PUBLIC_API.md
CHANGED
|
@@ -37,13 +37,13 @@ Fetch SSE 实现时,从 `/sse` 入口导入 `createSseAssistantTransport`。
|
|
|
37
37
|
|
|
38
38
|
## React exports
|
|
39
39
|
|
|
40
|
-
- `MakeAiAssistant
|
|
40
|
+
- `MakeAiAssistant`:默认右下角浮动入口与右侧抽屉;支持受控开关、自定义 launcher,以及
|
|
41
41
|
`brandName` 对默认“{品牌名} AI 助手”标题的覆盖。`title` 可覆盖完整标题;`assistantName` /
|
|
42
42
|
`userName` / `userAvatarUrl` 可显示当前登录人的名称和头像;未传入时用户侧不显示身份信息。
|
|
43
43
|
`subtitle` 用于显示宿主传入的当前对象(兼容移除旧接入中的“只读分析 ·”前缀);`privacyNotice`
|
|
44
44
|
会在对象右侧的问号 Tooltip 中展示,并根据图标与可用视口选择相邻方向,而非单独的广播行。头栏默认高度为 50px,可通过 `headerHeight` 或
|
|
45
45
|
`--make-ai-header-height` 覆盖。内置浮动入口可通过 `launcherPosition` 设置为 `bottom-left`、
|
|
46
|
-
`bottom-right`、`top-left`、`top-right`、`left-center` 或 `right-center`;默认值为 `bottom-
|
|
46
|
+
`bottom-right`、`top-left`、`top-right`、`left-center` 或 `right-center`;默认值为 `bottom-right`。
|
|
47
47
|
自定义 `launcher` 自行负责位置。标准位置只读取对应锚点的
|
|
48
48
|
`--make-ai-launcher-left`、`--make-ai-launcher-right`、`--make-ai-launcher-top` 或
|
|
49
49
|
`--make-ai-launcher-bottom` 变量;窄屏使用对应的 `--make-ai-launcher-mobile-*` 变量,另一侧始终为
|
|
@@ -69,16 +69,14 @@ Fetch SSE 实现时,从 `/sse` 入口导入 `createSseAssistantTransport`。
|
|
|
69
69
|
- `ReactArtifactTemplateRegistry`
|
|
70
70
|
- `formatArtifactValue`
|
|
71
71
|
|
|
72
|
-
`MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 均支持 `theme?: MakeAiTheme
|
|
73
|
-
|
|
74
|
-
`
|
|
75
|
-
|
|
76
|
-
`--make-ai-
|
|
77
|
-
`
|
|
78
|
-
|
|
79
|
-
`
|
|
80
|
-
直接写入既有 Artifact 根节点,不新增 DOM 包装;自定义模板可从 `ArtifactTemplateRenderContext.theme` 与
|
|
81
|
-
`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` 自行使用。语义成功/告警/错误色保持独立。
|
|
82
80
|
|
|
83
81
|
`ArtifactRenderer`、`AssistantPanel` 和 `MakeAiAssistant` 支持 `onActionError`。当宿主
|
|
84
82
|
`onAction` 同步抛错或返回 rejected Promise 时,包会把错误、动作和上下文交还给
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @qfei-design/make-ai-assistant
|
|
2
2
|
|
|
3
|
-
面向 Make Console 与所有 Make App 的 AI
|
|
3
|
+
面向 Make Console 与所有 Make App 的 AI 助手前端包。它提供统一的右下角浮动入口、右侧抽屉、流式会话状态、版本化 Artifact 协议、平台默认结果模板和 App 扩展机制。
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -34,10 +34,10 @@ export function AppAssistant() {
|
|
|
34
34
|
}
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
`MakeAiAssistant`
|
|
37
|
+
`MakeAiAssistant` 默认渲染右下角的动效入口和右侧抽屉。宿主可以使用 `open` / `onOpenChange`
|
|
38
38
|
受控管理开关,也可以用 `AssistantPanel` 嵌入自己的容器。内置浮动入口可通过 `launcherPosition`
|
|
39
39
|
设置为 `bottom-left`、`bottom-right`、`top-left`、`top-right`、`left-center` 或 `right-center`;默认值为
|
|
40
|
-
`bottom-
|
|
40
|
+
`bottom-right`。`launcher` 自定义渲染器自行负责位置。浮动入口首次打开后,关闭抽屉只隐藏 Drawer,不卸载 `AssistantPanel`,因此不会中断
|
|
41
41
|
正在进行的生成;重新打开时会按用户关闭前的滚动意图恢复消息位置,空闲时聚焦输入框,生成中
|
|
42
42
|
聚焦停止按钮。只有点击“停止生成”、新建对话、切换 App/reinitialize 或宿主卸载根组件时才会取消当前请求。
|
|
43
43
|
|
|
@@ -73,9 +73,9 @@ AI transport;进度和可重试错误会显示在对应的 AI 回合中。
|
|
|
73
73
|
|
|
74
74
|
## Theme integration
|
|
75
75
|
|
|
76
|
-
`MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 都支持同一个 `theme`
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
`MakeAiAssistant`、`AssistantPanel` 和 `ArtifactRenderer` 都支持同一个 `theme` 属性。标题栏、内容背景、正文、通用边框和用户消息的默认色固定,
|
|
77
|
+
不会因宿主主题色变化:标题栏与承载面为白色,内容区为 `#f7f9fc`,正文为 `#15233d`,用户发送消息为
|
|
78
|
+
`#2f6df6` 蓝底白字。主题色只用于竖线、圆点、图标、输入框焦点、发送按钮和标签等强调元素;成功、告警和错误仍使用独立语义色。
|
|
79
79
|
|
|
80
80
|
```tsx
|
|
81
81
|
import type { MakeAiTheme } from "@qfei-design/make-ai-assistant/react";
|
|
@@ -84,29 +84,16 @@ const hostTheme: MakeAiTheme = {
|
|
|
84
84
|
primary: "#0f8277",
|
|
85
85
|
primaryHover: "#09685f",
|
|
86
86
|
onPrimary: "#f7fffc",
|
|
87
|
-
background: "#f5fbf8",
|
|
88
|
-
surface: "#eef8f4",
|
|
89
|
-
surfaceStrong: "#dff2eb",
|
|
90
|
-
text: "#173f38",
|
|
91
|
-
textSecondary: "#3c685f",
|
|
92
|
-
border: "#b8d8cf",
|
|
93
|
-
overlay: "#123f37",
|
|
94
|
-
onOverlay: "#f7fffc",
|
|
95
87
|
};
|
|
96
88
|
|
|
97
89
|
<MakeAiAssistant theme={hostTheme} {...assistantProps} />;
|
|
98
90
|
```
|
|
99
91
|
|
|
100
|
-
`primary`
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
宿主 `--make-color
|
|
104
|
-
|
|
105
|
-
`--make-ai-theme-on-primary`、`--make-ai-theme-bg`、`--make-ai-theme-surface`、`--make-ai-theme-text` 和
|
|
106
|
-
`--make-ai-theme-surface-strong`、`--make-ai-theme-text-secondary`、`--make-ai-theme-border`、
|
|
107
|
-
`--make-ai-theme-overlay`、`--make-ai-theme-on-overlay`;这些变量只在 AI 包的命名空间内生效。
|
|
108
|
-
平台内置 Artifact 会把主题变量直接写入原有根节点,不增加布局或 DOM 层级;自定义模板如返回自定义组件或
|
|
109
|
-
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 模板自行使用。
|
|
110
97
|
|
|
111
98
|
桌面端抽屉默认宽度为 480px,且该初始宽度是用户拖拽时的最小宽度。最大宽度默认是 `min(1024px, 72vw)`,宿主可通过 `maxDrawerWidth` 传入像素值覆盖;小于最小宽度的配置会回退至最小宽度。鼠标移至抽屉左边缘的 12px 热区时才会显示 2px 主题色拖拽提示线(可通过 `--make-ai-drawer-resize-line` 覆盖),可向左拖宽;获得焦点后也可用左、右方向键以 16px 调整宽度。不大于 560px 的视口保持全宽展示,不显示拖拽手柄。
|
|
112
99
|
|
package/dist/react/theme.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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"),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%, var(--make-ai-theme-text))"),"--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,`
|
|
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
3
|
`),c=()=>{const f=a.join(`
|
|
4
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-left",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;
|
|
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;
|
package/dist/react.mjs
CHANGED
|
@@ -11,7 +11,7 @@ const Nt = (e) => e?.trim() || void 0, O = (e, t) => Nt(e) ?? t, ze = (e) => {
|
|
|
11
11
|
"--make-ai-theme-primary": t,
|
|
12
12
|
"--make-ai-theme-primary-hover": O(
|
|
13
13
|
e?.primaryHover,
|
|
14
|
-
"color-mix(in srgb, var(--make-ai-theme-primary) 84%,
|
|
14
|
+
"color-mix(in srgb, var(--make-ai-theme-primary) 84%, #15233d)"
|
|
15
15
|
),
|
|
16
16
|
"--make-ai-theme-on-primary": O(
|
|
17
17
|
e?.onPrimary,
|
|
@@ -1371,7 +1371,7 @@ function as({
|
|
|
1371
1371
|
defaultOpen: e = !1,
|
|
1372
1372
|
hideLauncher: t = !1,
|
|
1373
1373
|
launcher: s,
|
|
1374
|
-
launcherPosition: r = "bottom-
|
|
1374
|
+
launcherPosition: r = "bottom-right",
|
|
1375
1375
|
maxDrawerWidth: n,
|
|
1376
1376
|
onOpenChange: o,
|
|
1377
1377
|
open: l,
|
package/dist/styles.css
CHANGED
|
@@ -3,21 +3,23 @@
|
|
|
3
3
|
--make-ai-internal-accent-strong: var(--make-ai-theme-primary-hover, var(--make-ai-accent-strong, var(--make-color-primary-hover, color-mix(in srgb, var(--make-ai-internal-accent) 84%, var(--make-ai-internal-text)))));
|
|
4
4
|
--make-ai-internal-on-accent: var(--make-ai-theme-on-primary, var(--make-ai-on-accent, #fcfcff));
|
|
5
5
|
--make-ai-internal-accent-soft: var(--make-ai-accent-soft, color-mix(in srgb, var(--make-ai-internal-accent) 10%, var(--make-ai-internal-bg)));
|
|
6
|
-
--make-ai-internal-bg:
|
|
7
|
-
--make-ai-internal-surface:
|
|
8
|
-
--make-ai-internal-surface-strong:
|
|
9
|
-
--make-ai-internal-text:
|
|
10
|
-
--make-ai-internal-text-secondary:
|
|
11
|
-
--make-ai-internal-border:
|
|
6
|
+
--make-ai-internal-bg: #f7f9fc;
|
|
7
|
+
--make-ai-internal-surface: #fff;
|
|
8
|
+
--make-ai-internal-surface-strong: #f1f4f9;
|
|
9
|
+
--make-ai-internal-text: #15233d;
|
|
10
|
+
--make-ai-internal-text-secondary: #738096;
|
|
11
|
+
--make-ai-internal-border: #dbe3ef;
|
|
12
|
+
--make-ai-internal-user-message-bg: #2f6df6;
|
|
13
|
+
--make-ai-internal-user-message-text: #fff;
|
|
12
14
|
--make-ai-internal-success: var(--make-ai-success, var(--make-color-success, #1a9a61));
|
|
13
15
|
--make-ai-internal-warning: var(--make-ai-warning, var(--make-color-warning, #c77b00));
|
|
14
16
|
--make-ai-internal-danger: var(--make-ai-danger, var(--make-color-danger, #d04444));
|
|
15
17
|
--make-ai-internal-radius: var(--make-ai-radius, var(--make-radius-large, 14px));
|
|
16
|
-
--make-ai-internal-shadow:
|
|
17
|
-
--make-ai-internal-overlay:
|
|
18
|
-
--make-ai-internal-on-overlay:
|
|
19
|
-
--make-ai-internal-overlay-shadow:
|
|
20
|
-
--make-ai-internal-highlight: color-mix(in srgb,
|
|
18
|
+
--make-ai-internal-shadow: 0 18px 48px #3549701f;
|
|
19
|
+
--make-ai-internal-overlay: #15233d;
|
|
20
|
+
--make-ai-internal-on-overlay: #fff;
|
|
21
|
+
--make-ai-internal-overlay-shadow: #3549701f;
|
|
22
|
+
--make-ai-internal-highlight: color-mix(in srgb, #fff 58%, transparent);
|
|
21
23
|
--make-ai-internal-drawer-min-width: var(--make-ai-drawer-width, 480px);
|
|
22
24
|
--make-ai-internal-drawer-width: var(--make-ai-internal-drawer-min-width);
|
|
23
25
|
--make-ai-internal-drawer-max-width: max(var(--make-ai-internal-drawer-min-width), min(1024px, 72vw));
|
|
@@ -100,8 +102,8 @@
|
|
|
100
102
|
overflow: visible;
|
|
101
103
|
padding: 0;
|
|
102
104
|
position: fixed;
|
|
103
|
-
left:
|
|
104
|
-
right:
|
|
105
|
+
left: auto;
|
|
106
|
+
right: var(--make-ai-launcher-right, 18px);
|
|
105
107
|
top: auto;
|
|
106
108
|
transform: var(--make-ai-internal-launcher-translate) scale(1);
|
|
107
109
|
transition:
|
|
@@ -111,6 +113,11 @@
|
|
|
111
113
|
z-index: calc(var(--make-ai-internal-z-index) + 2);
|
|
112
114
|
}
|
|
113
115
|
|
|
116
|
+
.make-ai-assistant__launcher[data-launcher-position="bottom-left"] {
|
|
117
|
+
left: var(--make-ai-launcher-left, 18px);
|
|
118
|
+
right: auto;
|
|
119
|
+
}
|
|
120
|
+
|
|
114
121
|
.make-ai-assistant__launcher[data-launcher-position="bottom-right"] {
|
|
115
122
|
left: auto;
|
|
116
123
|
right: var(--make-ai-launcher-right, 18px);
|
|
@@ -273,6 +280,7 @@
|
|
|
273
280
|
|
|
274
281
|
.make-ai-assistant__header {
|
|
275
282
|
align-items: center;
|
|
283
|
+
background: var(--make-ai-internal-surface);
|
|
276
284
|
border-bottom: 1px solid var(--make-ai-internal-border);
|
|
277
285
|
display: grid;
|
|
278
286
|
gap: 8px;
|
|
@@ -458,6 +466,7 @@
|
|
|
458
466
|
}
|
|
459
467
|
|
|
460
468
|
.make-ai-assistant__body {
|
|
469
|
+
background: var(--make-ai-internal-bg);
|
|
461
470
|
grid-row: 2;
|
|
462
471
|
min-height: 0;
|
|
463
472
|
min-width: 0;
|
|
@@ -635,7 +644,7 @@
|
|
|
635
644
|
}
|
|
636
645
|
|
|
637
646
|
.make-ai-assistant__message--user .make-ai-assistant__message-sender {
|
|
638
|
-
color:
|
|
647
|
+
color: var(--make-ai-internal-text);
|
|
639
648
|
}
|
|
640
649
|
|
|
641
650
|
.make-ai-assistant__avatar--message,
|
|
@@ -673,10 +682,10 @@
|
|
|
673
682
|
}
|
|
674
683
|
|
|
675
684
|
.make-ai-assistant__message--user .make-ai-assistant__bubble {
|
|
676
|
-
background:
|
|
677
|
-
border: 1px solid
|
|
685
|
+
background: var(--make-ai-internal-user-message-bg);
|
|
686
|
+
border: 1px solid var(--make-ai-internal-user-message-bg);
|
|
678
687
|
border-radius: 16px 5px 16px 16px;
|
|
679
|
-
color:
|
|
688
|
+
color: var(--make-ai-internal-user-message-text);
|
|
680
689
|
font-size: var(--make-ai-internal-font-size-heading);
|
|
681
690
|
line-height: var(--make-ai-internal-line-height-heading);
|
|
682
691
|
padding: 10px 13px;
|
|
@@ -705,7 +714,7 @@
|
|
|
705
714
|
background: transparent;
|
|
706
715
|
border: 0;
|
|
707
716
|
border-left: 3px solid color-mix(in srgb, var(--make-ai-internal-accent) 68%, var(--make-ai-internal-border));
|
|
708
|
-
color:
|
|
717
|
+
color: var(--make-ai-internal-text);
|
|
709
718
|
display: block;
|
|
710
719
|
font-size: var(--make-ai-internal-font-size-heading);
|
|
711
720
|
font-weight: 720;
|
|
@@ -753,7 +762,7 @@
|
|
|
753
762
|
}
|
|
754
763
|
|
|
755
764
|
.make-ai-assistant__assistant-text strong {
|
|
756
|
-
color:
|
|
765
|
+
color: var(--make-ai-internal-text);
|
|
757
766
|
font-weight: 650;
|
|
758
767
|
}
|
|
759
768
|
|
|
@@ -761,7 +770,7 @@
|
|
|
761
770
|
background: color-mix(in srgb, var(--make-ai-internal-surface-strong) 78%, var(--make-ai-internal-bg));
|
|
762
771
|
border: 1px solid color-mix(in srgb, var(--make-ai-internal-border) 78%, transparent);
|
|
763
772
|
border-radius: 5px;
|
|
764
|
-
color:
|
|
773
|
+
color: var(--make-ai-internal-text);
|
|
765
774
|
font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;
|
|
766
775
|
font-size: 1em;
|
|
767
776
|
padding: .05rem .25rem;
|
|
@@ -837,7 +846,7 @@
|
|
|
837
846
|
|
|
838
847
|
.make-ai-assistant__markdown-table th {
|
|
839
848
|
background: color-mix(in srgb, var(--make-ai-internal-surface) 72%, var(--make-ai-internal-bg));
|
|
840
|
-
color:
|
|
849
|
+
color: var(--make-ai-internal-text);
|
|
841
850
|
font-weight: 680;
|
|
842
851
|
white-space: nowrap;
|
|
843
852
|
}
|
|
@@ -1219,7 +1228,7 @@
|
|
|
1219
1228
|
}
|
|
1220
1229
|
|
|
1221
1230
|
.make-ai-assistant__composer-region {
|
|
1222
|
-
background:
|
|
1231
|
+
background: var(--make-ai-internal-bg);
|
|
1223
1232
|
border-top: 1px solid var(--make-ai-internal-border);
|
|
1224
1233
|
grid-row: 3;
|
|
1225
1234
|
box-shadow: 0 -8px 18px color-mix(in srgb, var(--make-ai-internal-accent) 3%, transparent);
|
|
@@ -1252,8 +1261,8 @@
|
|
|
1252
1261
|
|
|
1253
1262
|
.make-ai-assistant__composer {
|
|
1254
1263
|
align-items: flex-end;
|
|
1255
|
-
background:
|
|
1256
|
-
border: 1px solid
|
|
1264
|
+
background: var(--make-ai-internal-surface);
|
|
1265
|
+
border: 1px solid var(--make-ai-internal-border);
|
|
1257
1266
|
border-radius: 15px;
|
|
1258
1267
|
display: flex;
|
|
1259
1268
|
gap: 9px;
|
|
@@ -1263,7 +1272,7 @@
|
|
|
1263
1272
|
}
|
|
1264
1273
|
|
|
1265
1274
|
.make-ai-assistant__composer:focus-within {
|
|
1266
|
-
background: var(--make-ai-internal-
|
|
1275
|
+
background: var(--make-ai-internal-surface);
|
|
1267
1276
|
border-color: color-mix(in srgb, var(--make-ai-internal-accent) 42%, var(--make-ai-internal-border));
|
|
1268
1277
|
box-shadow:
|
|
1269
1278
|
0 0 0 2px color-mix(in srgb, var(--make-ai-internal-accent) 10%, transparent),
|
|
@@ -1679,9 +1688,13 @@ button.make-ai-artifact__record:hover { background: var(--make-ai-internal-accen
|
|
|
1679
1688
|
.make-ai-assistant__drawer-resize-handle { display: none; }
|
|
1680
1689
|
.make-ai-assistant__launcher {
|
|
1681
1690
|
bottom: var(--make-ai-launcher-mobile-bottom, var(--make-ai-launcher-bottom, 16px));
|
|
1691
|
+
left: auto;
|
|
1692
|
+
right: var(--make-ai-launcher-mobile-right, var(--make-ai-launcher-right, 16px));
|
|
1693
|
+
top: auto;
|
|
1694
|
+
}
|
|
1695
|
+
.make-ai-assistant__launcher[data-launcher-position="bottom-left"] {
|
|
1682
1696
|
left: var(--make-ai-launcher-mobile-left, var(--make-ai-launcher-left, 16px));
|
|
1683
1697
|
right: auto;
|
|
1684
|
-
top: auto;
|
|
1685
1698
|
}
|
|
1686
1699
|
.make-ai-assistant__launcher[data-launcher-position="bottom-right"] {
|
|
1687
1700
|
left: auto;
|
package/package.json
CHANGED