@arronqzy/abuilder 1.1.15 → 1.1.17

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
@@ -7,7 +7,8 @@ Abuilder **一站式可视化编辑器** npm 包。安装后在 React 应用中
7
7
  - **视图编辑**:拖拽物料、图层、缩放平移、多选、图表与 Scope 配置
8
8
  - **蓝图编辑**:节点连线、调试执行、蓝图库与执行日志
9
9
  - **工作区**:多项目、IndexedDB 持久化、导入导出
10
- - **在线预览**:独立预览页,支持 URL 参数打开指定工作区
10
+ - **在线预览**:独立预览页,支持 URL 参数或外部工作区数据
11
+ - **宿主集成**:事件订阅、预览快照、外部工作区加载与预览/编辑模式切换
11
12
 
12
13
  ## 安装
13
14
 
@@ -27,27 +28,161 @@ import "@arronqzy/abuilder/styles.css";
27
28
  createRoot(document.getElementById("root")!).render(<App />);
28
29
  ```
29
30
 
30
- ### 可选配置
31
+ ### App 参数
32
+
33
+ | 参数 | 说明 | 默认值 |
34
+ |------|------|--------|
35
+ | `className` | 编辑面板根节点 class | — |
36
+ | `initialZoom` | 初始画布缩放 | `1` |
37
+ | `defaultTheme` | 编辑器主题 `"dark"` / `"light"` | `"dark"` |
38
+ | `locale` | 界面语言 `"zh-CN"` / `"en-US"`;省略则按 localStorage / 浏览器语言 | — |
39
+ | `previewSearch` | 在线预览 URL 查询串;含 `?preview=online&projectId=...` 时进入预览 | `window.location.search` |
40
+ | `preview` | `true` 为预览页,`false` 为编辑面板 | `false` |
41
+ | `initialWorkspace` | 完整工作区数据;编辑模式加载到面板,预览模式直接渲染 | — |
31
42
 
32
43
  ```tsx
33
44
  <App
34
45
  className="h-screen"
35
46
  defaultTheme="dark"
36
47
  initialZoom={1}
37
- locale="zh-CN" // 或 "en-US";省略则按 localStorage / 浏览器语言 / zh-CN
48
+ locale="zh-CN"
49
+ preview={false}
50
+ initialWorkspace={savedWorkspace}
38
51
  />
39
52
  ```
40
53
 
41
54
  编辑器顶栏「设置 → 语言」可运行时切换中文 / English(写入 `localStorage` key `abuilder.locale`)。
42
55
 
43
- ### 在线预览
56
+ ### 编辑 / 预览模式
57
+
58
+ ```tsx
59
+ // 编辑模式(默认):加载工作区到面板
60
+ <App key={workspace.id} initialWorkspace={workspace} />
61
+
62
+ // 预览模式:根据工作区数据直接渲染预览页
63
+ <App key={workspace.id} preview initialWorkspace={workspace} />
64
+ ```
65
+
66
+ 切换工作区时建议配合 `key`,确保完整重新加载。
44
67
 
45
- URL 带 `?preview=online&projectId=<工作区ID>` 时自动进入预览模式:
68
+ ### 在线预览(URL)
69
+
70
+ URL 带 `?preview=online&projectId=<工作区ID>` 时自动进入预览模式(从 IndexedDB 加载):
46
71
 
47
72
  ```tsx
48
73
  <App previewSearch="?preview=online&projectId=xxx" />
49
74
  ```
50
75
 
76
+ ### 外部持久化完整流程
77
+
78
+ ```tsx
79
+ import { useEffect, useState } from "react";
80
+ import {
81
+ App,
82
+ addEventSubscription,
83
+ AbuilderEvents,
84
+ type WorkspaceData,
85
+ } from "@arronqzy/abuilder";
86
+ import "@arronqzy/abuilder/styles.css";
87
+
88
+ function HostApp() {
89
+ const [workspace, setWorkspace] = useState<WorkspaceData | null>(null);
90
+ const [isPreview, setIsPreview] = useState(false);
91
+
92
+ useEffect(() => {
93
+ const sub = addEventSubscription(AbuilderEvents.workspaceSync, async (data) => {
94
+ await saveToMyBackend(data);
95
+ setWorkspace(data);
96
+ });
97
+ return () => sub.unsubscribe();
98
+ }, []);
99
+
100
+ if (!workspace) return <App />;
101
+
102
+ return (
103
+ <>
104
+ <button onClick={() => setIsPreview(false)}>编辑</button>
105
+ <button onClick={() => setIsPreview(true)}>预览</button>
106
+ <App
107
+ key={`${workspace.id}-${workspace.updatedAt}-${isPreview}`}
108
+ preview={isPreview}
109
+ initialWorkspace={workspace}
110
+ />
111
+ </>
112
+ );
113
+ }
114
+ ```
115
+
116
+ ### 工作区事件订阅
117
+
118
+ ```ts
119
+ import {
120
+ addEventSubscription,
121
+ AbuilderEvents,
122
+ type WorkspaceData,
123
+ } from "@arronqzy/abuilder";
124
+
125
+ const addSub = addEventSubscription(
126
+ AbuilderEvents.workspaceAdd,
127
+ async (workspace: WorkspaceData) => {
128
+ await saveToServer(workspace);
129
+ }
130
+ );
131
+
132
+ const syncSub = addEventSubscription(
133
+ AbuilderEvents.workspaceSync,
134
+ async (workspace) => {
135
+ await saveToServer(workspace);
136
+ }
137
+ );
138
+
139
+ addSub.unsubscribe();
140
+ syncSub.unsubscribe();
141
+ ```
142
+
143
+ | 事件 | 常量 | 触发时机 | 回调参数 |
144
+ |------|------|----------|----------|
145
+ | `workspace:add` | `AbuilderEvents.workspaceAdd` | 创建工作区成功 | `WorkspaceData` |
146
+ | `workspace:sync` | `AbuilderEvents.workspaceSync` | 同步工作区成功 | `WorkspaceData` |
147
+
148
+ `WorkspaceData`(即 `WorkspaceProjectRecord`)字段:
149
+
150
+ | 字段 | 说明 |
151
+ |------|------|
152
+ | `id` | 工作区 ID |
153
+ | `name` | 工作区名称 |
154
+ | `createdAt` / `updatedAt` | 时间戳 |
155
+ | `panelState` | 面板完整状态(rx-store) |
156
+ | `blueprintDocument` | 蓝图文档 |
157
+ | `blueprintMeta` | 蓝图元信息(名称、备注) |
158
+ | `productName` | 产品名称 |
159
+ | `titleIconDataUrl` | 标题图标(可选) |
160
+
161
+ 也可使用事件名字符串订阅,例如 `addEventSubscription("workspace:add", callback)`。
162
+
163
+ ### 获取预览快照
164
+
165
+ ```ts
166
+ import { getPreviewSnapshot } from "@arronqzy/abuilder";
167
+
168
+ const thumbnail = await getPreviewSnapshot({
169
+ maxWidth: 320,
170
+ maxHeight: 180,
171
+ mimeType: "image/jpeg",
172
+ quality: 0.85,
173
+ });
174
+ // 返回 "data:image/jpeg;base64,..."
175
+ ```
176
+
177
+ | 参数 | 说明 | 默认值 |
178
+ |------|------|--------|
179
+ | `maxWidth` / `maxHeight` | 等比缩放上限 | 不限制 |
180
+ | `mimeType` | `"image/png"` 或 `"image/jpeg"` | `"image/png"` |
181
+ | `quality` | JPEG 质量 0–1 | `0.92` |
182
+ | `backgroundColor` | 背景色 | `"#ffffff"` |
183
+
184
+ 需在 `App` / `ReactViewPanel` 或在线预览页已渲染且画布有内容时调用。
185
+
51
186
  ### 高级导出
52
187
 
53
188
  除 `App` 外,也可单独使用底层组件:
@@ -56,6 +191,16 @@ URL 带 `?preview=online&projectId=<工作区ID>` 时自动进入预览模式:
56
191
  import {
57
192
  ReactViewPanel,
58
193
  ReactViewOnlinePreview,
194
+ addEventSubscription,
195
+ AbuilderEvents,
196
+ getPreviewSnapshot,
197
+ } from "@arronqzy/abuilder";
198
+
199
+ import type {
200
+ WorkspaceData,
201
+ WorkspaceProjectRecord,
202
+ AbuilderEventName,
203
+ GetPreviewSnapshotOptions,
59
204
  } from "@arronqzy/abuilder";
60
205
  ```
61
206
 
@@ -77,6 +222,16 @@ import {
77
222
  - 构建工具需支持 CSS 导入(Vite / Webpack 5 等)
78
223
  - 根节点容器建议 `height: 100%`(样式已包含 `#root` / `#app` 规则)
79
224
 
225
+ 本地开发时若样式缺失,需先构建 CSS:
226
+
227
+ ```bash
228
+ pnpm -C packages/ui run build:css
229
+ pnpm -C packages/react-view run build:css
230
+ pnpm -C packages/abuilder run build:css
231
+ ```
232
+
233
+ `apps/web` 的 `pnpm dev` 会通过 `predev` 自动执行上述步骤。
234
+
80
235
  ## 许可证
81
236
 
82
237
  MIT
package/dist/index.cjs CHANGED
@@ -7,12 +7,33 @@ var reactView = require('@arronqzy/react-view');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
 
9
9
  // src/App.tsx
10
+ function PreviewShell({
11
+ locale,
12
+ onLocaleChange,
13
+ children
14
+ }) {
15
+ if (typeof document !== "undefined") {
16
+ document.documentElement.classList.remove("dark");
17
+ document.documentElement.classList.add("light");
18
+ document.documentElement.dataset.theme = "light";
19
+ }
20
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.I18nProvider, { locale, onLocaleChange, children: /* @__PURE__ */ jsxRuntime.jsx(
21
+ "div",
22
+ {
23
+ className: "light min-h-[100vh] w-full bg-white text-gray-900",
24
+ "data-theme": "light",
25
+ children
26
+ }
27
+ ) });
28
+ }
10
29
  function App({
11
30
  className,
12
31
  initialZoom,
13
32
  defaultTheme = "dark",
14
33
  locale = null,
15
- previewSearch
34
+ previewSearch,
35
+ preview = false,
36
+ initialWorkspace = null
16
37
  }) {
17
38
  const [localeState, setLocaleState] = react.useState(locale);
18
39
  const effectiveLocale = locale ?? localeState;
@@ -21,30 +42,38 @@ function App({
21
42
  () => reactView.parseOnlinePreviewSearchParams(search),
22
43
  [search]
23
44
  );
45
+ if (preview) {
46
+ return /* @__PURE__ */ jsxRuntime.jsx(PreviewShell, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsxRuntime.jsx(
47
+ reactView.ReactViewOnlinePreview,
48
+ {
49
+ workspace: initialWorkspace,
50
+ projectId: initialWorkspace?.id
51
+ }
52
+ ) });
53
+ }
24
54
  if (previewParams) {
25
- if (typeof document !== "undefined") {
26
- document.documentElement.classList.remove("dark");
27
- document.documentElement.classList.add("light");
28
- document.documentElement.dataset.theme = "light";
29
- }
30
- return /* @__PURE__ */ jsxRuntime.jsx(react$1.I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsxRuntime.jsx(
31
- "div",
55
+ return /* @__PURE__ */ jsxRuntime.jsx(PreviewShell, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsxRuntime.jsx(
56
+ reactView.ReactViewOnlinePreview,
32
57
  {
33
- className: "light min-h-[100vh] w-full bg-white text-gray-900",
34
- "data-theme": "light",
35
- children: /* @__PURE__ */ jsxRuntime.jsx(
36
- reactView.ReactViewOnlinePreview,
37
- {
38
- projectId: previewParams.projectId,
39
- previewInstanceId: previewParams.previewInstanceId
40
- }
41
- )
58
+ projectId: previewParams.projectId,
59
+ previewInstanceId: previewParams.previewInstanceId
42
60
  }
43
61
  ) });
44
62
  }
45
- return /* @__PURE__ */ jsxRuntime.jsx(react$1.I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsxRuntime.jsx(ui.ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsxRuntime.jsx(reactView.ReactViewPanel, { className, initialZoom }) }) });
63
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsxRuntime.jsx(ui.ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsxRuntime.jsx(
64
+ reactView.ReactViewPanel,
65
+ {
66
+ className,
67
+ initialZoom,
68
+ initialWorkspace
69
+ }
70
+ ) }) });
46
71
  }
47
72
 
73
+ Object.defineProperty(exports, "AbuilderEvents", {
74
+ enumerable: true,
75
+ get: function () { return reactView.AbuilderEvents; }
76
+ });
48
77
  Object.defineProperty(exports, "ReactViewOnlinePreview", {
49
78
  enumerable: true,
50
79
  get: function () { return reactView.ReactViewOnlinePreview; }
@@ -53,6 +82,14 @@ Object.defineProperty(exports, "ReactViewPanel", {
53
82
  enumerable: true,
54
83
  get: function () { return reactView.ReactViewPanel; }
55
84
  });
85
+ Object.defineProperty(exports, "addEventSubscription", {
86
+ enumerable: true,
87
+ get: function () { return reactView.addEventSubscription; }
88
+ });
89
+ Object.defineProperty(exports, "getPreviewSnapshot", {
90
+ enumerable: true,
91
+ get: function () { return reactView.getPreviewSnapshot; }
92
+ });
56
93
  Object.defineProperty(exports, "parseOnlinePreviewSearchParams", {
57
94
  enumerable: true,
58
95
  get: function () { return reactView.parseOnlinePreviewSearchParams; }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/App.tsx"],"names":["useState","useMemo","parseOnlinePreviewSearchParams","jsx","I18nProvider","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;AA0BO,SAAS,GAAI,CAAA;AAAA,EAClB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT;AACF,CAAqB,EAAA;AACnB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,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,aAAe,EAAA;AACjB,IAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,MAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,MAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,MAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,IAAA,uBACGC,cAAA,CAAAC,oBAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAAD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,mDAAA;AAAA,QACV,YAAW,EAAA,OAAA;AAAA,QAEX,QAAA,kBAAAA,cAAA;AAAA,UAACE,gCAAA;AAAA,UAAA;AAAA,YACC,WAAW,aAAc,CAAA,SAAA;AAAA,YACzB,mBAAmB,aAAc,CAAA;AAAA;AAAA;AACnC;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,sCACGD,oBAAa,EAAA,EAAA,MAAA,EAAQ,eAAiB,EAAA,cAAA,EAAgB,gBACrD,QAAC,kBAAAD,cAAA,CAAAG,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,OACvD,QAAC,kBAAAH,cAAA,CAAAI,wBAAA,EAAA,EAAe,SAAsB,EAAA,WAAA,EAA0B,GAClE,CACF,EAAA,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import { useMemo, useState } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport { I18nProvider } from \"@arronqzy/i18n/react\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n} from \"@arronqzy/react-view\";\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\nexport function App({\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\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 (previewParams) {\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 <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n />\n </div>\n </I18nProvider>\n );\n }\n\n return (\n <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel className={className} initialZoom={initialZoom} />\n </ThemeProvider>\n </I18nProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/App.tsx"],"names":["jsx","I18nProvider","useState","useMemo","parseOnlinePreviewSearchParams","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;AAqCA,SAAS,YAAa,CAAA;AAAA,EACpB,MAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,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,CAACC,oBAAa,EAAA,EAAA,MAAA,EAAgB,cAC5B,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GAEL,EAAA,CAAA;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;AACrB,CAAqB,EAAA;AACnB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,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,uBACGJ,cAAA,CAAA,YAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACK,gCAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA;AAAA;AAAA,KAEjC,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,uBACGL,cAAA,CAAA,YAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAAA,cAAA;AAAA,MAACK,gCAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA;AAAA;AAAA,KAErC,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAAL,cAAA,CAACC,oBAAa,EAAA,EAAA,MAAA,EAAQ,eAAiB,EAAA,cAAA,EAAgB,gBACrD,QAAC,kBAAAD,cAAA,CAAAM,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAN,cAAA;AAAA,IAACO,wBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AAAA,KAEJ,CACF,EAAA,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport { I18nProvider } from \"@arronqzy/i18n/react\";\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\";\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 */\n initialWorkspace?: WorkspaceProjectRecord | null;\n};\n\nfunction PreviewShell({\n locale,\n onLocaleChange,\n children,\n}: {\n locale: Locale | null;\n onLocaleChange: (locale: Locale) => void;\n children: ReactNode;\n}) {\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 <I18nProvider locale={locale} onLocaleChange={onLocaleChange}>\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 </I18nProvider>\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}: 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 locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n />\n </PreviewShell>\n );\n }\n\n return (\n <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n />\n </ThemeProvider>\n </I18nProvider>\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Locale } from '@arronqzy/i18n';
3
3
  export { Locale } from '@arronqzy/i18n';
4
- export { ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
4
+ import { WorkspaceProjectRecord } from '@arronqzy/react-view';
5
+ export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, GetPreviewSnapshotOptions, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, getPreviewSnapshot, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
5
6
 
6
7
  type AbuilderAppProps = {
7
8
  className?: string;
@@ -17,7 +18,17 @@ type AbuilderAppProps = {
17
18
  * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。
18
19
  */
19
20
  previewSearch?: string;
21
+ /**
22
+ * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。
23
+ * @default false
24
+ */
25
+ preview?: boolean;
26
+ /**
27
+ * 外部传入的完整工作区数据(面板 + 蓝图)。
28
+ * 编辑模式:挂载后加载到面板;预览模式:直接渲染预览页。
29
+ */
30
+ initialWorkspace?: WorkspaceProjectRecord | null;
20
31
  };
21
- declare function App({ className, initialZoom, defaultTheme, locale, previewSearch, }: AbuilderAppProps): react_jsx_runtime.JSX.Element;
32
+ declare function App({ className, initialZoom, defaultTheme, locale, previewSearch, preview, initialWorkspace, }: AbuilderAppProps): react_jsx_runtime.JSX.Element;
22
33
 
23
34
  export { type AbuilderAppProps, App };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Locale } from '@arronqzy/i18n';
3
3
  export { Locale } from '@arronqzy/i18n';
4
- export { ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
4
+ import { WorkspaceProjectRecord } from '@arronqzy/react-view';
5
+ export { AbuilderEventName, AbuilderEventPayloadMap, AbuilderEvents, GetPreviewSnapshotOptions, ReactViewOnlinePreview, ReactViewPanel, ReactViewPanelProps, WorkspaceAddEventPayload, WorkspaceData, WorkspaceProjectRecord, WorkspaceSyncEventPayload, addEventSubscription, getPreviewSnapshot, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
5
6
 
6
7
  type AbuilderAppProps = {
7
8
  className?: string;
@@ -17,7 +18,17 @@ type AbuilderAppProps = {
17
18
  * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。
18
19
  */
19
20
  previewSearch?: string;
21
+ /**
22
+ * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。
23
+ * @default false
24
+ */
25
+ preview?: boolean;
26
+ /**
27
+ * 外部传入的完整工作区数据(面板 + 蓝图)。
28
+ * 编辑模式:挂载后加载到面板;预览模式:直接渲染预览页。
29
+ */
30
+ initialWorkspace?: WorkspaceProjectRecord | null;
20
31
  };
21
- declare function App({ className, initialZoom, defaultTheme, locale, previewSearch, }: AbuilderAppProps): react_jsx_runtime.JSX.Element;
32
+ declare function App({ className, initialZoom, defaultTheme, locale, previewSearch, preview, initialWorkspace, }: AbuilderAppProps): react_jsx_runtime.JSX.Element;
22
33
 
23
34
  export { type AbuilderAppProps, App };
package/dist/index.js CHANGED
@@ -2,16 +2,37 @@ import { useState, useMemo } from 'react';
2
2
  import { ThemeProvider } from '@arronqzy/ui';
3
3
  import { I18nProvider } from '@arronqzy/i18n/react';
4
4
  import { parseOnlinePreviewSearchParams, ReactViewOnlinePreview, ReactViewPanel } from '@arronqzy/react-view';
5
- export { ReactViewOnlinePreview, ReactViewPanel, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
5
+ export { AbuilderEvents, ReactViewOnlinePreview, ReactViewPanel, addEventSubscription, getPreviewSnapshot, parseOnlinePreviewSearchParams } from '@arronqzy/react-view';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  // src/App.tsx
9
+ function PreviewShell({
10
+ locale,
11
+ onLocaleChange,
12
+ children
13
+ }) {
14
+ if (typeof document !== "undefined") {
15
+ document.documentElement.classList.remove("dark");
16
+ document.documentElement.classList.add("light");
17
+ document.documentElement.dataset.theme = "light";
18
+ }
19
+ return /* @__PURE__ */ jsx(I18nProvider, { locale, onLocaleChange, children: /* @__PURE__ */ jsx(
20
+ "div",
21
+ {
22
+ className: "light min-h-[100vh] w-full bg-white text-gray-900",
23
+ "data-theme": "light",
24
+ children
25
+ }
26
+ ) });
27
+ }
9
28
  function App({
10
29
  className,
11
30
  initialZoom,
12
31
  defaultTheme = "dark",
13
32
  locale = null,
14
- previewSearch
33
+ previewSearch,
34
+ preview = false,
35
+ initialWorkspace = null
15
36
  }) {
16
37
  const [localeState, setLocaleState] = useState(locale);
17
38
  const effectiveLocale = locale ?? localeState;
@@ -20,28 +41,32 @@ function App({
20
41
  () => parseOnlinePreviewSearchParams(search),
21
42
  [search]
22
43
  );
44
+ if (preview) {
45
+ return /* @__PURE__ */ jsx(PreviewShell, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsx(
46
+ ReactViewOnlinePreview,
47
+ {
48
+ workspace: initialWorkspace,
49
+ projectId: initialWorkspace?.id
50
+ }
51
+ ) });
52
+ }
23
53
  if (previewParams) {
24
- if (typeof document !== "undefined") {
25
- document.documentElement.classList.remove("dark");
26
- document.documentElement.classList.add("light");
27
- document.documentElement.dataset.theme = "light";
28
- }
29
- return /* @__PURE__ */ jsx(I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsx(
30
- "div",
54
+ return /* @__PURE__ */ jsx(PreviewShell, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsx(
55
+ ReactViewOnlinePreview,
31
56
  {
32
- className: "light min-h-[100vh] w-full bg-white text-gray-900",
33
- "data-theme": "light",
34
- children: /* @__PURE__ */ jsx(
35
- ReactViewOnlinePreview,
36
- {
37
- projectId: previewParams.projectId,
38
- previewInstanceId: previewParams.previewInstanceId
39
- }
40
- )
57
+ projectId: previewParams.projectId,
58
+ previewInstanceId: previewParams.previewInstanceId
41
59
  }
42
60
  ) });
43
61
  }
44
- return /* @__PURE__ */ jsx(I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsx(ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsx(ReactViewPanel, { className, initialZoom }) }) });
62
+ return /* @__PURE__ */ jsx(I18nProvider, { locale: effectiveLocale, onLocaleChange: setLocaleState, children: /* @__PURE__ */ jsx(ThemeProvider, { defaultTheme, enableSystem: false, children: /* @__PURE__ */ jsx(
63
+ ReactViewPanel,
64
+ {
65
+ className,
66
+ initialZoom,
67
+ initialWorkspace
68
+ }
69
+ ) }) });
45
70
  }
46
71
 
47
72
  export { App };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/App.tsx"],"names":[],"mappings":";;;;;;;;AA0BO,SAAS,GAAI,CAAA;AAAA,EAClB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT;AACF,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,aAAe,EAAA;AACjB,IAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,MAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,MAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,MAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,IAAA,uBACG,GAAA,CAAA,YAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,mDAAA;AAAA,QACV,YAAW,EAAA,OAAA;AAAA,QAEX,QAAA,kBAAA,GAAA;AAAA,UAAC,sBAAA;AAAA,UAAA;AAAA,YACC,WAAW,aAAc,CAAA,SAAA;AAAA,YACzB,mBAAmB,aAAc,CAAA;AAAA;AAAA;AACnC;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,2BACG,YAAa,EAAA,EAAA,MAAA,EAAQ,eAAiB,EAAA,cAAA,EAAgB,gBACrD,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,OACvD,QAAC,kBAAA,GAAA,CAAA,cAAA,EAAA,EAAe,SAAsB,EAAA,WAAA,EAA0B,GAClE,CACF,EAAA,CAAA;AAEJ","file":"index.js","sourcesContent":["import { useMemo, useState } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport { I18nProvider } from \"@arronqzy/i18n/react\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n} from \"@arronqzy/react-view\";\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\nexport function App({\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\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 (previewParams) {\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 <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n />\n </div>\n </I18nProvider>\n );\n }\n\n return (\n <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel className={className} initialZoom={initialZoom} />\n </ThemeProvider>\n </I18nProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/App.tsx"],"names":[],"mappings":";;;;;;;;AAqCA,SAAS,YAAa,CAAA;AAAA,EACpB,MAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,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,CAAC,YAAa,EAAA,EAAA,MAAA,EAAgB,cAC5B,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GAEL,EAAA,CAAA;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;AACrB,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,uBACG,GAAA,CAAA,YAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA;AAAA;AAAA,KAEjC,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,uBACG,GAAA,CAAA,YAAA,EAAA,EAAa,MAAQ,EAAA,eAAA,EAAiB,gBAAgB,cACrD,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA;AAAA;AAAA,KAErC,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,MAAA,EAAQ,eAAiB,EAAA,cAAA,EAAgB,gBACrD,QAAC,kBAAA,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;AAAA;AAAA,KAEJ,CACF,EAAA,CAAA;AAEJ","file":"index.js","sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport { I18nProvider } from \"@arronqzy/i18n/react\";\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\";\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 */\n initialWorkspace?: WorkspaceProjectRecord | null;\n};\n\nfunction PreviewShell({\n locale,\n onLocaleChange,\n children,\n}: {\n locale: Locale | null;\n onLocaleChange: (locale: Locale) => void;\n children: ReactNode;\n}) {\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 <I18nProvider locale={locale} onLocaleChange={onLocaleChange}>\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 </I18nProvider>\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}: 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 locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n />\n </PreviewShell>\n );\n }\n\n return (\n <I18nProvider locale={effectiveLocale} onLocaleChange={setLocaleState}>\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n />\n </ThemeProvider>\n </I18nProvider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arronqzy/abuilder",
3
- "version": "1.1.15",
3
+ "version": "1.1.17",
4
4
  "description": "Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,10 +23,10 @@
23
23
  "./styles.css": "./dist/styles.css"
24
24
  },
25
25
  "dependencies": {
26
- "@arronqzy/blueprint-dsl": "1.0.8",
26
+ "@arronqzy/blueprint-dsl": "1.0.9",
27
27
  "@arronqzy/i18n": "0.1.7",
28
- "@arronqzy/react-view": "1.0.15",
29
- "@arronqzy/react-blueprint": "1.0.9",
28
+ "@arronqzy/react-blueprint": "1.0.10",
29
+ "@arronqzy/react-view": "1.0.17",
30
30
  "@arronqzy/rx-store": "1.0.5",
31
31
  "@arronqzy/ui": "1.0.6"
32
32
  },
@@ -43,8 +43,8 @@
43
43
  "postcss-import": "^16.1.0",
44
44
  "tsup": "^8.4.0",
45
45
  "typescript": "^5.5.4",
46
- "@arronqzy/typescript-config": "1.0.0",
47
- "@arronqzy/eslint-config": "0.0.0"
46
+ "@arronqzy/eslint-config": "0.0.0",
47
+ "@arronqzy/typescript-config": "1.0.0"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"