wechen-agent-editor-v1 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +141 -5
  2. package/dist/WechenAgentEditor.d.ts +38 -5
  3. package/dist/WechenAgentEditor.d.ts.map +1 -1
  4. package/dist/WechenAgentEditorContext.d.ts +6 -1
  5. package/dist/WechenAgentEditorContext.d.ts.map +1 -1
  6. package/dist/backendWorkflowJson.d.ts.map +1 -1
  7. package/dist/config/componentLibraryConfig.d.ts +1 -1
  8. package/dist/flow/flowGraphMutations.d.ts +21 -0
  9. package/dist/flow/flowGraphMutations.d.ts.map +1 -0
  10. package/dist/flow/flowValidation.d.ts +24 -0
  11. package/dist/flow/flowValidation.d.ts.map +1 -0
  12. package/dist/flow/nodes/CardNode.d.ts.map +1 -1
  13. package/dist/flow/nodes/MainAgentNode.d.ts.map +1 -1
  14. package/dist/flow/nodes/NodeHandlesLayer.d.ts +6 -0
  15. package/dist/flow/nodes/NodeHandlesLayer.d.ts.map +1 -0
  16. package/dist/flow/nodes/PillNode.d.ts.map +1 -1
  17. package/dist/flow/nodes/flowNodeDefaultContent.d.ts +11 -0
  18. package/dist/flow/nodes/flowNodeDefaultContent.d.ts.map +1 -0
  19. package/dist/flow/nodes/flowNodeHandleLayout.d.ts +4 -0
  20. package/dist/flow/nodes/flowNodeHandleLayout.d.ts.map +1 -0
  21. package/dist/flowTypes.d.ts +50 -1
  22. package/dist/flowTypes.d.ts.map +1 -1
  23. package/dist/hostEditorConfig.d.ts +6 -0
  24. package/dist/hostEditorConfig.d.ts.map +1 -1
  25. package/dist/i18n/LocaleContext.d.ts +20 -0
  26. package/dist/i18n/LocaleContext.d.ts.map +1 -0
  27. package/dist/i18n/buildReactFlowAriaLabelConfig.d.ts +4 -0
  28. package/dist/i18n/buildReactFlowAriaLabelConfig.d.ts.map +1 -0
  29. package/dist/i18n/defaultLocaleMessages.d.ts +6 -0
  30. package/dist/i18n/defaultLocaleMessages.d.ts.map +1 -0
  31. package/dist/i18n/exportLocaleBundle.d.ts +24 -0
  32. package/dist/i18n/exportLocaleBundle.d.ts.map +1 -0
  33. package/dist/i18n/fallbackLocaleZh.d.ts +4 -0
  34. package/dist/i18n/fallbackLocaleZh.d.ts.map +1 -0
  35. package/dist/i18n/localeKeys.d.ts +47 -0
  36. package/dist/i18n/localeKeys.d.ts.map +1 -0
  37. package/dist/i18n/resolveLocaleMessage.d.ts +19 -0
  38. package/dist/i18n/resolveLocaleMessage.d.ts.map +1 -0
  39. package/dist/i18n/shellLocaleZh.d.ts +4 -0
  40. package/dist/i18n/shellLocaleZh.d.ts.map +1 -0
  41. package/dist/i18n/translateLibraryGroupTitle.d.ts +3 -0
  42. package/dist/i18n/translateLibraryGroupTitle.d.ts.map +1 -0
  43. package/dist/i18n/validateLocaleMessagesCompleteness.d.ts +8 -0
  44. package/dist/i18n/validateLocaleMessagesCompleteness.d.ts.map +1 -0
  45. package/dist/index.d.ts +15 -3
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +6717 -6376
  48. package/dist/index.js.map +1 -1
  49. package/dist/mergeClassNames.d.ts +3 -0
  50. package/dist/mergeClassNames.d.ts.map +1 -0
  51. package/dist/panels/ComponentLibraryPanel.d.ts.map +1 -1
  52. package/dist/panels/EdgeConfigPanel.d.ts.map +1 -1
  53. package/dist/panels/NodeConfigPanel.d.ts.map +1 -1
  54. package/dist/panels/RightConfigPanel.d.ts.map +1 -1
  55. package/dist/style.css +1 -1
  56. package/dist/wechenAgentConfigPanel.d.ts +6 -0
  57. package/dist/wechenAgentConfigPanel.d.ts.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -75,6 +75,17 @@ export function AgentPage() {
75
75
 
76
76
  **有损字段**:导出会去掉 RF 运行期字段与部分边样式;导入会按边 `id` 重新分配 `sourceHandle`/`targetHandle`。详见类型 **`WechenBackendWorkflowJson`** 的 JSDoc。
77
77
 
78
+ **节点类型映射**(画布 ↔ DTO):
79
+
80
+ | 画布 | DTO `nodes[].type` | 说明 |
81
+ |------|-------------------|------|
82
+ | `pill` | `start` | 入口 |
83
+ | `mainAgent` | `agent` | 主 Agent |
84
+ | `card`(默认) | `task` | 通用任务 |
85
+ | `card` + `data.backendNodeType` | `condition` / `api` / `script` | 扩展类型;导入后写回 `backendNodeType` |
86
+
87
+ 自定义节点若需稳定 DTO 类型,请在 `node.data` 设置 **`backendNodeType`**(取值与 `WechenBackendWorkflowNodeType` 一致)。
88
+
78
89
  ```tsx
79
90
  import {
80
91
  WechenAgentEditor,
@@ -103,6 +114,33 @@ const flow = importBackendWorkflowToFlow(dtoFromApi);
103
114
 
104
115
  本仓库 **playground** 提供对照:`npm run dev:minimal` 为最小页;默认 `npm run dev` 为带场景 JSON 与工具栏的完整演示(见 `playground/README.md`)。
105
116
 
117
+ ### 编辑器与 Agent 运行时
118
+
119
+ 本包是 **编排 UI + 序列化 + ref API**,**不包含** Agent / LLM **执行引擎**。推荐分层:
120
+
121
+ ```
122
+ WechenAgentEditor(编排) → onSave / exportBackendWorkflowJson → 宿主持久化 → 你们的运行时调度
123
+ ```
124
+
125
+ - **`onTestRun` / `ref.testRun()`**:仅触发宿主回调,具体执行由宿主实现。
126
+ - **`validateWechenAgentFlow(flow)`**:纯函数图校验(默认不阻断保存);可在 `onBeforeSave` 内返回 `false` 拦截。
127
+ - **ref 增删改查**:`getSnapshot` / `patchNodeData` / `removeNode` / `addNode` / `addNodeFromLibrary` / `addEdge` / `connect` / `replaceFlow`(见 `WechenAgentEditorRef`)。
128
+
129
+ ```tsx
130
+ import { validateWechenAgentFlow } from "wechen-agent-editor-v1";
131
+
132
+ <WechenAgentEditor
133
+ onBeforeSave={(snap) => {
134
+ const { valid, issues } = validateWechenAgentFlow(snap.flow);
135
+ if (!valid) {
136
+ console.warn(issues);
137
+ return false;
138
+ }
139
+ }}
140
+ onSave={(s) => { /* POST exportBackendWorkflowJson(s, meta) */ }}
141
+ />
142
+ ```
143
+
106
144
  ---
107
145
 
108
146
  ## 安装
@@ -154,12 +192,106 @@ import "wechen-agent-editor-v1/style.css";
154
192
 
155
193
  antd 5 为 CSS-in-JS,请用 **`ConfigProvider`** 包裹应用(与官方用法一致)。
156
194
 
195
+ ### 嵌入 flex 布局
196
+
197
+ 在 **列方向 flex** 页面中,推荐与 playground 相同的外层结构:父级定高(或 `100vh`),编辑器所在子项使用 **`flex: 1`**、**`minHeight: 0`**,编辑器根节点会 **`flex: 1`** 并 **`height/width: 100%`** 填满该区域。
198
+
199
+ ```tsx
200
+ <div style={{ height: "100vh", display: "flex", flexDirection: "column", minHeight: 0 }}>
201
+ <YourToolbar />
202
+ <div style={{ flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }}>
203
+ <WechenAgentEditor {...props} />
204
+ </div>
205
+ </div>
206
+ ```
207
+
208
+ **行为说明**:自 **1.1.x** 起,画布区域 **不再** 默认施加 `min-height: 400px`;若需要最小可视高度,请对编辑器传入 **`minHeight`** prop,或在页面级容器设置 `min-height`。
209
+
210
+ ### 骨架 CSS 类名(自定义样式)
211
+
212
+ 加载 **`wechen-agent-editor-v1/style.css`** 后,可用下列稳定类名覆盖布局分区样式(与根 **`className`** 合并,不会替换默认类):
213
+
214
+ | 类名 | 区域 |
215
+ | --- | --- |
216
+ | `wechen-agent-editor` | 根布局 |
217
+ | `wechen-agent-editor--reading` | 阅读模式根修饰 |
218
+ | `wechen-agent-editor__workspace` | 工作区(顶栏 + 主体) |
219
+ | `wechen-agent-editor__header` | 顶栏 |
220
+ | `wechen-agent-editor__body` | 主体行(左栏 + 画布 + 右栏) |
221
+ | `wechen-agent-editor__library-sider` | 左侧组件库 Sider |
222
+ | `wechen-agent-editor__library-panel` | 组件库面板内容 |
223
+ | `wechen-agent-editor__main` | 中间主内容 |
224
+ | `wechen-agent-editor__canvas` / `wechen-agent-canvas` | 画布壳(二者同元素,后者为兼容别名) |
225
+ | `wechen-agent-editor__config-sider` | 右侧配置 Sider |
226
+ | `wechen-agent-editor__config-panel` | 配置面板内容 |
227
+
228
+ ```css
229
+ /* 例:自定义顶栏背景 */
230
+ .wechen-agent-editor__header {
231
+ background: #fafafa !important;
232
+ }
233
+ ```
234
+
235
+ ### 国际化(壳层 vs 宿主自定义)
236
+
237
+ 编辑器是 **编排基座**:画布节点由 **`renderFlowNode`**、右侧内容区由 **`renderConfigPanel` / `renderNodeConfig`** 自定义时,**业务文案由宿主自行 i18n**。包内 **`localeMessages`** 仅覆盖 **壳层**(顶栏按钮、左右栏分区标题、组件库搜索/空状态、画布缩放控件等;经 React Flow **`ariaLabelConfig`** 注入)。
238
+
239
+ #### 语言契约(`localeMessages` 大 JSON)
240
+
241
+ | 条件 | 编辑器显示语言 |
242
+ | --- | --- |
243
+ | **未传** `localeMessages` | **始终内置中文**(`DEFAULT_ZH_CN`),与 antd `ConfigProvider`、浏览器语言 **无关** |
244
+ | **已传** `localeMessages` | **仅以该 JSON 为准**;缺失 key **不回退中文**,显示 key 字符串 |
245
+ | 存在 `localeTranslate` | **最高优先级**(便于对接 i18next) |
246
+
247
+ 语言包 **key 为默认中文**(与界面中文一致),便于对照扩展,例如 `{ "保存": "Save", "配置": "Settings" }`。代码中可用 **`LOCALE_KEYS`** / **`FALLBACK_LOCALE_KEYS`** 常量(值为中文 key,如 `LOCALE_KEYS.HEADER_SAVE === "保存"`)。
248
+
249
+ 生产推荐:从 **`exportWechenAgentEditorLocaleBundle()`** 复制整表,将 value 译为目标语言后传入;或用 **`mergeWechenAgentEditorLocaleMessages(译文)`** 在宿主侧生成完整大 JSON。
250
+
251
+ ```tsx
252
+ import {
253
+ WechenAgentEditor,
254
+ LOCALE_KEYS,
255
+ mergeWechenAgentEditorLocaleMessages,
256
+ validateLocaleMessagesCompleteness,
257
+ } from "wechen-agent-editor-v1";
258
+
259
+ // 中文(默认):不传 localeMessages
260
+ <WechenAgentEditor renderConfigPanel={(ctx) => <MyPanel {...ctx} />} />;
261
+
262
+ // 英文:key 为中文,value 为目标语言
263
+ const enPack = mergeWechenAgentEditorLocaleMessages({
264
+ 保存: "Save",
265
+ 配置: "Settings",
266
+ 组件库: "Component library",
267
+ // 或使用常量: [LOCALE_KEYS.HEADER_SAVE]: "Save",
268
+ });
269
+ validateLocaleMessagesCompleteness(enPack);
270
+
271
+ <WechenAgentEditor localeMessages={enPack} />;
272
+ ```
273
+
274
+ ```tsx
275
+ // antd 与编辑器语言独立配置
276
+ <ConfigProvider locale={antdLocale}>
277
+ <WechenAgentEditor localeMessages={wechenEditorLocalePack} />
278
+ </ConfigProvider>
279
+ ```
280
+
281
+ - **`exportWechenAgentEditorShellLocaleBundle('zh-CN')`**:仅壳层 key(生产常用子集)。
282
+ - **`exportWechenAgentEditorFallbackLocaleBundle`**:内置回退面板 key(未传 `renderConfigPanel` 时)。
283
+ - **`exportWechenAgentEditorLocaleBundle`**:壳层 + 回退 **完整** key 表(推荐作翻译模板)。
284
+ - **`configSiderTitle`**:可完全覆盖右侧栏外框标题。
285
+ - **`validateLocaleMessagesCompleteness`**:检查大 JSON 是否缺 key(开发期 `console.warn`)。
286
+
287
+ 完整契约演示见 `playground/src/App.tsx`(中文不传包;English 传 `playgroundLocaleEnFull.ts`)。
288
+
157
289
  ### 嵌入尺寸、`readOnly` 与 `readingMode`
158
290
 
159
- 根组件默认 **`height` / `width` 为 `100%`**,可通过 **`className` / `style`** 透传;可选 **`minHeight`**。请保证父级链路上有**明确高度**(如 flex 子项 `flex:1` + `minHeight:0`、固定 `height` 等),否则中间画布可能无法撑满。
291
+ 根组件默认 **`height` / `width` 为 `100%`**,**`flex: 1`**、**`minHeight: 0`**(便于 flex 父级);可通过 **`className` / `style`** 透传;可选 **`minHeight`**。请保证父级链路上有**明确高度**(见上文 flex 示例),否则中间画布可能无法撑满。
160
292
 
161
293
  - **`readOnly`**:禁止对图的增删改(拖入、连线、删除键、拖动节点等),仍可使用平移/缩放查看。**`readOnly`** 与 **`readingMode`** 会出现在 **`renderConfigPanel` / `renderNodeConfig`** 的入参中,便于对表单设 **`disabled`**。
162
- - **`readingMode`**:**仅展示中间流程画布**(隐藏顶栏与左右栏),并**禁用选中**与一切改图,适合文档内嵌、大屏预览等纯展示场景(隐含只读)。
294
+ - **`readingMode`**:**仅展示中间流程画布**(隐藏顶栏与左右栏),并**禁用选中**与一切改图,适合文档内嵌、大屏预览等纯展示场景(隐含只读)。根节点会附加 **`wechen-agent-editor--reading`**。
163
295
 
164
296
  ### 删除守卫(`onBeforeRemoveNode` / `onBeforeRemoveEdge`)
165
297
 
@@ -187,7 +319,7 @@ L1 工厂同样支持:`buildWechenAgentEditorProps({ onBeforeRemoveNode: ... }
187
319
 
188
320
  ### 组件库 legacy 接线桩(`flowHandles`,可选)
189
321
 
190
- **已弃用优先**:编排默认以 **四边感应区** 为准。**`libraryGroups`** 中每项仍可设置 **`flowHandles`** 以兼容旧版「声明桩位」:`FlowHandleSpec[]` 或 **`mode: 'even'`** 自动均分。拖入后写入 **`data.flowHandles`**;**`card` / `mainAgent`** 在 **`flowHandles` 展开非空** 时仍走声明桩渲染。**`renderFlowNode`** 自定义整节点时由宿主自行决定接线方式。类型见 **`expandFlowHandlesConfig`**、**`findComponentLibraryItem`** 等导出。
322
+ **已弃用优先**:编排默认以 **四边感应区** 为准。**`libraryGroups`** 中每项仍可设置 **`flowHandles`** 以兼容旧版「声明桩位」:`FlowHandleSpec[]` 或 **`mode: 'even'`** 自动均分。拖入后写入 **`data.flowHandles`**;**`card` / `mainAgent`** 在 **`flowHandles` 展开非空** 时仍走声明桩渲染。**`renderFlowNode`** 仅自定义节点 **内容区**(字段与样式);内置外壳与接线桩(感应区或 **`flowHandles`**)**始终保留**,**勿** 在 `renderFlowNode` 内放置 `Handle`。类型见 **`expandFlowHandlesConfig`**、**`findComponentLibraryItem`** 等导出。
191
323
 
192
324
  ### Monaco Worker
193
325
 
@@ -202,7 +334,8 @@ L1 工厂同样支持:`buildWechenAgentEditorProps({ onBeforeRemoveNode: ... }
202
334
  - **连线**:从节点的 source Handle 拖到 target Handle;选中边可在右侧调整动画与**执行方向**等。**执行方向**与 **`source` → `target`** 一致:箭头在 **目标** 端;选「反向」会 **交换源与目标**(及 handle),不再依赖仅反转 dash 的持久化字段。历史 **`edge.data.wechenFlowDirection: 'reverse'`** 在 **`normalizeWechenAgentFlowJson` / `cloneWechenAgentFlow` / `parseWechenAgentFlowJson`** 中 **幂等归一** 为交换端点并清除该键。宿主也可调用 **`swapWechenFlowEdgeEndpoints(edge)`** 得到与内置面板一致的 **`patchEdge`** 补丁。
203
335
  - **数据合并**:节点 `data` 的更新遵循导出的 **`mergeNodeData`**(对象深度合并,数组在补丁中出现时整段替换)。`patchNode` / ref 的 **`patchNodeData`** 将补丁合并进 `node.data`;**`patchEdge`** 为边的顶层浅合并。
204
336
  - **自定义右侧面板**:可选 **`renderConfigPanel`**(节点与连线统一入口)或 **`renderNodeConfig`**;同时存在时以 `renderConfigPanel` 为准(返回 `undefined` 时回退内置)。
205
- - **顶栏按钮**:可选 **`renderHeaderActions`**,入参含与默认行为一致的 **`save`** / **`testRun`** **`editorRef`**。
337
+ - **顶栏左侧**:可选 **`renderHeaderLeading`**,入参含当前解析标题 **`title`**(与 **`ref.getTitle()`** 一致)及 **`editorRef`**;未传时显示默认 `Title`。改标题数据仍用 **`title` prop** 或 **`replaceFlow`**。
338
+ - **顶栏右侧**:可选 **`renderHeaderActions`**,入参含与默认行为一致的 **`save`** / **`testRun`** 及 **`editorRef`**。左右可 **同时** 自定义。Playground:`?tab=header-leading`、`?tab=header-actions`。
206
339
 
207
340
  完整类型与符号列表以 **`src/index.ts`** 的导出为准。
208
341
 
@@ -217,6 +350,9 @@ L1 工厂同样支持:`buildWechenAgentEditorProps({ onBeforeRemoveNode: ... }
217
350
  | Monaco | 已在首屏前完成 **worker 引导**(见上文「Monaco Worker」) |
218
351
  | 空画布 | **未传 `initialFlow`** 时中间画布无预置节点;业务示例需 **`cloneWechenAgentFlow(defaultInitialFlow)`** 或 `ref.replaceFlow(...)` 显式注入 |
219
352
  | 烟测 | 拖入节点、四向连线、`readOnly` / `readingMode`、保存或 `getSnapshot` 取流 |
353
+ | ref 增图 | `ref.addNodeFromLibrary` / `ref.connect` 与拖放、连线行为一致 |
354
+ | DTO 往返 | `exportBackendWorkflowJson` → `importBackendWorkflowToFlow` → `replaceFlow`;`condition`/`api`/`script` 经 `data.backendNodeType` |
355
+ | 图校验 | `validateWechenAgentFlow`;可选 `onBeforeSave` 拦截 |
220
356
 
221
357
  ---
222
358
 
@@ -225,7 +361,7 @@ L1 工厂同样支持:`buildWechenAgentEditorProps({ onBeforeRemoveNode: ... }
225
361
  ```bash
226
362
  npm install
227
363
  npm install --prefix playground
228
- npm run dev # 完整 playground(场景 JSON + 工具栏)
364
+ npm run dev # Playground 文档站(分 Tab 演示;ref 全表见 ?tab=ref-api,见 playground/README.md)
229
365
  npm run dev:minimal # 仅最小宿主集成(对照 README「快速开始」)
230
366
  ```
231
367
 
@@ -1,11 +1,17 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
2
  import { ComponentLibraryGroup, WechenAgentComponentLibraryList } from './config/componentLibraryConfig';
3
- import { WechenAgentEditorRef, WechenAgentFlowJson, WechenAgentHeaderActionsRenderContext, WechenAgentSnapshot, WechenBeforeRemoveEdgeFn, WechenBeforeRemoveNodeFn } from './flowTypes';
3
+ import { WechenAgentEditorRef, WechenAgentFlowJson, WechenAgentHeaderActionsRenderContext, WechenAgentHeaderLeadingRenderContext, WechenAgentSnapshot, WechenBeforeRemoveEdgeFn, WechenBeforeRemoveNodeFn, WechenBeforeSaveFn } from './flowTypes';
4
4
  import { WechenAgentRenderFlowNodeFn } from './WechenAgentEditorContext';
5
5
  import { WechenAgentRenderNodeConfigFn } from './panels/NodeConfigPanel';
6
6
  import { WechenAgentRenderConfigPanelFn } from './wechenAgentConfigPanel';
7
+ import { WechenAgentEditorLocaleMessages, WechenAgentEditorLocaleTranslateFn } from './i18n/defaultLocaleMessages';
8
+ /** 编排语义:图为可执行 AI 流程结构;节点为功能模块,连线为执行顺序/控制流(持久化 `flow` 供运行时消费)。 */
9
+ export type WechenConfigSiderTitleContext = {
10
+ kind: "node" | "edge" | null;
11
+ };
12
+ export type WechenConfigSiderTitleFn = (ctx: WechenConfigSiderTitleContext) => string;
7
13
  export interface WechenAgentEditorProps {
8
- /** 顶栏标题;不传则使用 `initialFlow.title`,再没有则使用内置 `DEFAULT_TITLE` */
14
+ /** 顶栏标题;不传则使用 `initialFlow.title`,再没有则使用 `LOCALE_KEYS.HEADER_DEFAULT_TITLE`(默认「Agent 编辑」) */
9
15
  title?: string;
10
16
  /**
11
17
  * 初始画布,结构与保存时 **`WechenAgentSnapshot.flow`** 完全一致(`WechenAgentFlowJson`:`title?` + `nodes` + `edges`)。
@@ -22,8 +28,8 @@ export interface WechenAgentEditorProps {
22
28
  */
23
29
  mapComponentLibraryList?: (list: WechenAgentComponentLibraryList) => WechenAgentComponentLibraryList;
24
30
  /**
25
- * 自定义画布节点渲染;参数为 React Flow `NodeProps`(含 `id`、`data`、`type`、`selected` 等)。
26
- * 若使用自定义节点,请自行放置 `Handle` 以保留连线能力。
31
+ * 自定义画布节点 **内容区**(字段与样式);参数为 React Flow `NodeProps`。
32
+ * 内置外壳与接线桩(四边感应或 `data.flowHandles`)始终保留;**勿** 在返回值内放置 `Handle`。
27
33
  */
28
34
  renderFlowNode?: WechenAgentRenderFlowNodeFn;
29
35
  /**
@@ -38,7 +44,13 @@ export interface WechenAgentEditorProps {
38
44
  */
39
45
  renderConfigPanel?: WechenAgentRenderConfigPanelFn;
40
46
  /**
41
- * 自定义顶栏 **右侧** 操作区(左侧 CRAFT + 标题不变)。未传时显示默认「保存」「测试运行」。
47
+ * 自定义顶栏 **左侧** leading 区(默认 `Title` + 解析后的 `headerTitle`)。
48
+ * 返回 `null` / `undefined` 时左侧为空白(不显示默认标题)。
49
+ * 改标题数据仍用 `title` prop / `replaceFlow`;本回调仅负责呈现。
50
+ */
51
+ renderHeaderLeading?: (ctx: WechenAgentHeaderLeadingRenderContext) => ReactNode;
52
+ /**
53
+ * 自定义顶栏 **右侧** 操作区。未传时显示默认「保存」「测试运行」。
42
54
  * 返回 `null` / `undefined` 时右侧为空白(不显示默认按钮)。
43
55
  */
44
56
  renderHeaderActions?: (ctx: WechenAgentHeaderActionsRenderContext) => ReactNode;
@@ -57,6 +69,11 @@ export interface WechenAgentEditorProps {
57
69
  * `readOnly` / `readingMode` 下 **不调用** 本回调。
58
70
  */
59
71
  onBeforeRemoveEdge?: WechenBeforeRemoveEdgeFn;
72
+ /**
73
+ * 保存前回调;同步返回 **`false`** 时取消该次保存(顶栏与 `ref.save()`)。
74
+ * `readOnly` / `readingMode` 下 **不调用**。
75
+ */
76
+ onBeforeSave?: WechenBeforeSaveFn;
60
77
  /**
61
78
  * 为真时禁止对图的增删改(拖入、连线、删除键、拖动节点等);仍允许平移/缩放。
62
79
  * 标志会传入 `renderConfigPanel` / `renderNodeConfig` 便于禁用表单。
@@ -73,6 +90,22 @@ export interface WechenAgentEditorProps {
73
90
  className?: string;
74
91
  /** 透传根 `Layout` 的 `style`(在默认宽高之后合并,便于覆盖) */
75
92
  style?: CSSProperties;
93
+ /**
94
+ * 编辑器壳层 + 内置回退路径的 **语言包大 JSON**(**key 为默认中文**,如 `"保存"`、`"配置"`)。
95
+ *
96
+ * - **未传**:始终显示内置中文(`DEFAULT_ZH_CN`),与 antd `ConfigProvider`、浏览器语言无关。
97
+ * - **已传**:仅以本对象为准;缺失 key 显示 key 字符串,**不回退**中文。
98
+ * 生产请传入与 `exportWechenAgentEditorLocaleBundle()` 同 key 集合的完整译文,
99
+ * 或先用 `mergeWechenAgentEditorLocaleMessages` 在宿主侧合并成整包。
100
+ *
101
+ * 自定义 `renderConfigPanel` / `renderFlowNode` 内业务文案由宿主自行 i18n。
102
+ */
103
+ localeMessages?: WechenAgentEditorLocaleMessages;
104
+ /** 优先于 `localeMessages`;`defaultText` 来自 `DEFAULT_ZH_CN[key]`。 */
105
+ localeTranslate?: WechenAgentEditorLocaleTranslateFn;
106
+ /** 覆盖右侧栏外框标题;未传时使用 `LOCALE_KEYS.SIDER_CONFIG_TITLE`(默认「配置」)。 */
107
+ configSiderTitle?: string | WechenConfigSiderTitleFn;
76
108
  }
109
+ export type { WechenAgentEditorLocaleMessages, WechenAgentEditorLocaleTranslateFn, } from './i18n/defaultLocaleMessages';
77
110
  export declare const WechenAgentEditor: import('react').ForwardRefExoticComponent<WechenAgentEditorProps & import('react').RefAttributes<WechenAgentEditorRef>>;
78
111
  //# sourceMappingURL=WechenAgentEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WechenAgentEditor.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditor.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAa,SAAS,EAAa,MAAM,OAAO,CAAC;AAe5E,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,iCAAiC,CAAC;AA0BzC,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qCAAqC,EACrC,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAU/E,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,yDAAyD;IACzD,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACxC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,IAAI,EAAE,+BAA+B,KAClC,+BAA+B,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IACjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;IACnD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,qCAAqC,KAAK,SAAS,CAAC;IAChF,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAmkBD,eAAO,MAAM,iBAAiB,yHAyE7B,CAAC"}
1
+ {"version":3,"file":"WechenAgentEditor.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditor.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAa,SAAS,EAAa,MAAM,OAAO,CAAC;AAc5E,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,iCAAiC,CAAC;AAuBzC,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qCAAqC,EACrC,qCAAqC,EACrC,mBAAmB,EAEnB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAI/E,OAAO,KAAK,EACV,+BAA+B,EAC/B,kCAAkC,EACnC,MAAM,8BAA8B,CAAC;AAMtC,iEAAiE;AAEjE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,6BAA6B,KAAK,MAAM,CAAC;AAEtF,MAAM,WAAW,sBAAsB;IACrC,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,yDAAyD;IACzD,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACxC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,IAAI,EAAE,+BAA+B,KAClC,+BAA+B,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IACjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;IACnD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,qCAAqC,KAAK,SAAS,CAAC;IAChF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,qCAAqC,KAAK,SAAS,CAAC;IAChF,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,+BAA+B,CAAC;IACjD,kEAAkE;IAClE,eAAe,CAAC,EAAE,kCAAkC,CAAC;IACrD,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAAC;CACtD;AAED,YAAY,EACV,+BAA+B,EAC/B,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AAyqBtC,eAAO,MAAM,iBAAiB,yHA4F7B,CAAC"}
@@ -1,8 +1,13 @@
1
1
  import { NodeProps } from '@xyflow/react';
2
2
  import { ReactNode } from 'react';
3
+ /**
4
+ * 自定义画布节点 **内容区**(字段展示与样式)。
5
+ * 内置节点外壳、选中态与接线桩(`ZoneHandles` / `DeclaredHandles`)由包保留;
6
+ * **勿** 在返回值内放置 `@xyflow/react` `Handle`。
7
+ */
3
8
  export type WechenAgentRenderFlowNodeFn = (props: NodeProps) => ReactNode;
4
9
  export interface WechenAgentEditorRenderContextValue {
5
- /** 自定义画布节点外观;未设置时使用内置 MainAgent / Card / Pill 节点 UI */
10
+ /** 自定义节点内容区;未设置时使用内置默认字段块 */
6
11
  renderFlowNode?: WechenAgentRenderFlowNodeFn;
7
12
  }
8
13
  export declare const WechenAgentEditorRenderContext: import('react').Context<WechenAgentEditorRenderContextValue | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"WechenAgentEditorContext.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditorContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;AAE1E,MAAM,WAAW,mCAAmC;IAClD,uDAAuD;IACvD,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C;AAED,eAAO,MAAM,8BAA8B,qEACsB,CAAC;AAElE,wBAAgB,0BAA0B,IAAI,mCAAmC,CAEhF"}
1
+ {"version":3,"file":"WechenAgentEditorContext.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditorContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;AAE1E,MAAM,WAAW,mCAAmC;IAClD,6BAA6B;IAC7B,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C;AAED,eAAO,MAAM,8BAA8B,qEACsB,CAAC;AAElE,wBAAgB,0BAA0B,IAAI,mCAAmC,CAEhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"backendWorkflowJson.d.ts","sourceRoot":"","sources":["../src/backendWorkflowJson.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI/G;;GAEG;AACH,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAE1D,2CAA2C;AAC3C,MAAM,MAAM,6BAA6B,GACrC,OAAO,GACP,OAAO,GACP,MAAM,GACN,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAEb,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,6BAA6B,CAAC;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,KAAK,EAAE,yBAAyB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA4HD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,EAChD,IAAI,EAAE,yBAAyB,GAC9B,yBAAyB,CAY3B;AAiDD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,yBAAyB,GAAG,mBAAmB,CAgB/F;AAED,sCAAsC;AACtC,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,yBAAyB,CAyC9F"}
1
+ {"version":3,"file":"backendWorkflowJson.d.ts","sourceRoot":"","sources":["../src/backendWorkflowJson.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI/G;;GAEG;AACH,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAE1D,2CAA2C;AAC3C,MAAM,MAAM,6BAA6B,GACrC,OAAO,GACP,OAAO,GACP,MAAM,GACN,WAAW,GACX,KAAK,GACL,QAAQ,CAAC;AAgCb,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,6BAA6B,CAAC;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,KAAK,EAAE,yBAAyB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+HD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,EAChD,IAAI,EAAE,yBAAyB,GAC9B,yBAAyB,CAY3B;AA2DD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,yBAAyB,GAAG,mBAAmB,CAgB/F;AAED,sCAAsC;AACtC,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,yBAAyB,CAyC9F"}
@@ -31,7 +31,7 @@ export interface ComponentLibraryItem {
31
31
  addButtonSlot?: ReactNode | null;
32
32
  /**
33
33
  * @deprecated 默认节点优先使用 **左右感应区** 动态接线(见 README);仅当需兼容旧版声明桩时保留。
34
- * 拖入画布后写入 `data.flowHandles`;使用 `renderFlowNode` 覆盖整节点时由宿主自行决定。
34
+ * 拖入画布后写入 `data.flowHandles`;与 `renderFlowNode` 可并存(桩由包渲染,自定义仅替换内容区)。
35
35
  */
36
36
  flowHandles?: FlowHandlesConfig;
37
37
  }
@@ -0,0 +1,21 @@
1
+ import { Connection, Edge, Node } from '@xyflow/react';
2
+ import { ComponentLibraryGroup } from '../config/componentLibraryConfig';
3
+ export interface CreateNodeFromLibraryItemOptions {
4
+ groupKey: string;
5
+ itemKey: string;
6
+ position: {
7
+ x: number;
8
+ y: number;
9
+ };
10
+ id?: string;
11
+ }
12
+ /**
13
+ * 由组件库条目构造节点(与画布拖放一致)。非法 groupKey/itemKey 返回 `null`。
14
+ */
15
+ export declare function createNodeFromLibraryItem(libraryGroups: ComponentLibraryGroup[], options: CreateNodeFromLibraryItemOptions): Node | null;
16
+ export type NodeLookupFn = (id: string) => Node | undefined;
17
+ /**
18
+ * 由连接构造边(与画布 `onConnect` 一致)。非法连接或端点不存在返回 `null`。
19
+ */
20
+ export declare function createEdgeFromConnection(connection: Connection, getNode: NodeLookupFn, edgeId?: string): Edge | null;
21
+ //# sourceMappingURL=flowGraphMutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowGraphMutations.d.ts","sourceRoot":"","sources":["../../src/flow/flowGraphMutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,qBAAqB,EAAE,EACtC,OAAO,EAAE,gCAAgC,GACxC,IAAI,GAAG,IAAI,CAoBb;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;AAE5D;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,GAAG,IAAI,CAoBb"}
@@ -0,0 +1,24 @@
1
+ import { WechenAgentFlowJson } from '../flowTypes';
2
+ export type WechenFlowValidationSeverity = "error" | "warning";
3
+ export interface WechenFlowValidationIssue {
4
+ ruleId: string;
5
+ severity: WechenFlowValidationSeverity;
6
+ message: string;
7
+ nodeId?: string;
8
+ edgeId?: string;
9
+ }
10
+ export interface WechenFlowValidationResult {
11
+ valid: boolean;
12
+ issues: WechenFlowValidationIssue[];
13
+ }
14
+ export interface ValidateWechenAgentFlowOptions {
15
+ /** 检查是否存在入口类节点(pill 或 `data.backendNodeType === 'start'`) */
16
+ checkMissingStart?: boolean;
17
+ /** 检查非入口节点是否完全无边连接 */
18
+ checkOrphanNodes?: boolean;
19
+ }
20
+ /**
21
+ * 对画布 flow 做轻量合法性检查(纯函数,不阻断保存除非宿主使用 `onBeforeSave`)。
22
+ */
23
+ export declare function validateWechenAgentFlow(flow: WechenAgentFlowJson, options?: ValidateWechenAgentFlowOptions): WechenFlowValidationResult;
24
+ //# sourceMappingURL=flowValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowValidation.d.ts","sourceRoot":"","sources":["../../src/flow/flowValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,4BAA4B,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,8BAA8B;IAC7C,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAeD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE,8BAA8B,GACvC,0BAA0B,CAgE5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"CardNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/CardNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CA+CxC"}
1
+ {"version":3,"file":"CardNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/CardNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CA2CxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MainAgentNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/MainAgentNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,2CA2D7C"}
1
+ {"version":3,"file":"MainAgentNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/MainAgentNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,2CAiD7C"}
@@ -0,0 +1,6 @@
1
+ import { FlowHandlesConfig } from '../../config/flowHandleTypes';
2
+ export declare function NodeHandlesLayer({ nodeId, flowHandles, }: {
3
+ nodeId: string;
4
+ flowHandles?: FlowHandlesConfig;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=NodeHandlesLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeHandlesLayer.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/NodeHandlesLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAKtE,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,2CAMA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PillNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/PillNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CAuBxC"}
1
+ {"version":3,"file":"PillNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/PillNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CAsBxC"}
@@ -0,0 +1,11 @@
1
+ import { MainAgentNodeData, SimpleNodeData } from '../../flowTypes';
2
+ export declare function MainAgentDefaultFields({ data }: {
3
+ data: MainAgentNodeData;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ export declare function CardDefaultFields({ data }: {
6
+ data: SimpleNodeData;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ export declare function PillDefaultFields({ data }: {
9
+ data: SimpleNodeData;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=flowNodeDefaultContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowNodeDefaultContent.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/flowNodeDefaultContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,2CAW3E;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,2CAEnE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,2CAEnE"}
@@ -0,0 +1,4 @@
1
+ import { FlowHandlesConfig, FlowHandleSpec } from '../../config/flowHandleTypes';
2
+ export declare function getExpandedFlowHandleSpecs(flowHandles: FlowHandlesConfig | undefined): FlowHandleSpec[];
3
+ export declare function usesDeclaredFlowHandles(flowHandles: FlowHandlesConfig | undefined): boolean;
4
+ //# sourceMappingURL=flowNodeHandleLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowNodeHandleLayout.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/flowNodeHandleLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGtF,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,iBAAiB,GAAG,SAAS,GACzC,cAAc,EAAE,CAKlB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,iBAAiB,GAAG,SAAS,GACzC,OAAO,CAET"}
@@ -1,5 +1,5 @@
1
1
  import { RefObject } from 'react';
2
- import { Edge, FitViewOptions, Node, Viewport, ViewportHelperFunctionOptions } from '@xyflow/react';
2
+ import { Connection, Edge, FitViewOptions, Node, Viewport, ViewportHelperFunctionOptions } from '@xyflow/react';
3
3
  import { FlowHandlesConfig } from './config/flowHandleTypes';
4
4
  /** 删除守卫回调返回值:`false` 拒绝;`true` / `undefined` / `void` 允许。 */
5
5
  export type WechenDeleteGuardResult = boolean | void;
@@ -13,6 +13,28 @@ export type WechenBeforeRemoveNodeFn = (node: Node) => WechenDeleteGuardResult;
13
13
  * 因删除节点而 **级联移除** 的边 **不会** 触发本回调。
14
14
  */
15
15
  export type WechenBeforeRemoveEdgeFn = (edge: Edge) => WechenDeleteGuardResult;
16
+ /**
17
+ * 保存前宿主回调。同步返回 **`false`** 取消该次保存(顶栏保存与 `ref.save()` 均生效)。
18
+ * `readOnly` / `readingMode` 下 **不调用** 本回调。
19
+ */
20
+ export type WechenBeforeSaveFn = (snapshot: WechenAgentSnapshot) => WechenDeleteGuardResult;
21
+ /** `ref.addNodeFromLibrary` 入参 */
22
+ export interface WechenAddNodeFromLibraryOptions {
23
+ groupKey: string;
24
+ itemKey: string;
25
+ position?: {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ id?: string;
30
+ }
31
+ /** `ref.connect` 入参 */
32
+ export interface WechenConnectOptions {
33
+ source: string;
34
+ target: string;
35
+ sourceHandle?: string;
36
+ targetHandle?: string;
37
+ }
16
38
  /**
17
39
  * 画布完整结构(初始值与持久化):`title` + `nodes` + `edges`。
18
40
  * **`initialFlow` prop** 与 **`WechenAgentSnapshot.flow`**(以及 `flowJson` 反序列化结果)为同一形状,可互换使用。
@@ -60,6 +82,18 @@ export interface WechenAgentSnapshot {
60
82
  */
61
83
  flowJson: string;
62
84
  }
85
+ /**
86
+ * 传给 `renderHeaderLeading` 的上下文:提供当前解析标题与 `editorRef`,便于自定义顶栏左侧品牌/标题区。
87
+ */
88
+ export interface WechenAgentHeaderLeadingRenderContext {
89
+ /** 与顶栏默认标题、`ref.getTitle()` 一致的当前解析标题 */
90
+ title: string;
91
+ /**
92
+ * 与 `<WechenAgentEditor ref={...} />` 为同一 ref 对象(推荐对象 ref)。
93
+ * 首帧或 StrictMode 下 `current` 可能为 `null`,应在事件或 `useEffect` 内使用。
94
+ */
95
+ editorRef: RefObject<WechenAgentEditorRef | null>;
96
+ }
63
97
  /**
64
98
  * 传给 `renderHeaderActions` 的上下文:语义化操作与宿主 `ref` 一致,便于自定义顶栏右侧时调用。
65
99
  */
@@ -136,5 +170,20 @@ export interface WechenAgentEditorRef {
136
170
  removeEdge(edgeId: string): void;
137
171
  /** 与 `getSnapshot().flowJson` 相同,便于仅要字符串时使用 */
138
172
  getFlowJson(): string;
173
+ /**
174
+ * 从组件库创建节点(与拖放一致)。`readOnly` / `readingMode` 下返回 `null`。
175
+ * 非法 `groupKey` / `itemKey` 或 id 冲突时返回 `null`。
176
+ */
177
+ addNodeFromLibrary(options: WechenAddNodeFromLibraryOptions): Node | null;
178
+ /**
179
+ * 插入节点。id 已存在或只读时返回 `null`。
180
+ */
181
+ addNode(node: Node): Node | null;
182
+ /**
183
+ * 创建边(与画布连线一致)。非法连接或只读时返回 `null`。
184
+ */
185
+ addEdge(connection: Connection): Edge | null;
186
+ /** `addEdge` 的便捷封装 */
187
+ connect(options: WechenConnectOptions): Edge | null;
139
188
  }
140
189
  //# sourceMappingURL=flowTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flowTypes.d.ts","sourceRoot":"","sources":["../src/flowTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flowTypes.d.ts","sourceRoot":"","sources":["../src/flowTypes.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ export interface WechenHostEditorConfig {
32
32
  onTestRun?: WechenAgentEditorProps["onTestRun"];
33
33
  onBeforeRemoveNode?: WechenAgentEditorProps["onBeforeRemoveNode"];
34
34
  onBeforeRemoveEdge?: WechenAgentEditorProps["onBeforeRemoveEdge"];
35
+ onBeforeSave?: WechenAgentEditorProps["onBeforeSave"];
35
36
  /**
36
37
  * 完整覆盖左侧组件库。与 {@link library} 二选一:**本字段优先**;
37
38
  * 设置后忽略 `library`。
@@ -43,7 +44,12 @@ export interface WechenHostEditorConfig {
43
44
  renderFlowNode?: WechenAgentEditorProps["renderFlowNode"];
44
45
  renderNodeConfig?: WechenAgentEditorProps["renderNodeConfig"];
45
46
  renderConfigPanel?: WechenAgentEditorProps["renderConfigPanel"];
47
+ renderHeaderLeading?: WechenAgentEditorProps["renderHeaderLeading"];
46
48
  renderHeaderActions?: WechenAgentEditorProps["renderHeaderActions"];
49
+ /** 见 {@link WechenAgentEditorProps.localeMessages}:未传=中文;已传=语言包大 JSON。 */
50
+ localeMessages?: WechenAgentEditorProps["localeMessages"];
51
+ localeTranslate?: WechenAgentEditorProps["localeTranslate"];
52
+ configSiderTitle?: WechenAgentEditorProps["configSiderTitle"];
47
53
  }
48
54
  /**
49
55
  * 将 {@link WechenHostEditorConfig} 展开为可直接 `<WechenAgentEditor {...props} />` 的 props。
@@ -1 +1 @@
1
- {"version":3,"file":"hostEditorConfig.d.ts","sourceRoot":"","sources":["../src/hostEditorConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,iCAAiC,CAAC;AAEnG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,sCAAsC;AACtC,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAClE,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAClE;;;OAGG;IACH,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACxC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,uBAAuB,CAAC,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAChE,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;CACrE;AAwDD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,sBAAsB,GAAG,sBAAsB,CA2BlG"}
1
+ {"version":3,"file":"hostEditorConfig.d.ts","sourceRoot":"","sources":["../src/hostEditorConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,iCAAiC,CAAC;AAEnG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,sCAAsC;AACtC,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChD,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAClE,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAClE,YAAY,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACtD;;;OAGG;IACH,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACxC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,uBAAuB,CAAC,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAChE,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;IACpE,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;IACpE,0EAA0E;IAC1E,cAAc,CAAC,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,eAAe,CAAC,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;CAC/D;AAwDD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,sBAAsB,GAAG,sBAAsB,CAkClG"}
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ import { WechenAgentEditorLocaleMessages, WechenAgentEditorLocaleTranslateFn } from './defaultLocaleMessages';
3
+ export interface EditorLocaleContextValue {
4
+ t: (key: string) => string;
5
+ messages: Readonly<Record<string, string>>;
6
+ }
7
+ export interface EditorLocaleProviderProps {
8
+ /**
9
+ * 目标语言的大 JSON(**key 为默认中文**,见 `LOCALE_KEYS` / `exportWechenAgentEditorLocaleBundle`)。
10
+ * 未传 → 内置中文;已传 → 仅以该对象为准(见 `resolveLocaleMessage`)。
11
+ */
12
+ localeMessages?: WechenAgentEditorLocaleMessages;
13
+ localeTranslate?: WechenAgentEditorLocaleTranslateFn;
14
+ children: ReactNode;
15
+ }
16
+ /** @internal 供测试与 Provider 共用 */
17
+ export declare function createEditorLocaleContextValue({ localeMessages, localeTranslate, }: EditorLocaleProviderProps): EditorLocaleContextValue;
18
+ export declare function EditorLocaleProvider({ localeMessages, localeTranslate, children, }: EditorLocaleProviderProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function useEditorLocale(): EditorLocaleContextValue;
20
+ //# sourceMappingURL=LocaleContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocaleContext.d.ts","sourceRoot":"","sources":["../../src/i18n/LocaleContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,KAAK,EACV,+BAA+B,EAC/B,kCAAkC,EACnC,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,wBAAwB;IACvC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5C;AAOD,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,+BAA+B,CAAC;IACjD,eAAe,CAAC,EAAE,kCAAkC,CAAC;IACrD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,iCAAiC;AACjC,wBAAgB,8BAA8B,CAAC,EAC7C,cAAc,EACd,eAAe,GAChB,EAAE,yBAAyB,GAAG,wBAAwB,CAYtD;AAED,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,eAAe,EACf,QAAQ,GACT,EAAE,yBAAyB,2CAS3B;AAED,wBAAgB,eAAe,IAAI,wBAAwB,CAE1D"}
@@ -0,0 +1,4 @@
1
+ import { AriaLabelConfig } from '@xyflow/react';
2
+ /** 将编辑器壳层 `t()` 映射为 React Flow `ariaLabelConfig`(画布缩放等控件)。 */
3
+ export declare function buildReactFlowAriaLabelConfig(t: (key: string) => string): Partial<AriaLabelConfig>;
4
+ //# sourceMappingURL=buildReactFlowAriaLabelConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildReactFlowAriaLabelConfig.d.ts","sourceRoot":"","sources":["../../src/i18n/buildReactFlowAriaLabelConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,8DAA8D;AAC9D,wBAAgB,6BAA6B,CAC3C,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GACzB,OAAO,CAAC,eAAe,CAAC,CAO1B"}
@@ -0,0 +1,6 @@
1
+ import { WechenAgentEditorLocaleKey } from './localeKeys';
2
+ export declare const DEFAULT_ZH_CN: Record<WechenAgentEditorLocaleKey, string>;
3
+ /** 语言包:key 为默认中文(见 `LOCALE_KEYS`);value 为目标语言文案。 */
4
+ export type WechenAgentEditorLocaleMessages = Partial<Record<WechenAgentEditorLocaleKey, string>>;
5
+ export type WechenAgentEditorLocaleTranslateFn = (key: string, defaultText: string) => string | undefined;
6
+ //# sourceMappingURL=defaultLocaleMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultLocaleMessages.d.ts","sourceRoot":"","sources":["../../src/i18n/defaultLocaleMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAGpE,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,+BAA+B,GAAG,OAAO,CACnD,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAC3C,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,CAC/C,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,CAAC"}