@arronqzy/abuilder 1.1.40 → 1.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@ React 一站式编辑器。安装后渲染 `<App />`,就是完整的 Abuilder
4
4
 
5
5
  ![安装后直接得到的编辑器](https://github.com/qianzhuoyao/APanel5/raw/v5/docs/guide-assets/live-zh/01-overview.png)
6
6
 
7
- 当前版本见本包 `package.json`(设置菜单「关于」里显示的就是这个版本号)。本包 **1.1.40** 起补齐宿主侧完整 CRUD(put / 命令式打开 / 事件 nameSpace / Vue 预览截图);**1.1.39** 起补齐本地数据接口(蓝图库、执行日志、接口集合的读取与清理,`clearAbuilderStorage` 一次清空,`workspace:delete` 事件);**1.1.38** 起提供本地工作区清理接口(`listWorkspaceProjects` / `deleteWorkspaceProject` / `clearWorkspaceProjects`);**1.1.37** 起配套 chroma.js 主题配色、全系统国际化修复与问号图标式字段说明;**1.1.36** 起配套蓝图 Soft UI 节点样式;**1.1.35** 起配套接口集合、`{system?...}` 模版、JSON 节点错误高亮。完整中文手册见仓库 `docs/Abuilder使用文档与功能说明.docx`(适用版本表写在文首)。
7
+ 当前版本见本包 `package.json`(设置菜单「关于」里显示的就是这个版本号)。本包 **1.1.41** 起配套 Soft UI 面板打磨、缩放恒定选框线宽与接口集合弹窗体验;**1.1.40** 起补齐宿主侧完整 CRUD(put / 命令式打开 / 事件 nameSpace / Vue 预览截图);**1.1.39** 起补齐本地数据接口(蓝图库、执行日志、接口集合的读取与清理,`clearAbuilderStorage` 一次清空,`workspace:delete` 事件);**1.1.38** 起提供本地工作区清理接口(`listWorkspaceProjects` / `deleteWorkspaceProject` / `clearWorkspaceProjects`);**1.1.37** 起配套 chroma.js 主题配色、全系统国际化修复与问号图标式字段说明;**1.1.36** 起配套蓝图 Soft UI 节点样式;**1.1.35** 起配套接口集合、`{system?...}` 模版、JSON 节点错误高亮。完整中文手册见仓库 `docs/Abuilder使用文档与功能说明.docx`(适用版本表写在文首)。
8
8
 
9
9
  ## 安装
10
10
 
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.40"};
13
+ version: "1.1.41"};
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","forwardRef","App","useState","useMemo","parseOnlinePreviewSearchParams","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAAA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAMC,gBAAiD,CAAA,SAASC,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAAC,aAAA;AAAA,IACpB,MAAMC,yCAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAL,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAN,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACGN,cAAA,CAAAO,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAP,cAAA;AAAA,IAACQ,wBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.cjs","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.40\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
1
+ {"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":["jsx","forwardRef","App","useState","useMemo","parseOnlinePreviewSearchParams","ReactViewOnlinePreview","ThemeProvider","ReactViewPanel"],"mappings":";;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAAA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAMC,gBAAiD,CAAA,SAASC,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAAC,aAAA;AAAA,IACpB,MAAMC,yCAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAL,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,sCACG,YACC,EAAA,EAAA,QAAA,kBAAAN,cAAA;AAAA,MAACM,gCAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACGN,cAAA,CAAAO,gBAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAAP,cAAA;AAAA,IAACQ,wBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.cjs","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.41\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
package/dist/index.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.40"};
12
+ version: "1.1.41"};
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":["App"],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAM,UAAiD,CAAA,SAASA,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAA,OAAA;AAAA,IACpB,MAAM,+BAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACG,GAAA,CAAA,aAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.js","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.40\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
1
+ {"version":3,"sources":["../package.json","../src/version.ts","../src/App.tsx"],"names":["App"],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAQ,EAAA,oBAAA;AAAA,EACR,OAAW,EAAA,QAiEb,CAAA;;;AChEO,IAAM,wBAAwB,eAAY,CAAA;AAC1C,IAAM,mBAAmB,eAAY,CAAA;AC8C5C,SAAS,YAAA,CAAa,EAAE,QAAA,EAAqC,EAAA;AAC3D,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAChD,IAAS,QAAA,CAAA,eAAA,CAAgB,SAAU,CAAA,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAS,QAAA,CAAA,eAAA,CAAgB,QAAQ,KAAQ,GAAA,OAAA;AAAA;AAG3C,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,mDAAA;AAAA,MACV,YAAW,EAAA,OAAA;AAAA,MAEV;AAAA;AAAA,GACH;AAEJ;AAEa,IAAA,GAAA,GAAM,UAAiD,CAAA,SAASA,IAC3E,CAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,MAAA;AAAA,EACf,MAAS,GAAA,IAAA;AAAA,EACT,aAAA;AAAA,EACA,OAAU,GAAA,KAAA;AAAA,EACV,gBAAmB,GAAA,IAAA;AAAA,EACnB,WAAc,GAAA,IAAA;AAAA,EACd,SAAY,GAAA;AACd,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,MAAM,CAAA;AACpE,EAAA,MAAM,kBAAkB,MAAU,IAAA,WAAA;AAElC,EAAA,MAAM,SACJ,aACC,KAAA,OAAO,WAAW,WAAc,GAAA,MAAA,CAAO,SAAS,MAAS,GAAA,EAAA,CAAA;AAE5D,EAAA,MAAM,aAAgB,GAAA,OAAA;AAAA,IACpB,MAAM,+BAA+B,MAAM,CAAA;AAAA,IAC3C,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,gBAAA;AAAA,QACX,WAAW,gBAAkB,EAAA,EAAA;AAAA,QAC7B,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB;AAAA;AAAA,KAEJ,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,2BACG,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAc,CAAA,SAAA;AAAA,QACzB,mBAAmB,aAAc,CAAA,iBAAA;AAAA,QACjC,MAAQ,EAAA,eAAA;AAAA,QACR,cAAgB,EAAA,cAAA;AAAA,QAChB,SAAA,EAAW,cAAc,SAAa,IAAA;AAAA;AAAA,KAE1C,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACG,GAAA,CAAA,aAAA,EAAA,EAAc,YAA4B,EAAA,YAAA,EAAc,KACvD,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAQ,EAAA,eAAA;AAAA,MACR,cAAgB,EAAA,cAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAa,EAAA,qBAAA;AAAA,MACb,cAAgB,EAAA;AAAA;AAAA,GAEpB,EAAA,CAAA;AAEJ,CAAC","file":"index.js","sourcesContent":["{\n \"name\": \"@arronqzy/abuilder\",\n \"version\": \"1.1.41\",\n \"description\": \"Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": [\n \"*.css\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.js\",\n \"require\": \"./dist/vite.cjs\",\n \"default\": \"./dist/vite.js\"\n }\n },\n \"scripts\": {\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx}\\\"\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit --skipLibCheck\",\n \"build:css\": \"node ./scripts/build-css.mjs\",\n \"build:js\": \"tsup && cp src/vite.d.ts dist/vite.d.ts && cp src/vite.d.ts dist/vite.d.cts\",\n \"build\": \"pnpm run build:js && pnpm run build:css\",\n \"prepublishOnly\": \"pnpm run build\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@arronqzy/blueprint-dsl\": \"workspace:*\",\n \"@arronqzy/i18n\": \"workspace:*\",\n \"@arronqzy/react-blueprint\": \"workspace:*\",\n \"@arronqzy/react-view\": \"workspace:*\",\n \"@arronqzy/rx-store\": \"workspace:*\",\n \"@arronqzy/ui\": \"workspace:*\",\n \"@arronqzy/webllm-assistant\": \"workspace:*\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\",\n \"react-dom\": \">=18\"\n },\n \"devDependencies\": {\n \"@arronqzy/eslint-config\": \"workspace:*\",\n \"@arronqzy/typescript-config\": \"workspace:*\",\n \"@types/react\": \"^19.0.1\",\n \"@types/react-dom\": \"^19.0.2\",\n \"@xyflow/react\": \"^12.9.3\",\n \"eslint\": \"^8.57.0\",\n \"postcss\": \"^8.4.49\",\n \"postcss-import\": \"^16.1.0\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.5.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\";\n\n/** 与 packages/abuilder/package.json 的 name / version 保持同步(构建时从 JSON 读入)。 */\nexport const ABUILDER_PACKAGE_NAME = packageJson.name;\nexport const ABUILDER_VERSION = packageJson.version;\n","import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeProvider } from \"@arronqzy/ui\";\nimport type { Locale } from \"@arronqzy/i18n\";\nimport {\n ReactViewOnlinePreview,\n ReactViewPanel,\n parseOnlinePreviewSearchParams,\n type AbuilderViewHandle,\n} from \"@arronqzy/react-view\";\nimport type { WorkspaceProjectRecord } from \"@arronqzy/react-view\";\nimport { ABUILDER_PACKAGE_NAME, ABUILDER_VERSION } from \"./version\";\n\nexport type AbuilderAppProps = {\n className?: string;\n initialZoom?: number;\n /** 编辑器默认主题 */\n defaultTheme?: \"dark\" | \"light\";\n /**\n * 界面语言。省略时按 localStorage → 浏览器语言 → zh-CN 解析。\n */\n locale?: Locale | null;\n /**\n * 在线预览模式的 URL 查询串。\n * 默认读取 `window.location.search`;含 `?preview=online&projectId=...` 时进入预览页。\n */\n previewSearch?: string;\n /**\n * 是否为预览模式。`true` 时根据 `initialWorkspace` 直接渲染预览页;`false` 为编辑面板。\n * @default false\n */\n preview?: boolean;\n /**\n * 外部传入的完整工作区数据(面板 + 蓝图)。\n * 编辑模式:挂载后按这份数据完整渲染;预览模式:直接渲染预览页。\n * 省略或空:首次显示空画布 / 空蓝图,不会自动选中 IndexedDB 中的工作区。\n */\n initialWorkspace?: WorkspaceProjectRecord | null;\n /**\n * 按 IndexedDB id 打开工作区(不 remount)。\n * 与 `initialWorkspace` 同时存在时:首次优先完整记录;之后 id 变化从 IndexedDB 打开。\n */\n workspaceId?: string | null;\n /**\n * 隔离 IndexedDB / localStorage / BroadcastChannel。\n * 同一页面挂多个 App 时传入不同值,避免工作区、蓝图库、预览缓存互相覆盖。\n * 省略或空字符串保持历史全局库名。\n */\n nameSpace?: string | null;\n};\n\nfunction PreviewShell({ children }: { children: ReactNode }) {\n if (typeof document !== \"undefined\") {\n document.documentElement.classList.remove(\"dark\");\n document.documentElement.classList.add(\"light\");\n document.documentElement.dataset.theme = \"light\";\n }\n\n return (\n <div\n className=\"light min-h-[100vh] w-full bg-white text-gray-900\"\n data-theme=\"light\"\n >\n {children}\n </div>\n );\n}\n\nexport const App = forwardRef<AbuilderViewHandle, AbuilderAppProps>(function App(\n {\n className,\n initialZoom,\n defaultTheme = \"dark\",\n locale = null,\n previewSearch,\n preview = false,\n initialWorkspace = null,\n workspaceId = null,\n nameSpace = null,\n },\n ref\n) {\n const [localeState, setLocaleState] = useState<Locale | null>(locale);\n const effectiveLocale = locale ?? localeState;\n\n const search =\n previewSearch ??\n (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n const previewParams = useMemo(\n () => parseOnlinePreviewSearchParams(search),\n [search]\n );\n\n if (preview) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n workspace={initialWorkspace}\n projectId={initialWorkspace?.id}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n />\n </PreviewShell>\n );\n }\n\n if (previewParams) {\n return (\n <PreviewShell>\n <ReactViewOnlinePreview\n projectId={previewParams.projectId}\n previewInstanceId={previewParams.previewInstanceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={previewParams.nameSpace ?? nameSpace}\n />\n </PreviewShell>\n );\n }\n\n return (\n <ThemeProvider defaultTheme={defaultTheme} enableSystem={false}>\n <ReactViewPanel\n ref={ref}\n className={className}\n initialZoom={initialZoom}\n initialWorkspace={initialWorkspace}\n workspaceId={workspaceId}\n locale={effectiveLocale}\n onLocaleChange={setLocaleState}\n nameSpace={nameSpace}\n packageName={ABUILDER_PACKAGE_NAME}\n packageVersion={ABUILDER_VERSION}\n />\n </ThemeProvider>\n );\n});\n"]}
package/dist/styles.css CHANGED
@@ -1550,10 +1550,6 @@ body {
1550
1550
  border-color: hsl(var(--border) / 0.5);
1551
1551
  }
1552
1552
 
1553
- .border-border\/60 {
1554
- border-color: hsl(var(--border) / 0.6);
1555
- }
1556
-
1557
1553
  .border-border\/70 {
1558
1554
  border-color: hsl(var(--border) / 0.7);
1559
1555
  }
@@ -1598,8 +1594,8 @@ body {
1598
1594
  background-color: hsl(var(--background));
1599
1595
  }
1600
1596
 
1601
- .bg-background\/60 {
1602
- background-color: hsl(var(--background) / 0.6);
1597
+ .bg-background\/80 {
1598
+ background-color: hsl(var(--background) / 0.8);
1603
1599
  }
1604
1600
 
1605
1601
  .bg-black\/80 {
@@ -1610,8 +1606,8 @@ body {
1610
1606
  background-color: hsl(var(--border));
1611
1607
  }
1612
1608
 
1613
- .bg-border\/60 {
1614
- background-color: hsl(var(--border) / 0.6);
1609
+ .bg-border\/40 {
1610
+ background-color: hsl(var(--border) / 0.4);
1615
1611
  }
1616
1612
 
1617
1613
  .bg-card {
@@ -1922,10 +1918,6 @@ body {
1922
1918
  color: hsl(var(--foreground) / 0.5);
1923
1919
  }
1924
1920
 
1925
- .text-foreground\/60 {
1926
- color: hsl(var(--foreground) / 0.6);
1927
- }
1928
-
1929
1921
  .text-muted-foreground {
1930
1922
  color: hsl(var(--muted-foreground));
1931
1923
  }
@@ -2198,6 +2190,10 @@ body {
2198
2190
  background-color: hsl(var(--accent));
2199
2191
  }
2200
2192
 
2193
+ .hover\:bg-border\/80:hover {
2194
+ background-color: hsl(var(--border) / 0.8);
2195
+ }
2196
+
2201
2197
  .hover\:bg-destructive\/80:hover {
2202
2198
  background-color: hsl(var(--destructive) / 0.8);
2203
2199
  }
@@ -3861,6 +3857,11 @@ video {
3861
3857
  right: 0px;
3862
3858
  }
3863
3859
 
3860
+ .inset-y-0 {
3861
+ top: 0px;
3862
+ bottom: 0px;
3863
+ }
3864
+
3864
3865
  .bottom-0 {
3865
3866
  bottom: 0px;
3866
3867
  }
@@ -3873,18 +3874,10 @@ video {
3873
3874
  bottom: 0.75rem;
3874
3875
  }
3875
3876
 
3876
- .bottom-\[var\(--rv-ruler-size\)\] {
3877
- bottom: var(--rv-ruler-size);
3878
- }
3879
-
3880
3877
  .left-0 {
3881
3878
  left: 0px;
3882
3879
  }
3883
3880
 
3884
- .left-0\.5 {
3885
- left: 0.125rem;
3886
- }
3887
-
3888
3881
  .left-1 {
3889
3882
  left: 0.25rem;
3890
3883
  }
@@ -3901,10 +3894,6 @@ video {
3901
3894
  left: 1.5rem;
3902
3895
  }
3903
3896
 
3904
- .left-\[var\(--rv-ruler-size\)\] {
3905
- left: var(--rv-ruler-size);
3906
- }
3907
-
3908
3897
  .right-0 {
3909
3898
  right: 0px;
3910
3899
  }
@@ -3917,18 +3906,10 @@ video {
3917
3906
  right: 0.5rem;
3918
3907
  }
3919
3908
 
3920
- .right-\[var\(--rv-ruler-size\)\] {
3921
- right: var(--rv-ruler-size);
3922
- }
3923
-
3924
3909
  .top-0 {
3925
3910
  top: 0px;
3926
3911
  }
3927
3912
 
3928
- .top-0\.5 {
3929
- top: 0.125rem;
3930
- }
3931
-
3932
3913
  .top-1 {
3933
3914
  top: 0.25rem;
3934
3915
  }
@@ -3937,6 +3918,10 @@ video {
3937
3918
  top: 0.375rem;
3938
3919
  }
3939
3920
 
3921
+ .top-1\/2 {
3922
+ top: 50%;
3923
+ }
3924
+
3940
3925
  .top-2 {
3941
3926
  top: 0.5rem;
3942
3927
  }
@@ -3953,10 +3938,6 @@ video {
3953
3938
  top: calc(100% + 6px);
3954
3939
  }
3955
3940
 
3956
- .top-\[var\(--rv-ruler-size\)\] {
3957
- top: var(--rv-ruler-size);
3958
- }
3959
-
3960
3941
  .isolate {
3961
3942
  isolation: isolate;
3962
3943
  }
@@ -3965,10 +3946,6 @@ video {
3965
3946
  z-index: 10;
3966
3947
  }
3967
3948
 
3968
- .z-20 {
3969
- z-index: 20;
3970
- }
3971
-
3972
3949
  .z-30 {
3973
3950
  z-index: 30;
3974
3951
  }
@@ -4001,6 +3978,10 @@ video {
4001
3978
  z-index: 10300;
4002
3979
  }
4003
3980
 
3981
+ .z-\[1\] {
3982
+ z-index: 1;
3983
+ }
3984
+
4004
3985
  .z-\[70\] {
4005
3986
  z-index: 70;
4006
3987
  }
@@ -4013,11 +3994,6 @@ video {
4013
3994
  grid-column: span 2 / span 2;
4014
3995
  }
4015
3996
 
4016
- .mx-2 {
4017
- margin-left: 0.5rem;
4018
- margin-right: 0.5rem;
4019
- }
4020
-
4021
3997
  .mx-auto {
4022
3998
  margin-left: auto;
4023
3999
  margin-right: auto;
@@ -4040,14 +4016,18 @@ video {
4040
4016
  margin-bottom: 0.5rem;
4041
4017
  }
4042
4018
 
4043
- .mb-3 {
4044
- margin-bottom: 0.75rem;
4019
+ .ml-0\.5 {
4020
+ margin-left: 0.125rem;
4045
4021
  }
4046
4022
 
4047
4023
  .ml-1\.5 {
4048
4024
  margin-left: 0.375rem;
4049
4025
  }
4050
4026
 
4027
+ .ml-\[7px\] {
4028
+ margin-left: 7px;
4029
+ }
4030
+
4051
4031
  .ml-auto {
4052
4032
  margin-left: auto;
4053
4033
  }
@@ -4222,6 +4202,10 @@ video {
4222
4202
  height: 180px;
4223
4203
  }
4224
4204
 
4205
+ .h-\[min\(68vh\2c 640px\)\] {
4206
+ height: min(68vh, 640px);
4207
+ }
4208
+
4225
4209
  .h-\[min\(72vh\2c 580px\)\] {
4226
4210
  height: min(72vh, 580px);
4227
4211
  }
@@ -4230,14 +4214,6 @@ video {
4230
4214
  height: min(78vh, 560px);
4231
4215
  }
4232
4216
 
4233
- .h-\[var\(--rv-ruler-size\)\] {
4234
- height: var(--rv-ruler-size);
4235
- }
4236
-
4237
- .h-auto {
4238
- height: auto;
4239
- }
4240
-
4241
4217
  .h-full {
4242
4218
  height: 100%;
4243
4219
  }
@@ -4318,6 +4294,10 @@ video {
4318
4294
  min-height: 140px;
4319
4295
  }
4320
4296
 
4297
+ .min-h-\[320px\] {
4298
+ min-height: 320px;
4299
+ }
4300
+
4321
4301
  .min-h-\[64px\] {
4322
4302
  min-height: 64px;
4323
4303
  }
@@ -4326,10 +4306,6 @@ video {
4326
4306
  min-height: 68px;
4327
4307
  }
4328
4308
 
4329
- .min-h-\[min\(62vh\2c 640px\)\] {
4330
- min-height: min(62vh, 640px);
4331
- }
4332
-
4333
4309
  .min-h-full {
4334
4310
  min-height: 100%;
4335
4311
  }
@@ -4362,6 +4338,10 @@ video {
4362
4338
  width: 4rem;
4363
4339
  }
4364
4340
 
4341
+ .w-2 {
4342
+ width: 0.5rem;
4343
+ }
4344
+
4365
4345
  .w-20 {
4366
4346
  width: 5rem;
4367
4347
  }
@@ -4426,6 +4406,10 @@ video {
4426
4406
  width: 168px;
4427
4407
  }
4428
4408
 
4409
+ .w-\[200px\] {
4410
+ width: 200px;
4411
+ }
4412
+
4429
4413
  .w-\[220px\] {
4430
4414
  width: 220px;
4431
4415
  }
@@ -4438,6 +4422,10 @@ video {
4438
4422
  width: 280px;
4439
4423
  }
4440
4424
 
4425
+ .w-\[min\(92vw\2c 620px\)\] {
4426
+ width: min(92vw, 620px);
4427
+ }
4428
+
4441
4429
  .w-\[min\(92vw\2c 720px\)\] {
4442
4430
  width: min(92vw, 720px);
4443
4431
  }
@@ -4446,10 +4434,6 @@ video {
4446
4434
  width: min(94vw, 680px);
4447
4435
  }
4448
4436
 
4449
- .w-\[min\(96vw\2c 1100px\)\] {
4450
- width: min(96vw, 1100px);
4451
- }
4452
-
4453
4437
  .w-\[min\(96vw\2c 960px\)\] {
4454
4438
  width: min(96vw, 960px);
4455
4439
  }
@@ -4458,10 +4442,6 @@ video {
4458
4442
  width: var(--radix-popover-trigger-width);
4459
4443
  }
4460
4444
 
4461
- .w-\[var\(--rv-ruler-size\)\] {
4462
- width: var(--rv-ruler-size);
4463
- }
4464
-
4465
4445
  .w-full {
4466
4446
  width: 100%;
4467
4447
  }
@@ -4474,10 +4454,6 @@ video {
4474
4454
  min-width: 100px;
4475
4455
  }
4476
4456
 
4477
- .min-w-\[120px\] {
4478
- min-width: 120px;
4479
- }
4480
-
4481
4457
  .min-w-\[140px\] {
4482
4458
  min-width: 140px;
4483
4459
  }
@@ -4486,12 +4462,16 @@ video {
4486
4462
  min-width: 180px;
4487
4463
  }
4488
4464
 
4465
+ .min-w-\[64px\] {
4466
+ min-width: 64px;
4467
+ }
4468
+
4489
4469
  .min-w-\[92px\] {
4490
4470
  min-width: 92px;
4491
4471
  }
4492
4472
 
4493
- .max-w-\[140px\] {
4494
- max-width: 140px;
4473
+ .max-w-\[120px\] {
4474
+ max-width: 120px;
4495
4475
  }
4496
4476
 
4497
4477
  .max-w-\[180px\] {
@@ -4575,13 +4555,8 @@ video {
4575
4555
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
4576
4556
  }
4577
4557
 
4578
- .translate-x-0 {
4579
- --tw-translate-x: 0px;
4580
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
4581
- }
4582
-
4583
- .translate-x-5 {
4584
- --tw-translate-x: 1.25rem;
4558
+ .-translate-y-1\/2 {
4559
+ --tw-translate-y: -50%;
4585
4560
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
4586
4561
  }
4587
4562
 
@@ -4685,14 +4660,6 @@ video {
4685
4660
  grid-template-columns: repeat(3, minmax(0, 1fr));
4686
4661
  }
4687
4662
 
4688
- .grid-cols-5 {
4689
- grid-template-columns: repeat(5, minmax(0, 1fr));
4690
- }
4691
-
4692
- .grid-cols-\[110px_1fr\] {
4693
- grid-template-columns: 110px 1fr;
4694
- }
4695
-
4696
4663
  .grid-cols-\[1fr_1fr_auto\] {
4697
4664
  grid-template-columns: 1fr 1fr auto;
4698
4665
  }
@@ -4717,6 +4684,10 @@ video {
4717
4684
  flex-wrap: wrap;
4718
4685
  }
4719
4686
 
4687
+ .flex-nowrap {
4688
+ flex-wrap: nowrap;
4689
+ }
4690
+
4720
4691
  .items-start {
4721
4692
  align-items: flex-start;
4722
4693
  }
@@ -4729,8 +4700,8 @@ video {
4729
4700
  align-items: center;
4730
4701
  }
4731
4702
 
4732
- .items-stretch {
4733
- align-items: stretch;
4703
+ .items-baseline {
4704
+ align-items: baseline;
4734
4705
  }
4735
4706
 
4736
4707
  .justify-start {
@@ -4769,6 +4740,10 @@ video {
4769
4740
  gap: 0.5rem;
4770
4741
  }
4771
4742
 
4743
+ .gap-2\.5 {
4744
+ gap: 0.625rem;
4745
+ }
4746
+
4772
4747
  .gap-3 {
4773
4748
  gap: 0.75rem;
4774
4749
  }
@@ -4782,11 +4757,20 @@ video {
4782
4757
  column-gap: 0.5rem;
4783
4758
  }
4784
4759
 
4760
+ .gap-x-3 {
4761
+ -moz-column-gap: 0.75rem;
4762
+ column-gap: 0.75rem;
4763
+ }
4764
+
4785
4765
  .gap-x-4 {
4786
4766
  -moz-column-gap: 1rem;
4787
4767
  column-gap: 1rem;
4788
4768
  }
4789
4769
 
4770
+ .gap-y-1 {
4771
+ row-gap: 0.25rem;
4772
+ }
4773
+
4790
4774
  .gap-y-2 {
4791
4775
  row-gap: 0.5rem;
4792
4776
  }
@@ -4833,12 +4817,6 @@ video {
4833
4817
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
4834
4818
  }
4835
4819
 
4836
- .space-y-3\.5 > :not([hidden]) ~ :not([hidden]) {
4837
- --tw-space-y-reverse: 0;
4838
- margin-top: calc(0.875rem * calc(1 - var(--tw-space-y-reverse)));
4839
- margin-bottom: calc(0.875rem * var(--tw-space-y-reverse));
4840
- }
4841
-
4842
4820
  .self-start {
4843
4821
  align-self: flex-start;
4844
4822
  }
@@ -4998,6 +4976,10 @@ video {
4998
4976
  border-color: hsl(var(--border) / 0.4);
4999
4977
  }
5000
4978
 
4979
+ .border-border\/45 {
4980
+ border-color: hsl(var(--border) / 0.45);
4981
+ }
4982
+
5001
4983
  .border-border\/50 {
5002
4984
  border-color: hsl(var(--border) / 0.5);
5003
4985
  }
@@ -5034,10 +5016,6 @@ video {
5034
5016
  border-color: hsl(var(--destructive) / 0.4);
5035
5017
  }
5036
5018
 
5037
- .border-destructive\/50 {
5038
- border-color: hsl(var(--destructive) / 0.5);
5039
- }
5040
-
5041
5019
  .border-destructive\/60 {
5042
5020
  border-color: hsl(var(--destructive) / 0.6);
5043
5021
  }
@@ -5050,6 +5028,10 @@ video {
5050
5028
  border-color: rgb(16 185 129 / 0.4);
5051
5029
  }
5052
5030
 
5031
+ .border-foreground\/70 {
5032
+ border-color: hsl(var(--foreground) / 0.7);
5033
+ }
5034
+
5053
5035
  .border-foreground\/80 {
5054
5036
  border-color: hsl(var(--foreground) / 0.8);
5055
5037
  }
@@ -5107,13 +5089,12 @@ video {
5107
5089
  border-color: rgb(139 92 246 / 0.5);
5108
5090
  }
5109
5091
 
5110
- .border-violet-500\/70 {
5111
- border-color: rgb(139 92 246 / 0.7);
5092
+ .border-violet-500\/60 {
5093
+ border-color: rgb(139 92 246 / 0.6);
5112
5094
  }
5113
5095
 
5114
- .border-violet-600 {
5115
- --tw-border-opacity: 1;
5116
- border-color: rgb(124 58 237 / var(--tw-border-opacity, 1));
5096
+ .border-violet-600\/70 {
5097
+ border-color: rgb(124 58 237 / 0.7);
5117
5098
  }
5118
5099
 
5119
5100
  .border-white\/30 {
@@ -5218,6 +5199,10 @@ video {
5218
5199
  background-color: rgb(0 0 0 / 0.8);
5219
5200
  }
5220
5201
 
5202
+ .bg-border {
5203
+ background-color: hsl(var(--border));
5204
+ }
5205
+
5221
5206
  .bg-card {
5222
5207
  background-color: hsl(var(--card));
5223
5208
  }
@@ -5226,6 +5211,10 @@ video {
5226
5211
  background-color: hsl(var(--card) / 0.8);
5227
5212
  }
5228
5213
 
5214
+ .bg-card\/90 {
5215
+ background-color: hsl(var(--card) / 0.9);
5216
+ }
5217
+
5229
5218
  .bg-card\/95 {
5230
5219
  background-color: hsl(var(--card) / 0.95);
5231
5220
  }
@@ -5283,6 +5272,10 @@ video {
5283
5272
  background-color: hsl(var(--muted) / 0.2);
5284
5273
  }
5285
5274
 
5275
+ .bg-muted\/25 {
5276
+ background-color: hsl(var(--muted) / 0.25);
5277
+ }
5278
+
5286
5279
  .bg-muted\/30 {
5287
5280
  background-color: hsl(var(--muted) / 0.3);
5288
5281
  }
@@ -5291,16 +5284,20 @@ video {
5291
5284
  background-color: hsl(var(--muted) / 0.4);
5292
5285
  }
5293
5286
 
5287
+ .bg-muted\/5 {
5288
+ background-color: hsl(var(--muted) / 0.05);
5289
+ }
5290
+
5294
5291
  .bg-muted\/60 {
5295
5292
  background-color: hsl(var(--muted) / 0.6);
5296
5293
  }
5297
5294
 
5298
- .bg-muted\/\[0\.14\] {
5299
- background-color: hsl(var(--muted) / 0.14);
5295
+ .bg-muted\/\[0\.08\] {
5296
+ background-color: hsl(var(--muted) / 0.08);
5300
5297
  }
5301
5298
 
5302
- .bg-muted\/\[0\.1\] {
5303
- background-color: hsl(var(--muted) / 0.1);
5299
+ .bg-muted\/\[0\.12\] {
5300
+ background-color: hsl(var(--muted) / 0.12);
5304
5301
  }
5305
5302
 
5306
5303
  .bg-popover {
@@ -5347,10 +5344,6 @@ video {
5347
5344
  background-color: hsl(var(--primary) / 0.55);
5348
5345
  }
5349
5346
 
5350
- .bg-primary\/60 {
5351
- background-color: hsl(var(--primary) / 0.6);
5352
- }
5353
-
5354
5347
  .bg-primary\/65 {
5355
5348
  background-color: hsl(var(--primary) / 0.65);
5356
5349
  }
@@ -5363,10 +5356,6 @@ video {
5363
5356
  background-color: hsl(var(--primary) / 0.75);
5364
5357
  }
5365
5358
 
5366
- .bg-primary\/80 {
5367
- background-color: hsl(var(--primary) / 0.8);
5368
- }
5369
-
5370
5359
  .bg-primary\/90 {
5371
5360
  background-color: hsl(var(--primary) / 0.9);
5372
5361
  }
@@ -5400,10 +5389,6 @@ video {
5400
5389
  background-color: rgb(139 92 246 / 0.15);
5401
5390
  }
5402
5391
 
5403
- .bg-violet-500\/20 {
5404
- background-color: rgb(139 92 246 / 0.2);
5405
- }
5406
-
5407
5392
  .bg-white {
5408
5393
  --tw-bg-opacity: 1;
5409
5394
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
@@ -5413,6 +5398,16 @@ video {
5413
5398
  background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
5414
5399
  }
5415
5400
 
5401
+ .bg-gradient-to-l {
5402
+ background-image: linear-gradient(to left, var(--tw-gradient-stops));
5403
+ }
5404
+
5405
+ .from-background {
5406
+ --tw-gradient-from: hsl(var(--background)) var(--tw-gradient-from-position);
5407
+ --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);
5408
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
5409
+ }
5410
+
5416
5411
  .from-card {
5417
5412
  --tw-gradient-from: hsl(var(--card)) var(--tw-gradient-from-position);
5418
5413
  --tw-gradient-to: hsl(var(--card) / 0) var(--tw-gradient-to-position);
@@ -5425,22 +5420,26 @@ video {
5425
5420
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
5426
5421
  }
5427
5422
 
5423
+ .via-background {
5424
+ --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);
5425
+ --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--background)) var(--tw-gradient-via-position), var(--tw-gradient-to);
5426
+ }
5427
+
5428
5428
  .via-muted\/60 {
5429
5429
  --tw-gradient-to: hsl(var(--muted) / 0) var(--tw-gradient-to-position);
5430
5430
  --tw-gradient-stops: var(--tw-gradient-from), hsl(var(--muted) / 0.6) var(--tw-gradient-via-position), var(--tw-gradient-to);
5431
5431
  }
5432
5432
 
5433
- .via-violet-600\/10 {
5434
- --tw-gradient-to: rgb(124 58 237 / 0) var(--tw-gradient-to-position);
5435
- --tw-gradient-stops: var(--tw-gradient-from), rgb(124 58 237 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to);
5436
- }
5437
-
5438
5433
  .to-card {
5439
5434
  --tw-gradient-to: hsl(var(--card)) var(--tw-gradient-to-position);
5440
5435
  }
5441
5436
 
5442
- .to-muted\/40 {
5443
- --tw-gradient-to: hsl(var(--muted) / 0.4) var(--tw-gradient-to-position);
5437
+ .to-muted\/35 {
5438
+ --tw-gradient-to: hsl(var(--muted) / 0.35) var(--tw-gradient-to-position);
5439
+ }
5440
+
5441
+ .to-transparent {
5442
+ --tw-gradient-to: transparent var(--tw-gradient-to-position);
5444
5443
  }
5445
5444
 
5446
5445
  .fill-none {
@@ -5471,6 +5470,10 @@ video {
5471
5470
  fill: hsl(var(--primary) / 0.55);
5472
5471
  }
5473
5472
 
5473
+ .fill-primary\/60 {
5474
+ fill: hsl(var(--primary) / 0.6);
5475
+ }
5476
+
5474
5477
  .fill-primary\/65 {
5475
5478
  fill: hsl(var(--primary) / 0.65);
5476
5479
  }
@@ -5550,6 +5553,11 @@ video {
5550
5553
  padding-right: 0px;
5551
5554
  }
5552
5555
 
5556
+ .px-0\.5 {
5557
+ padding-left: 0.125rem;
5558
+ padding-right: 0.125rem;
5559
+ }
5560
+
5553
5561
  .px-1 {
5554
5562
  padding-left: 0.25rem;
5555
5563
  padding-right: 0.25rem;
@@ -5590,6 +5598,11 @@ video {
5590
5598
  padding-right: 1.5rem;
5591
5599
  }
5592
5600
 
5601
+ .py-0 {
5602
+ padding-top: 0px;
5603
+ padding-bottom: 0px;
5604
+ }
5605
+
5593
5606
  .py-0\.5 {
5594
5607
  padding-top: 0.125rem;
5595
5608
  padding-bottom: 0.125rem;
@@ -5640,11 +5653,6 @@ video {
5640
5653
  padding-bottom: 1.5rem;
5641
5654
  }
5642
5655
 
5643
- .py-7 {
5644
- padding-top: 1.75rem;
5645
- padding-bottom: 1.75rem;
5646
- }
5647
-
5648
5656
  .py-8 {
5649
5657
  padding-top: 2rem;
5650
5658
  padding-bottom: 2rem;
@@ -5683,8 +5691,8 @@ video {
5683
5691
  padding-left: 0.25rem;
5684
5692
  }
5685
5693
 
5686
- .pl-2 {
5687
- padding-left: 0.5rem;
5694
+ .pl-1\.5 {
5695
+ padding-left: 0.375rem;
5688
5696
  }
5689
5697
 
5690
5698
  .pl-2\.5 {
@@ -5711,10 +5719,6 @@ video {
5711
5719
  padding-right: 3rem;
5712
5720
  }
5713
5721
 
5714
- .pt-0 {
5715
- padding-top: 0px;
5716
- }
5717
-
5718
5722
  .pt-1 {
5719
5723
  padding-top: 0.25rem;
5720
5724
  }
@@ -5727,10 +5731,6 @@ video {
5727
5731
  padding-top: 0.5rem;
5728
5732
  }
5729
5733
 
5730
- .pt-2\.5 {
5731
- padding-top: 0.625rem;
5732
- }
5733
-
5734
5734
  .pt-3 {
5735
5735
  padding-top: 0.75rem;
5736
5736
  }
@@ -5813,6 +5813,11 @@ video {
5813
5813
  font-style: italic;
5814
5814
  }
5815
5815
 
5816
+ .tabular-nums {
5817
+ --tw-numeric-spacing: tabular-nums;
5818
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
5819
+ }
5820
+
5816
5821
  .leading-4 {
5817
5822
  line-height: 1rem;
5818
5823
  }
@@ -5841,10 +5846,6 @@ video {
5841
5846
  letter-spacing: 0.025em;
5842
5847
  }
5843
5848
 
5844
- .text-accent-foreground {
5845
- color: hsl(var(--accent-foreground));
5846
- }
5847
-
5848
5849
  .text-amber-700 {
5849
5850
  --tw-text-opacity: 1;
5850
5851
  color: rgb(180 83 9 / var(--tw-text-opacity, 1));
@@ -5855,6 +5856,10 @@ video {
5855
5856
  color: rgb(146 64 14 / var(--tw-text-opacity, 1));
5856
5857
  }
5857
5858
 
5859
+ .text-border {
5860
+ color: hsl(var(--border));
5861
+ }
5862
+
5858
5863
  .text-card-foreground {
5859
5864
  color: hsl(var(--card-foreground));
5860
5865
  }
@@ -5867,9 +5872,9 @@ video {
5867
5872
  color: hsl(var(--destructive-foreground));
5868
5873
  }
5869
5874
 
5870
- .text-emerald-600 {
5875
+ .text-emerald-500 {
5871
5876
  --tw-text-opacity: 1;
5872
- color: rgb(5 150 105 / var(--tw-text-opacity, 1));
5877
+ color: rgb(16 185 129 / var(--tw-text-opacity, 1));
5873
5878
  }
5874
5879
 
5875
5880
  .text-emerald-700 {
@@ -5890,6 +5895,10 @@ video {
5890
5895
  color: hsl(var(--foreground) / 0.8);
5891
5896
  }
5892
5897
 
5898
+ .text-foreground\/85 {
5899
+ color: hsl(var(--foreground) / 0.85);
5900
+ }
5901
+
5893
5902
  .text-foreground\/90 {
5894
5903
  color: hsl(var(--foreground) / 0.9);
5895
5904
  }
@@ -5980,9 +5989,14 @@ video {
5980
5989
  color: rgb(196 181 253 / var(--tw-text-opacity, 1));
5981
5990
  }
5982
5991
 
5983
- .text-violet-950 {
5992
+ .text-violet-800 {
5984
5993
  --tw-text-opacity: 1;
5985
- color: rgb(46 16 101 / var(--tw-text-opacity, 1));
5994
+ color: rgb(91 33 182 / var(--tw-text-opacity, 1));
5995
+ }
5996
+
5997
+ .text-violet-900 {
5998
+ --tw-text-opacity: 1;
5999
+ color: rgb(76 29 149 / var(--tw-text-opacity, 1));
5986
6000
  }
5987
6001
 
5988
6002
  .text-white {
@@ -6010,10 +6024,6 @@ video {
6010
6024
  opacity: 1;
6011
6025
  }
6012
6026
 
6013
- .opacity-40 {
6014
- opacity: 0.4;
6015
- }
6016
-
6017
6027
  .opacity-45 {
6018
6028
  opacity: 0.45;
6019
6029
  }
@@ -6026,6 +6036,10 @@ video {
6026
6036
  opacity: 0.6;
6027
6037
  }
6028
6038
 
6039
+ .opacity-70 {
6040
+ opacity: 0.7;
6041
+ }
6042
+
6029
6043
  .opacity-90 {
6030
6044
  opacity: 0.9;
6031
6045
  }
@@ -6042,9 +6056,9 @@ video {
6042
6056
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
6043
6057
  }
6044
6058
 
6045
- .shadow-\[inset_0_1px_0_0_rgba\(139\2c 92\2c 246\2c 0\.22\)\] {
6046
- --tw-shadow: inset 0 1px 0 0 rgba(139,92,246,0.22);
6047
- --tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color);
6059
+ .shadow-\[0_1px_1px_hsl\(var\(--foreground\)\/0\.03\)\] {
6060
+ --tw-shadow: 0 1px 1px hsl(var(--foreground)/0.03);
6061
+ --tw-shadow-colored: 0 1px 1px var(--tw-shadow-color);
6048
6062
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
6049
6063
  }
6050
6064
 
@@ -6115,12 +6129,8 @@ video {
6115
6129
  --tw-ring-inset: inset;
6116
6130
  }
6117
6131
 
6118
- .ring-blue-500\/90 {
6119
- --tw-ring-color: rgb(59 130 246 / 0.9);
6120
- }
6121
-
6122
- .ring-destructive\/45 {
6123
- --tw-ring-color: hsl(var(--destructive) / 0.45);
6132
+ .ring-destructive\/35 {
6133
+ --tw-ring-color: hsl(var(--destructive) / 0.35);
6124
6134
  }
6125
6135
 
6126
6136
  .ring-foreground\/40 {
@@ -6131,12 +6141,12 @@ video {
6131
6141
  --tw-ring-color: hsl(var(--primary) / 0.2);
6132
6142
  }
6133
6143
 
6134
- .ring-primary\/40 {
6135
- --tw-ring-color: hsl(var(--primary) / 0.4);
6144
+ .ring-primary\/35 {
6145
+ --tw-ring-color: hsl(var(--primary) / 0.35);
6136
6146
  }
6137
6147
 
6138
- .ring-primary\/45 {
6139
- --tw-ring-color: hsl(var(--primary) / 0.45);
6148
+ .ring-primary\/40 {
6149
+ --tw-ring-color: hsl(var(--primary) / 0.4);
6140
6150
  }
6141
6151
 
6142
6152
  .ring-primary\/50 {
@@ -6147,18 +6157,6 @@ video {
6147
6157
  --tw-ring-color: rgb(56 189 248 / 0.5);
6148
6158
  }
6149
6159
 
6150
- .ring-offset-0 {
6151
- --tw-ring-offset-width: 0px;
6152
- }
6153
-
6154
- .ring-offset-2 {
6155
- --tw-ring-offset-width: 2px;
6156
- }
6157
-
6158
- .ring-offset-background {
6159
- --tw-ring-offset-color: hsl(var(--background));
6160
- }
6161
-
6162
6160
  .blur {
6163
6161
  --tw-blur: blur(8px);
6164
6162
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
@@ -6173,6 +6171,11 @@ video {
6173
6171
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
6174
6172
  }
6175
6173
 
6174
+ .backdrop-blur-md {
6175
+ --tw-backdrop-blur: blur(12px);
6176
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
6177
+ }
6178
+
6176
6179
  .backdrop-blur-sm {
6177
6180
  --tw-backdrop-blur: blur(4px);
6178
6181
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
@@ -6200,8 +6203,8 @@ video {
6200
6203
  transition-duration: 150ms;
6201
6204
  }
6202
6205
 
6203
- .transition-shadow {
6204
- transition-property: box-shadow;
6206
+ .transition-opacity {
6207
+ transition-property: opacity;
6205
6208
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
6206
6209
  transition-duration: 150ms;
6207
6210
  }
@@ -6212,10 +6215,6 @@ video {
6212
6215
  transition-duration: 150ms;
6213
6216
  }
6214
6217
 
6215
- .duration-200 {
6216
- transition-duration: 200ms;
6217
- }
6218
-
6219
6218
  @keyframes enter {
6220
6219
  from {
6221
6220
  opacity: var(--tw-enter-opacity, 1);
@@ -6230,10 +6229,6 @@ video {
6230
6229
  }
6231
6230
  }
6232
6231
 
6233
- .duration-200 {
6234
- animation-duration: 200ms;
6235
- }
6236
-
6237
6232
  .running {
6238
6233
  animation-play-state: running;
6239
6234
  }
@@ -6275,6 +6270,74 @@ video {
6275
6270
  background: hsl(var(--foreground) / 0.45);
6276
6271
  }
6277
6272
 
6273
+ /*
6274
+ * 物料侧栏:容器查询写在源 CSS 里(JIT 的 @[Npx] 经常未进 dist)
6275
+ * 窄:单列、卡片最多 112px;宽:auto-fill 换行,单卡约 88–104px
6276
+ */
6277
+
6278
+ .rv-material-sidebar {
6279
+ container-type: inline-size;
6280
+ container-name: rv-material;
6281
+ }
6282
+
6283
+ .rv-material-grid {
6284
+ display: grid;
6285
+ grid-template-columns: minmax(0, 1fr);
6286
+ justify-items: stretch;
6287
+ gap: 0.375rem;
6288
+ }
6289
+
6290
+ .rv-material-card {
6291
+ width: 100%;
6292
+ max-width: 112px;
6293
+ justify-self: center;
6294
+ }
6295
+
6296
+ @container rv-material (min-width: 200px) {
6297
+ .rv-material-grid {
6298
+ grid-template-columns: repeat(auto-fill, minmax(88px, 104px));
6299
+ }
6300
+
6301
+ .rv-material-card {
6302
+ max-width: none;
6303
+ justify-self: stretch;
6304
+ }
6305
+ }
6306
+
6307
+ /*
6308
+ * 配置侧栏:窄时多列表单改单列,避免挤成一团
6309
+ */
6310
+
6311
+ .scope-config-sidebar {
6312
+ container-type: inline-size;
6313
+ container-name: rv-config;
6314
+ }
6315
+
6316
+ @container rv-config (max-width: 260px) {
6317
+ .scope-config-sidebar .grid {
6318
+ grid-template-columns: minmax(0, 1fr) !important;
6319
+ }
6320
+
6321
+ .scope-config-sidebar .grid > * {
6322
+ min-width: 0;
6323
+ }
6324
+ }
6325
+
6326
+ /*
6327
+ * 节点选中描边:用倒数抵消画布 scale,屏幕上始终约 2px(勿用 ring/border,会随缩放变粗)
6328
+ */
6329
+
6330
+ .rv-node-selected {
6331
+ box-shadow: 0 0 0 calc(2px / var(--rv-canvas-scale, 1)) rgb(59 130 246 / 0.9);
6332
+ }
6333
+
6334
+ /* Selecto 框选:渲染在 body,线宽保持屏幕 1px */
6335
+
6336
+ .selecto-selection {
6337
+ border-width: 1px !important;
6338
+ box-sizing: border-box !important;
6339
+ }
6340
+
6278
6341
  /*
6279
6342
  * Moveable 控制框:
6280
6343
  * - 根节点必须高于画布元素 zIndex(节点默认 ≥1),否则多选组框线会被节点盖住,只剩锚点可见
@@ -6318,14 +6381,12 @@ video {
6318
6381
  background: transparent !important;
6319
6382
  }
6320
6383
 
6384
+ /* 锚点尺寸交给 Moveable 的 scale(zoom) 补偿,勿写死 px 覆盖,否则放大后会偏粗 */
6385
+
6321
6386
  .rv-moveable-layer .moveable-control {
6322
- width: 14px !important;
6323
- height: 14px !important;
6324
- margin-top: -7px !important;
6325
- margin-left: -7px !important;
6326
6387
  border-radius: 50% !important;
6327
6388
  box-sizing: border-box !important;
6328
- border: 2px solid hsl(var(--background)) !important;
6389
+ border-color: hsl(var(--background)) !important;
6329
6390
  background: #1990ff !important;
6330
6391
  background: var(--moveable-color) !important;
6331
6392
  z-index: 10 !important;
@@ -6367,6 +6428,10 @@ video {
6367
6428
  background-color: hsl(var(--accent) / 0.5);
6368
6429
  }
6369
6430
 
6431
+ .hover\:bg-accent\/55:hover {
6432
+ background-color: hsl(var(--accent) / 0.55);
6433
+ }
6434
+
6370
6435
  .hover\:bg-accent\/60:hover {
6371
6436
  background-color: hsl(var(--accent) / 0.6);
6372
6437
  }
@@ -6391,10 +6456,6 @@ video {
6391
6456
  background-color: hsl(var(--muted) / 0.3);
6392
6457
  }
6393
6458
 
6394
- .hover\:bg-muted\/35:hover {
6395
- background-color: hsl(var(--muted) / 0.35);
6396
- }
6397
-
6398
6459
  .hover\:bg-muted\/70:hover {
6399
6460
  background-color: hsl(var(--muted) / 0.7);
6400
6461
  }
@@ -6436,6 +6497,10 @@ video {
6436
6497
  text-decoration-line: underline;
6437
6498
  }
6438
6499
 
6500
+ .hover\:opacity-100:hover {
6501
+ opacity: 1;
6502
+ }
6503
+
6439
6504
  .focus\:border-border\/60:focus {
6440
6505
  border-color: hsl(var(--border) / 0.6);
6441
6506
  }
@@ -6495,8 +6560,20 @@ video {
6495
6560
  opacity: 0.5;
6496
6561
  }
6497
6562
 
6498
- .disabled\:opacity-60:disabled {
6499
- opacity: 0.6;
6563
+ .group\/node:focus-within .group-focus-within\/node\:pointer-events-auto {
6564
+ pointer-events: auto;
6565
+ }
6566
+
6567
+ .group\/node:focus-within .group-focus-within\/node\:opacity-100 {
6568
+ opacity: 1;
6569
+ }
6570
+
6571
+ .group\/node:hover .group-hover\/node\:pointer-events-auto {
6572
+ pointer-events: auto;
6573
+ }
6574
+
6575
+ .group\/node:hover .group-hover\/node\:opacity-100 {
6576
+ opacity: 1;
6500
6577
  }
6501
6578
 
6502
6579
  .data-\[state\=checked\]\:border-primary[data-state="checked"] {
@@ -6507,12 +6584,12 @@ video {
6507
6584
  border-color: hsl(var(--border) / 0.6);
6508
6585
  }
6509
6586
 
6510
- .data-\[state\=checked\]\:bg-primary\/80[data-state="checked"] {
6511
- background-color: hsl(var(--primary) / 0.8);
6587
+ .data-\[state\=checked\]\:bg-primary[data-state="checked"] {
6588
+ background-color: hsl(var(--primary));
6512
6589
  }
6513
6590
 
6514
- .data-\[state\=unchecked\]\:bg-secondary[data-state="unchecked"] {
6515
- background-color: hsl(var(--secondary));
6591
+ .data-\[state\=active\]\:font-semibold[data-state="active"] {
6592
+ font-weight: 600;
6516
6593
  }
6517
6594
 
6518
6595
  .data-\[state\=checked\]\:ring-primary\/40[data-state="checked"] {
@@ -6520,8 +6597,8 @@ video {
6520
6597
  }
6521
6598
 
6522
6599
  @supports (backdrop-filter: var(--tw)) {
6523
- .supports-\[backdrop-filter\]\:bg-card\/80 {
6524
- background-color: hsl(var(--card) / 0.8);
6600
+ .supports-\[backdrop-filter\]\:bg-background\/70 {
6601
+ background-color: hsl(var(--background) / 0.7);
6525
6602
  }
6526
6603
  }
6527
6604
 
@@ -6529,36 +6606,16 @@ video {
6529
6606
  border-color: rgb(245 158 11 / 0.4);
6530
6607
  }
6531
6608
 
6532
- .dark\:border-violet-400:is(.dark *) {
6533
- --tw-border-opacity: 1;
6534
- border-color: rgb(167 139 250 / var(--tw-border-opacity, 1));
6535
- }
6536
-
6537
- .dark\:border-violet-400\/65:is(.dark *) {
6538
- border-color: rgb(167 139 250 / 0.65);
6609
+ .dark\:border-violet-400\/70:is(.dark *) {
6610
+ border-color: rgb(167 139 250 / 0.7);
6539
6611
  }
6540
6612
 
6541
6613
  .dark\:bg-amber-950\/40:is(.dark *) {
6542
6614
  background-color: rgb(69 26 3 / 0.4);
6543
6615
  }
6544
6616
 
6545
- .dark\:bg-violet-500\/35:is(.dark *) {
6546
- background-color: rgb(139 92 246 / 0.35);
6547
- }
6548
-
6549
- .dark\:from-violet-500\/20:is(.dark *) {
6550
- --tw-gradient-from: rgb(139 92 246 / 0.2) var(--tw-gradient-from-position);
6551
- --tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);
6552
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
6553
- }
6554
-
6555
- .dark\:via-violet-950\/35:is(.dark *) {
6556
- --tw-gradient-to: rgb(46 16 101 / 0) var(--tw-gradient-to-position);
6557
- --tw-gradient-stops: var(--tw-gradient-from), rgb(46 16 101 / 0.35) var(--tw-gradient-via-position), var(--tw-gradient-to);
6558
- }
6559
-
6560
- .dark\:to-fuchsia-950\/25:is(.dark *) {
6561
- --tw-gradient-to: rgb(74 4 78 / 0.25) var(--tw-gradient-to-position);
6617
+ .dark\:bg-violet-500\/25:is(.dark *) {
6618
+ background-color: rgb(139 92 246 / 0.25);
6562
6619
  }
6563
6620
 
6564
6621
  .dark\:text-amber-200:is(.dark *) {
@@ -6591,42 +6648,33 @@ video {
6591
6648
  color: rgb(125 211 252 / var(--tw-text-opacity, 1));
6592
6649
  }
6593
6650
 
6594
- .dark\:text-violet-50:is(.dark *) {
6651
+ .dark\:text-violet-100:is(.dark *) {
6595
6652
  --tw-text-opacity: 1;
6596
- color: rgb(245 243 255 / var(--tw-text-opacity, 1));
6653
+ color: rgb(237 233 254 / var(--tw-text-opacity, 1));
6597
6654
  }
6598
6655
 
6599
- .dark\:shadow-\[0_0_12px_-2px_rgba\(167\2c 139\2c 250\2c 0\.55\)\]:is(.dark *) {
6600
- --tw-shadow: 0 0 12px -2px rgba(167,139,250,0.55);
6601
- --tw-shadow-colored: 0 0 12px -2px var(--tw-shadow-color);
6602
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
6603
- }
6604
-
6605
- .dark\:shadow-\[0_0_14px_-3px_rgba\(167\2c 139\2c 250\2c 0\.65\)\]:is(.dark *) {
6606
- --tw-shadow: 0 0 14px -3px rgba(167,139,250,0.65);
6607
- --tw-shadow-colored: 0 0 14px -3px var(--tw-shadow-color);
6608
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
6609
- }
6610
-
6611
- .dark\:shadow-\[inset_0_0_0_1px_rgba\(167\2c 139\2c 250\2c 0\.12\)\2c 0_0_20px_-8px_rgba\(139\2c 92\2c 246\2c 0\.35\)\]:is(.dark *) {
6612
- --tw-shadow: inset 0 0 0 1px rgba(167,139,250,0.12),0 0 20px -8px rgba(139,92,246,0.35);
6613
- --tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color), 0 0 20px -8px var(--tw-shadow-color);
6614
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
6656
+ .dark\:text-violet-200:is(.dark *) {
6657
+ --tw-text-opacity: 1;
6658
+ color: rgb(221 214 254 / var(--tw-text-opacity, 1));
6615
6659
  }
6616
6660
 
6617
6661
  @media (min-width: 640px) {
6618
- .sm\:flex {
6619
- display: flex;
6662
+ .sm\:inline {
6663
+ display: inline;
6620
6664
  }
6621
6665
 
6622
- .sm\:max-w-\[1100px\] {
6623
- max-width: 1100px;
6666
+ .sm\:flex {
6667
+ display: flex;
6624
6668
  }
6625
6669
 
6626
6670
  .sm\:max-w-\[520px\] {
6627
6671
  max-width: 520px;
6628
6672
  }
6629
6673
 
6674
+ .sm\:max-w-\[620px\] {
6675
+ max-width: 620px;
6676
+ }
6677
+
6630
6678
  .sm\:max-w-\[860px\] {
6631
6679
  max-width: 860px;
6632
6680
  }
@@ -6700,6 +6748,29 @@ video {
6700
6748
  width: 0.5rem;
6701
6749
  }
6702
6750
 
6751
+ .\[\&\>span\]\:line-clamp-none>span {
6752
+ overflow: visible;
6753
+ display: block;
6754
+ -webkit-box-orient: horizontal;
6755
+ -webkit-line-clamp: none;
6756
+ }
6757
+
6758
+ .\[\&\>span\]\:min-w-0>span {
6759
+ min-width: 0px;
6760
+ }
6761
+
6762
+ .\[\&\>span\]\:overflow-hidden>span {
6763
+ overflow: hidden;
6764
+ }
6765
+
6766
+ .\[\&\>span\]\:text-ellipsis>span {
6767
+ text-overflow: ellipsis;
6768
+ }
6769
+
6770
+ .\[\&\>span\]\:whitespace-nowrap>span {
6771
+ white-space: nowrap;
6772
+ }
6773
+
6703
6774
  .\[\&_\.cm-editor\]\:h-full .cm-editor {
6704
6775
  height: 100%;
6705
6776
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arronqzy/abuilder",
3
- "version": "1.1.40",
3
+ "version": "1.1.41",
4
4
  "description": "Abuilder 可视化编辑器 — 安装后即可通过 <App /> 渲染完整应用",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -30,12 +30,12 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@arronqzy/blueprint-dsl": "1.0.17",
33
- "@arronqzy/react-blueprint": "1.0.24",
33
+ "@arronqzy/react-view": "1.0.40",
34
34
  "@arronqzy/rx-store": "1.0.8",
35
- "@arronqzy/i18n": "0.1.17",
36
- "@arronqzy/ui": "1.0.10",
37
- "@arronqzy/react-view": "1.0.39",
38
- "@arronqzy/webllm-assistant": "0.1.16"
35
+ "@arronqzy/react-blueprint": "1.0.25",
36
+ "@arronqzy/ui": "1.0.11",
37
+ "@arronqzy/webllm-assistant": "0.1.16",
38
+ "@arronqzy/i18n": "0.1.17"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=18",