@pisell/materials 1.0.1051 → 1.0.1053

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 (169) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +2 -2
  6. package/build/lowcode/preview.js +8 -8
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +13 -13
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +13 -13
  11. package/es/components/PisellCards/index.d.ts +6 -6
  12. package/es/components/appVersionControl/index.js +1 -1
  13. package/es/components/calendar/index.d.ts +2 -2
  14. package/es/components/checkbox/index.d.ts +2 -2
  15. package/es/components/dataSourceComponents/dataSourceForm/BaseForm.js +3 -3
  16. package/es/components/dataSourceComponents/dataSourceForm/formItem.js +1 -1
  17. package/es/components/dataSourceComponents/dataSourceForm/index.js +1 -1
  18. package/es/components/dataSourceComponents/dataSourceForm/submitButton/index.js +2 -2
  19. package/es/components/dataSourceComponents/dataSourceForm/utils.js +3 -3
  20. package/es/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +2 -2
  21. package/es/components/dataSourceComponents/dataSourceSubForm/index.d.ts +16 -0
  22. package/es/components/dataSourceComponents/dataSourceSubForm/index.js +329 -0
  23. package/es/components/dataSourceComponents/dataSourceSubForm/index.less +19 -0
  24. package/es/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +538 -0
  25. package/es/components/dataSourceComponents/dataSourceSubForm/schema-simple-example.json +174 -0
  26. package/es/components/dataSourceComponents/dataSourceSubForm/types.d.ts +121 -0
  27. package/es/components/dataSourceComponents/dataSourceTable/BaseTable.js +1 -1
  28. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.js +1 -1
  29. package/es/components/dataSourceComponents/dataSourceTable/type.d.ts +1 -1
  30. package/es/components/dataSourceComponents/dataSourceWrapper/BaseWrapper.js +1 -1
  31. package/es/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +3 -3
  32. package/es/components/dataSourceComponents/fields/DateRangePicker/WithMode.js +1 -1
  33. package/es/components/dataSourceComponents/fields/Input.Mobile/WithMode.js +1 -1
  34. package/es/components/dataSourceComponents/fields/Input.Phone/WithMode.js +1 -1
  35. package/es/components/dataSourceComponents/fields/Radio/WithMode.d.ts +2 -2
  36. package/es/components/dataSourceComponents/fields/Radio/WithMode.js +1 -1
  37. package/es/components/dataSourceComponents/fields/RecordListWrapper/README.md +247 -0
  38. package/es/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.js +39 -0
  39. package/es/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +84 -0
  40. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +17 -0
  41. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.js +9 -0
  42. package/es/components/dataSourceComponents/fields/RecordListWrapper/type.d.ts +91 -0
  43. package/es/components/dataSourceComponents/fields/Select/WithMode.js +1 -1
  44. package/es/components/dataSourceComponents/fields/Select/index.d.ts +3 -3
  45. package/es/components/dataSourceComponents/fields/Tabs/ReadPretty.js +16 -0
  46. package/es/components/dataSourceComponents/fields/Tabs/Tabs.js +75 -0
  47. package/es/components/dataSourceComponents/fields/Tabs/Tabs.less +55 -0
  48. package/es/components/dataSourceComponents/fields/Tabs/WithMode.js +13 -0
  49. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +19 -0
  50. package/es/components/dataSourceComponents/fields/Tabs/index.js +10 -0
  51. package/es/components/dataSourceComponents/fields/Tabs/type.d.ts +36 -0
  52. package/es/components/dataSourceComponents/fields/index.js +5 -1
  53. package/es/components/dataSourceComponents/fields/utils.js +3 -0
  54. package/es/components/dataSourceComponents/hooks/useActions.js +1 -1
  55. package/es/components/dataSourceComponents/provider/dataSource/DataSourceProvider.js +1 -1
  56. package/es/components/date-picker/index.d.ts +2 -2
  57. package/es/components/input/index.d.ts +2 -2
  58. package/es/components/pisell-config-provider/context.d.ts +2 -2
  59. package/es/components/pisellDataSourceContainer/type.d.ts +1 -1
  60. package/es/components/pisellDatePicker/index.d.ts +2 -2
  61. package/es/components/pisellInput/components/Copy/index.js +1 -1
  62. package/es/components/pisellModal/index.d.ts +6 -6
  63. package/es/components/pisellMultipleSelect/PisellMultipleSelect.less +15 -7
  64. package/es/components/pisellQuickFilter/index.d.ts +2 -2
  65. package/es/components/pisellRecordBoard/PisellRecordBoard.js +10 -3
  66. package/es/components/pisellRecordBoard/shellFrame/ToolBar/index.js +3 -1
  67. package/es/components/pisellRecordBoard/shellFrame/ToolBarReset/index.js +4 -2
  68. package/es/components/pisellRecordBoard/types.d.ts +4 -0
  69. package/es/components/pisellSingleSelect/PisellSingleSelect.less +15 -0
  70. package/es/components/pisellWalletPassCard/index.js +1 -1
  71. package/es/components/radio/index.d.ts +2 -2
  72. package/es/components/section-footers/index.d.ts +2 -2
  73. package/es/components/select/index.less +18 -2
  74. package/es/components/skeleton/index.d.ts +2 -2
  75. package/es/components/table/Actions/component/ExportImport/index.js +1 -1
  76. package/es/components/table/Table/fields/select/Edit/index.js +1 -1
  77. package/es/components/table/Table/tableConfig/SortRow/index.js +1 -1
  78. package/es/components/table/Table/tableConfig/body/CellProvider/index.js +1 -1
  79. package/es/components/time-picker/index.d.ts +2 -2
  80. package/es/components/typography/index.d.ts +2 -2
  81. package/es/components/upload/index.d.ts +2 -2
  82. package/es/index.d.ts +5 -1
  83. package/es/index.js +8 -5
  84. package/lib/components/PisellCards/index.d.ts +6 -6
  85. package/lib/components/PisellFields/index.d.ts +12 -12
  86. package/lib/components/PisellLayouts/index.d.ts +9 -9
  87. package/lib/components/PisellMetrics/index.d.ts +4 -4
  88. package/lib/components/appVersionControl/index.js +4 -4
  89. package/lib/components/calendar/index.d.ts +2 -2
  90. package/lib/components/checkbox/index.d.ts +2 -2
  91. package/lib/components/dataSourceComponents/dataSourceForm/BaseForm.js +3 -3
  92. package/lib/components/dataSourceComponents/dataSourceForm/formItem.js +1 -1
  93. package/lib/components/dataSourceComponents/dataSourceForm/index.js +1 -1
  94. package/lib/components/dataSourceComponents/dataSourceForm/submitButton/index.js +2 -2
  95. package/lib/components/dataSourceComponents/dataSourceForm/utils.js +3 -3
  96. package/lib/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +2 -2
  97. package/lib/components/dataSourceComponents/dataSourceSubForm/index.d.ts +16 -0
  98. package/lib/components/dataSourceComponents/dataSourceSubForm/index.js +332 -0
  99. package/lib/components/dataSourceComponents/dataSourceSubForm/index.less +19 -0
  100. package/lib/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +538 -0
  101. package/lib/components/dataSourceComponents/dataSourceSubForm/schema-simple-example.json +174 -0
  102. package/lib/components/dataSourceComponents/dataSourceSubForm/types.d.ts +121 -0
  103. package/lib/components/dataSourceComponents/dataSourceTable/BaseTable.js +1 -1
  104. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.js +1 -1
  105. package/lib/components/dataSourceComponents/dataSourceTable/type.d.ts +1 -1
  106. package/lib/components/dataSourceComponents/dataSourceWrapper/BaseWrapper.js +1 -1
  107. package/lib/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +3 -3
  108. package/lib/components/dataSourceComponents/fields/DateRangePicker/WithMode.js +1 -1
  109. package/lib/components/dataSourceComponents/fields/Input.Mobile/WithMode.js +1 -1
  110. package/lib/components/dataSourceComponents/fields/Input.Password/index.d.ts +2 -2
  111. package/lib/components/dataSourceComponents/fields/Input.Phone/WithMode.js +1 -1
  112. package/lib/components/dataSourceComponents/fields/Input.Subdomain/index.d.ts +2 -2
  113. package/lib/components/dataSourceComponents/fields/Input.TextArea/index.d.ts +2 -2
  114. package/lib/components/dataSourceComponents/fields/Radio/WithMode.d.ts +2 -2
  115. package/lib/components/dataSourceComponents/fields/Radio/WithMode.js +1 -1
  116. package/lib/components/dataSourceComponents/fields/RecordListWrapper/README.md +247 -0
  117. package/lib/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.js +41 -0
  118. package/lib/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +86 -0
  119. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +17 -0
  120. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.js +9 -0
  121. package/lib/components/dataSourceComponents/fields/RecordListWrapper/type.d.ts +91 -0
  122. package/lib/components/dataSourceComponents/fields/Select/WithMode.js +1 -1
  123. package/lib/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  124. package/lib/components/dataSourceComponents/fields/Tabs/ReadPretty.js +16 -0
  125. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.js +78 -0
  126. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.less +55 -0
  127. package/lib/components/dataSourceComponents/fields/Tabs/WithMode.js +13 -0
  128. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +19 -0
  129. package/lib/components/dataSourceComponents/fields/Tabs/index.js +10 -0
  130. package/lib/components/dataSourceComponents/fields/Tabs/type.d.ts +35 -0
  131. package/lib/components/dataSourceComponents/fields/index.js +37 -33
  132. package/lib/components/dataSourceComponents/fields/utils.js +3 -0
  133. package/lib/components/dataSourceComponents/hooks/useActions.js +1 -1
  134. package/lib/components/dataSourceComponents/provider/dataSource/DataSourceProvider.js +1 -1
  135. package/lib/components/date-picker/index.d.ts +2 -2
  136. package/lib/components/input/index.d.ts +2 -2
  137. package/lib/components/pisell-config-provider/context.d.ts +2 -2
  138. package/lib/components/pisellDataSourceContainer/components/Pagination/index.d.ts +2 -2
  139. package/lib/components/pisellDataSourceContainer/components/Table/index.d.ts +2 -2
  140. package/lib/components/pisellDataSourceContainer/type.d.ts +1 -1
  141. package/lib/components/pisellDatePicker/index.d.ts +2 -2
  142. package/lib/components/pisellInput/components/Copy/index.js +1 -1
  143. package/lib/components/pisellMultipleSelect/PisellMultipleSelect.less +15 -7
  144. package/lib/components/pisellRecordBoard/PisellRecordBoard.js +10 -3
  145. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/index.js +3 -1
  146. package/lib/components/pisellRecordBoard/shellFrame/ToolBarReset/index.js +4 -2
  147. package/lib/components/pisellRecordBoard/types.d.ts +4 -0
  148. package/lib/components/pisellSingleSelect/PisellSingleSelect.less +15 -0
  149. package/lib/components/pisellWalletPassCard/index.js +1 -1
  150. package/lib/components/radio/index.d.ts +2 -2
  151. package/lib/components/section-footers/index.d.ts +2 -2
  152. package/lib/components/select/index.less +18 -2
  153. package/lib/components/skeleton/index.d.ts +2 -2
  154. package/lib/components/table/Actions/component/ExportImport/index.js +1 -1
  155. package/lib/components/table/Table/fields/select/Edit/index.js +1 -1
  156. package/lib/components/table/Table/tableConfig/SortRow/index.js +1 -1
  157. package/lib/components/table/Table/tableConfig/body/CellProvider/index.js +1 -1
  158. package/lib/components/time-picker/index.d.ts +2 -2
  159. package/lib/components/upload/index.d.ts +2 -2
  160. package/lib/index.d.ts +5 -1
  161. package/lib/index.js +256 -250
  162. package/lowcode/data-source-form/constants.ts +3 -0
  163. package/lowcode/data-source-form/utils.ts +19 -5
  164. package/lowcode/data-source-sub-form/meta.ts +274 -0
  165. package/lowcode/data-source-sub-form/snippets.ts +135 -0
  166. package/lowcode/form-item-record-list-wrapper/meta.ts +246 -0
  167. package/lowcode/form-item-record-list-wrapper/snippets.ts +24 -0
  168. package/lowcode/form-item-tabs/meta.ts +172 -0
  169. package/package.json +1 -1
@@ -0,0 +1,332 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.js');
2
+ const require_objectSpread2 = require('../../../_virtual/_@oxc-project_runtime@0.108.0/helpers/objectSpread2.js');
3
+ const require_JsonWrapperContext = require('../dataSourceForm/provider/jsonWrapper/JsonWrapperContext.js');
4
+ const require_DataSourceProvider = require('../provider/dataSource/DataSourceProvider.js');
5
+ const require_FormSettingProvider = require('../dataSourceForm/provider/formSetting/FormSettingProvider.js');
6
+ let react = require("react");
7
+ react = require_rolldown_runtime.__toESM(react);
8
+ let antd = require("antd");
9
+ let classnames = require("classnames");
10
+ classnames = require_rolldown_runtime.__toESM(classnames);
11
+ let ahooks = require("ahooks");
12
+
13
+ //#region src/components/dataSourceComponents/dataSourceSubForm/index.tsx
14
+ const { TextArea, Password } = antd.Input;
15
+ /**
16
+ * @title 提取多语言文本
17
+ * @description 兼容字符串、数字、多语言对象格式,返回可显示文本
18
+ */
19
+ const getI18nText = (value) => {
20
+ if (value === null || value === void 0) return "";
21
+ if (typeof value === "string" || typeof value === "number") return `${value}`;
22
+ if (typeof value === "object") return value.original || value["zh-CN"] || value.en || value["zh-HK"] || value.ja || value.pt || "";
23
+ return "";
24
+ };
25
+ /**
26
+ * @title 解析并规范化 xRecordSchema
27
+ * @description 兼容字符串、数组、properties 和 fields 结构,统一成字段数组供渲染使用
28
+ */
29
+ const normalizeRecordSchema = (xRecordSchema) => {
30
+ if (!xRecordSchema) return [];
31
+ let rawSchema = xRecordSchema;
32
+ if (typeof xRecordSchema === "string") try {
33
+ rawSchema = JSON.parse(xRecordSchema);
34
+ } catch (error) {
35
+ console.error("Failed to parse xRecordSchema:", error);
36
+ return [];
37
+ }
38
+ if (rawSchema && typeof rawSchema === "object" && !Array.isArray(rawSchema) && rawSchema.name) rawSchema = [rawSchema];
39
+ /**
40
+ * @title 规范化单个字段
41
+ * @description 将各种格式的字段配置统一转换为标准格式
42
+ */
43
+ const normalizeSingleField = (field, fallbackName) => {
44
+ var _uiSchema$xDataSour;
45
+ const uiSchema = (field === null || field === void 0 ? void 0 : field.uiSchema) || {};
46
+ const name = (field === null || field === void 0 ? void 0 : field.name) || fallbackName;
47
+ if (!name) return null;
48
+ const component = (uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema["x-component"]) || (field === null || field === void 0 ? void 0 : field.interface) || (field === null || field === void 0 ? void 0 : field.componentName) || (field === null || field === void 0 ? void 0 : field.component) || "Input";
49
+ const props = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, (uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema["x-component-props"]) || {}), (field === null || field === void 0 ? void 0 : field.props) || {});
50
+ const uiSchemaDataSourceOptions = (uiSchema === null || uiSchema === void 0 || (_uiSchema$xDataSour = uiSchema["x-data-source"]) === null || _uiSchema$xDataSour === void 0 ? void 0 : _uiSchema$xDataSour.options) || [];
51
+ const options = (uiSchemaDataSourceOptions.length ? uiSchemaDataSourceOptions : (uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema.enum) || (field === null || field === void 0 ? void 0 : field.options) || (props === null || props === void 0 ? void 0 : props.options) || []).map((option) => {
52
+ if (typeof option === "string" || typeof option === "number") return {
53
+ label: option,
54
+ value: option
55
+ };
56
+ return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, option), {}, { label: getI18nText(option === null || option === void 0 ? void 0 : option.label) || (option === null || option === void 0 ? void 0 : option.value) });
57
+ });
58
+ if (component === "Select" && (field === null || field === void 0 ? void 0 : field.type) === "array" && !(props === null || props === void 0 ? void 0 : props.mode)) props.mode = "multiple";
59
+ return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, field), {}, {
60
+ name,
61
+ label: getI18nText(field === null || field === void 0 ? void 0 : field.label) || getI18nText(uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema.title) || name,
62
+ component,
63
+ componentName: component,
64
+ options,
65
+ props,
66
+ uiSchema
67
+ });
68
+ };
69
+ if (Array.isArray(rawSchema)) return rawSchema.map((item) => normalizeSingleField(item)).filter(Boolean);
70
+ if (Array.isArray(rawSchema === null || rawSchema === void 0 ? void 0 : rawSchema.fields)) return rawSchema.fields.map((item) => normalizeSingleField(item)).filter(Boolean);
71
+ if (Array.isArray(rawSchema === null || rawSchema === void 0 ? void 0 : rawSchema.children)) return rawSchema.children.map((item) => normalizeSingleField(item)).filter(Boolean);
72
+ if ((rawSchema === null || rawSchema === void 0 ? void 0 : rawSchema.properties) && typeof rawSchema.properties === "object") return Object.keys(rawSchema.properties).map((name) => normalizeSingleField(rawSchema.properties[name], name)).filter(Boolean);
73
+ return [];
74
+ };
75
+ /**
76
+ * @title 渲染单个表单字段(Form.Item + Antd 控件)
77
+ * @description
78
+ * 根据字段的 componentName/component 映射到对应的 Antd 组件,并包裹在 Form.Item 中。
79
+ * Form.Item 的 name 绑定让 antd Form 自动管理该字段的值收集与回填。
80
+ *
81
+ * 支持的组件类型:
82
+ * - 文本类:Input / Input.TextArea / Input.Password / Input.Email / Input.Phone / Input.Mobile / Input.URL / Input.Subdomain
83
+ * - 数字类:InputNumber / Percent
84
+ * - 时间类:DatePicker / TimePicker
85
+ * - 颜色:ColorPicker
86
+ * - 选择类:Select / Radio.Group / Checkbox.Group / Checkbox
87
+ * - 开关:Switch
88
+ * - 上传:Upload
89
+ * - JSON:Input.JSON / Input.InputJSON
90
+ * - 复杂组件(降级):Translation / IconPicker / RecordListWrapper
91
+ */
92
+ const renderFormItem = (field, isDisabled) => {
93
+ const componentType = `${field.componentName || field.component || "Input"}`;
94
+ const fieldOptions = field.options || [];
95
+ const fieldProps = require_objectSpread2._objectSpread2({}, field.props || {});
96
+ const label = field.label || field.name;
97
+ const name = field.name;
98
+ if (componentType === "Input.TextArea") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
99
+ key: name,
100
+ name,
101
+ label
102
+ }, /* @__PURE__ */ react.default.createElement(TextArea, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
103
+ if (componentType === "Input.Password" || componentType === "Password") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
104
+ key: name,
105
+ name,
106
+ label
107
+ }, /* @__PURE__ */ react.default.createElement(Password, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
108
+ if ([
109
+ "Input.Email",
110
+ "Input.Phone",
111
+ "Input.Mobile",
112
+ "Input.URL",
113
+ "Input.Subdomain"
114
+ ].includes(componentType)) return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
115
+ key: name,
116
+ name,
117
+ label
118
+ }, /* @__PURE__ */ react.default.createElement(antd.Input, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
119
+ if (componentType === "InputNumber" || componentType === "Percent") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
120
+ key: name,
121
+ name,
122
+ label
123
+ }, /* @__PURE__ */ react.default.createElement(antd.InputNumber, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
124
+ disabled: isDisabled,
125
+ style: require_objectSpread2._objectSpread2({ width: "100%" }, fieldProps.style || {})
126
+ })));
127
+ if (componentType === "DatePicker") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
128
+ key: name,
129
+ name,
130
+ label
131
+ }, /* @__PURE__ */ react.default.createElement(antd.DatePicker, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
132
+ disabled: isDisabled,
133
+ style: require_objectSpread2._objectSpread2({ width: "100%" }, fieldProps.style || {})
134
+ })));
135
+ if (componentType === "TimePicker") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
136
+ key: name,
137
+ name,
138
+ label
139
+ }, /* @__PURE__ */ react.default.createElement(antd.TimePicker, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
140
+ disabled: isDisabled,
141
+ style: require_objectSpread2._objectSpread2({ width: "100%" }, fieldProps.style || {})
142
+ })));
143
+ if (componentType === "ColorPicker") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
144
+ key: name,
145
+ name,
146
+ label,
147
+ getValueFromEvent: (color) => {
148
+ var _color$toHexString, _color$toHexString2;
149
+ return (_color$toHexString = color === null || color === void 0 || (_color$toHexString2 = color.toHexString) === null || _color$toHexString2 === void 0 ? void 0 : _color$toHexString2.call(color)) !== null && _color$toHexString !== void 0 ? _color$toHexString : color;
150
+ }
151
+ }, /* @__PURE__ */ react.default.createElement(antd.ColorPicker, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
152
+ if (["Select", "RecordListWrapper"].includes(componentType)) return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
153
+ key: name,
154
+ name,
155
+ label
156
+ }, /* @__PURE__ */ react.default.createElement(antd.Select, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
157
+ disabled: isDisabled,
158
+ options: fieldOptions,
159
+ style: require_objectSpread2._objectSpread2({ width: "100%" }, fieldProps.style || {})
160
+ })));
161
+ if (componentType === "Radio.Group") {
162
+ const radioOptions = fieldOptions.map((o) => {
163
+ var _o$label;
164
+ return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, o), {}, { label: (_o$label = o.label) !== null && _o$label !== void 0 ? _o$label : String(o.value) });
165
+ });
166
+ return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
167
+ key: name,
168
+ name,
169
+ label
170
+ }, /* @__PURE__ */ react.default.createElement(antd.Radio.Group, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
171
+ disabled: isDisabled,
172
+ options: radioOptions
173
+ })));
174
+ }
175
+ if (componentType === "Checkbox.Group") {
176
+ const checkboxOptions = fieldOptions.map((o) => {
177
+ var _o$label2;
178
+ return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, o), {}, { label: (_o$label2 = o.label) !== null && _o$label2 !== void 0 ? _o$label2 : String(o.value) });
179
+ });
180
+ return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
181
+ key: name,
182
+ name,
183
+ label
184
+ }, /* @__PURE__ */ react.default.createElement(antd.Checkbox.Group, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
185
+ disabled: isDisabled,
186
+ options: checkboxOptions
187
+ })));
188
+ }
189
+ if (componentType === "Checkbox") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
190
+ key: name,
191
+ name,
192
+ label,
193
+ valuePropName: "checked"
194
+ }, /* @__PURE__ */ react.default.createElement(antd.Checkbox, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled }), label));
195
+ if (componentType === "Switch") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
196
+ key: name,
197
+ name,
198
+ label,
199
+ valuePropName: "checked"
200
+ }, /* @__PURE__ */ react.default.createElement(antd.Switch, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
201
+ if (componentType === "Upload") return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
202
+ key: name,
203
+ name,
204
+ label,
205
+ valuePropName: "fileList",
206
+ getValueFromEvent: (e) => Array.isArray(e) ? e : e === null || e === void 0 ? void 0 : e.fileList
207
+ }, /* @__PURE__ */ react.default.createElement(antd.Upload, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled }), /* @__PURE__ */ react.default.createElement(antd.Button, { disabled: isDisabled }, "上传文件")));
208
+ if (["Input.JSON", "Input.InputJSON"].includes(componentType)) return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
209
+ key: name,
210
+ name,
211
+ label,
212
+ getValueProps: (v) => ({ value: v !== void 0 && typeof v === "object" ? JSON.stringify(v, null, 2) : v !== null && v !== void 0 ? v : "" }),
213
+ getValueFromEvent: (e) => {
214
+ try {
215
+ return JSON.parse(e.target.value);
216
+ } catch (_unused) {
217
+ return e.target.value;
218
+ }
219
+ }
220
+ }, /* @__PURE__ */ react.default.createElement(TextArea, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
221
+ disabled: isDisabled,
222
+ rows: fieldProps.rows || 6
223
+ })));
224
+ if (["Translation", "IconPicker"].includes(componentType)) return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
225
+ key: name,
226
+ name,
227
+ label
228
+ }, /* @__PURE__ */ react.default.createElement(antd.Input, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, {
229
+ disabled: isDisabled,
230
+ placeholder: fieldProps.placeholder || `${componentType}(请在低代码平台配置后使用)`
231
+ })));
232
+ return /* @__PURE__ */ react.default.createElement(antd.Form.Item, {
233
+ key: name,
234
+ name,
235
+ label
236
+ }, /* @__PURE__ */ react.default.createElement(antd.Input, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, fieldProps), {}, { disabled: isDisabled })));
237
+ };
238
+ /**
239
+ * @title DataSourceSubForm 子表单组件
240
+ * @description
241
+ * 独立的子表单组件,专注于渲染一组表单字段。支持两种使用方式:
242
+ * 1. 传入 children:使用低代码引擎渲染的子组件(优先)
243
+ * 2. 传入 xRecordSchema:通过配置自动生成表单字段(fallback)
244
+ *
245
+ * 值结构: { field1: v1, field2: v2 }
246
+ */
247
+ const DataSourceSubForm = (props) => {
248
+ const { value = {}, onChange, children, xRecordSchema, renderMode = "edit", __designMode, className, style } = props;
249
+ const [innerForm] = antd.Form.useForm();
250
+ /** renderMode 为 disabled 时所有控件禁用 */
251
+ const isDisabled = renderMode === "disabled";
252
+ /** 确保 value 是对象 */
253
+ const safeValue = (0, react.useMemo)(() => {
254
+ if (value && typeof value === "object" && !Array.isArray(value)) return value;
255
+ return {};
256
+ }, [value]);
257
+ /** 当外部 value 变化时,同步到内部 Form */
258
+ (0, react.useEffect)(() => {
259
+ innerForm.setFieldsValue(safeValue);
260
+ }, [safeValue, innerForm]);
261
+ /** 内部 Form 值变化 -> 通知外部 */
262
+ const handleValuesChange = (0, ahooks.useMemoizedFn)((_, allValues) => {
263
+ onChange === null || onChange === void 0 || onChange(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, safeValue), allValues));
264
+ });
265
+ /** 解析 xRecordSchema 为字段数组 */
266
+ const fields = (0, react.useMemo)(() => normalizeRecordSchema(xRecordSchema), [xRecordSchema]);
267
+ /**
268
+ * @title 判断是否有有效的低代码子组件
269
+ * @description 排除引擎注入的空容器占位符
270
+ */
271
+ const hasRealChildren = (0, react.useMemo)(() => {
272
+ const childArray = react.default.Children.toArray(children);
273
+ if (childArray.length === 0) return false;
274
+ return childArray.some((child) => react.default.isValidElement(child));
275
+ }, [children]);
276
+ /**
277
+ * @title 创建模拟数据源
278
+ * @description 供 DataSourceProvider 消费,使子组件(如 Select)可访问字段元信息
279
+ */
280
+ const mockDataSource = (0, react.useMemo)(() => {
281
+ if (!fields || fields.length === 0) return null;
282
+ return {
283
+ fields: fields.map((field) => ({
284
+ name: field.name,
285
+ uiSchema: field.uiSchema,
286
+ interface: field.interface
287
+ })),
288
+ name: "dataSourceSubForm",
289
+ tableName: "dataSourceSubForm"
290
+ };
291
+ }, [fields]);
292
+ /**
293
+ * @title 渲染表单核心内容
294
+ * @description
295
+ * - 有 children:渲染低代码引擎注入的子组件
296
+ * - 无 children 但有 fields:用 renderFormItem 逐字段渲染 Antd 控件
297
+ * - 两者均无:显示空状态提示
298
+ */
299
+ const renderFormContent = () => {
300
+ if (!hasRealChildren && fields.length === 0) return /* @__PURE__ */ react.default.createElement("div", { className: "pisell-data-source-sub-form__empty" }, "No fields configured. Please configure xRecordSchema or add children components.");
301
+ const formContent = /* @__PURE__ */ react.default.createElement(require_JsonWrapperContext.default.Provider, { value: {
302
+ path: [],
303
+ level: 0
304
+ } }, /* @__PURE__ */ react.default.createElement(antd.Form, {
305
+ form: innerForm,
306
+ onValuesChange: handleValuesChange,
307
+ component: false,
308
+ layout: "vertical"
309
+ }, hasRealChildren ? children : fields.map((field) => renderFormItem(field, isDisabled))));
310
+ if (mockDataSource) return /* @__PURE__ */ react.default.createElement(require_FormSettingProvider.default, {
311
+ renderMode,
312
+ groupInfoPosition: "top",
313
+ size: "large"
314
+ }, /* @__PURE__ */ react.default.createElement(require_DataSourceProvider.default, {
315
+ dataSource: mockDataSource,
316
+ __designMode
317
+ }, formContent));
318
+ return /* @__PURE__ */ react.default.createElement(require_FormSettingProvider.default, {
319
+ renderMode,
320
+ groupInfoPosition: "top",
321
+ size: "large"
322
+ }, formContent);
323
+ };
324
+ return /* @__PURE__ */ react.default.createElement("div", {
325
+ className: (0, classnames.default)("pisell-data-source-sub-form", className),
326
+ style
327
+ }, renderFormContent());
328
+ };
329
+ var dataSourceSubForm_default = DataSourceSubForm;
330
+
331
+ //#endregion
332
+ exports.default = dataSourceSubForm_default;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @title DataSourceSubForm 组件样式
3
+ * @description 独立的子表单组件样式定义
4
+ */
5
+
6
+ // .pisell-data-source-sub-form {
7
+ // width: 100%;
8
+
9
+ // &__empty {
10
+ // color: #999;
11
+ // font-size: 12px;
12
+ // padding: 12px 0;
13
+ // text-align: center;
14
+ // }
15
+
16
+ // &__form-wrapper {
17
+ // width: 100%;
18
+ // }
19
+ // }