@arronqzy/abuilder 1.1.34 → 1.1.37
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 +84 -134
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +584 -61
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
# @arronqzy/abuilder
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
React 一站式编辑器。安装后渲染 `<App />`,就是完整的 Abuilder:物料画布、蓝图、工作区、在线预览和浏览器内 AI 助手。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+

|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **蓝图编辑**:节点连线、调试执行、蓝图库与执行日志
|
|
9
|
-
- **工作区**:多项目、IndexedDB 持久化、导入导出
|
|
10
|
-
- **在线预览**:独立预览页,支持 URL 参数或外部工作区数据
|
|
11
|
-
- **宿主集成**:事件订阅、预览快照、外部工作区加载与预览/编辑模式切换
|
|
7
|
+
当前版本见本包 `package.json`(设置菜单「关于」里显示的就是这个版本号)。本包 **1.1.37** 起配套 chroma.js 主题配色、全系统国际化修复与问号图标式字段说明;**1.1.36** 起配套蓝图 Soft UI 节点样式;**1.1.35** 起配套接口集合、`{system?...}` 模版、JSON 节点错误高亮。完整中文手册见仓库 `docs/Abuilder使用文档与功能说明.docx`(适用版本表写在文首)。
|
|
12
8
|
|
|
13
9
|
## 安装
|
|
14
10
|
|
|
15
11
|
```bash
|
|
16
|
-
npm install @arronqzy/abuilder react react-dom
|
|
17
|
-
# 或
|
|
18
12
|
pnpm add @arronqzy/abuilder react react-dom
|
|
19
13
|
```
|
|
20
14
|
|
|
21
|
-
|
|
15
|
+
需要 React 18+。容器建议撑满高度(样式里已经处理 `#root` / `#app`)。
|
|
22
16
|
|
|
23
|
-
|
|
17
|
+
### Vite 必须加插件
|
|
18
|
+
|
|
19
|
+
宿主用 Vite 打包 `<App />` 时,在 `vite.config.ts` 注册:
|
|
24
20
|
|
|
25
21
|
```ts
|
|
22
|
+
import { defineConfig } from "vite";
|
|
26
23
|
import { webllmAssistant } from "@arronqzy/abuilder/vite";
|
|
27
24
|
|
|
28
25
|
export default defineConfig({
|
|
@@ -30,67 +27,78 @@ export default defineConfig({
|
|
|
30
27
|
});
|
|
31
28
|
```
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
从 `@arronqzy/abuilder/vite` 导入,不要从 `@arronqzy/webllm-assistant/vite` 导入。pnpm 下后者常常不是宿主的直接依赖,配置加载阶段会 `ERR_MODULE_NOT_FOUND`。
|
|
31
|
+
|
|
32
|
+
不加这个插件,Vite 5 转换 `@mlc-ai/web-llm` 时会在 `stripLiteral` 里栈溢出。Webpack / Umi **不要**导入这个 vite 插件,也不要写 `@mlc-ai/web-llm?url`。
|
|
34
33
|
|
|
35
|
-
##
|
|
34
|
+
## 最小用法
|
|
36
35
|
|
|
37
36
|
```tsx
|
|
38
37
|
import { createRoot } from "react-dom/client";
|
|
39
38
|
import { App } from "@arronqzy/abuilder";
|
|
40
39
|
import "@arronqzy/abuilder/styles.css";
|
|
41
40
|
|
|
42
|
-
createRoot(document.getElementById("root")!).render(<App />);
|
|
41
|
+
createRoot(document.getElementById("root")!).render(<App locale="zh-CN" />);
|
|
43
42
|
```
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
用户打开后会看到:
|
|
45
|
+
|
|
46
|
+
- 顶栏:文件、编辑、视图、蓝图、设置、创建/保存工作区、AI 助手
|
|
47
|
+
- 左侧:物料(图表、文本、表格、几何、三维、媒体)和节点树
|
|
48
|
+
- 中间:无限画布,带标尺、缩放、多选
|
|
49
|
+
- 右侧:选中节点的配置;没选中时是空状态
|
|
50
|
+
- 底部:图层
|
|
51
|
+
|
|
52
|
+
打开蓝图后上下分屏:
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
|
52
|
-
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
## App 参数
|
|
57
|
+
|
|
58
|
+
| 参数 | 说明 | 默认 |
|
|
59
|
+
|------|------|------|
|
|
60
|
+
| `className` | 根节点 class | — |
|
|
61
|
+
| `initialZoom` | 初始缩放 | `1` |
|
|
62
|
+
| `defaultTheme` | `"dark"` / `"light"` | `"dark"` |
|
|
63
|
+
| `locale` | `"zh-CN"` / `"en-US"`;省略则 localStorage → 浏览器 → 中文 | — |
|
|
64
|
+
| `nameSpace` | 隔离 IndexedDB;同一页多个 App 必须不同 | — |
|
|
65
|
+
| `previewSearch` | 预览 URL 查询串 | `window.location.search` |
|
|
66
|
+
| `preview` | `true` 只渲染预览页 | `false` |
|
|
67
|
+
| `initialWorkspace` | 完整工作区。不传则空白画布,**不会**自动打开 IndexedDB 里已有项目 | — |
|
|
57
68
|
|
|
58
69
|
```tsx
|
|
59
70
|
<App
|
|
60
71
|
className="h-screen"
|
|
61
72
|
defaultTheme="dark"
|
|
62
|
-
initialZoom={1}
|
|
63
73
|
locale="zh-CN"
|
|
64
|
-
|
|
74
|
+
nameSpace="my-app"
|
|
65
75
|
initialWorkspace={savedWorkspace}
|
|
66
76
|
/>
|
|
67
77
|
```
|
|
68
78
|
|
|
69
|
-
|
|
79
|
+
顶栏「设置」可切换主题和语言(写入 `abuilder.locale`)。「关于」只显示版本号。
|
|
70
80
|
|
|
71
|
-
|
|
81
|
+
## 编辑和预览
|
|
72
82
|
|
|
73
83
|
```tsx
|
|
74
|
-
// 编辑模式(默认):加载工作区到面板
|
|
75
84
|
<App key={workspace.id} initialWorkspace={workspace} />
|
|
76
|
-
|
|
77
|
-
// 预览模式:根据工作区数据直接渲染预览页
|
|
78
85
|
<App key={workspace.id} preview initialWorkspace={workspace} />
|
|
79
86
|
```
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
### 在线预览(URL)
|
|
88
|
+
切换工作区时带上 `key`,避免旧画布状态残留。
|
|
84
89
|
|
|
85
|
-
URL 带 `?preview=online&projectId
|
|
90
|
+
URL 带 `?preview=online&projectId=<id>` 时进入预览,从 IndexedDB 读。编辑器传了 `nameSpace` 时,预览 URL 会带 `ns=`,预览页用同一命名空间:
|
|
86
91
|
|
|
87
92
|
```tsx
|
|
88
93
|
<App previewSearch="?preview=online&projectId=xxx&ns=my-app" />
|
|
89
94
|
```
|
|
90
95
|
|
|
91
|
-
|
|
96
|
+
## 把工作区交给自己的后端
|
|
92
97
|
|
|
93
|
-
|
|
98
|
+
IndexedDB 是编辑器自己的浏览器缓存,**不导出** list / get / put / delete。宿主应:
|
|
99
|
+
|
|
100
|
+
1. 订阅创建和同步事件,把回调里的完整对象写到自己的存储。
|
|
101
|
+
2. 下次打开时校验 JSON,再交给 `initialWorkspace`。
|
|
94
102
|
|
|
95
103
|
```tsx
|
|
96
104
|
import { useEffect, useState } from "react";
|
|
@@ -98,6 +106,7 @@ import {
|
|
|
98
106
|
App,
|
|
99
107
|
addEventSubscription,
|
|
100
108
|
AbuilderEvents,
|
|
109
|
+
parseWorkspaceData,
|
|
101
110
|
type WorkspaceData,
|
|
102
111
|
} from "@arronqzy/abuilder";
|
|
103
112
|
import "@arronqzy/abuilder/styles.css";
|
|
@@ -117,73 +126,40 @@ function HostApp() {
|
|
|
117
126
|
if (!workspace) return <App />;
|
|
118
127
|
|
|
119
128
|
return (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
preview={isPreview}
|
|
126
|
-
initialWorkspace={workspace}
|
|
127
|
-
/>
|
|
128
|
-
</>
|
|
129
|
+
<App
|
|
130
|
+
key={`${workspace.id}-${workspace.updatedAt}-${isPreview}`}
|
|
131
|
+
preview={isPreview}
|
|
132
|
+
initialWorkspace={workspace}
|
|
133
|
+
/>
|
|
129
134
|
);
|
|
130
135
|
}
|
|
131
136
|
```
|
|
132
137
|
|
|
133
|
-
|
|
138
|
+
| 事件 | 常量 | 何时触发 |
|
|
139
|
+
|------|------|----------|
|
|
140
|
+
| `workspace:add` | `AbuilderEvents.workspaceAdd` | 创建工作区成功 |
|
|
141
|
+
| `workspace:sync` | `AbuilderEvents.workspaceSync` | 同步工作区成功 |
|
|
134
142
|
|
|
135
|
-
|
|
136
|
-
import {
|
|
137
|
-
addEventSubscription,
|
|
138
|
-
AbuilderEvents,
|
|
139
|
-
type WorkspaceData,
|
|
140
|
-
} from "@arronqzy/abuilder";
|
|
141
|
-
|
|
142
|
-
const addSub = addEventSubscription(
|
|
143
|
-
AbuilderEvents.workspaceAdd,
|
|
144
|
-
async (workspace: WorkspaceData) => {
|
|
145
|
-
await saveToServer(workspace);
|
|
146
|
-
}
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
const syncSub = addEventSubscription(
|
|
150
|
-
AbuilderEvents.workspaceSync,
|
|
151
|
-
async (workspace) => {
|
|
152
|
-
await saveToServer(workspace);
|
|
153
|
-
}
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
addSub.unsubscribe();
|
|
157
|
-
syncSub.unsubscribe();
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
| 事件 | 常量 | 触发时机 | 回调参数 |
|
|
161
|
-
|------|------|----------|----------|
|
|
162
|
-
| `workspace:add` | `AbuilderEvents.workspaceAdd` | 创建工作区成功 | `WorkspaceData` |
|
|
163
|
-
| `workspace:sync` | `AbuilderEvents.workspaceSync` | 同步工作区成功 | `WorkspaceData` |
|
|
164
|
-
|
|
165
|
-
`WorkspaceData`(即 `WorkspaceProjectRecord`)字段:
|
|
143
|
+
回调参数是完整 `WorkspaceData`(即 `WorkspaceProjectRecord`):
|
|
166
144
|
|
|
167
145
|
| 字段 | 说明 |
|
|
168
146
|
|------|------|
|
|
169
147
|
| `id` | 工作区 ID |
|
|
170
|
-
| `name` |
|
|
148
|
+
| `name` | 名称 |
|
|
171
149
|
| `createdAt` / `updatedAt` | 时间戳 |
|
|
172
|
-
| `panelState` |
|
|
150
|
+
| `panelState` | 画布完整状态 |
|
|
173
151
|
| `blueprintDocument` | 蓝图文档 |
|
|
174
|
-
| `blueprintMeta` |
|
|
175
|
-
| `productName` |
|
|
152
|
+
| `blueprintMeta` | 蓝图名称、备注 |
|
|
153
|
+
| `productName` | 产物名称 |
|
|
176
154
|
| `titleIconDataUrl` | 标题图标(可选) |
|
|
177
155
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
### 校验 / 解析工作区数据
|
|
156
|
+
也可以用字符串:`addEventSubscription("workspace:add", callback)`。
|
|
181
157
|
|
|
182
|
-
|
|
158
|
+
## 校验和空工作区
|
|
183
159
|
|
|
184
160
|
- `validate*`:只回答能不能用,不改数据。
|
|
185
|
-
- `parseWorkspaceData
|
|
186
|
-
- `createEmptyWorkspace
|
|
161
|
+
- `parseWorkspaceData`:通过后补齐 `id`、时间戳和空字段,`value` 可直接当 `initialWorkspace`。
|
|
162
|
+
- `createEmptyWorkspace`:一份形状正确的空白工作区。
|
|
187
163
|
|
|
188
164
|
```ts
|
|
189
165
|
import {
|
|
@@ -195,25 +171,22 @@ import {
|
|
|
195
171
|
createWorkspaceProjectId,
|
|
196
172
|
} from "@arronqzy/abuilder";
|
|
197
173
|
|
|
198
|
-
validateViewData(workspace.panelState); // { ok: true } 或 { ok: false, error: "invalid-view-data" }
|
|
199
|
-
validateBlueprintData(workspace.blueprintDocument);
|
|
200
|
-
validateWorkspaceData(workspace); // 同时检查视图 + 蓝图,结果里带 `view` / `blueprint`
|
|
201
|
-
|
|
202
174
|
const parsed = parseWorkspaceData(jsonFromBackend);
|
|
203
175
|
if (parsed.ok && parsed.value) {
|
|
204
176
|
// <App initialWorkspace={parsed.value} />
|
|
205
177
|
}
|
|
206
178
|
|
|
207
|
-
|
|
179
|
+
validateWorkspaceData(workspace); // { ok, view, blueprint }
|
|
180
|
+
createEmptyWorkspace({ name: "未命名", id: createWorkspaceProjectId() });
|
|
208
181
|
```
|
|
209
182
|
|
|
210
|
-
|
|
183
|
+
只校验视图用 `validateViewData` / `parseViewData`(读 `panelState`)。只校验蓝图用 `validateBlueprintData` / `parseBlueprintData`(读 `blueprintDocument`)。两边都要合法时才用 `parseWorkspaceData`。
|
|
211
184
|
|
|
212
|
-
`initialWorkspace`
|
|
185
|
+
`initialWorkspace` 为空时,首次是空画布和空蓝图。侧栏仍可列出已保存项目,但要用户手动打开。
|
|
213
186
|
|
|
214
|
-
|
|
187
|
+
## 预览缩略图
|
|
215
188
|
|
|
216
|
-
|
|
189
|
+
画布已经渲染且有内容时:
|
|
217
190
|
|
|
218
191
|
```ts
|
|
219
192
|
import { getPreviewSnapshot } from "@arronqzy/abuilder";
|
|
@@ -224,21 +197,20 @@ const thumbnail = await getPreviewSnapshot({
|
|
|
224
197
|
mimeType: "image/jpeg",
|
|
225
198
|
quality: 0.85,
|
|
226
199
|
});
|
|
227
|
-
// 返回 "data:image/jpeg;base64,..."
|
|
228
200
|
```
|
|
229
201
|
|
|
230
|
-
| 参数 | 说明 |
|
|
231
|
-
|
|
232
|
-
| `maxWidth` / `maxHeight` |
|
|
202
|
+
| 参数 | 说明 | 默认 |
|
|
203
|
+
|------|------|------|
|
|
204
|
+
| `maxWidth` / `maxHeight` | 等比上限 | 不限制 |
|
|
233
205
|
| `mimeType` | `"image/png"` 或 `"image/jpeg"` | `"image/png"` |
|
|
234
|
-
| `quality` | JPEG
|
|
206
|
+
| `quality` | JPEG 0–1 | `0.92` |
|
|
235
207
|
| `backgroundColor` | 背景色 | `"#ffffff"` |
|
|
236
208
|
|
|
237
|
-
|
|
209
|
+
Vue 包没有这个函数。
|
|
238
210
|
|
|
239
|
-
|
|
211
|
+
## 还导出什么
|
|
240
212
|
|
|
241
|
-
|
|
213
|
+
一般宿主只用 `App`。需要拆开时:
|
|
242
214
|
|
|
243
215
|
```tsx
|
|
244
216
|
import {
|
|
@@ -249,38 +221,18 @@ import {
|
|
|
249
221
|
getPreviewSnapshot,
|
|
250
222
|
parseWorkspaceData,
|
|
251
223
|
createEmptyWorkspace,
|
|
252
|
-
createWorkspaceProjectId,
|
|
253
|
-
} from "@arronqzy/abuilder";
|
|
254
|
-
|
|
255
|
-
import type {
|
|
256
|
-
WorkspaceData,
|
|
257
|
-
WorkspaceProjectRecord,
|
|
258
|
-
AbuilderEventName,
|
|
259
|
-
GetPreviewSnapshotOptions,
|
|
260
|
-
ParseCheckResult,
|
|
261
|
-
WorkspaceParseCheckResult,
|
|
262
224
|
} from "@arronqzy/abuilder";
|
|
263
225
|
```
|
|
264
226
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
| 包 | 职责 |
|
|
268
|
-
|----|------|
|
|
269
|
-
| `@arronqzy/abuilder` | 聚合入口(本包) |
|
|
270
|
-
| `@arronqzy/i18n` | 共享中英文本 |
|
|
271
|
-
| `@arronqzy/react-view` | 视图画布与工作区 |
|
|
272
|
-
| `@arronqzy/react-blueprint` | 蓝图编辑器 UI |
|
|
273
|
-
| `@arronqzy/blueprint-dsl` | 蓝图 DSL 与运行时 |
|
|
274
|
-
| `@arronqzy/rx-store` | 画布状态与 Undo/Redo |
|
|
275
|
-
| `@arronqzy/ui` | 共享 UI 组件 |
|
|
227
|
+
类型:`WorkspaceData`、`WorkspaceProjectRecord`、`AbuilderEventName`、`GetPreviewSnapshotOptions`、`ParseCheckResult`、`WorkspaceParseCheckResult`。
|
|
276
228
|
|
|
277
|
-
##
|
|
229
|
+
## 本仓库里怎么预览
|
|
278
230
|
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
|
|
231
|
+
```bash
|
|
232
|
+
pnpm -C apps/web dev
|
|
233
|
+
```
|
|
282
234
|
|
|
283
|
-
|
|
235
|
+
`http://127.0.0.1:31011`。样式缺失时:
|
|
284
236
|
|
|
285
237
|
```bash
|
|
286
238
|
pnpm -C packages/ui run build:css
|
|
@@ -288,8 +240,6 @@ pnpm -C packages/react-view run build:css
|
|
|
288
240
|
pnpm -C packages/abuilder run build:css
|
|
289
241
|
```
|
|
290
242
|
|
|
291
|
-
`apps/web` 的 `pnpm dev` 会通过 `predev` 自动执行上述步骤。
|
|
292
|
-
|
|
293
243
|
## 许可证
|
|
294
244
|
|
|
295
245
|
MIT
|
package/dist/index.cjs
CHANGED
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;ACwC5C,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;AAEO,SAAS,GAAI,CAAA;AAAA,EAClB,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,SAAY,GAAA;AACd,CAAqB,EAAA;AACnB,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,kBAAAH,cAAA;AAAA,MAACI,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,kBAAAJ,cAAA;AAAA,MAACI,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,uBACGJ,cAAA,CAAAK,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAL,cAAA;AAAA,IAACM,wBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;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","file":"index.cjs","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"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;ACwC5C,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;AAEO,SAAS,GAAI,CAAA;AAAA,EAClB,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,SAAY,GAAA;AACd,CAAqB,EAAA;AACnB,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,kBAAAH,cAAA;AAAA,MAACI,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,kBAAAJ,cAAA;AAAA,MAACI,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,uBACGJ,cAAA,CAAAK,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAL,cAAA;AAAA,IAACM,wBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;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","file":"index.cjs","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.37\",\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 { 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} 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 / 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 function App({\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n nameSpace = null,\n}: AbuilderAppProps) {\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 className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\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
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { Locale } from '@arronqzy/i18n';
|
|
3
3
|
export { Locale } from '@arronqzy/i18n';
|
|
4
4
|
import { WorkspaceProjectRecord } from '@arronqzy/react-view';
|
|
5
|
-
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceParseCheckResult, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, createEmptyWorkspace, createWorkspaceProjectId, getPreviewSnapshot, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, validateBlueprintData, validateViewData, validateWorkspaceData } from '@arronqzy/react-view';
|
|
5
|
+
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceParseCheckResult, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, createEmptyWorkspace, createWorkspaceProjectId, getPreviewSnapshot, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, validateBlueprintData, validateViewData, validateWorkspaceData } from '@arronqzy/react-view';
|
|
6
6
|
|
|
7
7
|
type AbuilderAppProps = {
|
|
8
8
|
className?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { Locale } from '@arronqzy/i18n';
|
|
3
3
|
export { Locale } from '@arronqzy/i18n';
|
|
4
4
|
import { WorkspaceProjectRecord } from '@arronqzy/react-view';
|
|
5
|
-
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceParseCheckResult, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, createEmptyWorkspace, createWorkspaceProjectId, getPreviewSnapshot, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, validateBlueprintData, validateViewData, validateWorkspaceData } from '@arronqzy/react-view';
|
|
5
|
+
export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, ApiCollectionUploadStartEventPayload, ApiCollectionUploadSuccessEventPayload, GetPreviewSnapshotOptions, I18nProvider, ParseCheckResult, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceParseCheckResult, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, createEmptyWorkspace, createWorkspaceProjectId, getPreviewSnapshot, parseBlueprintData, parseOnlinePreviewSearchParams, parseViewData, parseWorkspaceData, validateBlueprintData, validateViewData, validateWorkspaceData } from '@arronqzy/react-view';
|
|
6
6
|
|
|
7
7
|
type AbuilderAppProps = {
|
|
8
8
|
className?: string;
|
package/dist/index.js
CHANGED
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;ACwC5C,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;AAEO,SAAS,GAAI,CAAA;AAAA,EAClB,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,SAAY,GAAA;AACd,CAAqB,EAAA;AACnB,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,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;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","file":"index.js","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"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;ACwC5C,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;AAEO,SAAS,GAAI,CAAA;AAAA,EAClB,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,SAAY,GAAA;AACd,CAAqB,EAAA;AACnB,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,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;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","file":"index.js","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.37\",\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 { 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} 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 / 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 function App({\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n nameSpace = null,\n}: AbuilderAppProps) {\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 className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n}\n"]}
|