@xbeeant/form-engine-designer 0.0.3 → 0.0.4

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.
Files changed (131) hide show
  1. package/dist/es/Canvas.js +42 -47
  2. package/dist/es/Canvas.js.map +1 -1
  3. package/dist/es/Designer.js +121 -98
  4. package/dist/es/Designer.js.map +1 -1
  5. package/dist/es/DesignerContext.js +86 -73
  6. package/dist/es/DesignerContext.js.map +1 -1
  7. package/dist/es/Palette.js +3 -3
  8. package/dist/es/Palette.js.map +1 -1
  9. package/dist/es/PropertyPanel.js +99 -100
  10. package/dist/es/PropertyPanel.js.map +1 -1
  11. package/dist/es/catalog.js +17 -10
  12. package/dist/es/catalog.js.map +1 -1
  13. package/dist/es/designer-context.js +110 -0
  14. package/dist/es/designer-context.js.map +1 -0
  15. package/dist/es/history.js +73 -0
  16. package/dist/es/history.js.map +1 -0
  17. package/dist/es/index.css +1 -1
  18. package/dist/es/index.js +3 -3
  19. package/dist/es/property/basic-property.js +6 -0
  20. package/dist/es/property/basic-property.js.map +1 -1
  21. package/dist/es/property-panel.js +294 -0
  22. package/dist/es/property-panel.js.map +1 -0
  23. package/dist/es/resizable-panel.js +103 -0
  24. package/dist/es/resizable-panel.js.map +1 -0
  25. package/dist/es/schema-utils.js +286 -0
  26. package/dist/es/schema-utils.js.map +1 -0
  27. package/dist/es/widgets/BindEditor.js +60 -49
  28. package/dist/es/widgets/BindEditor.js.map +1 -1
  29. package/dist/es/widgets/CodeEditor.js +41 -49
  30. package/dist/es/widgets/CodeEditor.js.map +1 -1
  31. package/dist/es/widgets/DefaultEditor.js +25 -30
  32. package/dist/es/widgets/DefaultEditor.js.map +1 -1
  33. package/dist/es/widgets/DependenciesEditor.js +21 -21
  34. package/dist/es/widgets/DependenciesEditor.js.map +1 -1
  35. package/dist/es/widgets/EnumEditor.js +25 -31
  36. package/dist/es/widgets/EnumEditor.js.map +1 -1
  37. package/dist/es/widgets/ExpressionSwitch.js +32 -30
  38. package/dist/es/widgets/ExpressionSwitch.js.map +1 -1
  39. package/dist/es/widgets/ReactionsEditor.js +103 -103
  40. package/dist/es/widgets/ReactionsEditor.js.map +1 -1
  41. package/dist/es/widgets/RemoteDataEditor.js +63 -63
  42. package/dist/es/widgets/RemoteDataEditor.js.map +1 -1
  43. package/dist/es/widgets/ValidateEditor.js +49 -49
  44. package/dist/es/widgets/ValidateEditor.js.map +1 -1
  45. package/dist/es/widgets/bind-editor.js +78 -0
  46. package/dist/es/widgets/bind-editor.js.map +1 -0
  47. package/dist/es/widgets/code-editor.js +76 -0
  48. package/dist/es/widgets/code-editor.js.map +1 -0
  49. package/dist/es/widgets/default-editor.js +50 -0
  50. package/dist/es/widgets/default-editor.js.map +1 -0
  51. package/dist/es/widgets/dependencies-editor.js +36 -0
  52. package/dist/es/widgets/dependencies-editor.js.map +1 -0
  53. package/dist/es/widgets/enum-editor.js +43 -0
  54. package/dist/es/widgets/enum-editor.js.map +1 -0
  55. package/dist/es/widgets/expression-builder.js +367 -0
  56. package/dist/es/widgets/expression-builder.js.map +1 -0
  57. package/dist/es/widgets/expression-model.js +340 -0
  58. package/dist/es/widgets/expression-model.js.map +1 -0
  59. package/dist/es/widgets/expression-switch.js +49 -0
  60. package/dist/es/widgets/expression-switch.js.map +1 -0
  61. package/dist/es/widgets/index.js +13 -13
  62. package/dist/es/widgets/index.js.map +1 -1
  63. package/dist/es/widgets/options-editor.js +102 -0
  64. package/dist/es/widgets/options-editor.js.map +1 -0
  65. package/dist/es/widgets/reactions-editor.js +401 -0
  66. package/dist/es/widgets/reactions-editor.js.map +1 -0
  67. package/dist/es/widgets/reactions-model.js +107 -0
  68. package/dist/es/widgets/reactions-model.js.map +1 -0
  69. package/dist/es/widgets/remote-data-editor.js +314 -0
  70. package/dist/es/widgets/remote-data-editor.js.map +1 -0
  71. package/dist/es/widgets/use-form-data-fields.js +16 -0
  72. package/dist/es/widgets/use-form-data-fields.js.map +1 -0
  73. package/dist/es/widgets/validate-editor.js +118 -0
  74. package/dist/es/widgets/validate-editor.js.map +1 -0
  75. package/package.json +4 -5
  76. package/dist/es/react/src/components/FormController.js +0 -160
  77. package/dist/es/react/src/components/FormController.js.map +0 -1
  78. package/dist/es/react/src/components/NexusField.js +0 -98
  79. package/dist/es/react/src/components/NexusField.js.map +0 -1
  80. package/dist/es/react/src/components/NexusForm.js +0 -128
  81. package/dist/es/react/src/components/NexusForm.js.map +0 -1
  82. package/dist/es/react/src/components/NexusFormProvider.js +0 -19
  83. package/dist/es/react/src/components/NexusFormProvider.js.map +0 -1
  84. package/dist/es/react/src/components/NexusLayout.js +0 -49
  85. package/dist/es/react/src/components/NexusLayout.js.map +0 -1
  86. package/dist/es/react/src/components/NexusObject.js +0 -65
  87. package/dist/es/react/src/components/NexusObject.js.map +0 -1
  88. package/dist/es/react/src/contexts/FieldInheritContext.js +0 -6
  89. package/dist/es/react/src/contexts/FieldInheritContext.js.map +0 -1
  90. package/dist/es/react/src/contexts/GridContext.js +0 -6
  91. package/dist/es/react/src/contexts/GridContext.js.map +0 -1
  92. package/dist/es/react/src/contexts/LayoutConfigContext.js +0 -6
  93. package/dist/es/react/src/contexts/LayoutConfigContext.js.map +0 -1
  94. package/dist/es/react/src/contexts/NexusContext.js +0 -13
  95. package/dist/es/react/src/contexts/NexusContext.js.map +0 -1
  96. package/dist/es/react/src/hooks/useForm.js +0 -13
  97. package/dist/es/react/src/hooks/useForm.js.map +0 -1
  98. package/dist/es/react/src/utils/renderTreeNode.js +0 -18
  99. package/dist/es/react/src/utils/renderTreeNode.js.map +0 -1
  100. package/dist/es/react/src/utils/resolveColSpan.js +0 -10
  101. package/dist/es/react/src/utils/resolveColSpan.js.map +0 -1
  102. package/src/Canvas.tsx +0 -1111
  103. package/src/Designer.css +0 -206
  104. package/src/Designer.tsx +0 -254
  105. package/src/DesignerContext.tsx +0 -192
  106. package/src/Palette.tsx +0 -261
  107. package/src/PropertyPanel.tsx +0 -486
  108. package/src/ResizablePanel.tsx +0 -210
  109. package/src/catalog.ts +0 -527
  110. package/src/index.ts +0 -25
  111. package/src/property/basic-property.ts +0 -126
  112. package/src/schemaUtils.test.ts +0 -261
  113. package/src/schemaUtils.ts +0 -627
  114. package/src/types.ts +0 -38
  115. package/src/vite-env.d.ts +0 -1
  116. package/src/widgets/BindEditor.tsx +0 -105
  117. package/src/widgets/CodeEditor.tsx +0 -114
  118. package/src/widgets/DefaultEditor.tsx +0 -73
  119. package/src/widgets/DependenciesEditor.tsx +0 -56
  120. package/src/widgets/EnumEditor.tsx +0 -66
  121. package/src/widgets/ExpressionBuilder.tsx +0 -509
  122. package/src/widgets/ExpressionSwitch.tsx +0 -62
  123. package/src/widgets/OptionsEditor.tsx +0 -141
  124. package/src/widgets/ReactionsEditor.tsx +0 -532
  125. package/src/widgets/RemoteDataEditor.tsx +0 -382
  126. package/src/widgets/ValidateEditor.tsx +0 -162
  127. package/src/widgets/expressionModel.test.ts +0 -262
  128. package/src/widgets/expressionModel.ts +0 -573
  129. package/src/widgets/index.ts +0 -45
  130. package/src/widgets/reactionsModel.ts +0 -190
  131. package/src/widgets/useFormDataFields.ts +0 -21
@@ -1,6 +0,0 @@
1
- import { createContext as t } from "react";
2
- const o = t({});
3
- export {
4
- o as FieldInheritContext
5
- };
6
- //# sourceMappingURL=FieldInheritContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FieldInheritContext.js","sources":["../../../../../../react/src/contexts/FieldInheritContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\n/**\n * 字段继承上下文 — 数据对象容器(NexusObject)向下游字段下发继承属性\n *\n * 语义:\n * - 仅「激活」状态被下发:disabled/readOnly 只在父容器显式启用时\n * 携带 true(父级未设置时上下文不存在该键),子字段自行合并\n * - visible 为 false 表示祖先对象容器隐藏,子树整体不可见\n * - 合并优先级:祖先(已激活) > 字段自身状态 > 默认值\n */\nexport interface FieldInheritValue {\n /** 祖先对象容器禁用(仅 true 存在) */\n disabled?: boolean;\n /** 祖先对象容器只读(仅 true 存在) */\n readOnly?: boolean;\n /** 祖先对象容器隐藏 → 子树不可见(false 存在时子树全部隐藏) */\n visible?: boolean;\n}\n\nexport const FieldInheritContext = createContext<FieldInheritValue>({});\n"],"names":["FieldInheritContext","createContext"],"mappings":";AAoBO,MAAMA,IAAsBC,EAAiC,CAAA,CAAE;"}
@@ -1,6 +0,0 @@
1
- import { createContext as t } from "react";
2
- const e = t(null);
3
- export {
4
- e as GridContext
5
- };
6
- //# sourceMappingURL=GridContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GridContext.js","sources":["../../../../../../react/src/contexts/GridContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\n// 子项未显式设置 colSpan 时使用此默认值\nexport interface GridContextValue {\n /** 当前 grid 的列数(tailwind colSpan 基准) */\n column: number;\n}\nexport const GridContext = createContext<GridContextValue | null>(null);\n"],"names":["GridContext","createContext"],"mappings":";AAOO,MAAMA,IAAcC,EAAuC,IAAI;"}
@@ -1,6 +0,0 @@
1
- import { createContext as t } from "react";
2
- const e = t({});
3
- export {
4
- e as LayoutConfigContext
5
- };
6
- //# sourceMappingURL=LayoutConfigContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutConfigContext.js","sources":["../../../../../../react/src/contexts/LayoutConfigContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nexport interface LayoutConfigContextValue {\n removeHidden?: boolean;\n}\nexport const LayoutConfigContext = createContext<LayoutConfigContextValue>({});\n"],"names":["LayoutConfigContext","createContext"],"mappings":";AAKO,MAAMA,IAAsBC,EAAwC,CAAA,CAAE;"}
@@ -1,13 +0,0 @@
1
- import { useContext as t, createContext as o } from "react";
2
- const r = o(null);
3
- function u() {
4
- const e = t(r);
5
- if (!e)
6
- throw new Error("[NexusField] Must be used within <NexusFormProvider>");
7
- return e;
8
- }
9
- export {
10
- r as NexusContext,
11
- u as useNexusContext
12
- };
13
- //# sourceMappingURL=NexusContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NexusContext.js","sources":["../../../../../../react/src/contexts/NexusContext.ts"],"sourcesContent":["import type { NexusEngine } from '@xbeeant/form-engine';\nimport { createContext, type ReactNode, useContext } from 'react';\n\nimport type { FormController } from '../components/FormController';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Form 布局配置\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface NexusFormConfig {\n /** label 列配置(由 ui 层 Form.Item 消费) */\n labelCol?: Record<string, unknown>;\n /** label 宽度(px 或 %),快捷方式 — 映射到 labelCol.style.width */\n labelWidth?: number | string;\n /** 是否显示冒号 */\n colon?: boolean | ReactNode;\n /** 是否显示 label(默认 true) */\n label?: boolean;\n /** 表单布局方向 */\n displayType?: 'row' | 'column' | 'inline';\n /** 整个表单只读,所有字段以文本展示 */\n readOnly?: boolean;\n /** 表单每行显示多少列 */\n column?: number;\n}\n\ninterface NexusContextValue {\n engine: NexusEngine;\n config: NexusFormConfig;\n form: FormController;\n}\n\nexport const NexusContext = createContext<NexusContextValue | null>(null);\n\nexport function useNexusContext(): NexusContextValue {\n const ctx = useContext(NexusContext);\n if (!ctx) {\n throw new Error('[NexusField] Must be used within <NexusFormProvider>');\n }\n return ctx;\n}\n"],"names":["NexusContext","createContext","useNexusContext","ctx","useContext"],"mappings":";AAgCO,MAAMA,IAAeC,EAAwC,IAAI;AAEjE,SAASC,IAAqC;AACnD,QAAMC,IAAMC,EAAWJ,CAAY;AACnC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,sDAAsD;AAExE,SAAOA;AACT;"}
@@ -1,13 +0,0 @@
1
- import "@xbeeant/form-engine";
2
- import { useRef as o } from "react";
3
- import { FormController as e } from "../components/FormController.js";
4
- function i(n, t) {
5
- const r = o(null);
6
- return r.current || (r.current = new e(
7
- void 0
8
- )), [r.current];
9
- }
10
- export {
11
- i as useForm
12
- };
13
- //# sourceMappingURL=useForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useForm.js","sources":["../../../../../../react/src/hooks/useForm.ts"],"sourcesContent":["import { NexusEngine } from '@xbeeant/form-engine';\nimport { useRef } from 'react';\n\nimport { FormController } from '../components/FormController';\n\n/**\n * useForm — 创建 Form 实例\n *\n * 支持一个页面挂载多个表单实例:\n * - `useForm()`:独立实例(未注册,不参与跨表单联动)\n * - `useForm(formId)`:创建带 formId 的实例,自动注册到默认表单注册表,\n * 可通过 schema `crossForm` reaction / `engine.linkForm` 与其他表单联动\n * - `useForm(formId, engine)`:复用外部创建的引擎(如 `new NexusEngine({ formId })`)\n *\n * @param formId - 可选,表单实例唯一标识(跨表单联动寻址)\n * @param engine - 可选,外部引擎实例(缺省内部创建)\n */\nexport function useForm(\n formId?: string,\n engine?: NexusEngine,\n): [FormController] {\n const formRef = useRef<FormController | null>(null);\n if (!formRef.current) {\n formRef.current = new FormController(\n engine ?? (formId ? new NexusEngine({ formId }) : undefined),\n );\n }\n return [formRef.current];\n}\n"],"names":["useForm","formId","engine","formRef","useRef","FormController"],"mappings":";;;AAiBO,SAASA,EACdC,GACAC,GACkB;AAClB,QAAMC,IAAUC,EAA8B,IAAI;AAClD,SAAKD,EAAQ,YACXA,EAAQ,UAAU,IAAIE;AAAA,IAC8B;AAAA,EAAA,IAG/C,CAACF,EAAQ,OAAO;AACzB;"}
@@ -1,18 +0,0 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { NexusField as e } from "../components/NexusField.js";
3
- import { NexusLayout as u } from "../components/NexusLayout.js";
4
- import { NexusObject as y } from "../components/NexusObject.js";
5
- function p(t, a) {
6
- return t.type === "field" ? /* @__PURE__ */ r(
7
- e,
8
- {
9
- dataPath: t.dataPath,
10
- layoutKey: t.layoutKey
11
- },
12
- t.layoutKey || t.dataPath
13
- ) : t.type === "object" ? /* @__PURE__ */ r(y, { node: t }, `object-${t.layoutKey}-${a}`) : /* @__PURE__ */ r(u, { node: t }, `layout-${t.type}-${a}`);
14
- }
15
- export {
16
- p as renderTreeNode
17
- };
18
- //# sourceMappingURL=renderTreeNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderTreeNode.js","sources":["../../../../../../react/src/utils/renderTreeNode.tsx"],"sourcesContent":["import type { RenderTreeNode } from '@xbeeant/form-engine';\nimport type { ReactElement } from 'react';\n\nimport { NexusField } from '../components/NexusField';\nimport { NexusLayout } from '../components/NexusLayout';\nimport { NexusObject } from '../components/NexusObject';\n\n/**\n * renderTreeNode — 递归渲染\n */\nexport function renderTreeNode(\n node: RenderTreeNode,\n index: number,\n): ReactElement {\n if (node.type === 'field') {\n return (\n <NexusField\n key={node.layoutKey || node.dataPath}\n dataPath={node.dataPath}\n layoutKey={node.layoutKey}\n />\n );\n }\n if (node.type === 'object') {\n return (\n <NexusObject key={`object-${node.layoutKey}-${index}`} node={node} />\n );\n }\n return <NexusLayout key={`layout-${node.type}-${index}`} node={node} />;\n}\n"],"names":["renderTreeNode","node","index","jsx","NexusField","NexusObject","NexusLayout"],"mappings":";;;;AAUO,SAASA,EACdC,GACAC,GACc;AACd,SAAID,EAAK,SAAS,UAEd,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,UAAUH,EAAK;AAAA,MACf,WAAWA,EAAK;AAAA,IAAA;AAAA,IAFXA,EAAK,aAAaA,EAAK;AAAA,EAAA,IAM9BA,EAAK,SAAS,WAEd,gBAAAE,EAACE,KAAsD,MAAAJ,KAArC,UAAUA,EAAK,SAAS,IAAIC,CAAK,EAAgB,IAGhE,gBAAAC,EAACG,KAAiD,MAAAL,KAAhC,UAAUA,EAAK,IAAI,IAAIC,CAAK,EAAgB;AACvE;"}
@@ -1,10 +0,0 @@
1
- function u(o, n) {
2
- if (o !== void 0)
3
- return o;
4
- if (n && n.column > 0)
5
- return Math.max(1, Math.round(n.column / 24));
6
- }
7
- export {
8
- u as resolveColSpan
9
- };
10
- //# sourceMappingURL=resolveColSpan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveColSpan.js","sources":["../../../../../../react/src/utils/resolveColSpan.ts"],"sourcesContent":["import type { GridContextValue } from '../contexts/GridContext';\n\n/**\n * resolveColSpan — 统一解析子项在父 Grid 中的跨列数\n */\nexport function resolveColSpan(\n colSpan: number | undefined,\n gridCtx: GridContextValue | null,\n): number | undefined {\n if (colSpan !== undefined) {\n return colSpan;\n }\n\n // 在 grid 容器内:把 24 栅格语义缩放到当前 column\n if (gridCtx && gridCtx.column > 0) {\n return Math.max(1, Math.round(gridCtx.column / 24));\n }\n}\n"],"names":["resolveColSpan","colSpan","gridCtx"],"mappings":"AAKO,SAASA,EACdC,GACAC,GACoB;AACpB,MAAID,MAAY;AACd,WAAOA;AAIT,MAAIC,KAAWA,EAAQ,SAAS;AAC9B,WAAO,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAQ,SAAS,EAAE,CAAC;AAEtD;"}