@arronqzy/abuilder 1.1.39 → 1.1.41
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/README.md +62 -30
- package/dist/index.cjs +51 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.js +9 -6
- package/dist/index.js.map +1 -1
- package/dist/styles.css +324 -253
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ React 一站式编辑器。安装后渲染 `<App />`,就是完整的 Abuilder
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
当前版本见本包 `package.json`(设置菜单「关于」里显示的就是这个版本号)。本包 **1.1.39** 起补齐本地数据接口(蓝图库、执行日志、接口集合的读取与清理,`clearAbuilderStorage` 一次清空,`workspace:delete` 事件);**1.1.38** 起提供本地工作区清理接口(`listWorkspaceProjects` / `deleteWorkspaceProject` / `clearWorkspaceProjects`);**1.1.37** 起配套 chroma.js 主题配色、全系统国际化修复与问号图标式字段说明;**1.1.36** 起配套蓝图 Soft UI 节点样式;**1.1.35** 起配套接口集合、`{system?...}` 模版、JSON 节点错误高亮。完整中文手册见仓库 `docs/Abuilder使用文档与功能说明.docx`(适用版本表写在文首)。
|
|
7
|
+
当前版本见本包 `package.json`(设置菜单「关于」里显示的就是这个版本号)。本包 **1.1.41** 起配套 Soft UI 面板打磨、缩放恒定选框线宽与接口集合弹窗体验;**1.1.40** 起补齐宿主侧完整 CRUD(put / 命令式打开 / 事件 nameSpace / Vue 预览截图);**1.1.39** 起补齐本地数据接口(蓝图库、执行日志、接口集合的读取与清理,`clearAbuilderStorage` 一次清空,`workspace:delete` 事件);**1.1.38** 起提供本地工作区清理接口(`listWorkspaceProjects` / `deleteWorkspaceProject` / `clearWorkspaceProjects`);**1.1.37** 起配套 chroma.js 主题配色、全系统国际化修复与问号图标式字段说明;**1.1.36** 起配套蓝图 Soft UI 节点样式;**1.1.35** 起配套接口集合、`{system?...}` 模版、JSON 节点错误高亮。完整中文手册见仓库 `docs/Abuilder使用文档与功能说明.docx`(适用版本表写在文首)。
|
|
8
8
|
|
|
9
9
|
## 安装
|
|
10
10
|
|
|
@@ -64,7 +64,8 @@ createRoot(document.getElementById("root")!).render(<App locale="zh-CN" />);
|
|
|
64
64
|
| `nameSpace` | 隔离 IndexedDB;同一页多个 App 必须不同 | — |
|
|
65
65
|
| `previewSearch` | 预览 URL 查询串 | `window.location.search` |
|
|
66
66
|
| `preview` | `true` 只渲染预览页 | `false` |
|
|
67
|
-
| `initialWorkspace` | 完整工作区。不传则空白画布,**不会**自动打开 IndexedDB
|
|
67
|
+
| `initialWorkspace` | 完整工作区。不传则空白画布,**不会**自动打开 IndexedDB 里已有项目。传入且带 `id` 时,会默认同步写入 IndexedDB(本地已有更新的记录不会被旧数据覆盖),以便预览与「同步」可用 | — |
|
|
68
|
+
| `workspaceId` | 按 IndexedDB id 打开(不 remount)。与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开 | — |
|
|
68
69
|
|
|
69
70
|
```tsx
|
|
70
71
|
<App
|
|
@@ -95,10 +96,11 @@ URL 带 `?preview=online&projectId=<id>` 时进入预览,从 IndexedDB 读。
|
|
|
95
96
|
|
|
96
97
|
## 把工作区交给自己的后端
|
|
97
98
|
|
|
98
|
-
IndexedDB
|
|
99
|
+
IndexedDB 是编辑器自己的浏览器缓存。宿主仍应以自己的后端为准:
|
|
99
100
|
|
|
100
|
-
1.
|
|
101
|
-
2. 下次打开时校验 JSON,再交给 `initialWorkspace
|
|
101
|
+
1. 订阅创建和同步事件(`workspace:add` / `workspace:sync`),把回调里的完整对象写到自己的存储。
|
|
102
|
+
2. 下次打开时校验 JSON,再交给 `initialWorkspace`;编辑器会把这份工作区默认同步进 IndexedDB,之后「同步 / 预览」不会因本地缺记录报错。
|
|
103
|
+
3. 需要清理本地副本时,用导出的 `listWorkspaceProjects` / `deleteWorkspaceProject` / `clearWorkspaceProjects` / `clearAbuilderStorage`,不要直接操作 IndexedDB。
|
|
102
104
|
|
|
103
105
|
```tsx
|
|
104
106
|
import { useEffect, useState } from "react";
|
|
@@ -139,9 +141,13 @@ function HostApp() {
|
|
|
139
141
|
|------|------|----------|
|
|
140
142
|
| `workspace:add` | `AbuilderEvents.workspaceAdd` | 创建工作区成功 |
|
|
141
143
|
| `workspace:sync` | `AbuilderEvents.workspaceSync` | 同步工作区成功 |
|
|
142
|
-
| `workspace:delete` | `AbuilderEvents.workspaceDelete` | 删除工作区(界面删除,或调用 `deleteWorkspaceProject` / `clearWorkspaceProjects
|
|
144
|
+
| `workspace:delete` | `AbuilderEvents.workspaceDelete` | 删除工作区(界面删除,或调用 `deleteWorkspaceProject` / `clearWorkspaceProjects`) |
|
|
145
|
+
| `blueprint-library:changed` | `AbuilderEvents.blueprintLibraryChanged` | 蓝图库 put / delete / clear |
|
|
146
|
+
| `api-collection:upload-start` | `AbuilderEvents.apiCollectionUploadStart` | 开始上传接口集合 |
|
|
147
|
+
| `api-collection:upload-success` | `AbuilderEvents.apiCollectionUploadSuccess` | 上传接口集合成功 |
|
|
148
|
+
| `api-collection:changed` | `AbuilderEvents.apiCollectionChanged` | 接口集合 put / delete / clear |
|
|
143
149
|
|
|
144
|
-
`workspace:add` / `workspace:sync`
|
|
150
|
+
`workspace:add` / `workspace:sync` 的回调是 `WorkspaceData & { nameSpace }`:
|
|
145
151
|
|
|
146
152
|
| 字段 | 说明 |
|
|
147
153
|
|------|------|
|
|
@@ -153,8 +159,9 @@ function HostApp() {
|
|
|
153
159
|
| `blueprintMeta` | 蓝图名称、备注 |
|
|
154
160
|
| `productName` | 产物名称 |
|
|
155
161
|
| `titleIconDataUrl` | 标题图标(可选) |
|
|
162
|
+
| `nameSpace` | 所属命名空间;默认库为 `null` |
|
|
156
163
|
|
|
157
|
-
|
|
164
|
+
同页多个 App 时,用第三个参数过滤:`addEventSubscription(AbuilderEvents.workspaceSync, cb, { nameSpace: "my-app" })`。
|
|
158
165
|
|
|
159
166
|
## 校验和空工作区
|
|
160
167
|
|
|
@@ -185,42 +192,67 @@ createEmptyWorkspace({ name: "未命名", id: createWorkspaceProjectId() });
|
|
|
185
192
|
|
|
186
193
|
`initialWorkspace` 为空时,首次是空画布和空蓝图。侧栏仍可列出已保存项目,但要用户手动打开。
|
|
187
194
|
|
|
188
|
-
##
|
|
195
|
+
## 本地数据完整 CRUD
|
|
189
196
|
|
|
190
|
-
|
|
197
|
+
编辑器把四类数据存进 IndexedDB,按 `nameSpace` 隔离。公开 API 覆盖读写删清:
|
|
191
198
|
|
|
192
|
-
| 数据 |
|
|
193
|
-
|
|
194
|
-
| 工作区 | `listWorkspaceProjects` / `getWorkspaceProject` | `deleteWorkspaceProject`
|
|
195
|
-
| 蓝图库 | `listBlueprintLibrary` / `getBlueprintLibraryRecord` | `deleteBlueprintLibraryRecord`
|
|
196
|
-
|
|
|
197
|
-
| 接口集合 | `listApiCollectionRecords` | `deleteApiCollection`
|
|
199
|
+
| 数据 | Create / Update | Read | Delete |
|
|
200
|
+
|------|-----------------|------|--------|
|
|
201
|
+
| 工作区 | `putWorkspaceProject` / `upsertWorkspaceProject`(可选 `emitEvent: "add"\|"sync"`);或 UI 创建/同步 | `listWorkspaceProjects` / `getWorkspaceProject` | `deleteWorkspaceProject` / `clearWorkspaceProjects` |
|
|
202
|
+
| 蓝图库 | `putBlueprintLibraryRecord` | `listBlueprintLibrary` / `getBlueprintLibraryRecord` | `deleteBlueprintLibraryRecord` / `clearBlueprintLibrary` |
|
|
203
|
+
| 执行日志 | `putExecutionRunRecord` | `listExecutionRunRecords` / `getExecutionRunRecord` | `deleteExecutionRunRecord` / `clearAllExecutionRunRecords` / `purge*` / `trim*` |
|
|
204
|
+
| 接口集合 | `putApiCollection` / `upsertApiCollectionFromJson` | `listApiCollectionRecords` | `deleteApiCollection` / `clearApiCollections` |
|
|
198
205
|
|
|
199
206
|
```ts
|
|
200
207
|
import {
|
|
208
|
+
putWorkspaceProject,
|
|
201
209
|
listWorkspaceProjects,
|
|
202
210
|
deleteWorkspaceProject,
|
|
203
|
-
clearWorkspaceProjects,
|
|
204
211
|
clearAbuilderStorage,
|
|
212
|
+
putBlueprintLibraryRecord,
|
|
213
|
+
putApiCollection,
|
|
205
214
|
} from "@arronqzy/abuilder";
|
|
206
215
|
|
|
207
|
-
|
|
208
|
-
await
|
|
209
|
-
|
|
216
|
+
// 不挂载编辑器也能预热 IndexedDB(例如后台同步后端数据)
|
|
217
|
+
await putWorkspaceProject(parsedWorkspace, nameSpace);
|
|
218
|
+
// 需要顺带通知宿主后端时:
|
|
219
|
+
await putWorkspaceProject(parsedWorkspace, nameSpace, { emitEvent: "sync" });
|
|
210
220
|
|
|
211
|
-
// 一次清空四类数据,返回 { workspaces, blueprints, executionRuns, apiCollections } 各自的删除数量
|
|
212
221
|
const result = await clearAbuilderStorage(nameSpace);
|
|
213
222
|
```
|
|
214
223
|
|
|
215
|
-
-
|
|
216
|
-
-
|
|
217
|
-
-
|
|
218
|
-
|
|
219
|
-
|
|
224
|
+
- 所有存储函数的 `nameSpace` 要和 `<App nameSpace>` 一致;省略时操作默认库。
|
|
225
|
+
- `clearAbuilderStorage` 不动主题、字号、执行日志保留策略等偏好设置。
|
|
226
|
+
- 写入 / 删除工作区或蓝图库后,已挂载编辑器会自动刷新列表。
|
|
227
|
+
|
|
228
|
+
## 命令式打开 / 保存(不 remount)
|
|
229
|
+
|
|
230
|
+
挂载编辑器后,可用模块函数或 `ref`:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
import { useRef } from "react";
|
|
234
|
+
import {
|
|
235
|
+
App,
|
|
236
|
+
openWorkspace,
|
|
237
|
+
getCurrentWorkspace,
|
|
238
|
+
syncWorkspace,
|
|
239
|
+
type AbuilderViewHandle,
|
|
240
|
+
} from "@arronqzy/abuilder";
|
|
241
|
+
|
|
242
|
+
const ref = useRef<AbuilderViewHandle>(null);
|
|
243
|
+
|
|
244
|
+
<App ref={ref} nameSpace="my-app" workspaceId={selectedId} />;
|
|
245
|
+
|
|
246
|
+
await openWorkspace(selectedId, "my-app"); // 或 ref.current.openWorkspace(selectedId)
|
|
247
|
+
await syncWorkspace("my-app"); // 把当前编辑内容写入 IndexedDB + 发 workspace:sync
|
|
248
|
+
const draft = getCurrentWorkspace("my-app"); // 导出当前脏状态;无 active 时为 null
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
同页多个实例时务必传同一个 `nameSpace`。
|
|
220
252
|
|
|
221
253
|
## 预览缩略图
|
|
222
254
|
|
|
223
|
-
|
|
255
|
+
画布已经渲染且有内容时(React / Vue 均支持):
|
|
224
256
|
|
|
225
257
|
```ts
|
|
226
258
|
import { getPreviewSnapshot } from "@arronqzy/abuilder";
|
|
@@ -240,8 +272,6 @@ const thumbnail = await getPreviewSnapshot({
|
|
|
240
272
|
| `quality` | JPEG 0–1 | `0.92` |
|
|
241
273
|
| `backgroundColor` | 背景色 | `"#ffffff"` |
|
|
242
274
|
|
|
243
|
-
Vue 包没有这个函数。
|
|
244
|
-
|
|
245
275
|
## 还导出什么
|
|
246
276
|
|
|
247
277
|
一般宿主只用 `App`。需要拆开时:
|
|
@@ -255,10 +285,12 @@ import {
|
|
|
255
285
|
getPreviewSnapshot,
|
|
256
286
|
parseWorkspaceData,
|
|
257
287
|
createEmptyWorkspace,
|
|
288
|
+
openWorkspace,
|
|
289
|
+
getCurrentWorkspace,
|
|
258
290
|
} from "@arronqzy/abuilder";
|
|
259
291
|
```
|
|
260
292
|
|
|
261
|
-
类型:`WorkspaceData`、`WorkspaceProjectRecord`、`WorkspaceProjectListItem`、`WorkspaceDeleteEventPayload`、`AbuilderStorageClearResult`、`BlueprintLibraryListItem`、`BlueprintLibraryRecord`、`ExecutionRunRecord`、`ExecutionLogSettings`、`ApiCollectionRecord`、`AbuilderEventName`、`GetPreviewSnapshotOptions`、`ParseCheckResult`、`WorkspaceParseCheckResult`。
|
|
293
|
+
类型:`AbuilderViewHandle`、`WorkspaceData`、`WorkspaceProjectRecord`、`WorkspaceProjectListItem`、`WorkspaceDeleteEventPayload`、`AbuilderStorageClearResult`、`BlueprintLibraryListItem`、`BlueprintLibraryRecord`、`ExecutionRunRecord`、`ExecutionLogSettings`、`ApiCollectionRecord`、`UpsertApiCollectionInput`、`AbuilderEventName`、`GetPreviewSnapshotOptions`、`ParseCheckResult`、`WorkspaceParseCheckResult`。
|
|
262
294
|
|
|
263
295
|
## 本仓库里怎么预览
|
|
264
296
|
|
package/dist/index.cjs
CHANGED
|
@@ -10,7 +10,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
10
10
|
// package.json
|
|
11
11
|
var package_default = {
|
|
12
12
|
name: "@arronqzy/abuilder",
|
|
13
|
-
version: "1.1.
|
|
13
|
+
version: "1.1.41"};
|
|
14
14
|
|
|
15
15
|
// src/version.ts
|
|
16
16
|
var ABUILDER_PACKAGE_NAME = package_default.name;
|
|
@@ -30,7 +30,7 @@ function PreviewShell({ children }) {
|
|
|
30
30
|
}
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
var App = react.forwardRef(function App2({
|
|
34
34
|
className,
|
|
35
35
|
initialZoom,
|
|
36
36
|
defaultTheme = "dark",
|
|
@@ -38,8 +38,9 @@ function App({
|
|
|
38
38
|
previewSearch,
|
|
39
39
|
preview = false,
|
|
40
40
|
initialWorkspace = null,
|
|
41
|
+
workspaceId = null,
|
|
41
42
|
nameSpace = null
|
|
42
|
-
}) {
|
|
43
|
+
}, ref) {
|
|
43
44
|
const [localeState, setLocaleState] = react.useState(locale);
|
|
44
45
|
const effectiveLocale = locale ?? localeState;
|
|
45
46
|
const search = previewSearch ?? (typeof window !== "undefined" ? window.location.search : "");
|
|
@@ -74,9 +75,11 @@ function App({
|
|
|
74
75
|
return /* @__PURE__ */ jsxRuntime.jsx(ui.ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
75
76
|
reactView.ReactViewPanel,
|
|
76
77
|
{
|
|
78
|
+
ref,
|
|
77
79
|
className,
|
|
78
80
|
initialZoom,
|
|
79
81
|
initialWorkspace,
|
|
82
|
+
workspaceId,
|
|
80
83
|
locale: effectiveLocale,
|
|
81
84
|
onLocaleChange: setLocaleState,
|
|
82
85
|
nameSpace,
|
|
@@ -84,7 +87,7 @@ function App({
|
|
|
84
87
|
packageVersion: ABUILDER_VERSION
|
|
85
88
|
}
|
|
86
89
|
) });
|
|
87
|
-
}
|
|
90
|
+
});
|
|
88
91
|
|
|
89
92
|
Object.defineProperty(exports, "AbuilderEvents", {
|
|
90
93
|
enumerable: true,
|
|
@@ -130,6 +133,10 @@ Object.defineProperty(exports, "createEmptyWorkspace", {
|
|
|
130
133
|
enumerable: true,
|
|
131
134
|
get: function () { return reactView.createEmptyWorkspace; }
|
|
132
135
|
});
|
|
136
|
+
Object.defineProperty(exports, "createWorkspace", {
|
|
137
|
+
enumerable: true,
|
|
138
|
+
get: function () { return reactView.createWorkspace; }
|
|
139
|
+
});
|
|
133
140
|
Object.defineProperty(exports, "createWorkspaceProjectId", {
|
|
134
141
|
enumerable: true,
|
|
135
142
|
get: function () { return reactView.createWorkspaceProjectId; }
|
|
@@ -154,6 +161,10 @@ Object.defineProperty(exports, "getBlueprintLibraryRecord", {
|
|
|
154
161
|
enumerable: true,
|
|
155
162
|
get: function () { return reactView.getBlueprintLibraryRecord; }
|
|
156
163
|
});
|
|
164
|
+
Object.defineProperty(exports, "getCurrentWorkspace", {
|
|
165
|
+
enumerable: true,
|
|
166
|
+
get: function () { return reactView.getCurrentWorkspace; }
|
|
167
|
+
});
|
|
157
168
|
Object.defineProperty(exports, "getExecutionRunRecord", {
|
|
158
169
|
enumerable: true,
|
|
159
170
|
get: function () { return reactView.getExecutionRunRecord; }
|
|
@@ -182,6 +193,10 @@ Object.defineProperty(exports, "listWorkspaceProjects", {
|
|
|
182
193
|
enumerable: true,
|
|
183
194
|
get: function () { return reactView.listWorkspaceProjects; }
|
|
184
195
|
});
|
|
196
|
+
Object.defineProperty(exports, "openWorkspace", {
|
|
197
|
+
enumerable: true,
|
|
198
|
+
get: function () { return reactView.openWorkspace; }
|
|
199
|
+
});
|
|
185
200
|
Object.defineProperty(exports, "parseBlueprintData", {
|
|
186
201
|
enumerable: true,
|
|
187
202
|
get: function () { return reactView.parseBlueprintData; }
|
|
@@ -202,14 +217,46 @@ Object.defineProperty(exports, "purgeExecutionRunsOlderThan", {
|
|
|
202
217
|
enumerable: true,
|
|
203
218
|
get: function () { return reactView.purgeExecutionRunsOlderThan; }
|
|
204
219
|
});
|
|
220
|
+
Object.defineProperty(exports, "putApiCollection", {
|
|
221
|
+
enumerable: true,
|
|
222
|
+
get: function () { return reactView.putApiCollection; }
|
|
223
|
+
});
|
|
224
|
+
Object.defineProperty(exports, "putBlueprintLibraryRecord", {
|
|
225
|
+
enumerable: true,
|
|
226
|
+
get: function () { return reactView.putBlueprintLibraryRecord; }
|
|
227
|
+
});
|
|
228
|
+
Object.defineProperty(exports, "putExecutionRunRecord", {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
get: function () { return reactView.putExecutionRunRecord; }
|
|
231
|
+
});
|
|
232
|
+
Object.defineProperty(exports, "putWorkspaceProject", {
|
|
233
|
+
enumerable: true,
|
|
234
|
+
get: function () { return reactView.putWorkspaceProject; }
|
|
235
|
+
});
|
|
205
236
|
Object.defineProperty(exports, "readExecutionLogSettings", {
|
|
206
237
|
enumerable: true,
|
|
207
238
|
get: function () { return reactView.readExecutionLogSettings; }
|
|
208
239
|
});
|
|
240
|
+
Object.defineProperty(exports, "saveWorkspace", {
|
|
241
|
+
enumerable: true,
|
|
242
|
+
get: function () { return reactView.saveWorkspace; }
|
|
243
|
+
});
|
|
244
|
+
Object.defineProperty(exports, "syncWorkspace", {
|
|
245
|
+
enumerable: true,
|
|
246
|
+
get: function () { return reactView.syncWorkspace; }
|
|
247
|
+
});
|
|
209
248
|
Object.defineProperty(exports, "trimExecutionRunRecordsToMax", {
|
|
210
249
|
enumerable: true,
|
|
211
250
|
get: function () { return reactView.trimExecutionRunRecordsToMax; }
|
|
212
251
|
});
|
|
252
|
+
Object.defineProperty(exports, "upsertApiCollectionFromJson", {
|
|
253
|
+
enumerable: true,
|
|
254
|
+
get: function () { return reactView.upsertApiCollectionFromJson; }
|
|
255
|
+
});
|
|
256
|
+
Object.defineProperty(exports, "upsertWorkspaceProject", {
|
|
257
|
+
enumerable: true,
|
|
258
|
+
get: function () { return reactView.upsertWorkspaceProject; }
|
|
259
|
+
});
|
|
213
260
|
Object.defineProperty(exports, "validateBlueprintData", {
|
|
214
261
|
enumerable: true,
|
|
215
262
|
get: function () { return reactView.validateBlueprintData; }
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":["jsx","useState","useMemo","parseOnlinePreviewSearchParams","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":["jsx","forwardRef","App","useState","useMemo","parseOnlinePreviewSearchParams","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAAA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAMC,gBAAiD,CAAA,SAASC,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAAC,aAAA;AAAA,IACpB,MAAMC,yCAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAL,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAN,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACGN,cAAA,CAAAO,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAP,cAAA;AAAA,IAACQ,wBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.cjs","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.41\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react from 'react';
|
|
2
2
|
import { Locale } from '@arronqzy/i18n';
|
|
3
3
|
export { Locale } from '@arronqzy/i18n';
|
|
4
|
-
import { WorkspaceProjectRecord } from '@arronqzy/react-view';
|
|
5
|
-
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, AbuilderStorageClearResult, ApiCollectionRecord, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, BlueprintLibraryListItem, BlueprintLibraryRecord, ExecutionLogSettings, ExecutionRunRecord, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceDeleteEventPayload, WorkspaceParseCheckResult, WorkspaceProjectListItem, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, readExecutionLogSettings, trimExecutionRunRecordsToMax, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
4
|
+
import { WorkspaceProjectRecord, AbuilderViewHandle } from '@arronqzy/react-view';
|
|
5
|
+
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, AbuilderStorageClearResult, AbuilderViewHandle, AddEventSubscriptionOptions, ApiCollectionChangedEventPayload, ApiCollectionRecord, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, BlueprintLibraryChangedEventPayload, BlueprintLibraryListItem, BlueprintLibraryRecord, ExecutionLogSettings, ExecutionRunRecord, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, PutWorkspaceProjectOptions, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, UpsertApiCollectionInput, UpsertApiCollectionResult, WorkspaceAddEventPayload, WorkspaceData, WorkspaceDeleteEventPayload, WorkspaceParseCheckResult, WorkspaceProjectListItem, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getCurrentWorkspace, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, openWorkspace, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, putApiCollection, putBlueprintLibraryRecord, putExecutionRunRecord, putWorkspaceProject, readExecutionLogSettings, saveWorkspace, syncWorkspace, trimExecutionRunRecordsToMax, upsertApiCollectionFromJson, upsertWorkspaceProject, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
6
6
|
|
|
7
7
|
type AbuilderAppProps = {
|
|
8
8
|
className?: string;
|
|
@@ -29,6 +29,11 @@ type AbuilderAppProps = {
|
|
|
29
29
|
* 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。
|
|
30
30
|
*/
|
|
31
31
|
initialWorkspace?: WorkspaceProjectRecord | null;
|
|
32
|
+
/**
|
|
33
|
+
* 按 IndexedDB id 打开工作区(不 remount)。
|
|
34
|
+
* 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。
|
|
35
|
+
*/
|
|
36
|
+
workspaceId?: string | null;
|
|
32
37
|
/**
|
|
33
38
|
* 隔离 IndexedDB / localStorage / BroadcastChannel。
|
|
34
39
|
* 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。
|
|
@@ -36,7 +41,7 @@ type AbuilderAppProps = {
|
|
|
36
41
|
*/
|
|
37
42
|
nameSpace?: string | null;
|
|
38
43
|
};
|
|
39
|
-
declare
|
|
44
|
+
declare const App: react.ForwardRefExoticComponent<AbuilderAppProps & react.RefAttributes<AbuilderViewHandle>>;
|
|
40
45
|
|
|
41
46
|
/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */
|
|
42
47
|
declare const ABUILDER_PACKAGE_NAME: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react from 'react';
|
|
2
2
|
import { Locale } from '@arronqzy/i18n';
|
|
3
3
|
export { Locale } from '@arronqzy/i18n';
|
|
4
|
-
import { WorkspaceProjectRecord } from '@arronqzy/react-view';
|
|
5
|
-
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, AbuilderStorageClearResult, ApiCollectionRecord, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, BlueprintLibraryListItem, BlueprintLibraryRecord, ExecutionLogSettings, ExecutionRunRecord, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceDeleteEventPayload, WorkspaceParseCheckResult, WorkspaceProjectListItem, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, readExecutionLogSettings, trimExecutionRunRecordsToMax, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
4
|
+
import { WorkspaceProjectRecord, AbuilderViewHandle } from '@arronqzy/react-view';
|
|
5
|
+
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, AbuilderStorageClearResult, AbuilderViewHandle, AddEventSubscriptionOptions, ApiCollectionChangedEventPayload, ApiCollectionRecord, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, BlueprintLibraryChangedEventPayload, BlueprintLibraryListItem, BlueprintLibraryRecord, ExecutionLogSettings, ExecutionRunRecord, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, PutWorkspaceProjectOptions, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, UpsertApiCollectionInput, UpsertApiCollectionResult, WorkspaceAddEventPayload, WorkspaceData, WorkspaceDeleteEventPayload, WorkspaceParseCheckResult, WorkspaceProjectListItem, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getCurrentWorkspace, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, openWorkspace, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, putApiCollection, putBlueprintLibraryRecord, putExecutionRunRecord, putWorkspaceProject, readExecutionLogSettings, saveWorkspace, syncWorkspace, trimExecutionRunRecordsToMax, upsertApiCollectionFromJson, upsertWorkspaceProject, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
6
6
|
|
|
7
7
|
type AbuilderAppProps = {
|
|
8
8
|
className?: string;
|
|
@@ -29,6 +29,11 @@ type AbuilderAppProps = {
|
|
|
29
29
|
* 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。
|
|
30
30
|
*/
|
|
31
31
|
initialWorkspace?: WorkspaceProjectRecord | null;
|
|
32
|
+
/**
|
|
33
|
+
* 按 IndexedDB id 打开工作区(不 remount)。
|
|
34
|
+
* 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。
|
|
35
|
+
*/
|
|
36
|
+
workspaceId?: string | null;
|
|
32
37
|
/**
|
|
33
38
|
* 隔离 IndexedDB / localStorage / BroadcastChannel。
|
|
34
39
|
* 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。
|
|
@@ -36,7 +41,7 @@ type AbuilderAppProps = {
|
|
|
36
41
|
*/
|
|
37
42
|
nameSpace?: string | null;
|
|
38
43
|
};
|
|
39
|
-
declare
|
|
44
|
+
declare const App: react.ForwardRefExoticComponent<AbuilderAppProps & react.RefAttributes<AbuilderViewHandle>>;
|
|
40
45
|
|
|
41
46
|
/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */
|
|
42
47
|
declare const ABUILDER_PACKAGE_NAME: string;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useState, useMemo } from 'react';
|
|
1
|
+
import { forwardRef, useState, useMemo } from 'react';
|
|
2
2
|
import { ThemeProvider } from '@arronqzy/ui';
|
|
3
3
|
import { parseOnlinePreviewSearchParams, ReactViewOnlinePreview, ReactViewPanel } from '@arronqzy/react-view';
|
|
4
|
-
export { AbuilderEvents, I18nProvider, ReactViewOnlinePreview, ReactViewPanel, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, readExecutionLogSettings, trimExecutionRunRecordsToMax, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
4
|
+
export { AbuilderEvents, I18nProvider, ReactViewOnlinePreview, ReactViewPanel, addEventSubscription, clearAbuilderStorage, clearAllExecutionRunRecords, clearApiCollections, clearBlueprintLibrary, clearWorkspaceProjects, createEmptyWorkspace, createWorkspace, createWorkspaceProjectId, deleteApiCollection, deleteBlueprintLibraryRecord, deleteExecutionRunRecord, deleteWorkspaceProject, getBlueprintLibraryRecord, getCurrentWorkspace, getExecutionRunRecord, getPreviewSnapshot, getWorkspaceProject, listApiCollectionRecords, listBlueprintLibrary, listExecutionRunRecords, listWorkspaceProjects, openWorkspace, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, purgeExecutionRunsOlderThan, putApiCollection, putBlueprintLibraryRecord, putExecutionRunRecord, putWorkspaceProject, readExecutionLogSettings, saveWorkspace, syncWorkspace, trimExecutionRunRecordsToMax, upsertApiCollectionFromJson, upsertWorkspaceProject, validateBlueprintData, validateViewData, validateWorkspaceData, writeExecutionLogSettings } from '@arronqzy/react-view';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
// src/App.tsx
|
|
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
9
9
|
// package.json
|
|
10
10
|
var package_default = {
|
|
11
11
|
name: "@arronqzy/abuilder",
|
|
12
|
-
version: "1.1.
|
|
12
|
+
version: "1.1.41"};
|
|
13
13
|
|
|
14
14
|
// src/version.ts
|
|
15
15
|
var ABUILDER_PACKAGE_NAME = package_default.name;
|
|
@@ -29,7 +29,7 @@ function PreviewShell({ children }) {
|
|
|
29
29
|
}
|
|
30
30
|
);
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
var App = forwardRef(function App2({
|
|
33
33
|
className,
|
|
34
34
|
initialZoom,
|
|
35
35
|
defaultTheme = "dark",
|
|
@@ -37,8 +37,9 @@ function App({
|
|
|
37
37
|
previewSearch,
|
|
38
38
|
preview = false,
|
|
39
39
|
initialWorkspace = null,
|
|
40
|
+
workspaceId = null,
|
|
40
41
|
nameSpace = null
|
|
41
|
-
}) {
|
|
42
|
+
}, ref) {
|
|
42
43
|
const [localeState, setLocaleState] = useState(locale);
|
|
43
44
|
const effectiveLocale = locale ?? localeState;
|
|
44
45
|
const search = previewSearch ?? (typeof window !== "undefined" ? window.location.search : "");
|
|
@@ -73,9 +74,11 @@ function App({
|
|
|
73
74
|
return /* @__PURE__ */ jsx(ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsx(
|
|
74
75
|
ReactViewPanel,
|
|
75
76
|
{
|
|
77
|
+
ref,
|
|
76
78
|
className,
|
|
77
79
|
initialZoom,
|
|
78
80
|
initialWorkspace,
|
|
81
|
+
workspaceId,
|
|
79
82
|
locale: effectiveLocale,
|
|
80
83
|
onLocaleChange: setLocaleState,
|
|
81
84
|
nameSpace,
|
|
@@ -83,7 +86,7 @@ function App({
|
|
|
83
86
|
packageVersion: ABUILDER_VERSION
|
|
84
87
|
}
|
|
85
88
|
) });
|
|
86
|
-
}
|
|
89
|
+
});
|
|
87
90
|
|
|
88
91
|
export { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION, App };
|
|
89
92
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":["App"],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAM,UAAiD,CAAA,SAASA,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAA,OAAA;AAAA,IACpB,MAAM,+BAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACG,GAAA,CAAA,aAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.js","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.41\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
|