@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 CHANGED
@@ -1,28 +1,25 @@
1
1
  # @arronqzy/abuilder
2
2
 
3
- Abuilder **一站式可视化编辑器** npm 包。安装后在 React 应用中引入 `App` 即可渲染完整应用(视图画布 + 蓝图 + 工作区 + 在线预览)。
3
+ React 一站式编辑器。安装后渲染 `<App />`,就是完整的 Abuilder:物料画布、蓝图、工作区、在线预览和浏览器内 AI 助手。
4
4
 
5
- ## 功能概览
5
+ ![安装后直接得到的编辑器](https://github.com/qianzhuoyao/APanel5/raw/v5/docs/guide-assets/live-zh/01-overview.png)
6
6
 
7
- - **视图编辑**:拖拽物料、图层、缩放平移、多选、图表与 Scope 配置
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
- ### Vite 宿主项目
15
+ 需要 React 18+。容器建议撑满高度(样式里已经处理 `#root` / `#app`)。
22
16
 
23
- 若你用 Vite 打包集成了 `<App />` 的应用,请在 `vite.config.ts` 注册 WebLLM 插件(避免 `@mlc-ai/web-llm` 触发 `stripLiteral` 栈溢出):
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
- 请从 `@arronqzy/abuilder/vite` 导入,不要从 `@arronqzy/webllm-assistant/vite` 导入——pnpm 下后者不是 easycode 的直接依赖,配置加载阶段会 `ERR_MODULE_NOT_FOUND`。
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
- ### App 参数
44
+ 用户打开后会看到:
45
+
46
+ - 顶栏:文件、编辑、视图、蓝图、设置、创建/保存工作区、AI 助手
47
+ - 左侧:物料(图表、文本、表格、几何、三维、媒体)和节点树
48
+ - 中间:无限画布,带标尺、缩放、多选
49
+ - 右侧:选中节点的配置;没选中时是空状态
50
+ - 底部:图层
51
+
52
+ 打开蓝图后上下分屏:
46
53
 
47
- | 参数 | 说明 | 默认值 |
48
- |------|------|--------|
49
- | `className` | 编辑面板根节点 class | — |
50
- | `initialZoom` | 初始画布缩放 | `1` |
51
- | `defaultTheme` | 编辑器主题 `"dark"` / `"light"` | `"dark"` |
52
- | `locale` | 界面语言 `"zh-CN"` / `"en-US"`;省略则按 localStorage / 浏览器语言 | — |
53
- | `nameSpace` | 隔离 IndexedDB / 缓存;同一页面多个 App 传入不同值 | — |
54
- | `previewSearch` | 在线预览 URL 查询串;含 `?preview=online&projectId=...` 时进入预览 | `window.location.search` |
55
- | `preview` | `true` 为预览页,`false` 为编辑面板 | `false` |
56
- | `initialWorkspace` | 完整工作区数据;空则首次渲染空白,不会自动打开 IndexedDB 记录 | — |
54
+ ![视图在上、蓝图在下](https://github.com/qianzhuoyao/APanel5/raw/v5/docs/guide-assets/live-zh/40-blueprint-open.png)
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
- preview={false}
74
+ nameSpace="my-app"
65
75
  initialWorkspace={savedWorkspace}
66
76
  />
67
77
  ```
68
78
 
69
- 编辑器顶栏「设置 → 语言」可运行时切换中文 / English(写入 `localStorage` key `abuilder.locale`)。
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
- 切换工作区时建议配合 `key`,确保完整重新加载。
82
-
83
- ### 在线预览(URL)
88
+ 切换工作区时带上 `key`,避免旧画布状态残留。
84
89
 
85
- URL 带 `?preview=online&projectId=<工作区ID>` 时自动进入预览模式(从 IndexedDB 加载)。若编辑器传了 `nameSpace`,预览 URL 会带 `ns=`,预览页用同一命名空间读库:
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
- 同一页面挂多个编辑器时,给每个 App 不同的 `nameSpace`,工作区 / 蓝图库 / 预览缓存不会互相覆盖。不传或空字符串保持原来的全局库名。
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
- <button onClick={() => setIsPreview(false)}>编辑</button>
122
- <button onClick={() => setIsPreview(true)}>预览</button>
123
- <App
124
- key={`${workspace.id}-${workspace.updatedAt}-${isPreview}`}
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
- ```ts
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` | 面板完整状态(rx-store) |
150
+ | `panelState` | 画布完整状态 |
173
151
  | `blueprintDocument` | 蓝图文档 |
174
- | `blueprintMeta` | 蓝图元信息(名称、备注) |
175
- | `productName` | 产品名称 |
152
+ | `blueprintMeta` | 蓝图名称、备注 |
153
+ | `productName` | 产物名称 |
176
154
  | `titleIconDataUrl` | 标题图标(可选) |
177
155
 
178
- 也可使用事件名字符串订阅,例如 `addEventSubscription("workspace:add", callback)`。
179
-
180
- ### 校验 / 解析工作区数据
156
+ 也可以用字符串:`addEventSubscription("workspace:add", callback)`。
181
157
 
182
- 把后端或文件里的 JSON 交给 `App` 之前:
158
+ ## 校验和空工作区
183
159
 
184
160
  - `validate*`:只回答能不能用,不改数据。
185
- - `parseWorkspaceData`:校验通过后补齐 `id` / 时间戳 / 空字段,返回的 `value` 可直接作为 `initialWorkspace`。
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
- const blank = createEmptyWorkspace({ name: "未命名", id: createWorkspaceProjectId() });
179
+ validateWorkspaceData(workspace); // { ok, view, blueprint }
180
+ createEmptyWorkspace({ name: "未命名", id: createWorkspaceProjectId() });
208
181
  ```
209
182
 
210
- 也可把完整工作区对象传给 `validateViewData` / `parseViewData`(读 `panelState`)和 `validateBlueprintData` / `parseBlueprintData`(读 `blueprintDocument`)。只校验视图或只校验蓝图时用这两套,不要用 `parseWorkspaceData`(它要求两边都合法)。
183
+ 只校验视图用 `validateViewData` / `parseViewData`(读 `panelState`)。只校验蓝图用 `validateBlueprintData` / `parseBlueprintData`(读 `blueprintDocument`)。两边都要合法时才用 `parseWorkspaceData`。
211
184
 
212
- `initialWorkspace` 为空(不传 / `null`)时,编辑器首次渲染空画布和空蓝图,**不会**自动选中 IndexedDB 里的第一条工作区。侧栏仍可列出已保存项目,需用户手动打开。传入的工作区会按这份数据完整显示。
185
+ `initialWorkspace` 为空时,首次是空画布和空蓝图。侧栏仍可列出已保存项目,但要用户手动打开。
213
186
 
214
- IndexedDB 的 list / get / put / delete **不对外导出**。那是编辑器自己的浏览器缓存,和宿主后端双写会打架。宿主应订阅 `workspace:add` / `workspace:sync` 写入自己的存储,再用 `parseWorkspaceData` + `initialWorkspace` 灌回来。同一页多个编辑器用 `nameSpace` 隔离这份缓存。
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 质量 0–1 | `0.92` |
206
+ | `quality` | JPEG 0–1 | `0.92` |
235
207
  | `backgroundColor` | 背景色 | `"#ffffff"` |
236
208
 
237
- 需在 `App` / `ReactViewPanel` 或在线预览页已渲染且画布有内容时调用。Vue 包 `@arronqzy/abuilder-vue` **没有**对等实现,不要从那边找同名导出。
209
+ Vue 包没有这个函数。
238
210
 
239
- ### 高级导出
211
+ ## 还导出什么
240
212
 
241
- 除 `App` 外,也可单独使用底层组件:
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
- ## Monorepo 包结构
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
- - React 18+
280
- - 构建工具需支持 CSS 导入(Vite / Webpack 5 等)
281
- - 根节点容器建议 `height: 100%`(样式已包含 `#root` / `#app` 规则)
231
+ ```bash
232
+ pnpm -C apps/web dev
233
+ ```
282
234
 
283
- 本地开发时若样式缺失,需先构建 CSS:
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
@@ -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.34"};
13
+ version: "1.1.37"};
14
14
 
15
15
  // src/version.ts
16
16
  var ABUILDER_PACKAGE_NAME = package_default.name;
@@ -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.34\",\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"]}
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
@@ -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.34"};
12
+ version: "1.1.37"};
13
13
 
14
14
  // src/version.ts
15
15
  var ABUILDER_PACKAGE_NAME = package_default.name;
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.34\",\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"]}
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"]}