@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 +1 @@
1
- {"version":3,"file":"catalog.js","sources":["../../src/catalog.ts"],"sourcesContent":["// ============================================================================\n// @xbeeant/form-engine-designer — 组件目录\n// ============================================================================\n\nimport type { CatalogItem } from './types';\n\n/**\n * 表单组件目录\n * 每个项创建一个 DataFieldSchema 节点\n * widget 名对齐 @xbeeant/form-engine-ui 中 antdWidgets 实际注册的 key\n */\nexport const widgetCatalog: CatalogItem[] = [\n {\n label: '输入框',\n icon: '📝',\n category: 'widget',\n widget: 'input',\n createNode: () => ({ type: 'string', widget: 'input', title: '输入框' }),\n },\n {\n label: '密码框',\n icon: '🔑',\n category: 'widget',\n widget: 'password',\n createNode: () => ({ type: 'string', widget: 'password', title: '密码框' }),\n },\n {\n label: '数字输入',\n icon: '🔢',\n category: 'widget',\n widget: 'number',\n createNode: () => ({ type: 'number', widget: 'number', title: '数字输入' }),\n },\n {\n label: '文本域',\n icon: '📄',\n category: 'widget',\n widget: 'textarea',\n createNode: () => ({ type: 'string', widget: 'textarea', title: '文本域' }),\n },\n {\n label: '下拉选择',\n icon: '📋',\n category: 'widget',\n widget: 'select',\n createNode: () => ({\n type: 'string',\n widget: 'select',\n title: '下拉选择',\n enum: ['option1', 'option2'],\n enumNames: ['选项1', '选项2'],\n }),\n },\n {\n label: '下拉选择(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'selectWithRemote',\n createNode: () => ({\n type: 'string',\n widget: 'selectWithRemote',\n title: '下拉选择(远程)',\n remoteData: {\n url: '/api/options',\n method: 'GET',\n responseField: { data: 'data.list', value: 'id', label: 'name' },\n params: { page: 1, pageSize: 50 },\n },\n }),\n },\n {\n label: '单选',\n icon: '🔘',\n category: 'widget',\n widget: 'radio',\n createNode: () => ({\n type: 'string',\n widget: 'radio',\n title: '单选',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '复选框',\n icon: '☑️',\n category: 'widget',\n widget: 'checkbox',\n createNode: () => ({\n type: 'boolean',\n widget: 'checkbox',\n title: '复选框',\n }),\n },\n {\n label: '多选',\n icon: '☒',\n category: 'widget',\n widget: 'checkboxes',\n createNode: () => ({\n type: 'array',\n widget: 'checkboxes',\n title: '多选',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '多选下拉',\n icon: '📊',\n category: 'widget',\n widget: 'multiSelect',\n createNode: () => ({\n type: 'array',\n widget: 'multiSelect',\n title: '多选下拉',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '多选下拉(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'multiSelectWithRemote',\n createNode: () => ({\n type: 'array',\n widget: 'multiSelectWithRemote',\n title: '多选下拉(远程)',\n remoteData: {\n url: '/api/multi-options',\n method: 'GET',\n responseField: { data: 'data.list', value: 'id', label: 'name' },\n params: { page: 1, pageSize: 50 },\n },\n }),\n },\n {\n label: '开关',\n icon: '🔀',\n category: 'widget',\n widget: 'switch',\n createNode: () => ({ type: 'boolean', widget: 'switch', title: '开关' }),\n },\n {\n label: '日期选择',\n icon: '📅',\n category: 'widget',\n widget: 'date',\n createNode: () => ({ type: 'string', widget: 'date', title: '日期选择' }),\n },\n {\n label: '日期范围',\n icon: '📅',\n category: 'widget',\n widget: 'dateRange',\n createNode: () => ({\n type: 'string',\n widget: 'dateRange',\n title: '日期范围',\n }),\n },\n {\n label: '时间选择',\n icon: '⏰',\n category: 'widget',\n widget: 'time',\n createNode: () => ({ type: 'string', widget: 'time', title: '时间选择' }),\n },\n {\n label: '时间范围',\n icon: '⏰',\n category: 'widget',\n widget: 'timeRange',\n createNode: () => ({\n type: 'string',\n widget: 'timeRange',\n title: '时间范围',\n }),\n },\n {\n label: '滑块',\n icon: '🎚️',\n category: 'widget',\n widget: 'slider',\n createNode: () => ({ type: 'number', widget: 'slider', title: '滑块' }),\n },\n {\n label: '颜色选择',\n icon: '🎨',\n category: 'widget',\n widget: 'color',\n createNode: () => ({ type: 'string', widget: 'color', title: '颜色选择' }),\n },\n {\n label: 'URL输入',\n icon: '🔗',\n category: 'widget',\n widget: 'urlInput',\n createNode: () => ({\n type: 'string',\n widget: 'urlInput',\n title: 'URL输入',\n }),\n },\n {\n label: '图片上传',\n icon: '🖼️',\n category: 'widget',\n widget: 'image',\n createNode: () => ({ type: 'string', widget: 'image', title: '图片上传' }),\n },\n {\n label: 'HTML展示',\n icon: '📄',\n category: 'widget',\n widget: 'html',\n createNode: () => ({ type: 'string', widget: 'html', title: 'HTML展示' }),\n },\n {\n label: '标题文字',\n icon: '🏷️',\n category: 'widget',\n widget: 'voidTitle',\n createNode: () => ({\n type: 'string',\n widget: 'voidTitle',\n title: '标题文字',\n label: false,\n }),\n },\n {\n label: '树选择',\n icon: '🌲',\n category: 'widget',\n widget: 'treeSelect',\n createNode: () => ({\n type: 'string',\n widget: 'treeSelect',\n title: '树选择',\n }),\n },\n {\n label: '自动完成',\n icon: '🔎',\n category: 'widget',\n widget: 'autoComplete',\n createNode: () => ({\n type: 'string',\n widget: 'autoComplete',\n title: '自动完成',\n enum: ['option1', 'option2'],\n enumNames: ['选项1', '选项2'],\n }),\n },\n {\n label: '自动完成(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'autoCompleteWithRemote',\n createNode: () => ({\n type: 'string',\n widget: 'autoCompleteWithRemote',\n title: '自动完成(远程)',\n remoteData: {\n url: '/api/suggestions',\n method: 'GET',\n responseField: { data: 'data.suggestions', value: 'id', label: 'name' },\n params: { keyword: '' },\n },\n }),\n },\n {\n label: '级联选择',\n icon: '🌳',\n category: 'widget',\n widget: 'cascader',\n createNode: () => ({\n type: 'array',\n widget: 'cascader',\n title: '级联选择',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '级联选择(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'cascaderWithRemote',\n createNode: () => ({\n type: 'array',\n widget: 'cascaderWithRemote',\n title: '级联选择(远程)',\n remoteData: {\n url: '/api/cascader/nodes',\n method: 'GET',\n responseField: {\n data: 'data.children',\n value: 'id',\n label: 'name',\n parentIdKey: 'parentId',\n },\n params: { parentId: null },\n },\n }),\n },\n {\n label: '提及',\n icon: '💬',\n category: 'widget',\n widget: 'mentions',\n createNode: () => ({\n type: 'string',\n widget: 'mentions',\n title: '提及',\n enum: ['alice', 'bob'],\n enumNames: ['Alice', 'Bob'],\n }),\n },\n {\n label: '提及(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'mentionsWithRemote',\n createNode: () => ({\n type: 'string',\n widget: 'mentionsWithRemote',\n title: '提及(远程)',\n remoteData: {\n url: '/api/users/suggestions',\n method: 'GET',\n responseField: { data: 'data.users', value: 'id', label: 'name' },\n params: { keyword: '' },\n },\n }),\n },\n {\n label: '分段控制器',\n icon: '🎚️',\n category: 'widget',\n widget: 'segmented',\n createNode: () => ({\n type: 'string',\n widget: 'segmented',\n title: '分段控制器',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '穿梭框',\n icon: '⇄',\n category: 'widget',\n widget: 'transfer',\n createNode: () => ({\n type: 'array',\n widget: 'transfer',\n title: '穿梭框',\n }),\n },\n {\n label: '文件上传',\n icon: '📎',\n category: 'widget',\n widget: 'file',\n createNode: () => ({ type: 'array', widget: 'file', title: '文件上传' }),\n },\n {\n label: '数据对象',\n icon: '🗂️',\n category: 'widget',\n widget: 'object',\n createNode: () => ({ type: 'object', title: '数据对象', properties: {} }),\n },\n {\n label: '常规列表',\n icon: '📋',\n category: 'widget',\n widget: 'list',\n createNode: () => ({\n type: 'array',\n widget: 'list',\n title: '常规列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n {\n label: '简单列表',\n icon: '📃',\n category: 'widget',\n widget: 'simpleList',\n createNode: () => ({\n type: 'array',\n widget: 'simpleList',\n title: '简单列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n {\n label: '表格列表',\n icon: '📊',\n category: 'widget',\n widget: 'tableList',\n createNode: () => ({\n type: 'array',\n widget: 'tableList',\n title: '表格列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n];\n\n/**\n * 布局组件目录\n * 每个项创建一个 LayoutContainerSchema 节点\n */\nexport const layoutCatalog: CatalogItem[] = [\n {\n label: '卡片',\n icon: '📦',\n category: 'layout',\n layoutType: 'card',\n createNode: () => ({ type: 'card', title: '卡片', properties: {} }),\n },\n {\n label: '栅格',\n icon: '🔲',\n category: 'layout',\n layoutType: 'grid',\n createNode: () => ({ type: 'grid', column: 2, properties: {} }),\n },\n {\n label: '标签页',\n icon: '📑',\n category: 'layout',\n layoutType: 'tabs',\n createNode: () => ({\n type: 'tabs',\n title: '标签页',\n properties: {\n pane1: { type: 'tabPane', title: '标签页签 1', properties: {} },\n },\n }),\n },\n {\n label: '标签页签',\n icon: '📑',\n category: 'layout',\n layoutType: 'tabPane',\n createNode: () => ({ type: 'tabPane', title: '标签页签', properties: {} }),\n },\n {\n label: '折叠面板',\n icon: '📂',\n category: 'layout',\n layoutType: 'collapse',\n createNode: () => ({\n type: 'collapse',\n title: '折叠面板',\n properties: {\n panel1: { type: 'collapsePanel', title: '折叠面板 1', properties: {} },\n },\n }),\n },\n {\n label: '折叠面板项',\n icon: '📂',\n category: 'layout',\n layoutType: 'collapsePanel',\n createNode: () => ({\n type: 'collapsePanel',\n title: '折叠面板项',\n properties: {},\n }),\n },\n {\n label: '步骤条',\n icon: '📝',\n category: 'layout',\n layoutType: 'steps',\n createNode: () => ({\n type: 'steps',\n title: '步骤条',\n properties: {\n step1: { type: 'step', title: '步骤 1', properties: {} },\n },\n }),\n },\n {\n label: '步骤项',\n icon: '📝',\n category: 'layout',\n layoutType: 'step',\n createNode: () => ({ type: 'step', title: '步骤项', properties: {} }),\n },\n {\n label: '分割线',\n icon: '➖',\n category: 'layout',\n layoutType: 'divider',\n createNode: () => ({ type: 'divider', properties: {} }),\n },\n {\n label: '弹性布局',\n icon: '📐',\n category: 'layout',\n layoutType: 'flex',\n createNode: () => ({ type: 'flex', properties: {} }),\n },\n {\n label: '间距布局',\n icon: '↔️',\n category: 'layout',\n layoutType: 'space',\n createNode: () => ({ type: 'space', properties: {} }),\n },\n];\n"],"names":["widgetCatalog","layoutCatalog"],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sources":["../../src/catalog.ts"],"sourcesContent":["// ============================================================================\n// @xbeeant/form-engine-designer — 组件目录\n// ============================================================================\n\nimport type { CatalogItem } from './types';\n\n/**\n * 表单组件目录\n * 每个项创建一个 DataFieldSchema 节点\n * widget 名对齐 @xbeeant/form-engine-ui 中 antdWidgets 实际注册的 key\n */\nexport const widgetCatalog: CatalogItem[] = [\n {\n label: '输入框',\n icon: '📝',\n category: 'widget',\n widget: 'input',\n createNode: () => ({ type: 'string', widget: 'input', title: '输入框' }),\n },\n {\n label: '密码框',\n icon: '🔑',\n category: 'widget',\n widget: 'password',\n createNode: () => ({ type: 'string', widget: 'password', title: '密码框' }),\n },\n {\n label: '数字输入',\n icon: '🔢',\n category: 'widget',\n widget: 'number',\n createNode: () => ({ type: 'number', widget: 'number', title: '数字输入' }),\n },\n {\n label: '文本域',\n icon: '📄',\n category: 'widget',\n widget: 'textarea',\n createNode: () => ({ type: 'string', widget: 'textarea', title: '文本域' }),\n },\n {\n label: '下拉选择',\n icon: '📋',\n category: 'widget',\n widget: 'select',\n createNode: () => ({\n type: 'string',\n widget: 'select',\n title: '下拉选择',\n enum: ['option1', 'option2'],\n enumNames: ['选项1', '选项2'],\n }),\n },\n {\n label: '下拉选择(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'remoteSelect',\n createNode: () => ({\n type: 'string',\n widget: 'remoteSelect',\n title: '下拉选择(远程)',\n remoteData: {\n url: '/api/options',\n method: 'GET',\n responseField: { data: 'data.list', value: 'id', label: 'name' },\n params: { page: 1, pageSize: 50 },\n },\n }),\n },\n {\n label: '单选',\n icon: '🔘',\n category: 'widget',\n widget: 'radio',\n createNode: () => ({\n type: 'string',\n widget: 'radio',\n title: '单选',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '复选框',\n icon: '☑️',\n category: 'widget',\n widget: 'checkbox',\n createNode: () => ({\n type: 'boolean',\n widget: 'checkbox',\n title: '复选框',\n }),\n },\n {\n label: '多选',\n icon: '☒',\n category: 'widget',\n widget: 'checkboxes',\n createNode: () => ({\n type: 'array',\n widget: 'checkboxes',\n title: '多选',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '多选下拉',\n icon: '📊',\n category: 'widget',\n widget: 'multiSelect',\n createNode: () => ({\n type: 'array',\n widget: 'multiSelect',\n title: '多选下拉',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '多选下拉(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'remoteMultiSelect',\n createNode: () => ({\n type: 'array',\n widget: 'remoteMultiSelect',\n title: '多选下拉(远程)',\n remoteData: {\n url: '/api/multi-options',\n method: 'GET',\n responseField: { data: 'data.list', value: 'id', label: 'name' },\n params: { page: 1, pageSize: 50 },\n },\n }),\n },\n {\n label: '开关',\n icon: '🔀',\n category: 'widget',\n widget: 'switch',\n createNode: () => ({ type: 'boolean', widget: 'switch', title: '开关' }),\n },\n {\n label: '日期选择',\n icon: '📅',\n category: 'widget',\n widget: 'date',\n createNode: () => ({ type: 'string', widget: 'date', title: '日期选择' }),\n },\n {\n label: '日期范围',\n icon: '📅',\n category: 'widget',\n widget: 'dateRange',\n createNode: () => ({\n type: 'string',\n widget: 'dateRange',\n title: '日期范围',\n }),\n },\n {\n label: '时间选择',\n icon: '⏰',\n category: 'widget',\n widget: 'time',\n createNode: () => ({ type: 'string', widget: 'time', title: '时间选择' }),\n },\n {\n label: '时间范围',\n icon: '⏰',\n category: 'widget',\n widget: 'timeRange',\n createNode: () => ({\n type: 'string',\n widget: 'timeRange',\n title: '时间范围',\n }),\n },\n {\n label: '滑块',\n icon: '🎚️',\n category: 'widget',\n widget: 'slider',\n createNode: () => ({ type: 'number', widget: 'slider', title: '滑块' }),\n },\n {\n label: '颜色选择',\n icon: '🎨',\n category: 'widget',\n widget: 'color',\n createNode: () => ({ type: 'string', widget: 'color', title: '颜色选择' }),\n },\n {\n label: 'URL输入',\n icon: '🔗',\n category: 'widget',\n widget: 'urlInput',\n createNode: () => ({\n type: 'string',\n widget: 'urlInput',\n title: 'URL输入',\n }),\n },\n {\n label: '图片上传',\n icon: '🖼️',\n category: 'widget',\n widget: 'image',\n createNode: () => ({ type: 'string', widget: 'image', title: '图片上传' }),\n },\n {\n label: 'HTML展示',\n icon: '📄',\n category: 'widget',\n widget: 'html',\n createNode: () => ({ type: 'string', widget: 'html', title: 'HTML展示' }),\n },\n {\n label: '标题文字',\n icon: '🏷️',\n category: 'widget',\n widget: 'voidTitle',\n createNode: () => ({\n type: 'string',\n widget: 'voidTitle',\n title: '标题文字',\n label: false,\n }),\n },\n {\n label: '树选择',\n icon: '🌲',\n category: 'widget',\n widget: 'treeSelect',\n createNode: () => ({\n type: 'string',\n widget: 'treeSelect',\n title: '树选择',\n }),\n },\n {\n label: '自动完成',\n icon: '🔎',\n category: 'widget',\n widget: 'autoComplete',\n createNode: () => ({\n type: 'string',\n widget: 'autoComplete',\n title: '自动完成',\n enum: ['option1', 'option2'],\n enumNames: ['选项1', '选项2'],\n }),\n },\n {\n label: '自动完成(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'remoteAutoComplete',\n createNode: () => ({\n type: 'string',\n widget: 'remoteAutoComplete',\n title: '自动完成(远程)',\n remoteData: {\n url: '/api/suggestions',\n method: 'GET',\n responseField: { data: 'data.suggestions', value: 'id', label: 'name' },\n params: { keyword: '' },\n },\n }),\n },\n {\n label: '级联选择',\n icon: '🌳',\n category: 'widget',\n widget: 'cascader',\n createNode: () => ({\n type: 'array',\n widget: 'cascader',\n title: '级联选择',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '级联选择(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'remoteCascader',\n createNode: () => ({\n type: 'array',\n widget: 'remoteCascader',\n title: '级联选择(远程)',\n remoteData: {\n url: '/api/cascader/nodes',\n method: 'GET',\n responseField: {\n data: 'data.children',\n value: 'id',\n label: 'name',\n parentIdKey: 'parentId',\n },\n params: { parentId: null },\n },\n }),\n },\n {\n label: '提及',\n icon: '💬',\n category: 'widget',\n widget: 'mentions',\n createNode: () => ({\n type: 'string',\n widget: 'mentions',\n title: '提及',\n enum: ['alice', 'bob'],\n enumNames: ['Alice', 'Bob'],\n }),\n },\n {\n label: '提及(远程)',\n icon: '📡',\n category: 'widget',\n widget: 'remoteMentions',\n createNode: () => ({\n type: 'string',\n widget: 'remoteMentions',\n title: '提及(远程)',\n remoteData: {\n url: '/api/users/suggestions',\n method: 'GET',\n responseField: { data: 'data.users', value: 'id', label: 'name' },\n params: { keyword: '' },\n },\n }),\n },\n {\n label: '分段控制器',\n icon: '🎚️',\n category: 'widget',\n widget: 'segmented',\n createNode: () => ({\n type: 'string',\n widget: 'segmented',\n title: '分段控制器',\n enum: ['a', 'b'],\n enumNames: ['选项A', '选项B'],\n }),\n },\n {\n label: '穿梭框',\n icon: '⇄',\n category: 'widget',\n widget: 'transfer',\n createNode: () => ({\n type: 'array',\n widget: 'transfer',\n title: '穿梭框',\n }),\n },\n {\n label: '文件上传',\n icon: '📎',\n category: 'widget',\n widget: 'file',\n createNode: () => ({ type: 'array', widget: 'file', title: '文件上传' }),\n },\n {\n label: '数据对象',\n icon: '🗂️',\n category: 'widget',\n widget: 'object',\n createNode: () => ({ type: 'object', title: '数据对象', properties: {} }),\n },\n {\n label: '常规列表',\n icon: '📋',\n category: 'widget',\n widget: 'list',\n createNode: () => ({\n type: 'array',\n widget: 'list',\n title: '常规列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n {\n label: '简单列表',\n icon: '📃',\n category: 'widget',\n widget: 'simpleList',\n createNode: () => ({\n type: 'array',\n widget: 'simpleList',\n title: '简单列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n {\n label: '表格列表',\n icon: '📊',\n category: 'widget',\n widget: 'tableList',\n createNode: () => ({\n type: 'array',\n widget: 'tableList',\n title: '表格列表',\n items: {\n type: 'object',\n properties: {},\n },\n }),\n },\n];\n\n/**\n * 布局组件目录\n * 每个项创建一个 LayoutContainerSchema 节点\n */\nexport const layoutCatalog: CatalogItem[] = [\n {\n label: '卡片',\n icon: '📦',\n category: 'layout',\n layoutType: 'card',\n createNode: () => ({ type: 'card', title: '卡片', properties: {} }),\n },\n {\n label: '栅格',\n icon: '🔲',\n category: 'layout',\n layoutType: 'grid',\n createNode: () => ({ type: 'grid', column: 2, properties: {} }),\n },\n {\n label: '标签页',\n icon: '📑',\n category: 'layout',\n layoutType: 'tabs',\n createNode: () => ({\n type: 'tabs',\n title: '标签页',\n properties: {\n pane1: { type: 'tabPane', title: '标签页签 1', properties: {} },\n },\n }),\n },\n {\n label: '标签页签',\n icon: '📑',\n category: 'layout',\n layoutType: 'tabPane',\n createNode: () => ({ type: 'tabPane', title: '标签页签', properties: {} }),\n },\n {\n label: '折叠面板',\n icon: '📂',\n category: 'layout',\n layoutType: 'collapse',\n createNode: () => ({\n type: 'collapse',\n title: '折叠面板',\n properties: {\n panel1: { type: 'collapsePanel', title: '折叠面板 1', properties: {} },\n },\n }),\n },\n {\n label: '折叠面板项',\n icon: '📂',\n category: 'layout',\n layoutType: 'collapsePanel',\n createNode: () => ({\n type: 'collapsePanel',\n title: '折叠面板项',\n properties: {},\n }),\n },\n {\n label: '步骤条',\n icon: '📝',\n category: 'layout',\n layoutType: 'steps',\n createNode: () => ({\n type: 'steps',\n title: '步骤条',\n properties: {\n step1: { type: 'step', title: '步骤 1', properties: {} },\n },\n }),\n },\n {\n label: '步骤项',\n icon: '📝',\n category: 'layout',\n layoutType: 'step',\n createNode: () => ({ type: 'step', title: '步骤项', properties: {} }),\n },\n {\n label: '分割线',\n icon: '➖',\n category: 'layout',\n layoutType: 'divider',\n createNode: () => ({ type: 'divider', properties: {} }),\n },\n {\n label: '弹性布局',\n icon: '📐',\n category: 'layout',\n layoutType: 'flex',\n createNode: () => ({ type: 'flex', properties: {} }),\n },\n {\n label: '间距布局',\n icon: '↔️',\n category: 'layout',\n layoutType: 'space',\n createNode: () => ({ type: 'space', properties: {} }),\n },\n {\n label: '透传容器',\n icon: '📶',\n category: 'layout',\n layoutType: 'passThrough',\n createNode: () => ({ type: 'passThrough', properties: {} }),\n },\n];\n"],"names":["widgetCatalog","layoutCatalog"],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { jsx as T } from "react/jsx-runtime";
2
+ import { createContext as U, useState as u, useRef as W, useCallback as n, useMemo as _, useContext as q } from "react";
3
+ import { SchemaHistory as z } from "./history.js";
4
+ import { addChildToSchema as A, removeNodeFromSchema as B, updateNodeWithNesting as G, moveNodeInSchema as J, renameNodeInSchema as K } from "./schema-utils.js";
5
+ const k = U(null);
6
+ function Z({
7
+ initialSchema: i,
8
+ propertySchemaMap: N,
9
+ onSchemaChange: s,
10
+ registerUI: f,
11
+ fields: v,
12
+ widgetCatalog: h,
13
+ layoutCatalog: P,
14
+ children: E
15
+ }) {
16
+ const [t, m] = u(i), [p, l] = u(null), [x, F] = u("design"), d = W(new z()), [L, a] = u(0), r = n(
17
+ (e, o = "replace", c = null) => {
18
+ d.current.push(t, o, c), a((M) => M + 1), m(e), s?.(e);
19
+ },
20
+ [t, s]
21
+ ), D = n(() => {
22
+ const e = d.current.undo(t);
23
+ e !== null && (a((o) => o + 1), m(e), s?.(e));
24
+ }, [t, s]), R = n(() => {
25
+ const e = d.current.redo();
26
+ e !== null && (a((o) => o + 1), m(e), s?.(e));
27
+ }, [s]), S = n((e) => r(e), [r]), w = n((e) => {
28
+ l(e);
29
+ }, []), j = n(
30
+ (e, o, c) => {
31
+ r(A(t, e, o, c), "edit");
32
+ },
33
+ [t, r]
34
+ ), y = n(
35
+ (e) => {
36
+ r(B(t, e), "edit"), l(null);
37
+ },
38
+ [t, r]
39
+ ), H = n(
40
+ (e, o) => {
41
+ r(G(t, e, o), "edit", e.join("."));
42
+ },
43
+ [t, r]
44
+ ), V = n(
45
+ (e, o) => {
46
+ r(J(t, e, o), "edit");
47
+ },
48
+ [t, r]
49
+ ), b = n(
50
+ (e, o) => {
51
+ const c = K(t, e, o);
52
+ r(c.schema, "edit"), l(c.newPath);
53
+ },
54
+ [t, r]
55
+ ), I = _(
56
+ () => ({
57
+ schema: t,
58
+ selectedPath: p,
59
+ mode: x,
60
+ registerUI: f,
61
+ fields: v,
62
+ widgetCatalog: h,
63
+ layoutCatalog: P,
64
+ propertySchemaMap: N,
65
+ setSchema: S,
66
+ selectNode: w,
67
+ setMode: F,
68
+ addNode: j,
69
+ removeNode: y,
70
+ updateNode: H,
71
+ moveNode: V,
72
+ renameNode: b,
73
+ undo: D,
74
+ redo: R,
75
+ canUndo: d.current.canUndo,
76
+ canRedo: d.current.canRedo
77
+ }),
78
+ [
79
+ t,
80
+ N,
81
+ p,
82
+ x,
83
+ f,
84
+ v,
85
+ h,
86
+ P,
87
+ S,
88
+ j,
89
+ y,
90
+ H,
91
+ V,
92
+ b,
93
+ D,
94
+ R,
95
+ w
96
+ ]
97
+ );
98
+ return /* @__PURE__ */ T(k.Provider, { value: I, children: E });
99
+ }
100
+ function $() {
101
+ const i = q(k);
102
+ if (!i)
103
+ throw new Error("useDesigner 必须在 <DesignerProvider> 内使用");
104
+ return i;
105
+ }
106
+ export {
107
+ Z as DesignerProvider,
108
+ $ as useDesigner
109
+ };
110
+ //# sourceMappingURL=designer-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designer-context.js","sources":["../../src/designer-context.tsx"],"sourcesContent":["// ============================================================================\n// @xbeeant/form-engine-designer — 设计器状态上下文\n// ============================================================================\n\nimport type {\n NexusEngine,\n NexusSchema,\n SchemaNode,\n} from '@xbeeant/form-engine';\nimport type { PropertySchemaMap } from '@xbeeant/form-engine-ui';\nimport type { ReactNode } from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { SchemaHistory } from './history';\nimport {\n addChildToSchema,\n moveNodeInSchema,\n removeNodeFromSchema,\n renameNodeInSchema,\n updateNodeWithNesting,\n} from './schema-utils';\nimport type { CatalogItem, DesignerMode, FieldDef } from './types';\n\n/** 设计器内部状态 */\nexport interface DesignerState {\n schema: NexusSchema;\n selectedPath: string[] | null;\n mode: DesignerMode;\n}\n\nexport interface DesignerContextValue {\n schema: NexusSchema;\n propertySchemaMap: PropertySchemaMap;\n selectedPath: string[] | null;\n mode: DesignerMode;\n /** UI 注册函数,向引擎注册 widgets/layouts */\n registerUI?: (engine: NexusEngine) => void;\n /** 外部字段列表 */\n fields?: FieldDef[];\n /** 合并后的 widget 目录(内置 + 外部传入) */\n widgetCatalog: CatalogItem[];\n /** 合并后的 layout 目录(内置 + 外部传入) */\n layoutCatalog: CatalogItem[];\n setSchema: (schema: NexusSchema) => void;\n selectNode: (path: string[] | null) => void;\n setMode: (mode: DesignerMode) => void;\n addNode: (parentPath: string[], key: string, node: SchemaNode) => void;\n removeNode: (path: string[]) => void;\n updateNode: (path: string[], patch: Record<string, unknown>) => void;\n moveNode: (fromPath: string[], toParentPath: string[]) => void;\n /** 重命名节点 key(schema 结构级操作,保留节点在父级中的位置) */\n renameNode: (path: string[], newKey: string) => void;\n /** 撤销:恢复最近一次结构/属性变更 */\n undo: () => void;\n /** 重做:恢复最近一次撤销 */\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\ninterface DesignerProviderProps {\n initialSchema: NexusSchema;\n propertySchemaMap: PropertySchemaMap;\n onSchemaChange?: (schema: NexusSchema) => void;\n registerUI?: (engine: NexusEngine) => void;\n fields?: FieldDef[];\n widgetCatalog: CatalogItem[];\n layoutCatalog: CatalogItem[];\n children: ReactNode;\n}\n\nconst DesignerContext = createContext<DesignerContextValue | null>(null);\n\nexport function DesignerProvider({\n initialSchema,\n propertySchemaMap,\n onSchemaChange,\n registerUI,\n fields,\n widgetCatalog,\n layoutCatalog,\n children,\n}: DesignerProviderProps) {\n const [schema, setSchemaState] = useState<NexusSchema>(initialSchema);\n const [selectedPath, setSelectedPath] = useState<string[] | null>(null);\n const [mode, setMode] = useState<DesignerMode>('design');\n const historyRef = useRef(new SchemaHistory());\n // 历史栈版本:驱动 canUndo/canRedo 的消费方重渲染\n const [_historyVersion, setHistoryVersion] = useState(0);\n\n // 写入 schema 并同步通知外部;历史记录由 SchemaHistory 统一管理\n const emit = useCallback(\n (\n next: NexusSchema,\n kind: 'edit' | 'replace' = 'replace',\n path: string | null = null,\n ) => {\n historyRef.current.push(schema, kind, path);\n setHistoryVersion((v) => v + 1);\n setSchemaState(next);\n onSchemaChange?.(next);\n },\n [schema, onSchemaChange],\n );\n\n const undo = useCallback(() => {\n const restored = historyRef.current.undo(schema);\n if (restored === null) {\n return;\n }\n setHistoryVersion((v) => v + 1);\n setSchemaState(restored);\n onSchemaChange?.(restored);\n }, [schema, onSchemaChange]);\n\n const redo = useCallback(() => {\n const restored = historyRef.current.redo();\n if (restored === null) {\n return;\n }\n setHistoryVersion((v) => v + 1);\n setSchemaState(restored);\n onSchemaChange?.(restored);\n }, [onSchemaChange]);\n\n const setSchema = useCallback((next: NexusSchema) => emit(next), [emit]);\n\n const selectNode = useCallback((path: string[] | null) => {\n setSelectedPath(path);\n }, []);\n\n // setMode 直接复用 useState 的 setter(稳定引用,无需额外包裹)\n\n const addNode = useCallback(\n (parentPath: string[], key: string, node: SchemaNode) => {\n emit(addChildToSchema(schema, parentPath, key, node), 'edit');\n },\n [schema, emit],\n );\n\n const removeNode = useCallback(\n (path: string[]) => {\n emit(removeNodeFromSchema(schema, path), 'edit');\n setSelectedPath(null);\n },\n [schema, emit],\n );\n\n const updateNode = useCallback(\n (path: string[], patch: Record<string, unknown>) => {\n // 同路径的连续属性编辑由 SchemaHistory 合并(COALESCE_MS 窗口)\n emit(updateNodeWithNesting(schema, path, patch), 'edit', path.join('.'));\n },\n [schema, emit],\n );\n\n const moveNode = useCallback(\n (fromPath: string[], toParentPath: string[]) => {\n emit(moveNodeInSchema(schema, fromPath, toParentPath), 'edit');\n },\n [schema, emit],\n );\n\n const renameNode = useCallback(\n (path: string[], newKey: string) => {\n const result = renameNodeInSchema(schema, path, newKey);\n emit(result.schema, 'edit');\n setSelectedPath(result.newPath);\n },\n [schema, emit],\n );\n\n const value = useMemo<DesignerContextValue>(\n () => ({\n schema,\n selectedPath,\n mode,\n registerUI,\n fields,\n widgetCatalog,\n layoutCatalog,\n propertySchemaMap,\n setSchema,\n selectNode,\n setMode,\n addNode,\n removeNode,\n updateNode,\n moveNode,\n renameNode,\n undo,\n redo,\n canUndo: historyRef.current.canUndo,\n canRedo: historyRef.current.canRedo,\n }),\n [\n schema,\n propertySchemaMap,\n selectedPath,\n mode,\n registerUI,\n fields,\n widgetCatalog,\n layoutCatalog,\n setSchema,\n addNode,\n removeNode,\n updateNode,\n moveNode,\n renameNode,\n undo,\n redo,\n selectNode,\n ],\n );\n\n return (\n <DesignerContext.Provider value={value}>\n {children}\n </DesignerContext.Provider>\n );\n}\n\nexport function useDesigner(): DesignerContextValue {\n const ctx = useContext(DesignerContext);\n if (!ctx) {\n throw new Error('useDesigner 必须在 <DesignerProvider> 内使用');\n }\n return ctx;\n}\n"],"names":["DesignerContext","createContext","DesignerProvider","initialSchema","propertySchemaMap","onSchemaChange","registerUI","fields","widgetCatalog","layoutCatalog","children","schema","setSchemaState","useState","selectedPath","setSelectedPath","mode","setMode","historyRef","useRef","SchemaHistory","_historyVersion","setHistoryVersion","emit","useCallback","next","kind","path","v","undo","restored","redo","setSchema","selectNode","addNode","parentPath","key","node","addChildToSchema","removeNode","removeNodeFromSchema","updateNode","patch","updateNodeWithNesting","moveNode","fromPath","toParentPath","moveNodeInSchema","renameNode","newKey","result","renameNodeInSchema","value","useMemo","jsx","useDesigner","ctx","useContext"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ const a = 50, r = 400;
2
+ class u {
3
+ past = [];
4
+ future = [];
5
+ get canUndo() {
6
+ return this.past.length > 0;
7
+ }
8
+ get canRedo() {
9
+ return this.future.length > 0;
10
+ }
11
+ get size() {
12
+ return this.past.length;
13
+ }
14
+ /**
15
+ * 记录一次变更前的状态快照
16
+ *
17
+ * @param snapshot - 变更前的 Schema
18
+ * @param kind - 记录类型(edit 参与合并,replace 独立入栈)
19
+ * @param path - 编辑路径(同路径 + 窗口内的连续 edit 合并)
20
+ * @param time - 时间戳(默认当前时间,测试可注入)
21
+ */
22
+ push(t, e = "edit", h = null, n = Date.now()) {
23
+ const s = this.past[this.past.length - 1];
24
+ if (e === "edit" && s && s.kind === "edit" && s.path !== null && s.path === h && n - s.time < 400) {
25
+ this.future = [];
26
+ return;
27
+ }
28
+ this.past = [
29
+ ...this.past.slice(-49),
30
+ { schema: t, kind: e, path: h, time: n }
31
+ ], this.future = [];
32
+ }
33
+ /**
34
+ * 撤销:恢复最近一次变更前的快照
35
+ *
36
+ * @param current - 当前 Schema(压入 future 供重做)
37
+ * @returns 恢复后的 Schema;无可撤销记录时返回 null
38
+ */
39
+ undo(t) {
40
+ const e = this.past.pop();
41
+ return e ? (this.future = [
42
+ ...this.future,
43
+ { schema: t, kind: e.kind, path: e.path, time: Date.now() }
44
+ ], e.schema) : null;
45
+ }
46
+ /**
47
+ * 重做:恢复最近一次撤销前的状态
48
+ *
49
+ * @returns 恢复后的 Schema;无可重做记录时返回 null
50
+ */
51
+ redo() {
52
+ const t = this.future.pop();
53
+ return t ? (this.past = [
54
+ ...this.past,
55
+ {
56
+ schema: t.schema,
57
+ kind: t.kind,
58
+ path: t.path,
59
+ time: Date.now()
60
+ }
61
+ ], t.schema) : null;
62
+ }
63
+ /** 清空全部历史 */
64
+ clear() {
65
+ this.past = [], this.future = [];
66
+ }
67
+ }
68
+ export {
69
+ r as COALESCE_MS,
70
+ a as HISTORY_LIMIT,
71
+ u as SchemaHistory
72
+ };
73
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sources":["../../src/history.ts"],"sourcesContent":["// ============================================================================\n// @xbeeant/form-engine-designer — Schema 撤销/重做历史栈(纯逻辑,可独立测试)\n// ============================================================================\n\nimport type { NexusSchema } from '@xbeeant/form-engine';\n\n/** 历史记录类型 */\nexport type HistoryKind = 'edit' | 'replace';\n\n/** 历史条目 */\nexport interface HistoryEntry {\n /** 变更前的 Schema 快照 */\n schema: NexusSchema;\n kind: HistoryKind;\n /** 触发路径(属性编辑用于合并连续 patch) */\n path: string | null;\n /** 记录时间戳(ms) */\n time: number;\n}\n\n/** 历史容量上限 */\nexport const HISTORY_LIMIT = 50;\n\n/** 连续属性编辑合并窗口(ms) */\nexport const COALESCE_MS = 400;\n\n/**\n * Schema 撤销/重做历史栈\n *\n * - push 记录「变更前」快照;undo 弹出并恢复,同时把当前状态压入 future\n * - 同一路径的连续属性编辑(kind='edit' 且路径相同、间隔 < COALESCE_MS)\n * 合并为一条记录(保留最早快照),避免滑块拖拽/连续输入产生海量历史\n * - 结构操作(增删/移动/重命名/整体替换)每条独立入栈\n * - 容量上限 HISTORY_LIMIT,超出后丢弃最旧记录\n */\nexport class SchemaHistory {\n private past: HistoryEntry[] = [];\n private future: HistoryEntry[] = [];\n\n get canUndo(): boolean {\n return this.past.length > 0;\n }\n\n get canRedo(): boolean {\n return this.future.length > 0;\n }\n\n get size(): number {\n return this.past.length;\n }\n\n /**\n * 记录一次变更前的状态快照\n *\n * @param snapshot - 变更前的 Schema\n * @param kind - 记录类型(edit 参与合并,replace 独立入栈)\n * @param path - 编辑路径(同路径 + 窗口内的连续 edit 合并)\n * @param time - 时间戳(默认当前时间,测试可注入)\n */\n push(\n snapshot: NexusSchema,\n kind: HistoryKind = 'edit',\n path: string | null = null,\n time = Date.now(),\n ): void {\n const last = this.past[this.past.length - 1];\n if (\n kind === 'edit' &&\n last &&\n last.kind === 'edit' &&\n last.path !== null &&\n last.path === path &&\n time - last.time < COALESCE_MS\n ) {\n // 合并:保留最早快照,但当前状态已变化,清空 future\n this.future = [];\n return;\n }\n this.past = [\n ...this.past.slice(-(HISTORY_LIMIT - 1)),\n { schema: snapshot, kind, path, time },\n ];\n this.future = [];\n }\n\n /**\n * 撤销:恢复最近一次变更前的快照\n *\n * @param current - 当前 Schema(压入 future 供重做)\n * @returns 恢复后的 Schema;无可撤销记录时返回 null\n */\n undo(current: NexusSchema): NexusSchema | null {\n const entry = this.past.pop();\n if (!entry) {\n return null;\n }\n this.future = [\n ...this.future,\n { schema: current, kind: entry.kind, path: entry.path, time: Date.now() },\n ];\n return entry.schema;\n }\n\n /**\n * 重做:恢复最近一次撤销前的状态\n *\n * @returns 恢复后的 Schema;无可重做记录时返回 null\n */\n redo(): NexusSchema | null {\n const entry = this.future.pop();\n if (!entry) {\n return null;\n }\n this.past = [\n ...this.past,\n {\n schema: entry.schema,\n kind: entry.kind,\n path: entry.path,\n time: Date.now(),\n },\n ];\n return entry.schema;\n }\n\n /** 清空全部历史 */\n clear(): void {\n this.past = [];\n this.future = [];\n }\n}\n"],"names":["HISTORY_LIMIT","COALESCE_MS","SchemaHistory","snapshot","kind","path","time","last","current","entry"],"mappings":"AAqBO,MAAMA,IAAgB,IAGhBC,IAAc;AAWpB,MAAMC,EAAc;AAAA,EACjB,OAAuB,CAAA;AAAA,EACvB,SAAyB,CAAA;AAAA,EAEjC,IAAI,UAAmB;AACrB,WAAO,KAAK,KAAK,SAAS;AAAA,EAC5B;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,KACEC,GACAC,IAAoB,QACpBC,IAAsB,MACtBC,IAAO,KAAK,OACN;AACN,UAAMC,IAAO,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AAC3C,QACEH,MAAS,UACTG,KACAA,EAAK,SAAS,UACdA,EAAK,SAAS,QACdA,EAAK,SAASF,KACdC,IAAOC,EAAK,OAAO,KACnB;AAEA,WAAK,SAAS,CAAA;AACd;AAAA,IACF;AACA,SAAK,OAAO;AAAA,MACV,GAAG,KAAK,KAAK,MAAM,GAAoB;AAAA,MACvC,EAAE,QAAQJ,GAAU,MAAAC,GAAM,MAAAC,GAAM,MAAAC,EAAA;AAAA,IAAK,GAEvC,KAAK,SAAS,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAKE,GAA0C;AAC7C,UAAMC,IAAQ,KAAK,KAAK,IAAA;AACxB,WAAKA,KAGL,KAAK,SAAS;AAAA,MACZ,GAAG,KAAK;AAAA,MACR,EAAE,QAAQD,GAAS,MAAMC,EAAM,MAAM,MAAMA,EAAM,MAAM,MAAM,KAAK,IAAA,EAAI;AAAA,IAAE,GAEnEA,EAAM,UANJ;AAAA,EAOX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAA2B;AACzB,UAAMA,IAAQ,KAAK,OAAO,IAAA;AAC1B,WAAKA,KAGL,KAAK,OAAO;AAAA,MACV,GAAG,KAAK;AAAA,MACR;AAAA,QACE,QAAQA,EAAM;AAAA,QACd,MAAMA,EAAM;AAAA,QACZ,MAAMA,EAAM;AAAA,QACZ,MAAM,KAAK,IAAA;AAAA,MAAI;AAAA,IACjB,GAEKA,EAAM,UAXJ;AAAA,EAYX;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,OAAO,CAAA,GACZ,KAAK,SAAS,CAAA;AAAA,EAChB;AACF;"}
package/dist/es/index.css CHANGED
@@ -1 +1 @@
1
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.z-10{z-index:10}.z-\[9999\]{z-index:9999}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0\!{margin:0!important}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.-mb-0\.5{margin-bottom:calc(var(--spacing) * -.5)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.h-1{height:var(--spacing)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-96{height:calc(var(--spacing) * 96)}.h-full{height:100%}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-grab{cursor:grab}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#3e3e42\]\!{border-color:#3e3e42!important}.border-\[\#1677ff\]{border-color:#1677ff}.border-\[\#d9d9d9\]{border-color:#d9d9d9}.border-\[\#e8e8e8\]{border-color:#e8e8e8}.border-\[\#f0f0f0\]{border-color:#f0f0f0}.border-gray-200{border-color:var(--color-gray-200)}.border-transparent{border-color:#0000}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#1e1e1e\]\!{background-color:#1e1e1e!important}.bg-\[\#e6f4ff\]{background-color:#e6f4ff}.bg-\[\#e8f1ff\]{background-color:#e8f1ff}.bg-\[\#f0f0f0\]{background-color:#f0f0f0}.bg-\[\#f5f5f5\]{background-color:#f5f5f5}.bg-\[\#f5f7fa\]{background-color:#f5f7fa}.bg-\[\#f7f8fa\]{background-color:#f7f8fa}.bg-\[\#fafafa\]{background-color:#fafafa}.bg-\[rgba\(250\,250\,250\,0\.6\)\]{background-color:#fafafa99}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-green-500{background-color:var(--color-green-500)}.bg-white{background-color:var(--color-white)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-px{padding-block:1px}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-1{padding-right:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-mono\!{font-family:var(--font-mono)!important}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[13px\]\!{font-size:13px!important}.text-\[15px\]{font-size:15px}.leading-\[1\.6\]\!{--tw-leading:1.6!important;line-height:1.6!important}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[3px\]{--tw-tracking:3px;letter-spacing:3px}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-\[\#333\]{color:#333}.text-\[\#666\]{color:#666}.text-\[\#999\]{color:#999}.text-\[\#1677ff\]{color:#1677ff}.text-\[\#bbb\]{color:#bbb}.text-\[\#bfbfbf\]{color:#bfbfbf}.text-\[\#c0c4cc\]{color:#c0c4cc}.text-\[\#d4d4d4\]\!{color:#d4d4d4!important}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-white{color:var(--color-white)}.shadow-\[0_0_0_2px_rgba\(22\,119\,255\,0\.1\)\]{--tw-shadow:0 0 0 2px var(--tw-shadow-color,#1677ff1a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:bg-\[\#e8f1ff\]:is(:where(.group):hover *){background-color:#e8f1ff}.group-hover\:text-\[\#1677ff\]:is(:where(.group):hover *){color:#1677ff}.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[\#1677ff\]:hover{border-color:#1677ff}.hover\:bg-\[\#f0f0f0\]:hover{background-color:#f0f0f0}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-green-600:hover{background-color:var(--color-green-600)}.hover\:text-\[\#333\]:hover{color:#333}.hover\:shadow-\[0_2px_8px_rgba\(22\,119\,255\,0\.12\)\]:hover{--tw-shadow:0 2px 8px var(--tw-shadow-color,#1677ff1f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}.drop-indicator-line:before{content:"";position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:3px;background:#1677ff;border-radius:2px;box-shadow:0 0 8px #1677ff99;animation:nexus-drop-pulse 1.2s ease-in-out infinite}@keyframes nexus-drop-pulse{0%,to{opacity:1}50%{opacity:.5}}.nexus-resize-handle{position:absolute;top:0;bottom:0;width:5px;cursor:col-resize;z-index:10;background:transparent;transition:background .15s}.nexus-resize-handle:after{content:"";position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:1px;background:#e8e8e8;transition:background .15s,width .15s}.nexus-resize-handle:hover,.nexus-resize-handle.nexus-resize-active{background:#1677ff14}.nexus-resize-handle:hover:after,.nexus-resize-handle.nexus-resize-active:after{width:4px;background:#1677ff;border-radius:2px}.nexus-panel-toggle{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid #e8e8e8;border-radius:999px;background:#fff;color:#999;cursor:pointer;box-shadow:0 1px 2px #0000000a;transition:color .15s,border-color .15s,background .15s,box-shadow .15s}.nexus-panel-toggle:hover{color:#1677ff;border-color:#1677ff;background:#f0f7ff;box-shadow:0 2px 6px #1677ff26}.nexus-palette-search.ant-input-affix-wrapper{border-radius:8px;background:#fff;box-shadow:0 1px 2px #00000008}.nexus-palette-collapse{background:transparent;border:none}.nexus-palette-collapse>.ant-collapse-item{margin-bottom:8px;overflow:hidden;border:1px solid #f0f0f0;border-radius:10px;background:#fff}.nexus-palette-collapse>.ant-collapse-item:last-child{margin-bottom:0}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header{padding:9px 10px;font-size:13px;font-weight:600;color:#333;align-items:center;background:#fff;transition:background .15s}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header:hover{background:#fafbfc}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{font-size:10px;color:#999}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding:8px 0 4px}.nexus-key-input.ant-input{border-radius:6px}.nexus-property-body .ant-collapse{background:transparent;border:none}.nexus-property-body .ant-collapse>.ant-collapse-item{margin-bottom:8px;overflow:hidden;border:1px solid #f0f0f0;border-radius:8px;background:#fff}.nexus-property-body .ant-collapse>.ant-collapse-item:last-child{margin-bottom:0}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:8px 10px;font-size:12px;font-weight:600;color:#333;align-items:center}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{font-size:10px;color:#999}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding:8px 10px 4px}
1
+ .drop-indicator-line:before{content:"";position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:3px;background:#1677ff;border-radius:2px;box-shadow:0 0 8px #1677ff99;animation:nexus-drop-pulse 1.2s ease-in-out infinite}@keyframes nexus-drop-pulse{0%,to{opacity:1}50%{opacity:.5}}.nexus-resize-handle{position:absolute;top:0;bottom:0;width:5px;cursor:col-resize;z-index:10;background:transparent;transition:background .15s}.nexus-resize-handle:after{content:"";position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:1px;background:#e8e8e8;transition:background .15s,width .15s}.nexus-resize-handle:hover,.nexus-resize-handle.nexus-resize-active{background:#1677ff14}.nexus-resize-handle:hover:after,.nexus-resize-handle.nexus-resize-active:after{width:4px;background:#1677ff;border-radius:2px}.nexus-panel-toggle{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid #e8e8e8;border-radius:999px;background:#fff;color:#999;cursor:pointer;box-shadow:0 1px 2px #0000000a;transition:color .15s,border-color .15s,background .15s,box-shadow .15s}.nexus-panel-toggle:hover{color:#1677ff;border-color:#1677ff;background:#f0f7ff;box-shadow:0 2px 6px #1677ff26}.nexus-palette-search.ant-input-affix-wrapper{border-radius:8px;background:#fff;box-shadow:0 1px 2px #00000008}.nexus-palette-collapse{background:transparent;border:none}.nexus-palette-collapse>.ant-collapse-item{margin-bottom:8px;overflow:hidden;border:1px solid #f0f0f0;border-radius:10px;background:#fff}.nexus-palette-collapse>.ant-collapse-item:last-child{margin-bottom:0}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header{padding:9px 10px;font-size:13px;font-weight:600;color:#333;align-items:center;background:#fff;transition:background .15s}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header:hover{background:#fafbfc}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{font-size:10px;color:#999}.nexus-palette-collapse>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding:8px 0 4px}.nexus-key-input.ant-input{border-radius:6px}.nexus-property-body .ant-collapse{background:transparent;border:none}.nexus-property-body .ant-collapse>.ant-collapse-item{margin-bottom:8px;overflow:hidden;border:1px solid #f0f0f0;border-radius:8px;background:#fff}.nexus-property-body .ant-collapse>.ant-collapse-item:last-child{margin-bottom:0}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:8px 10px;font-size:12px;font-weight:600;color:#333;align-items:center}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{font-size:10px;color:#999}.nexus-property-body .ant-collapse>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding:8px 10px 4px}
package/dist/es/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { layoutCatalog as t, widgetCatalog as r } from "./catalog.js";
2
- import { Designer as d } from "./Designer.js";
3
- import { DesignerProvider as l, useDesigner as m } from "./DesignerContext.js";
4
- import { addChildToSchema as g, collectDataFieldOptions as s, collectDataFieldPaths as c, flattenNodeForPropertyEditor as n, getNodeAtProperties as h, removeNodeFromSchema as N, updateNodeInSchema as f, updateNodeWithNesting as D } from "./schemaUtils.js";
2
+ import { Designer as d } from "./designer.js";
3
+ import { DesignerProvider as l, useDesigner as m } from "./designer-context.js";
4
+ import { addChildToSchema as g, collectDataFieldOptions as s, collectDataFieldPaths as c, flattenNodeForPropertyEditor as n, getNodeAtProperties as h, removeNodeFromSchema as N, updateNodeInSchema as f, updateNodeWithNesting as D } from "./schema-utils.js";
5
5
  export {
6
6
  d as Designer,
7
7
  l as DesignerProvider,
@@ -24,6 +24,12 @@ const t = {
24
24
  type: "string",
25
25
  title: "额外说明(extra)"
26
26
  },
27
+ tooltip: {
28
+ widget: "input",
29
+ type: "string",
30
+ title: "气泡提示(tooltip)",
31
+ placeholder: "悬停 label 展示的提示文案"
32
+ },
27
33
  // ── 状态控制 ────────────────────────────────────────────────────────────
28
34
  disabled: {
29
35
  widget: "propertyExpr",
@@ -1 +1 @@
1
- {"version":3,"file":"basic-property.js","sources":["../../../src/property/basic-property.ts"],"sourcesContent":["import type { SchemaNode } from '@xbeeant/form-engine';\n\n// ============================================================================\n// 属性面板各分组的字段定义(扁平结构,由 PropertyPanel 包裹进 collapse 分组)\n// ============================================================================\n\n// ── 通用属性 ──────────────────────────────────────────────────────────────\nexport const commonPropertyFields: Record<string, SchemaNode> = {\n title: {\n widget: 'input',\n type: 'string',\n title: '标题(title)',\n },\n description: {\n widget: 'textarea',\n type: 'string',\n title: '描述(description)',\n },\n placeholder: {\n widget: 'input',\n type: 'string',\n title: '占位提示(placeholder)',\n },\n default: {\n widget: 'input',\n type: 'string',\n title: '默认值(default)',\n },\n extra: {\n widget: 'input',\n type: 'string',\n title: '额外说明(extra)',\n },\n // ── 状态控制 ────────────────────────────────────────────────────────────\n disabled: {\n widget: 'propertyExpr',\n type: 'string',\n title: '禁用(disabled)',\n },\n readOnly: {\n widget: 'propertyExpr',\n type: 'string',\n title: '只读(readOnly)',\n },\n readOnlyWidget: {\n widget: 'input',\n type: 'string',\n title: '只读渲染组件(readOnlyWidget)',\n placeholder: '如 html,未配置时沿用只读文本渲染',\n },\n hidden: {\n widget: 'propertyExpr',\n type: 'string',\n title: '隐藏(hidden)',\n },\n // ── 布局尺寸(x-render 对齐)──────────────────────────────────────────\n width: {\n widget: 'input',\n type: 'string',\n title: '单元素宽度(width)',\n placeholder: '如 20%',\n },\n colSpan: {\n widget: 'number',\n type: 'number',\n title: '栅格跨度(colSpan)',\n placeholder: 'grid 列数的整数倍',\n },\n};\n\n// ── 校验配置 ──────────────────────────────────────────────────────────────\n// 字段级约束(pattern/min/max)由 SchemaParser 自动转换为 ValidationRule;\n// 完整的 rules 数组可通过「Schema」标签页直接编辑 JSON。\nexport const validationPropertyFields: Record<string, SchemaNode> = {\n required: {\n widget: 'propertyExpr',\n type: 'string',\n title: '必填(required)',\n },\n pattern: {\n widget: 'input',\n type: 'string',\n title: '正则校验(pattern)',\n placeholder: '如 ^1[3-9]\\\\d{9}$',\n },\n min: {\n widget: 'number',\n type: 'number',\n title: '最小值/最小长度(min)',\n placeholder: 'number→数值 / string→长度 / array→项数',\n },\n max: {\n widget: 'number',\n type: 'number',\n title: '最大值/最大长度(max)',\n placeholder: 'number→数值 / string→长度 / array→项数',\n },\n validate: {\n widget: 'propertyValidate',\n type: 'string',\n title: '跨字段校验(validate)',\n },\n};\n\n// ── 依赖配置 ──────────────────────────────────────────────────────────────\nexport const dependencyPropertyFields: Record<string, SchemaNode> = {\n bind: {\n widget: 'propertyBind',\n type: 'string',\n title: '数据绑定(bind)',\n },\n dependencies: {\n widget: 'propertyDependencies',\n type: 'string',\n title: '依赖字段(dependencies)',\n },\n};\n\n// ── 联动配置 ──────────────────────────────────────────────────────────────\nexport const reactionPropertyFields: Record<string, SchemaNode> = {\n reactions: {\n widget: 'propertyReactions',\n type: 'string',\n title: '联动规则(reactions)',\n },\n};\n"],"names":["commonPropertyFields","validationPropertyFields","dependencyPropertyFields","reactionPropertyFields"],"mappings":"AAOO,MAAMA,IAAmD;AAAA,EAC9D,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAGT,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAGT,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB,GAKaC,IAAuD;AAAA,EAClE,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAGaC,IAAuD;AAAA,EAClE,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAGaC,IAAqD;AAAA,EAChE,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"basic-property.js","sources":["../../../src/property/basic-property.ts"],"sourcesContent":["import type { SchemaNode } from '@xbeeant/form-engine';\n\n// ============================================================================\n// 属性面板各分组的字段定义(扁平结构,由 PropertyPanel 包裹进 collapse 分组)\n// ============================================================================\n\n// ── 通用属性 ──────────────────────────────────────────────────────────────\nexport const commonPropertyFields: Record<string, SchemaNode> = {\n title: {\n widget: 'input',\n type: 'string',\n title: '标题(title)',\n },\n description: {\n widget: 'textarea',\n type: 'string',\n title: '描述(description)',\n },\n placeholder: {\n widget: 'input',\n type: 'string',\n title: '占位提示(placeholder)',\n },\n default: {\n widget: 'input',\n type: 'string',\n title: '默认值(default)',\n },\n extra: {\n widget: 'input',\n type: 'string',\n title: '额外说明(extra)',\n },\n tooltip: {\n widget: 'input',\n type: 'string',\n title: '气泡提示(tooltip)',\n placeholder: '悬停 label 展示的提示文案',\n },\n // ── 状态控制 ────────────────────────────────────────────────────────────\n disabled: {\n widget: 'propertyExpr',\n type: 'string',\n title: '禁用(disabled)',\n },\n readOnly: {\n widget: 'propertyExpr',\n type: 'string',\n title: '只读(readOnly)',\n },\n readOnlyWidget: {\n widget: 'input',\n type: 'string',\n title: '只读渲染组件(readOnlyWidget)',\n placeholder: '如 html,未配置时沿用只读文本渲染',\n },\n hidden: {\n widget: 'propertyExpr',\n type: 'string',\n title: '隐藏(hidden)',\n },\n // ── 布局尺寸(x-render 对齐)──────────────────────────────────────────\n width: {\n widget: 'input',\n type: 'string',\n title: '单元素宽度(width)',\n placeholder: '如 20%',\n },\n colSpan: {\n widget: 'number',\n type: 'number',\n title: '栅格跨度(colSpan)',\n placeholder: 'grid 列数的整数倍',\n },\n};\n\n// ── 校验配置 ──────────────────────────────────────────────────────────────\n// 字段级约束(pattern/min/max)由 SchemaParser 自动转换为 ValidationRule;\n// 完整的 rules 数组可通过「Schema」标签页直接编辑 JSON。\nexport const validationPropertyFields: Record<string, SchemaNode> = {\n required: {\n widget: 'propertyExpr',\n type: 'string',\n title: '必填(required)',\n },\n pattern: {\n widget: 'input',\n type: 'string',\n title: '正则校验(pattern)',\n placeholder: '如 ^1[3-9]\\\\d{9}$',\n },\n min: {\n widget: 'number',\n type: 'number',\n title: '最小值/最小长度(min)',\n placeholder: 'number→数值 / string→长度 / array→项数',\n },\n max: {\n widget: 'number',\n type: 'number',\n title: '最大值/最大长度(max)',\n placeholder: 'number→数值 / string→长度 / array→项数',\n },\n validate: {\n widget: 'propertyValidate',\n type: 'string',\n title: '跨字段校验(validate)',\n },\n};\n\n// ── 依赖配置 ──────────────────────────────────────────────────────────────\nexport const dependencyPropertyFields: Record<string, SchemaNode> = {\n bind: {\n widget: 'propertyBind',\n type: 'string',\n title: '数据绑定(bind)',\n },\n dependencies: {\n widget: 'propertyDependencies',\n type: 'string',\n title: '依赖字段(dependencies)',\n },\n};\n\n// ── 联动配置 ──────────────────────────────────────────────────────────────\nexport const reactionPropertyFields: Record<string, SchemaNode> = {\n reactions: {\n widget: 'propertyReactions',\n type: 'string',\n title: '联动规则(reactions)',\n },\n};\n"],"names":["commonPropertyFields","validationPropertyFields","dependencyPropertyFields","reactionPropertyFields"],"mappings":"AAOO,MAAMA,IAAmD;AAAA,EAC9D,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA;AAAA,EAGf,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAGT,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB,GAKaC,IAAuD;AAAA,EAClE,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,KAAK;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAGaC,IAAuD;AAAA,EAClE,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAGaC,IAAqD;AAAA,EAChE,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;"}