@nokecy/qc-ui 1.1.74 → 1.1.76

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 (62) hide show
  1. package/dist/cjs/dialogSelect/index.d.ts +2 -2
  2. package/dist/cjs/dialogSelect/index.js +65 -10
  3. package/dist/cjs/entitySelect/index.d.ts +57 -0
  4. package/dist/cjs/entitySelect/index.js +172 -0
  5. package/dist/cjs/exportButton/exportAction.d.ts +74 -0
  6. package/dist/cjs/exportButton/exportAction.js +199 -0
  7. package/dist/cjs/exportButton/index.d.ts +39 -0
  8. package/dist/cjs/exportButton/index.js +295 -0
  9. package/dist/cjs/importModal/index.d.ts +9 -0
  10. package/dist/cjs/importModal/index.js +46 -8
  11. package/dist/cjs/index.d.ts +6 -0
  12. package/dist/cjs/index.js +74 -0
  13. package/dist/cjs/readPretty/arrayTable.d.ts +6 -0
  14. package/dist/cjs/readPretty/arrayTable.js +156 -0
  15. package/dist/cjs/readPretty/controls.d.ts +11 -0
  16. package/dist/cjs/readPretty/controls.js +68 -0
  17. package/dist/cjs/readPretty/decimal.d.ts +4 -0
  18. package/dist/cjs/readPretty/decimal.js +28 -0
  19. package/dist/cjs/readPretty/formily.d.ts +2 -0
  20. package/dist/cjs/readPretty/formily.js +71 -0
  21. package/dist/cjs/readPretty/hoistStatics.d.ts +1 -0
  22. package/dist/cjs/readPretty/hoistStatics.js +37 -0
  23. package/dist/cjs/readPretty/index.d.ts +11 -0
  24. package/dist/cjs/readPretty/index.js +70 -0
  25. package/dist/cjs/readPretty/selectValue.d.ts +7 -0
  26. package/dist/cjs/readPretty/selectValue.js +60 -0
  27. package/dist/cjs/readPretty/values.d.ts +4 -0
  28. package/dist/cjs/readPretty/values.js +49 -0
  29. package/dist/cjs/utils/download.d.ts +6 -0
  30. package/dist/cjs/utils/download.js +23 -0
  31. package/dist/esm/dialogSelect/index.d.ts +2 -2
  32. package/dist/esm/dialogSelect/index.js +59 -4
  33. package/dist/esm/entitySelect/index.d.ts +57 -0
  34. package/dist/esm/entitySelect/index.js +164 -0
  35. package/dist/esm/exportButton/exportAction.d.ts +74 -0
  36. package/dist/esm/exportButton/exportAction.js +193 -0
  37. package/dist/esm/exportButton/index.d.ts +39 -0
  38. package/dist/esm/exportButton/index.js +259 -0
  39. package/dist/esm/importModal/index.d.ts +9 -0
  40. package/dist/esm/importModal/index.js +46 -8
  41. package/dist/esm/index.d.ts +6 -0
  42. package/dist/esm/index.js +4 -0
  43. package/dist/esm/readPretty/arrayTable.d.ts +6 -0
  44. package/dist/esm/readPretty/arrayTable.js +147 -0
  45. package/dist/esm/readPretty/controls.d.ts +11 -0
  46. package/dist/esm/readPretty/controls.js +62 -0
  47. package/dist/esm/readPretty/decimal.d.ts +4 -0
  48. package/dist/esm/readPretty/decimal.js +22 -0
  49. package/dist/esm/readPretty/formily.d.ts +2 -0
  50. package/dist/esm/readPretty/formily.js +63 -0
  51. package/dist/esm/readPretty/hoistStatics.d.ts +1 -0
  52. package/dist/esm/readPretty/hoistStatics.js +31 -0
  53. package/dist/esm/readPretty/index.d.ts +11 -0
  54. package/dist/esm/readPretty/index.js +12 -0
  55. package/dist/esm/readPretty/selectValue.d.ts +7 -0
  56. package/dist/esm/readPretty/selectValue.js +53 -0
  57. package/dist/esm/readPretty/values.d.ts +4 -0
  58. package/dist/esm/readPretty/values.js +43 -0
  59. package/dist/esm/utils/download.d.ts +6 -0
  60. package/dist/esm/utils/download.js +17 -0
  61. package/dist/umd/qc-ui.min.js +1 -1
  62. package/package.json +1 -1
@@ -40,7 +40,10 @@ var ImportModal = function ImportModal(props) {
40
40
  _props$downloadBlob = props.downloadBlob,
41
41
  downloadBlob = _props$downloadBlob === void 0 ? defaultDownloadBlob : _props$downloadBlob,
42
42
  serverUrl = props.serverUrl,
43
- buttonProps = props.buttonProps;
43
+ buttonProps = props.buttonProps,
44
+ request = props.request,
45
+ method = props.method,
46
+ onRealSuccess = props.onRealSuccess;
44
47
  var _useBoolean = (0, _ahooks.useBoolean)(false),
45
48
  _useBoolean2 = _slicedToArray(_useBoolean, 2),
46
49
  visible = _useBoolean2[0],
@@ -70,12 +73,46 @@ var ImportModal = function ImportModal(props) {
70
73
  }
71
74
  }, "\u6A21\u7248")),
72
75
  type: "info"
73
- }), /*#__PURE__*/_react.default.createElement(_antd.Upload.Dragger, {
76
+ }), /*#__PURE__*/_react.default.createElement(_antd.Upload.Dragger, _extends({
74
77
  style: {
75
78
  marginTop: 10
76
79
  },
77
80
  multiple: false,
78
- action: getUploadUrl(),
81
+ action: getUploadUrl()
82
+ }, request ? {
83
+ customRequest: function customRequest(_ref) {
84
+ var action = _ref.action,
85
+ file = _ref.file,
86
+ headers = _ref.headers,
87
+ onError = _ref.onError,
88
+ onProgress = _ref.onProgress,
89
+ onSuccess = _ref.onSuccess;
90
+ var formData = new FormData();
91
+ formData.append('file', file);
92
+ request(action, {
93
+ method: method || 'POST',
94
+ data: formData,
95
+ headers: headers,
96
+ // 导入失败要展示行级原因,交给下面的弹窗统一报,不再走全局吐司。
97
+ skipErrorHandler: true,
98
+ onUploadProgress: function onUploadProgress(_ref2) {
99
+ var total = _ref2.total,
100
+ loaded = _ref2.loaded;
101
+ onProgress === null || onProgress === void 0 || onProgress({
102
+ percent: Number((loaded / total * 100).toFixed(2))
103
+ }, file);
104
+ }
105
+ }).then(function (response) {
106
+ onSuccess === null || onSuccess === void 0 || onSuccess(response, file);
107
+ onRealSuccess === null || onRealSuccess === void 0 || onRealSuccess(response);
108
+ })
109
+ // 第二个参数成为 info.file.response,onChange 靠它拿到后端的失败原因,而不是 axios 的英文文案。
110
+ .catch(function (err) {
111
+ var _err$response;
112
+ return onError === null || onError === void 0 ? void 0 : onError(err, err === null || err === void 0 || (_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.data);
113
+ });
114
+ }
115
+ } : {}, {
79
116
  onChange: function onChange(info) {
80
117
  if (info.file.status === 'done') {
81
118
  _antd.message.success('导入成功');
@@ -84,15 +121,16 @@ var ImportModal = function ImportModal(props) {
84
121
  }
85
122
  if (info.file.status === 'error') {
86
123
  var _info$file;
87
- _antd.Modal.info({
88
- title: '导入失败,原因如下:',
124
+ // 没有后端给的原因时也要有提示,不能让失败无声无息。
125
+ _antd.Modal.error({
126
+ title: '导入失败',
89
127
  closable: true,
90
- width: 1000,
91
- content: info === null || info === void 0 || (_info$file = info.file) === null || _info$file === void 0 || (_info$file = _info$file.response) === null || _info$file === void 0 || (_info$file = _info$file.error) === null || _info$file === void 0 ? void 0 : _info$file.message
128
+ width: 800,
129
+ content: (info === null || info === void 0 || (_info$file = info.file) === null || _info$file === void 0 || (_info$file = _info$file.response) === null || _info$file === void 0 || (_info$file = _info$file.error) === null || _info$file === void 0 ? void 0 : _info$file.message) || '文件未能导入。请核对模板格式与必填列后重试;若持续失败请联系技术支持。'
92
130
  });
93
131
  }
94
132
  }
95
- }, /*#__PURE__*/_react.default.createElement("p", {
133
+ }), /*#__PURE__*/_react.default.createElement("p", {
96
134
  className: "ant-upload-drag-icon"
97
135
  }, /*#__PURE__*/_react.default.createElement(_icons.InboxOutlined, null)), /*#__PURE__*/_react.default.createElement("p", {
98
136
  className: "ant-upload-text"
@@ -31,6 +31,12 @@ export type * from "./RuleBuilder";
31
31
  export type { ColumnConfig } from "./array-table/columnHelper";
32
32
  export type { CentralizedColumnScheme, QueryScheme, SchemeStorageAdapter, SchemeSyncDataDto, CurrentSchemeDto, SchemeStorageConfig, LocalStorageAdapterConfig, BackendApiAdapterConfig, UseSchemeManagerConfig, GridPlusContextValue, GlobalConfigPermissions, } from "./ag-grid-plus";
33
33
  export * from './adapters';
34
+ export * from "./readPretty";
35
+ export { createEntitySelect } from "./entitySelect";
36
+ export { default as ExportButton, buildExportUrl, DEFAULT_EXPORT_TEMPLATE_API, resolveExportAction, resolveExportError, resolveFileName } from "./exportButton";
37
+ export type { ExportButtonProps, ExportTemplateApi, ExportTemplateOption } from "./exportButton";
38
+ export { saveAs } from "./utils/download";
39
+ export type { EntitySelectConfig, EntitySelectProps, EntitySelectQuery } from "./entitySelect";
34
40
  export { semanticTextColors, toGridTextColor, gridValueEnum } from "./ag-grid-plus/utils/valueEnumColor";
35
41
  export type { SemanticPreset } from "./ag-grid-plus/utils/valueEnumColor";
36
42
  export { contrastRatio, relativeLuminance, darkenUntilContrast, lightenUntilContrast, toRgb, toHsl, fromHsl } from "./utils/contrast";
package/dist/cjs/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -47,6 +48,14 @@ var _exportNames = {
47
48
  FlagsSelector: true,
48
49
  MatchItem: true,
49
50
  RegexRailroadDiagram: true,
51
+ createEntitySelect: true,
52
+ ExportButton: true,
53
+ buildExportUrl: true,
54
+ DEFAULT_EXPORT_TEMPLATE_API: true,
55
+ resolveExportAction: true,
56
+ resolveExportError: true,
57
+ resolveFileName: true,
58
+ saveAs: true,
50
59
  semanticTextColors: true,
51
60
  toGridTextColor: true,
52
61
  gridValueEnum: true,
@@ -119,6 +128,12 @@ Object.defineProperty(exports, "ConfirmPro", {
119
128
  return _ConfirmPro.default;
120
129
  }
121
130
  });
131
+ Object.defineProperty(exports, "DEFAULT_EXPORT_TEMPLATE_API", {
132
+ enumerable: true,
133
+ get: function get() {
134
+ return _exportButton.DEFAULT_EXPORT_TEMPLATE_API;
135
+ }
136
+ });
122
137
  Object.defineProperty(exports, "Dashboard", {
123
138
  enumerable: true,
124
139
  get: function get() {
@@ -149,6 +164,12 @@ Object.defineProperty(exports, "Editable", {
149
164
  return _editable.default;
150
165
  }
151
166
  });
167
+ Object.defineProperty(exports, "ExportButton", {
168
+ enumerable: true,
169
+ get: function get() {
170
+ return _exportButton.default;
171
+ }
172
+ });
152
173
  Object.defineProperty(exports, "ExtensibleGrid", {
153
174
  enumerable: true,
154
175
  get: function get() {
@@ -275,6 +296,12 @@ Object.defineProperty(exports, "ToolBar", {
275
296
  return _toolBar.default;
276
297
  }
277
298
  });
299
+ Object.defineProperty(exports, "buildExportUrl", {
300
+ enumerable: true,
301
+ get: function get() {
302
+ return _exportButton.buildExportUrl;
303
+ }
304
+ });
278
305
  Object.defineProperty(exports, "contrastRatio", {
279
306
  enumerable: true,
280
307
  get: function get() {
@@ -287,6 +314,12 @@ Object.defineProperty(exports, "createCascaderField", {
287
314
  return _standardFormDialog.createCascaderField;
288
315
  }
289
316
  });
317
+ Object.defineProperty(exports, "createEntitySelect", {
318
+ enumerable: true,
319
+ get: function get() {
320
+ return _entitySelect.createEntitySelect;
321
+ }
322
+ });
290
323
  Object.defineProperty(exports, "createSelectField", {
291
324
  enumerable: true,
292
325
  get: function get() {
@@ -353,12 +386,36 @@ Object.defineProperty(exports, "relativeLuminance", {
353
386
  return _contrast.relativeLuminance;
354
387
  }
355
388
  });
389
+ Object.defineProperty(exports, "resolveExportAction", {
390
+ enumerable: true,
391
+ get: function get() {
392
+ return _exportButton.resolveExportAction;
393
+ }
394
+ });
395
+ Object.defineProperty(exports, "resolveExportError", {
396
+ enumerable: true,
397
+ get: function get() {
398
+ return _exportButton.resolveExportError;
399
+ }
400
+ });
401
+ Object.defineProperty(exports, "resolveFileName", {
402
+ enumerable: true,
403
+ get: function get() {
404
+ return _exportButton.resolveFileName;
405
+ }
406
+ });
356
407
  Object.defineProperty(exports, "roundDecimal", {
357
408
  enumerable: true,
358
409
  get: function get() {
359
410
  return _businessDecimal.roundDecimal;
360
411
  }
361
412
  });
413
+ Object.defineProperty(exports, "saveAs", {
414
+ enumerable: true,
415
+ get: function get() {
416
+ return _download.saveAs;
417
+ }
418
+ });
362
419
  Object.defineProperty(exports, "semanticTextColors", {
363
420
  enumerable: true,
364
421
  get: function get() {
@@ -460,7 +517,24 @@ Object.keys(_adapters).forEach(function (key) {
460
517
  }
461
518
  });
462
519
  });
520
+ var _readPretty = require("./readPretty");
521
+ Object.keys(_readPretty).forEach(function (key) {
522
+ if (key === "default" || key === "__esModule") return;
523
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
524
+ if (key in exports && exports[key] === _readPretty[key]) return;
525
+ Object.defineProperty(exports, key, {
526
+ enumerable: true,
527
+ get: function get() {
528
+ return _readPretty[key];
529
+ }
530
+ });
531
+ });
532
+ var _entitySelect = require("./entitySelect");
533
+ var _exportButton = _interopRequireWildcard(require("./exportButton"));
534
+ var _download = require("./utils/download");
463
535
  var _valueEnumColor = require("./ag-grid-plus/utils/valueEnumColor");
464
536
  var _contrast = require("./utils/contrast");
465
537
  var _businessDecimal = require("./utils/businessDecimal");
538
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
539
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
466
540
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 阅读态也创建列的 void 字段,让 Formily 求值标题、显隐与 reactions;
3
+ * qc-ui 的阅读视图只读取列状态,未像编辑视图一样挂载这些字段。
4
+ * @author nokecy
5
+ */
6
+ export declare const withReadingArrayTable: (Control: any) => any;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.withReadingArrayTable = void 0;
8
+ var _react = require("@formily/react");
9
+ var _agGridReact = require("ag-grid-react");
10
+ var _utils = require("../array-table/utils");
11
+ var _columnGroup = require("../array-table/columnGroup");
12
+ var _indexColumn = require("../array-table/indexColumn");
13
+ var _theme = require("../array-table/theme");
14
+ var _hoistStatics = require("./hoistStatics");
15
+ var _react2 = _interopRequireWildcard(require("react"));
16
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
21
+ /** 阅读态直接使用 ArrayTable 的列定义,避免 AgGridPlus 的原值渲染器覆盖格式化结果。@author nokecy */
22
+ var ReadingArrayTable = (0, _react.observer)(function (_ref) {
23
+ var _buildArrayTableColum;
24
+ var height = _ref.height;
25
+ var field = (0, _react.useField)();
26
+ var sources = (0, _utils.useArrayTableSources)();
27
+ var rows = Array.isArray(field.value) ? field.value.slice() : [];
28
+ var generatedRowIds = (0, _react2.useRef)(new WeakMap());
29
+ var generatedRowIdSequence = (0, _react2.useRef)(0);
30
+ var columns = (_buildArrayTableColum = (0, _utils.buildArrayTableColumns)(rows, field, sources)) !== null && _buildArrayTableColum !== void 0 ? _buildArrayTableColum : [];
31
+ var showIndex = columns.length > 0 && !(0, _indexColumn.hasOwnIndexColumn)(sources);
32
+ if (showIndex) columns.unshift((0, _indexColumn.makeIndexColumn)());
33
+ var theme = (0, _theme.useArrayTableTheme)();
34
+ return /*#__PURE__*/_react2.default.createElement("div", {
35
+ style: {
36
+ height: height !== null && height !== void 0 ? height : 400
37
+ }
38
+ }, /*#__PURE__*/_react2.default.createElement(_agGridReact.AgGridReact, {
39
+ theme: theme,
40
+ rowHeight: _theme.ARRAY_TABLE_ROW_HEIGHT,
41
+ enableCellTextSelection: true,
42
+ ensureDomOrder: true,
43
+ defaultColDef: {
44
+ resizable: true,
45
+ sortable: true,
46
+ filter: true
47
+ },
48
+ rowSelection: {
49
+ mode: 'singleRow',
50
+ enableClickSelection: true
51
+ },
52
+ selectionColumnDef: {
53
+ pinned: 'left',
54
+ lockPosition: true,
55
+ width: 50,
56
+ suppressHeaderMenuButton: true
57
+ },
58
+ columnDefs: (0, _columnGroup.groupColumnDefs)(columns),
59
+ rowData: rows,
60
+ getRowId: function getRowId(_ref2) {
61
+ var _data$_id;
62
+ var data = _ref2.data;
63
+ var id = (_data$_id = data === null || data === void 0 ? void 0 : data._id) !== null && _data$_id !== void 0 ? _data$_id : data === null || data === void 0 ? void 0 : data.id;
64
+ if (id != null) return "data:".concat(String(id));
65
+
66
+ // 阅读态明细常用旧表行号等字段,不一定有 id/_id。给无 ID 的对象分配稳定行键,
67
+ // 否则多行都会返回 "undefined",AG Grid 在数据更新后会合并掉重复行。@author nokecy
68
+ var row = data;
69
+ var rowId = generatedRowIds.current.get(row);
70
+ if (!rowId) {
71
+ rowId = "generated:".concat(++generatedRowIdSequence.current);
72
+ generatedRowIds.current.set(row, rowId);
73
+ }
74
+ return rowId;
75
+ },
76
+ onRowDataUpdated: function onRowDataUpdated(_ref3) {
77
+ var api = _ref3.api;
78
+ if (showIndex) api.refreshCells({
79
+ columns: [_indexColumn.ARRAY_TABLE_INDEX_FIELD],
80
+ force: true
81
+ });
82
+ }
83
+ }));
84
+ });
85
+
86
+ /** 按 ArrayTable 的列提取规则收集列节点,不挂载明细数据字段。@author nokecy */
87
+ var columnsOf = function columnsOf(schema) {
88
+ var columns = [];
89
+ var visit = function visit(node) {
90
+ if (typeof node['x-component'] === 'string' && node['x-component'].includes('Column')) {
91
+ var _node$xComponentPro, _node$xComponentPro2;
92
+ var name = (_node$xComponentPro = (_node$xComponentPro2 = node['x-component-props']) === null || _node$xComponentPro2 === void 0 ? void 0 : _node$xComponentPro2.dataIndex) !== null && _node$xComponentPro !== void 0 ? _node$xComponentPro : node.name;
93
+ if (name !== undefined) columns.push({
94
+ name: name,
95
+ schema: node
96
+ });
97
+ } else {
98
+ Object.values(node.properties || {}).forEach(visit);
99
+ }
100
+ };
101
+ var items = Array.isArray(schema.items) ? schema.items : schema.items ? [schema.items] : [];
102
+ items.forEach(visit);
103
+ return columns;
104
+ };
105
+
106
+ /**
107
+ * 阅读态也创建列的 void 字段,让 Formily 求值标题、显隐与 reactions;
108
+ * qc-ui 的阅读视图只读取列状态,未像编辑视图一样挂载这些字段。
109
+ * @author nokecy
110
+ */
111
+ var withReadingArrayTable = exports.withReadingArrayTable = function withReadingArrayTable(Control) {
112
+ var ReactiveTable = (0, _react.observer)(function (_ref4) {
113
+ var columns = _ref4.columns,
114
+ tableProps = _ref4.tableProps;
115
+ var field = (0, _react.useField)();
116
+ // 阅读视图本身未订阅列状态,在此建立依赖,条件变化后重新提取表头。@author nokecy
117
+ var _iterator = _createForOfIteratorHelper(columns),
118
+ _step;
119
+ try {
120
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
121
+ var _column$componentProp, _column$componentProp2, _column$componentProp3;
122
+ var name = _step.value.name;
123
+ var column = field.query(field.address.concat(name)).take();
124
+ void (column === null || column === void 0 ? void 0 : column.display);
125
+ void (column === null || column === void 0 || (_column$componentProp = column.componentProps) === null || _column$componentProp === void 0 ? void 0 : _column$componentProp.title);
126
+ void (column === null || column === void 0 || (_column$componentProp2 = column.componentProps) === null || _column$componentProp2 === void 0 ? void 0 : _column$componentProp2.headerName);
127
+ void (column === null || column === void 0 || (_column$componentProp3 = column.componentProps) === null || _column$componentProp3 === void 0 ? void 0 : _column$componentProp3.headerGroup);
128
+ }
129
+ } catch (err) {
130
+ _iterator.e(err);
131
+ } finally {
132
+ _iterator.f();
133
+ }
134
+ return /*#__PURE__*/_react2.default.createElement(ReadingArrayTable, tableProps);
135
+ });
136
+ var Table = (0, _react.observer)(function (props) {
137
+ var field = (0, _react.useField)();
138
+ var schema = (0, _react.useFieldSchema)();
139
+ var columns = (0, _react2.useMemo)(function () {
140
+ return columnsOf(schema);
141
+ }, [schema]);
142
+ if (field.pattern !== 'readPretty') return /*#__PURE__*/_react2.default.createElement(Control, props);
143
+ return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, columns.map(function (column) {
144
+ return /*#__PURE__*/_react2.default.createElement(_react.RecursionField, {
145
+ key: column.name,
146
+ name: column.name,
147
+ schema: column.schema,
148
+ onlyRenderSelf: true
149
+ });
150
+ }), /*#__PURE__*/_react2.default.createElement(ReactiveTable, {
151
+ columns: columns,
152
+ tableProps: props
153
+ }));
154
+ });
155
+ return (0, _hoistStatics.hoistStatics)(Table, Control);
156
+ };
@@ -0,0 +1,11 @@
1
+ import { Input as AntInput, InputNumber as AntInputNumber, Select as AntSelect, Switch as AntSwitch, Checkbox as AntCheckbox, Radio as AntRadio, DatePicker as AntDatePicker, TimePicker as AntTimePicker, TreeSelect as AntTreeSelect, Cascader as AntCascader } from 'antd';
2
+ export declare const Input: typeof AntInput;
3
+ export declare const InputNumber: typeof AntInputNumber;
4
+ export declare const Select: typeof AntSelect;
5
+ export declare const Switch: typeof AntSwitch;
6
+ export declare const Checkbox: typeof AntCheckbox;
7
+ export declare const Radio: typeof AntRadio;
8
+ export declare const DatePicker: typeof AntDatePicker;
9
+ export declare const TimePicker: typeof AntTimePicker;
10
+ export declare const TreeSelect: typeof AntTreeSelect;
11
+ export declare const Cascader: typeof AntCascader;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TreeSelect = exports.TimePicker = exports.Switch = exports.Select = exports.Radio = exports.InputNumber = exports.Input = exports.DatePicker = exports.Checkbox = exports.Cascader = void 0;
7
+ var _antdV = require("@formily/antd-v5");
8
+ var _antd = require("antd");
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _hoistStatics = require("./hoistStatics");
11
+ var _values = require("./values");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
+ /** 普通表单控件在不可编辑时使用阅读展示,继承整张表单的禁用状态。@author nokecy */
15
+ var readingControl = function readingControl(Control, Preview) {
16
+ var map = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (props) {
17
+ return props;
18
+ };
19
+ var Component = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
20
+ var _props$disabled;
21
+ var _ConfigProvider$useCo = _antd.ConfigProvider.useConfig(),
22
+ componentDisabled = _ConfigProvider$useCo.componentDisabled;
23
+ var reading = props.readOnly || ((_props$disabled = props.disabled) !== null && _props$disabled !== void 0 ? _props$disabled : componentDisabled);
24
+ return reading ? /*#__PURE__*/_react.default.createElement(_antdV.PreviewText.Placeholder, {
25
+ value: "\u2014"
26
+ }, /*#__PURE__*/_react.default.createElement(Preview, map(props))) : /*#__PURE__*/_react.default.createElement(Control, _extends({}, props, {
27
+ ref: ref
28
+ }));
29
+ });
30
+ return (0, _hoistStatics.hoistStatics)(Component, Control);
31
+ };
32
+
33
+ /** 选择项来自 options 或原生 Option/Radio 子节点,阅读态显示名称。@author nokecy */
34
+ var choiceOptions = function choiceOptions(props) {
35
+ return props.options || _react.default.Children.toArray(props.children).flatMap(function (child) {
36
+ var _child$props;
37
+ return ((_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.value) !== undefined ? [{
38
+ value: child.props.value,
39
+ label: child.props.children
40
+ }] : choiceOptions(child.props || {});
41
+ });
42
+ };
43
+ var ChoicePreview = function ChoicePreview(props) {
44
+ return /*#__PURE__*/_react.default.createElement("span", null, (0, _values.selectedLabels)(props.value, (0, _values.flattenOptions)(choiceOptions(props), props.fieldNames), props.labelInValue));
45
+ };
46
+ var BooleanPreview = function BooleanPreview(props) {
47
+ return /*#__PURE__*/_react.default.createElement("span", null, props.children, props.children ? ':' : '', props.checked == null ? '—' : props.checked ? '是' : '否');
48
+ };
49
+ var PasswordPreview = function PasswordPreview(props) {
50
+ return /*#__PURE__*/_react.default.createElement("span", null, props.value ? '••••••' : '—');
51
+ };
52
+ var Input = exports.Input = readingControl(_antd.Input, _antdV.PreviewText.Input);
53
+ Input.TextArea = readingControl(_antd.Input.TextArea, _antdV.PreviewText.Input);
54
+ Input.Password = readingControl(_antd.Input.Password, PasswordPreview);
55
+ Input.Search = readingControl(_antd.Input.Search, _antdV.PreviewText.Input);
56
+ var InputNumber = exports.InputNumber = readingControl(_antd.InputNumber, _antdV.PreviewText.NumberPicker);
57
+ var Select = exports.Select = readingControl(_antd.Select, ChoicePreview);
58
+ var Switch = exports.Switch = readingControl(_antd.Switch, BooleanPreview);
59
+ var Checkbox = exports.Checkbox = readingControl(_antd.Checkbox, BooleanPreview);
60
+ Checkbox.Group = readingControl(_antd.Checkbox.Group, ChoicePreview);
61
+ var Radio = exports.Radio = readingControl(_antd.Radio, BooleanPreview);
62
+ Radio.Group = readingControl(_antd.Radio.Group, ChoicePreview);
63
+ var DatePicker = exports.DatePicker = readingControl(_antd.DatePicker, _antdV.PreviewText.DatePicker);
64
+ DatePicker.RangePicker = readingControl(_antd.DatePicker.RangePicker, _antdV.PreviewText.DateRangePicker);
65
+ var TimePicker = exports.TimePicker = readingControl(_antd.TimePicker, _antdV.PreviewText.TimePicker);
66
+ TimePicker.RangePicker = readingControl(_antd.TimePicker.RangePicker, _antdV.PreviewText.TimeRangePicker);
67
+ var TreeSelect = exports.TreeSelect = readingControl(_antd.TreeSelect, _antdV.PreviewText.TreeSelect);
68
+ var Cascader = exports.Cascader = readingControl(_antd.Cascader, _antdV.PreviewText.Cascader);
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ /** 精确业务数值录入和阅读展示,零值与原始十进制字符串始终保留。@author nokecy */
3
+ export declare const DecimalInput: React.ForwardRefExoticComponent<Omit<any, "ref"> & React.RefAttributes<any>>;
4
+ export declare const DecimalPicker: React.ForwardRefExoticComponent<Omit<Partial<Omit<any, "ref"> & React.RefAttributes<any>>, "ref"> & React.RefAttributes<unknown>>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DecimalPicker = exports.DecimalInput = void 0;
7
+ var _react = require("@formily/react");
8
+ var _react2 = _interopRequireDefault(require("react"));
9
+ var _controls = require("./controls");
10
+ var _businessDecimal = require("../utils/businessDecimal");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
13
+ /** 精确业务数值录入和阅读展示,零值与原始十进制字符串始终保留。@author nokecy */
14
+ var DecimalInput = exports.DecimalInput = /*#__PURE__*/_react2.default.forwardRef(function (props, ref) {
15
+ return /*#__PURE__*/_react2.default.createElement(_controls.InputNumber, _extends({}, props, {
16
+ stringMode: true,
17
+ ref: ref
18
+ }));
19
+ });
20
+ var DecimalPreview = function DecimalPreview(_ref) {
21
+ var value = _ref.value,
22
+ formatter = _ref.formatter;
23
+ return /*#__PURE__*/_react2.default.createElement("span", null, value == null || value === '' ? '—' : formatter ? formatter(value, {
24
+ userTyping: false,
25
+ input: String(value)
26
+ }) : (0, _businessDecimal.decimalText)(value));
27
+ };
28
+ var DecimalPicker = exports.DecimalPicker = (0, _react.connect)(DecimalInput, (0, _react.mapReadPretty)(DecimalPreview));
@@ -0,0 +1,2 @@
1
+ /** 动态表单统一入口:禁用/只读的数据控件使用阅读展示,保持字段值和校验模型。@author nokecy */
2
+ export declare function withReadingFields(components: Record<string, any>): Record<string, any>;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.withReadingFields = withReadingFields;
7
+ var _react = require("@formily/react");
8
+ var _react2 = _interopRequireDefault(require("react"));
9
+ var _hoistStatics = require("./hoistStatics");
10
+ var Reading = _interopRequireWildcard(require("./controls"));
11
+ var _arrayTable = require("./arrayTable");
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
16
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
17
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
19
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
24
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
25
+ /** 动态表单统一入口:禁用/只读的数据控件使用阅读展示,保持字段值和校验模型。@author nokecy */
26
+ function withReadingFields(components) {
27
+ var result = _objectSpread({}, components);
28
+ var previews = _objectSpread(_objectSpread({}, Reading), {}, {
29
+ NumberPicker: Reading.InputNumber,
30
+ Password: Reading.Input.Password
31
+ });
32
+ var wrap = function wrap(Control, Preview) {
33
+ var Component = (0, _react.observer)(function (props) {
34
+ var field = (0, _react.useField)();
35
+ if (props.disabled || props.readOnly || field !== null && field !== void 0 && field.disabled || field !== null && field !== void 0 && field.readOnly) {
36
+ var _field$value, _field$value2, _field$dataSource;
37
+ return /*#__PURE__*/_react2.default.createElement(Preview, _extends({}, props, {
38
+ value: (_field$value = field === null || field === void 0 ? void 0 : field.value) !== null && _field$value !== void 0 ? _field$value : props.value,
39
+ checked: (_field$value2 = field === null || field === void 0 ? void 0 : field.value) !== null && _field$value2 !== void 0 ? _field$value2 : props.checked,
40
+ options: field !== null && field !== void 0 && (_field$dataSource = field.dataSource) !== null && _field$dataSource !== void 0 && _field$dataSource.length ? field.dataSource : props.options,
41
+ disabled: true
42
+ }));
43
+ }
44
+ return /*#__PURE__*/_react2.default.createElement(Control, props);
45
+ });
46
+ var Wrapped = (0, _hoistStatics.hoistStatics)(Component, Control);
47
+ // 嵌套控件同样按字段状态展示,例如Input.TextArea、DatePicker.RangePicker。
48
+ for (var _i = 0, _arr = ['TextArea', 'Password', 'Search', 'Group', 'RangePicker']; _i < _arr.length; _i++) {
49
+ var key = _arr[_i];
50
+ if (Control[key] && Preview[key]) Wrapped[key] = wrap(Control[key], Preview[key]);
51
+ }
52
+ return Wrapped;
53
+ };
54
+ var _iterator = _createForOfIteratorHelper(Object.keys(previews).filter(function (name) {
55
+ return components[name];
56
+ })),
57
+ _step;
58
+ try {
59
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
60
+ var name = _step.value;
61
+ result[name] = wrap(components[name], previews[name]);
62
+ }
63
+ // ArrayTable 阅读态保留动态列的标题和显隐状态。@author nokecy
64
+ } catch (err) {
65
+ _iterator.e(err);
66
+ } finally {
67
+ _iterator.f();
68
+ }
69
+ if (components.ArrayTable) result.ArrayTable = (0, _arrayTable.withReadingArrayTable)(components.ArrayTable);
70
+ return result;
71
+ }
@@ -0,0 +1 @@
1
+ export declare function hoistStatics<T, S>(target: T, source: S): T & S;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hoistStatics = hoistStatics;
7
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
8
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
+ /**
11
+ * 把被包装组件的静态成员(如 Input.TextArea、Select.Option)带到包装后的组件上,
12
+ * 等价于 hoist-non-react-statics,但不新增依赖。React 自有的静态属性不拷贝。
13
+ * @author nokecy
14
+ */
15
+ var REACT_STATICS = new Set(['$$typeof', 'render', 'defaultProps', 'displayName', 'propTypes', 'contextType', 'contextTypes', 'childContextTypes', 'getDefaultProps', 'getDerivedStateFromProps', 'getDerivedStateFromError', 'mixins', 'type', 'compare', 'length', 'name', 'prototype', 'caller', 'callee', 'arguments', 'arity']);
16
+ function hoistStatics(target, source) {
17
+ var _iterator = _createForOfIteratorHelper(Reflect.ownKeys(source)),
18
+ _step;
19
+ try {
20
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
21
+ var key = _step.value;
22
+ if (REACT_STATICS.has(key)) continue;
23
+ var descriptor = Object.getOwnPropertyDescriptor(source, key);
24
+ if (!descriptor) continue;
25
+ try {
26
+ Object.defineProperty(target, key, descriptor);
27
+ } catch (_unused) {
28
+ // 个别只读属性无法重定义,跳过即可。
29
+ }
30
+ }
31
+ } catch (err) {
32
+ _iterator.e(err);
33
+ } finally {
34
+ _iterator.f();
35
+ }
36
+ return target;
37
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 阅读态控件:不可编辑时展示名称/文本而不是禁用的输入框,继承整张表单的禁用状态。
3
+ * 动态表单入口 `withReadingFields` 按字段的 disabled/readOnly 状态切换阅读展示,并保留 ArrayTable 动态列。
4
+ * @author nokecy
5
+ */
6
+ export * as ReadPrettyControls from './controls';
7
+ export { withReadingFields } from './formily';
8
+ export { withReadingArrayTable } from './arrayTable';
9
+ export { DecimalInput, DecimalPicker } from './decimal';
10
+ export { flattenOptions, selectedLabels } from './values';
11
+ export { normalizeSelectValue, selectCode, selectLabel } from './selectValue';