@nocobase/client 0.7.2-alpha.7 → 0.7.4-alpha.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 (175) hide show
  1. package/es/application/Application.d.ts +1 -0
  2. package/es/application/Application.js +7 -1
  3. package/es/block-provider/FormBlockProvider.js +15 -3
  4. package/es/block-provider/TableFieldProvider.d.ts +1 -0
  5. package/es/block-provider/TableFieldProvider.js +5 -2
  6. package/es/block-provider/TableSelectorProvider.js +42 -14
  7. package/es/block-provider/hooks/index.d.ts +6 -0
  8. package/es/block-provider/hooks/index.js +159 -65
  9. package/es/collection-manager/CollectionField.js +11 -4
  10. package/es/collection-manager/Configuration/AddFieldAction.js +6 -0
  11. package/es/collection-manager/Configuration/EditFieldAction.js +7 -0
  12. package/es/collection-manager/Configuration/index.js +5 -1
  13. package/es/collection-manager/Configuration/schemas/collections.js +2 -1
  14. package/es/collection-manager/interfaces/checkbox.js +1 -0
  15. package/es/collection-manager/interfaces/checkboxGroup.js +1 -0
  16. package/es/collection-manager/interfaces/datetime.js +1 -0
  17. package/es/collection-manager/interfaces/email.js +1 -0
  18. package/es/collection-manager/interfaces/icon.js +1 -0
  19. package/es/collection-manager/interfaces/input.js +104 -0
  20. package/es/collection-manager/interfaces/integer.js +64 -0
  21. package/es/collection-manager/interfaces/m2m.js +2 -0
  22. package/es/collection-manager/interfaces/m2o.js +1 -0
  23. package/es/collection-manager/interfaces/markdown.js +35 -0
  24. package/es/collection-manager/interfaces/multipleSelect.js +1 -0
  25. package/es/collection-manager/interfaces/number.js +56 -0
  26. package/es/collection-manager/interfaces/o2m.js +1 -0
  27. package/es/collection-manager/interfaces/o2o.js +3 -0
  28. package/es/collection-manager/interfaces/password.js +37 -1
  29. package/es/collection-manager/interfaces/percent.js +98 -0
  30. package/es/collection-manager/interfaces/phone.js +1 -0
  31. package/es/collection-manager/interfaces/properties/index.d.ts +1 -0
  32. package/es/collection-manager/interfaces/properties/index.js +1 -0
  33. package/es/collection-manager/interfaces/properties/operators.js +4 -4
  34. package/es/collection-manager/interfaces/radioGroup.js +1 -0
  35. package/es/collection-manager/interfaces/richText.js +35 -0
  36. package/es/collection-manager/interfaces/select.js +1 -0
  37. package/es/collection-manager/interfaces/textarea.js +35 -0
  38. package/es/collection-manager/interfaces/time.js +1 -0
  39. package/es/file-manager/FileStorageShortcut.js +2 -2
  40. package/es/locale/en_US.d.ts +8 -2
  41. package/es/locale/en_US.js +9 -3
  42. package/es/locale/zh_CN.d.ts +28 -2
  43. package/es/locale/zh_CN.js +29 -3
  44. package/es/plugin-manager/PluginManager.d.ts +1 -0
  45. package/es/plugin-manager/PluginManager.js +20 -6
  46. package/es/schema-component/antd/action/Action.Modal.js +1 -1
  47. package/es/schema-component/antd/calendar/Calendar.Designer.js +16 -10
  48. package/es/schema-component/antd/date-picker/DatePicker.d.ts +1 -1
  49. package/es/schema-component/antd/date-picker/DatePicker.js +1 -1
  50. package/es/schema-component/antd/date-picker/ReadPretty.js +1 -1
  51. package/es/schema-component/antd/date-picker/util.d.ts +0 -10
  52. package/es/schema-component/antd/date-picker/util.js +1 -79
  53. package/es/schema-component/antd/form-item/FormItem.js +193 -10
  54. package/es/schema-component/antd/grid/Grid.js +72 -6
  55. package/es/schema-component/antd/input-number/InputNumber.d.ts +1 -5
  56. package/es/schema-component/antd/input-number/InputNumber.js +25 -1
  57. package/es/schema-component/antd/input-number/ReadPretty.js +2 -4
  58. package/es/schema-component/antd/kanban/Kanban.Card.Designer.js +20 -14
  59. package/es/schema-component/antd/menu/Menu.js +6 -3
  60. package/es/schema-component/antd/percent/Percent.js +2 -2
  61. package/es/schema-component/antd/record-picker/InputRecordPicker.js +27 -13
  62. package/es/schema-component/antd/record-picker/ReadPrettyRecordPicker.js +5 -3
  63. package/es/schema-component/antd/table/Table.Array.js +2 -2
  64. package/es/schema-component/antd/table/Table.Void.js +11 -1
  65. package/es/schema-component/antd/table-v2/Table.Column.Designer.js +3 -1
  66. package/es/schema-component/antd/table-v2/Table.d.ts +0 -11
  67. package/es/schema-component/antd/table-v2/Table.js +163 -92
  68. package/es/schema-component/antd/table-v2/TableField.js +3 -0
  69. package/es/schema-component/antd/tabs/Tabs.Designer.js +23 -12
  70. package/es/schema-component/antd/tabs/Tabs.js +7 -1
  71. package/es/schema-component/antd/time-picker/ReadPretty.js +11 -5
  72. package/es/schema-component/core/DesignableSwitch.js +7 -1
  73. package/es/schema-component/hooks/useDesignable.js +21 -21
  74. package/es/schema-component/hooks/useProps.js +1 -1
  75. package/es/schema-initializer/buttons/FormItemInitializers.js +14 -3
  76. package/es/schema-initializer/buttons/ReadPrettyFormActionInitializers.js +8 -0
  77. package/es/schema-initializer/buttons/ReadPrettyFormItemInitializers.js +14 -3
  78. package/es/schema-initializer/buttons/RecordBlockInitializers.js +32 -3
  79. package/es/schema-initializer/buttons/TabPaneInitializers.js +11 -3
  80. package/es/schema-initializer/buttons/TableActionInitializers.js +11 -0
  81. package/es/schema-initializer/components/assigned-field/AssignedField.d.ts +4 -0
  82. package/es/schema-initializer/components/assigned-field/AssignedField.js +255 -69
  83. package/es/schema-initializer/items/index.d.ts +2 -0
  84. package/es/schema-initializer/items/index.js +48 -2
  85. package/es/schema-initializer/utils.js +22 -2
  86. package/es/schema-settings/SchemaSettings.js +7 -0
  87. package/es/system-settings/SystemSettingsShortcut.js +35 -12
  88. package/lib/application/Application.d.ts +1 -0
  89. package/lib/application/Application.js +11 -2
  90. package/lib/block-provider/FormBlockProvider.js +15 -2
  91. package/lib/block-provider/TableFieldProvider.d.ts +1 -0
  92. package/lib/block-provider/TableFieldProvider.js +4 -1
  93. package/lib/block-provider/TableSelectorProvider.js +42 -14
  94. package/lib/block-provider/hooks/index.d.ts +6 -0
  95. package/lib/block-provider/hooks/index.js +168 -67
  96. package/lib/collection-manager/CollectionField.js +12 -4
  97. package/lib/collection-manager/Configuration/AddFieldAction.js +6 -0
  98. package/lib/collection-manager/Configuration/EditFieldAction.js +7 -0
  99. package/lib/collection-manager/Configuration/index.js +5 -0
  100. package/lib/collection-manager/Configuration/schemas/collections.js +2 -1
  101. package/lib/collection-manager/interfaces/checkbox.js +1 -0
  102. package/lib/collection-manager/interfaces/checkboxGroup.js +1 -0
  103. package/lib/collection-manager/interfaces/datetime.js +1 -0
  104. package/lib/collection-manager/interfaces/email.js +1 -0
  105. package/lib/collection-manager/interfaces/icon.js +1 -0
  106. package/lib/collection-manager/interfaces/input.js +105 -0
  107. package/lib/collection-manager/interfaces/integer.js +66 -0
  108. package/lib/collection-manager/interfaces/m2m.js +2 -0
  109. package/lib/collection-manager/interfaces/m2o.js +1 -0
  110. package/lib/collection-manager/interfaces/markdown.js +36 -0
  111. package/lib/collection-manager/interfaces/multipleSelect.js +1 -0
  112. package/lib/collection-manager/interfaces/number.js +57 -0
  113. package/lib/collection-manager/interfaces/o2m.js +1 -0
  114. package/lib/collection-manager/interfaces/o2o.js +3 -0
  115. package/lib/collection-manager/interfaces/password.js +38 -1
  116. package/lib/collection-manager/interfaces/percent.js +100 -0
  117. package/lib/collection-manager/interfaces/phone.js +1 -0
  118. package/lib/collection-manager/interfaces/properties/index.d.ts +1 -0
  119. package/lib/collection-manager/interfaces/properties/index.js +1 -0
  120. package/lib/collection-manager/interfaces/properties/operators.js +4 -4
  121. package/lib/collection-manager/interfaces/radioGroup.js +1 -0
  122. package/lib/collection-manager/interfaces/richText.js +36 -0
  123. package/lib/collection-manager/interfaces/select.js +1 -0
  124. package/lib/collection-manager/interfaces/textarea.js +36 -0
  125. package/lib/collection-manager/interfaces/time.js +1 -0
  126. package/lib/file-manager/FileStorageShortcut.js +1 -1
  127. package/lib/locale/en_US.d.ts +8 -2
  128. package/lib/locale/en_US.js +9 -3
  129. package/lib/locale/zh_CN.d.ts +28 -2
  130. package/lib/locale/zh_CN.js +29 -3
  131. package/lib/plugin-manager/PluginManager.d.ts +1 -0
  132. package/lib/plugin-manager/PluginManager.js +23 -5
  133. package/lib/schema-component/antd/action/Action.Modal.js +1 -1
  134. package/lib/schema-component/antd/calendar/Calendar.Designer.js +16 -10
  135. package/lib/schema-component/antd/date-picker/DatePicker.d.ts +1 -1
  136. package/lib/schema-component/antd/date-picker/DatePicker.js +2 -2
  137. package/lib/schema-component/antd/date-picker/ReadPretty.js +6 -6
  138. package/lib/schema-component/antd/date-picker/util.d.ts +0 -10
  139. package/lib/schema-component/antd/date-picker/util.js +6 -89
  140. package/lib/schema-component/antd/form-item/FormItem.js +196 -12
  141. package/lib/schema-component/antd/grid/Grid.js +69 -3
  142. package/lib/schema-component/antd/input-number/InputNumber.d.ts +1 -5
  143. package/lib/schema-component/antd/input-number/InputNumber.js +28 -1
  144. package/lib/schema-component/antd/input-number/ReadPretty.js +2 -5
  145. package/lib/schema-component/antd/kanban/Kanban.Card.Designer.js +20 -14
  146. package/lib/schema-component/antd/menu/Menu.js +6 -3
  147. package/lib/schema-component/antd/percent/Percent.js +2 -2
  148. package/lib/schema-component/antd/record-picker/InputRecordPicker.js +27 -12
  149. package/lib/schema-component/antd/record-picker/ReadPrettyRecordPicker.js +4 -2
  150. package/lib/schema-component/antd/table/Table.Array.js +2 -2
  151. package/lib/schema-component/antd/table/Table.Void.js +11 -1
  152. package/lib/schema-component/antd/table-v2/Table.Column.Designer.js +3 -1
  153. package/lib/schema-component/antd/table-v2/Table.d.ts +0 -11
  154. package/lib/schema-component/antd/table-v2/Table.js +172 -94
  155. package/lib/schema-component/antd/table-v2/TableField.js +3 -0
  156. package/lib/schema-component/antd/tabs/Tabs.Designer.js +23 -12
  157. package/lib/schema-component/antd/tabs/Tabs.js +8 -1
  158. package/lib/schema-component/antd/time-picker/ReadPretty.js +10 -3
  159. package/lib/schema-component/core/DesignableSwitch.js +8 -1
  160. package/lib/schema-component/hooks/useDesignable.js +21 -21
  161. package/lib/schema-component/hooks/useProps.js +1 -1
  162. package/lib/schema-initializer/buttons/FormItemInitializers.js +14 -2
  163. package/lib/schema-initializer/buttons/ReadPrettyFormActionInitializers.js +8 -0
  164. package/lib/schema-initializer/buttons/ReadPrettyFormItemInitializers.js +14 -2
  165. package/lib/schema-initializer/buttons/RecordBlockInitializers.js +34 -4
  166. package/lib/schema-initializer/buttons/TabPaneInitializers.js +11 -3
  167. package/lib/schema-initializer/buttons/TableActionInitializers.js +11 -0
  168. package/lib/schema-initializer/components/assigned-field/AssignedField.d.ts +4 -0
  169. package/lib/schema-initializer/components/assigned-field/AssignedField.js +257 -66
  170. package/lib/schema-initializer/items/index.d.ts +2 -0
  171. package/lib/schema-initializer/items/index.js +54 -2
  172. package/lib/schema-initializer/utils.js +22 -2
  173. package/lib/schema-settings/SchemaSettings.js +7 -0
  174. package/lib/system-settings/SystemSettingsShortcut.js +37 -13
  175. package/package.json +7 -4
@@ -1,18 +1,8 @@
1
- import type { DatePickerProps } from 'antd/lib/date-picker';
2
1
  import moment from 'moment';
3
- export interface Str2momentOptions {
4
- gmt?: boolean;
5
- picker?: 'year' | 'month' | 'week' | 'quarter';
6
- }
7
- export declare const str2moment: (value?: string | string[], options?: Str2momentOptions) => any;
8
2
  export interface Moment2strOptions {
9
3
  showTime?: boolean;
10
4
  gmt?: boolean;
11
5
  picker?: 'year' | 'month' | 'week' | 'quarter';
12
6
  }
13
7
  export declare const moment2str: (value?: moment.Moment | moment.Moment[], options?: Moment2strOptions) => string | string[] | moment.Moment | moment.Moment[];
14
- export declare const getDefaultFormat: (props: DatePickerProps & {
15
- dateFormat: string;
16
- timeFormat: string;
17
- }) => string | import("rc-picker/lib/interface").CustomFormat<moment.Moment> | (string | import("rc-picker/lib/interface").CustomFormat<moment.Moment>)[];
18
8
  export declare const mapDateFormat: () => (props: any) => any;
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.str2moment = exports.moment2str = exports.mapDateFormat = exports.getDefaultFormat = void 0;
6
+ exports.moment2str = exports.mapDateFormat = void 0;
7
+
8
+ var _client = require("@nocobase/utils/client");
7
9
 
8
10
  var _moment = _interopRequireDefault(require("moment"));
9
11
 
@@ -15,22 +17,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
17
 
16
18
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
19
 
18
- var toGmt = function toGmt(value) {
19
- if (!value) {
20
- return value;
21
- }
22
-
23
- if (Array.isArray(value)) {
24
- return value.map(function (val) {
25
- return "".concat(val.format('YYYY-MM-DD'), "T").concat(val.format('HH:mm:ss.SSS'), "Z");
26
- });
27
- }
28
-
29
- if (_moment.default.isMoment(value)) {
30
- return "".concat(value.format('YYYY-MM-DD'), "T").concat(value.format('HH:mm:ss.SSS'), "Z");
31
- }
32
- };
33
-
34
20
  var toStringByPicker = function toStringByPicker(value, picker) {
35
21
  if (picker === 'year') {
36
22
  return value.format('YYYY') + '-01-01T00:00:00.000Z';
@@ -67,47 +53,6 @@ var toGmtByPicker = function toGmtByPicker(value, picker) {
67
53
  }
68
54
  };
69
55
 
70
- var toLocal = function toLocal(value) {
71
- if (!value) {
72
- return value;
73
- }
74
-
75
- if (Array.isArray(value)) {
76
- return value.map(function (val) {
77
- return val.toISOString();
78
- });
79
- }
80
-
81
- if (_moment.default.isMoment(value)) {
82
- return value.toISOString();
83
- }
84
- };
85
-
86
- var toMoment = function toMoment(val, options) {
87
- if (_moment.default.isMoment(val)) {
88
- return val;
89
- }
90
-
91
- var gmt = options.gmt,
92
- picker = options.picker;
93
-
94
- if (gmt || picker) {
95
- val = val.replace('T', ' ').replace('Z', '');
96
- return (0, _moment.default)(val);
97
- }
98
-
99
- return (0, _moment.default)(val);
100
- };
101
-
102
- var str2moment = function str2moment(value) {
103
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
104
- return Array.isArray(value) ? value.map(function (val) {
105
- return toMoment(val, options);
106
- }) : value ? toMoment(value, options) : value;
107
- };
108
-
109
- exports.str2moment = str2moment;
110
-
111
56
  var moment2str = function moment2str(value) {
112
57
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
113
58
  var showTime = options.showTime,
@@ -119,7 +64,7 @@ var moment2str = function moment2str(value) {
119
64
  }
120
65
 
121
66
  if (showTime) {
122
- return gmt ? toGmt(value) : toLocal(value);
67
+ return gmt ? (0, _client.toGmt)(value) : (0, _client.toLocal)(value);
123
68
  }
124
69
 
125
70
  return toGmtByPicker(value, picker);
@@ -127,41 +72,13 @@ var moment2str = function moment2str(value) {
127
72
 
128
73
  exports.moment2str = moment2str;
129
74
 
130
- var getDefaultFormat = function getDefaultFormat(props) {
131
- if (props.format) {
132
- return props.format;
133
- }
134
-
135
- if (props.dateFormat) {
136
- if (props['showTime']) {
137
- return "".concat(props.dateFormat, " ").concat(props.timeFormat || 'HH:mm:ss');
138
- }
139
-
140
- return props.dateFormat;
141
- }
142
-
143
- if (props['picker'] === 'month') {
144
- return 'YYYY-MM';
145
- } else if (props['picker'] === 'quarter') {
146
- return 'YYYY-\\QQ';
147
- } else if (props['picker'] === 'year') {
148
- return 'YYYY';
149
- } else if (props['picker'] === 'week') {
150
- return 'YYYY-wo';
151
- }
152
-
153
- return props['showTime'] ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
154
- };
155
-
156
- exports.getDefaultFormat = getDefaultFormat;
157
-
158
75
  var mapDateFormat = function mapDateFormat() {
159
76
  return function (props) {
160
- var format = getDefaultFormat(props);
77
+ var format = (0, _client.getDefaultFormat)(props);
161
78
  var _onChange = props.onChange;
162
79
  return _objectSpread(_objectSpread({}, props), {}, {
163
80
  format: format,
164
- value: str2moment(props.value, props),
81
+ value: (0, _client.str2moment)(props.value, props),
165
82
  onChange: function onChange(value) {
166
83
  if (_onChange) {
167
84
  _onChange(moment2str(value, props));
@@ -13,11 +13,13 @@ var _react = require("@formily/react");
13
13
 
14
14
  var _shared = require("@formily/shared");
15
15
 
16
+ var _lodash = _interopRequireDefault(require("lodash"));
17
+
16
18
  var _react2 = _interopRequireDefault(require("react"));
17
19
 
18
20
  var _reactI18next = require("react-i18next");
19
21
 
20
- var _ = require("../..");
22
+ var _2 = require("../..");
21
23
 
22
24
  var _blockProvider = require("../../../block-provider");
23
25
 
@@ -33,6 +35,12 @@ var _templateObject;
33
35
 
34
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
37
 
38
+ 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; } } }; }
39
+
40
+ 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); }
41
+
42
+ 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; }
43
+
36
44
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
37
45
 
38
46
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -67,7 +75,7 @@ var FormItem = function FormItem(props) {
67
75
  exports.FormItem = FormItem;
68
76
 
69
77
  FormItem.Designer = function (props) {
70
- var _collectionField$uiSc, _collectionField$uiSc2, _fieldSchema$xDecora, _field$componentProps, _field$componentProps2;
78
+ var _interfaceConfig$vali, _collectionField$uiSc, _collectionField$uiSc2, _fieldSchema$xDecora, _collectionField$uiSc4, _fieldSchema$xCompon, _field$componentProps, _field$componentProps2;
71
79
 
72
80
  var _useCollectionManager = (0, _collectionManager.useCollectionManager)(),
73
81
  getCollectionFields = _useCollectionManager.getCollectionFields,
@@ -89,15 +97,16 @@ FormItem.Designer = function (props) {
89
97
  var _useTranslation = (0, _reactI18next.useTranslation)(),
90
98
  t = _useTranslation.t;
91
99
 
92
- var _useDesignable = (0, _.useDesignable)(),
100
+ var _useDesignable = (0, _2.useDesignable)(),
93
101
  dn = _useDesignable.dn,
94
102
  refresh = _useDesignable.refresh,
95
103
  insertAdjacent = _useDesignable.insertAdjacent,
96
104
  insertBeforeBegin = _useDesignable.insertBeforeBegin;
97
105
 
98
- var compile = (0, _.useCompile)();
106
+ var compile = (0, _2.useCompile)();
99
107
  var collectionField = getField(fieldSchema['name']) || getCollectionJoinField(fieldSchema['x-collection-field']);
100
108
  var interfaceConfig = getInterface(collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface);
109
+ var validateSchema = interfaceConfig === null || interfaceConfig === void 0 ? void 0 : (_interfaceConfig$vali = interfaceConfig['validateSchema']) === null || _interfaceConfig$vali === void 0 ? void 0 : _interfaceConfig$vali.call(interfaceConfig, fieldSchema);
101
110
  var originalTitle = collectionField === null || collectionField === void 0 ? void 0 : (_collectionField$uiSc = collectionField.uiSchema) === null || _collectionField$uiSc === void 0 ? void 0 : _collectionField$uiSc.title;
102
111
  var targetFields = (collectionField === null || collectionField === void 0 ? void 0 : collectionField.target) ? getCollectionFields(collectionField.target) : [];
103
112
  var isSubFormAssocitionField = field.address.segments.includes('__form_grid');
@@ -221,7 +230,7 @@ FormItem.Designer = function (props) {
221
230
  }), !field.readPretty && fieldSchema['x-component'] !== 'FormField' && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.SwitchItem, {
222
231
  key: "required",
223
232
  title: t('Required'),
224
- checked: field.required,
233
+ checked: fieldSchema.required,
225
234
  onChange: function onChange(required) {
226
235
  var schema = _defineProperty({}, 'x-uid', fieldSchema['x-uid']);
227
236
 
@@ -233,6 +242,183 @@ FormItem.Designer = function (props) {
233
242
  });
234
243
  refresh();
235
244
  }
245
+ }), form && !(form === null || form === void 0 ? void 0 : form.readPretty) && validateSchema && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.ModalItem, {
246
+ title: t('Set validation rules'),
247
+ components: {
248
+ ArrayCollapse: _antd.ArrayCollapse,
249
+ FormLayout: _antd.FormLayout
250
+ },
251
+ schema: {
252
+ type: 'object',
253
+ title: t('Set validation rules'),
254
+ properties: {
255
+ rules: {
256
+ type: 'array',
257
+ default: fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema['x-validator'],
258
+ 'x-component': 'ArrayCollapse',
259
+ 'x-decorator': 'FormItem',
260
+ 'x-component-props': {
261
+ accordion: true
262
+ },
263
+ maxItems: 3,
264
+ items: {
265
+ type: 'object',
266
+ 'x-component': 'ArrayCollapse.CollapsePanel',
267
+ 'x-component-props': {
268
+ header: '{{ t("Validation rule") }}'
269
+ },
270
+ properties: {
271
+ index: {
272
+ type: 'void',
273
+ 'x-component': 'ArrayCollapse.Index'
274
+ },
275
+ layout: {
276
+ type: 'void',
277
+ 'x-component': 'FormLayout',
278
+ 'x-component-props': {
279
+ labelStyle: {
280
+ marginTop: '6px'
281
+ },
282
+ labelCol: 8,
283
+ wrapperCol: 16
284
+ },
285
+ properties: _objectSpread(_objectSpread({}, validateSchema), {}, {
286
+ message: {
287
+ type: 'string',
288
+ title: '{{ t("Error message") }}',
289
+ 'x-decorator': 'FormItem',
290
+ 'x-component': 'Input.TextArea',
291
+ 'x-component-props': {
292
+ autoSize: {
293
+ minRows: 2,
294
+ maxRows: 2
295
+ }
296
+ }
297
+ }
298
+ })
299
+ },
300
+ remove: {
301
+ type: 'void',
302
+ 'x-component': 'ArrayCollapse.Remove'
303
+ },
304
+ moveUp: {
305
+ type: 'void',
306
+ 'x-component': 'ArrayCollapse.MoveUp'
307
+ },
308
+ moveDown: {
309
+ type: 'void',
310
+ 'x-component': 'ArrayCollapse.MoveDown'
311
+ }
312
+ }
313
+ },
314
+ properties: {
315
+ add: {
316
+ type: 'void',
317
+ title: '{{ t("Add validation rule") }}',
318
+ 'x-component': 'ArrayCollapse.Addition',
319
+ 'x-reactions': {
320
+ dependencies: ['rules'],
321
+ fulfill: {
322
+ state: {
323
+ disabled: '{{$deps[0].length >= 3}}'
324
+ }
325
+ }
326
+ }
327
+ }
328
+ }
329
+ }
330
+ }
331
+ },
332
+ onSubmit: function onSubmit(v) {
333
+ var _collectionField$uiSc3;
334
+
335
+ var rules = [];
336
+
337
+ var _iterator = _createForOfIteratorHelper(v.rules),
338
+ _step;
339
+
340
+ try {
341
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
342
+ var _rule = _step.value;
343
+ rules.push(_lodash.default.pickBy(_rule, _lodash.default.identity));
344
+ }
345
+ } catch (err) {
346
+ _iterator.e(err);
347
+ } finally {
348
+ _iterator.f();
349
+ }
350
+
351
+ var schema = _defineProperty({}, 'x-uid', fieldSchema['x-uid']); // return;
352
+ // if (['number'].includes(collectionField?.interface) && collectionField?.uiSchema?.['x-component-props']?.['stringMode'] === true) {
353
+ // rules['numberStringMode'] = true;
354
+ // }
355
+
356
+
357
+ if (['percent'].includes(collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface)) {
358
+ var _iterator2 = _createForOfIteratorHelper(rules),
359
+ _step2;
360
+
361
+ try {
362
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
363
+ var rule = _step2.value;
364
+
365
+ if (!!rule.maxValue || !!rule.minValue) {
366
+ rule['percentMode'] = true;
367
+ }
368
+
369
+ if (rule.percentFormat) {
370
+ rule['percentFormats'] = true;
371
+ }
372
+ }
373
+ } catch (err) {
374
+ _iterator2.e(err);
375
+ } finally {
376
+ _iterator2.f();
377
+ }
378
+ }
379
+
380
+ var concatValidator = _lodash.default.concat([], (collectionField === null || collectionField === void 0 ? void 0 : (_collectionField$uiSc3 = collectionField.uiSchema) === null || _collectionField$uiSc3 === void 0 ? void 0 : _collectionField$uiSc3['x-validator']) || [], rules);
381
+
382
+ field.validator = concatValidator;
383
+ fieldSchema['x-validator'] = rules;
384
+ schema['x-validator'] = rules;
385
+ dn.emit('patch', {
386
+ schema: schema
387
+ });
388
+ refresh();
389
+ }
390
+ }), form && !(form === null || form === void 0 ? void 0 : form.readPretty) && (collectionField === null || collectionField === void 0 ? void 0 : (_collectionField$uiSc4 = collectionField.uiSchema) === null || _collectionField$uiSc4 === void 0 ? void 0 : _collectionField$uiSc4.type) && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.ModalItem, {
391
+ title: t('Set default value'),
392
+ components: {
393
+ ArrayCollapse: _antd.ArrayCollapse,
394
+ FormLayout: _antd.FormLayout
395
+ },
396
+ schema: {
397
+ type: 'object',
398
+ title: t('Set default value'),
399
+ properties: {
400
+ default: _objectSpread(_objectSpread({}, collectionField.uiSchema), {}, {
401
+ name: 'default',
402
+ title: t('Default value'),
403
+ 'x-decorator': 'FormItem',
404
+ default: fieldSchema.default || collectionField.defaultValue
405
+ })
406
+ }
407
+ },
408
+ onSubmit: function onSubmit(v) {
409
+ var schema = _defineProperty({}, 'x-uid', fieldSchema['x-uid']);
410
+
411
+ if (field.value !== v.default) {
412
+ field.value = v.default;
413
+ }
414
+
415
+ fieldSchema.default = v.default;
416
+ schema.default = v.default;
417
+ dn.emit('patch', {
418
+ schema: schema
419
+ });
420
+ refresh();
421
+ }
236
422
  }), form && !isSubFormAssocitionField && ['o2o', 'oho', 'obo', 'o2m'].includes(collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface) && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.SelectItem, {
237
423
  title: t('Field component'),
238
424
  options: (collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface) === 'o2m' ? [{
@@ -279,7 +465,7 @@ FormItem.Designer = function (props) {
279
465
  }
280
466
  });
281
467
  }
282
- }), form && !(form === null || form === void 0 ? void 0 : form.readPretty) && (collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface) !== 'o2m' && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.SelectItem, {
468
+ }), form && !(form === null || form === void 0 ? void 0 : form.readPretty) && (collectionField === null || collectionField === void 0 ? void 0 : collectionField.interface) !== 'o2m' && (fieldSchema === null || fieldSchema === void 0 ? void 0 : (_fieldSchema$xCompon = fieldSchema['x-component-props']) === null || _fieldSchema$xCompon === void 0 ? void 0 : _fieldSchema$xCompon['pattern-disable']) != true && /*#__PURE__*/_react2.default.createElement(_schemaSettings.SchemaSettings.SelectItem, {
283
469
  key: "pattern",
284
470
  title: t('Pattern'),
285
471
  options: [{
@@ -341,15 +527,13 @@ FormItem.Designer = function (props) {
341
527
  options: options,
342
528
  value: field === null || field === void 0 ? void 0 : (_field$componentProps = field.componentProps) === null || _field$componentProps === void 0 ? void 0 : (_field$componentProps2 = _field$componentProps.fieldNames) === null || _field$componentProps2 === void 0 ? void 0 : _field$componentProps2.label,
343
529
  onChange: function onChange(label) {
530
+ var _collectionField$uiSc5, _collectionField$uiSc6;
531
+
344
532
  var schema = _defineProperty({}, 'x-uid', fieldSchema['x-uid']);
345
533
 
346
- var fieldNames = _objectSpread(_objectSpread({}, field.componentProps.fieldNames), {}, {
534
+ var fieldNames = _objectSpread(_objectSpread(_objectSpread({}, collectionField === null || collectionField === void 0 ? void 0 : (_collectionField$uiSc5 = collectionField.uiSchema) === null || _collectionField$uiSc5 === void 0 ? void 0 : (_collectionField$uiSc6 = _collectionField$uiSc5['x-component-props']) === null || _collectionField$uiSc6 === void 0 ? void 0 : _collectionField$uiSc6['fieldNames']), field.componentProps.fieldNames), {}, {
347
535
  label: label
348
- }); // if (fieldSchema['x-component-props']?.['field']?.['uiSchema']?.['x-component-props']) {
349
- // fieldSchema['x-component-props']['field']['uiSchema']['x-component-props']['fieldNames'] = fieldNames;
350
- // } else {
351
- // }
352
-
536
+ });
353
537
 
354
538
  fieldSchema['x-component-props'] = fieldSchema['x-component-props'] || {};
355
539
  fieldSchema['x-component-props']['fieldNames'] = fieldNames;
@@ -55,7 +55,17 @@ var GridRowContext = /*#__PURE__*/(0, _react2.createContext)(null);
55
55
  var GridColContext = /*#__PURE__*/(0, _react2.createContext)(null);
56
56
  var GridContext = /*#__PURE__*/(0, _react2.createContext)({});
57
57
 
58
+ var breakRemoveOnGrid = function breakRemoveOnGrid(s) {
59
+ return s['x-component'] === 'Grid';
60
+ };
61
+
62
+ var breakRemoveOnRow = function breakRemoveOnRow(s) {
63
+ return s['x-component'] === 'Grid.Row';
64
+ };
65
+
58
66
  var ColDivider = function ColDivider(props) {
67
+ var _dndContext$active, _dndContext$active$da, _dndContext$active$da2;
68
+
59
69
  var _useDroppable = (0, _core.useDroppable)({
60
70
  id: props.id,
61
71
  data: props.data
@@ -66,14 +76,31 @@ var ColDivider = function ColDivider(props) {
66
76
  var droppableStyle = {
67
77
  backgroundColor: isOver ? 'rgba(241, 139, 98, .1)' : undefined
68
78
  };
79
+ var dndContext = (0, _core.useDndContext)();
80
+ var activeSchema = (_dndContext$active = dndContext.active) === null || _dndContext$active === void 0 ? void 0 : (_dndContext$active$da = _dndContext$active.data.current) === null || _dndContext$active$da === void 0 ? void 0 : (_dndContext$active$da2 = _dndContext$active$da.schema) === null || _dndContext$active$da2 === void 0 ? void 0 : _dndContext$active$da2.parent;
81
+ var blocksLength = activeSchema ? Object.keys(activeSchema.properties).length : 0;
82
+ var visible = true;
83
+
84
+ if (blocksLength === 1) {
85
+ if (props.first) {
86
+ visible = activeSchema !== props.cols[0];
87
+ } else {
88
+ var currentSchema = props.cols[props.index];
89
+ var downSchema = props.cols[props.index + 1];
90
+ visible = activeSchema !== currentSchema && downSchema !== activeSchema;
91
+ }
92
+ }
93
+
69
94
  return /*#__PURE__*/_react2.default.createElement("div", {
70
- ref: setNodeRef,
95
+ ref: visible ? setNodeRef : null,
71
96
  className: (0, _classnames.default)('nb-col-divider', (0, _css.css)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 24px;\n "])))),
72
97
  style: _objectSpread({}, droppableStyle)
73
98
  });
74
99
  };
75
100
 
76
101
  var RowDivider = function RowDivider(props) {
102
+ var _dndContext$active2, _dndContext$active2$d, _dndContext$active2$d2;
103
+
77
104
  var _useDroppable2 = (0, _core.useDroppable)({
78
105
  id: props.id,
79
106
  data: props.data
@@ -92,6 +119,23 @@ var RowDivider = function RowDivider(props) {
92
119
  active = _useState2[0],
93
120
  setActive = _useState2[1];
94
121
 
122
+ var dndContext = (0, _core.useDndContext)();
123
+ var currentSchema = props.rows[props.index];
124
+ var activeSchema = (_dndContext$active2 = dndContext.active) === null || _dndContext$active2 === void 0 ? void 0 : (_dndContext$active2$d = _dndContext$active2.data.current) === null || _dndContext$active2$d === void 0 ? void 0 : (_dndContext$active2$d2 = _dndContext$active2$d.schema) === null || _dndContext$active2$d2 === void 0 ? void 0 : _dndContext$active2$d2.parent.parent;
125
+ var colsLength = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema.mapProperties(function (schema) {
126
+ return schema['x-component'] === 'Grid.Col';
127
+ }).filter(Boolean).length;
128
+ var visible = true; // col > 1 时不需要隐藏
129
+
130
+ if (colsLength === 1) {
131
+ if (props.first) {
132
+ visible = activeSchema !== props.rows[0];
133
+ } else {
134
+ var downSchema = props.rows[props.index + 1];
135
+ visible = activeSchema !== currentSchema && downSchema !== activeSchema;
136
+ }
137
+ }
138
+
95
139
  (0, _core.useDndMonitor)({
96
140
  onDragStart: function onDragStart(event) {
97
141
  setActive(true);
@@ -106,7 +150,7 @@ var RowDivider = function RowDivider(props) {
106
150
  }
107
151
  });
108
152
  return /*#__PURE__*/_react2.default.createElement("span", {
109
- ref: setNodeRef,
153
+ ref: visible ? setNodeRef : null,
110
154
  className: (0, _classnames.default)('nb-row-divider', (0, _css.css)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n height: 24px;\n width: 100%;\n position: absolute;\n margin-top: -24px;\n "])))),
111
155
  style: _objectSpread({
112
156
  zIndex: active ? 1000 : -1
@@ -193,6 +237,7 @@ var useGridRowContext = function useGridRowContext() {
193
237
 
194
238
  exports.useGridRowContext = useGridRowContext;
195
239
  var Grid = (0, _react.observer)(function (props) {
240
+ var gridRef = (0, _react2.useRef)(null);
196
241
  var field = (0, _react.useField)();
197
242
  var fieldSchema = (0, _react.useFieldSchema)();
198
243
 
@@ -201,8 +246,16 @@ var Grid = (0, _react.observer)(function (props) {
201
246
 
202
247
  var addr = field.address.toString();
203
248
  var rows = useRowProperties();
249
+
250
+ var _useFormBlockContext = (0, _.useFormBlockContext)(),
251
+ setPrintContent = _useFormBlockContext.setPrintContent;
252
+
253
+ (0, _react2.useEffect)(function () {
254
+ gridRef.current && (setPrintContent === null || setPrintContent === void 0 ? void 0 : setPrintContent(gridRef.current));
255
+ }, [gridRef.current]);
204
256
  return /*#__PURE__*/_react2.default.createElement(GridContext.Provider, {
205
257
  value: {
258
+ ref: gridRef,
206
259
  fieldSchema: fieldSchema,
207
260
  renderSchemaInitializer: render
208
261
  }
@@ -210,12 +263,16 @@ var Grid = (0, _react.observer)(function (props) {
210
263
  className: 'nb-grid',
211
264
  style: {
212
265
  position: 'relative'
213
- }
266
+ },
267
+ ref: gridRef
214
268
  }, /*#__PURE__*/_react2.default.createElement(DndWrapper, {
215
269
  dndContext: props.dndContext
216
270
  }, /*#__PURE__*/_react2.default.createElement(RowDivider, {
271
+ rows: rows,
272
+ first: true,
217
273
  id: "".concat(addr, "_0"),
218
274
  data: {
275
+ breakRemoveOn: breakRemoveOnGrid,
219
276
  wrapSchema: wrapRowSchema,
220
277
  insertAdjacent: 'afterBegin',
221
278
  schema: fieldSchema
@@ -227,8 +284,11 @@ var Grid = (0, _react.observer)(function (props) {
227
284
  name: schema.name,
228
285
  schema: schema
229
286
  }), /*#__PURE__*/_react2.default.createElement(RowDivider, {
287
+ rows: rows,
288
+ index: index,
230
289
  id: "".concat(addr, "_").concat(index + 1),
231
290
  data: {
291
+ breakRemoveOn: breakRemoveOnGrid,
232
292
  wrapSchema: wrapRowSchema,
233
293
  insertAdjacent: 'afterEnd',
234
294
  schema: schema
@@ -249,8 +309,11 @@ Grid.Row = (0, _react.observer)(function (props) {
249
309
  }, /*#__PURE__*/_react2.default.createElement("div", {
250
310
  className: (0, _classnames.default)('nb-grid-row', (0, _css.css)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n margin: 0 -24px;\n display: flex;\n position: relative;\n /* z-index: 0; */\n "]))))
251
311
  }, /*#__PURE__*/_react2.default.createElement(ColDivider, {
312
+ cols: cols,
313
+ first: true,
252
314
  id: "".concat(addr, "_0"),
253
315
  data: {
316
+ breakRemoveOn: breakRemoveOnRow,
254
317
  wrapSchema: wrapColSchema,
255
318
  insertAdjacent: 'afterBegin',
256
319
  schema: fieldSchema
@@ -262,8 +325,11 @@ Grid.Row = (0, _react.observer)(function (props) {
262
325
  name: schema.name,
263
326
  schema: schema
264
327
  }), /*#__PURE__*/_react2.default.createElement(ColDivider, {
328
+ cols: cols,
329
+ index: index,
265
330
  id: "".concat(addr, "_").concat(index + 1),
266
331
  data: {
332
+ breakRemoveOn: breakRemoveOnRow,
267
333
  wrapSchema: wrapColSchema,
268
334
  insertAdjacent: 'afterEnd',
269
335
  schema: schema
@@ -1,7 +1,3 @@
1
1
  import React from 'react';
2
- export declare const InputNumber: React.ForwardRefExoticComponent<Pick<Partial<import("antd").InputNumberProps<string | number> & {
3
- children?: React.ReactNode;
4
- } & {
5
- ref?: React.Ref<HTMLInputElement>;
6
- }>, keyof import("antd").InputNumberProps<string | number>> & React.RefAttributes<unknown>>;
2
+ export declare const InputNumber: React.ForwardRefExoticComponent<Pick<Partial<any>, string | number | symbol> & React.RefAttributes<unknown>>;
7
3
  export default InputNumber;
@@ -9,9 +9,36 @@ var _react = require("@formily/react");
9
9
 
10
10
  var _antd = require("antd");
11
11
 
12
+ var _react2 = _interopRequireDefault(require("react"));
13
+
12
14
  var _ReadPretty = require("./ReadPretty");
13
15
 
14
- var InputNumber = (0, _react.connect)(_antd.InputNumber, (0, _react.mapReadPretty)(_ReadPretty.ReadPretty));
16
+ var _excluded = ["onChange"];
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
+
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
26
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
27
+
28
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
29
+
30
+ var InputNumber = (0, _react.connect)(function (props) {
31
+ var onChange = props.onChange,
32
+ others = _objectWithoutProperties(props, _excluded);
33
+
34
+ var handleChange = function handleChange(v) {
35
+ onChange(parseFloat(v));
36
+ };
37
+
38
+ return /*#__PURE__*/_react2.default.createElement(_antd.InputNumber, _objectSpread({
39
+ onChange: handleChange
40
+ }, others));
41
+ }, (0, _react.mapReadPretty)(_ReadPretty.ReadPretty));
15
42
  exports.InputNumber = InputNumber;
16
43
  var _default = InputNumber;
17
44
  exports.default = _default;
@@ -7,9 +7,7 @@ exports.ReadPretty = void 0;
7
7
 
8
8
  var _shared = require("@formily/shared");
9
9
 
10
- var _MiniDecimal = require("rc-input-number/lib/utils/MiniDecimal");
11
-
12
- var _numberUtil = require("rc-input-number/lib/utils/numberUtil");
10
+ var _client = require("@nocobase/utils/client");
13
11
 
14
12
  var _react = _interopRequireDefault(require("react"));
15
13
 
@@ -25,10 +23,9 @@ var ReadPretty = function ReadPretty(props) {
25
23
  return /*#__PURE__*/_react.default.createElement("div", null);
26
24
  }
27
25
 
28
- var precision = Math.max((0, _numberUtil.getNumberPrecision)(String(value)), (0, _numberUtil.getNumberPrecision)(step));
29
26
  return /*#__PURE__*/_react.default.createElement("div", {
30
27
  className: 'nb-read-pretty-input-number'
31
- }, addonBefore, (0, _MiniDecimal.toFixed)(String(value), '.', precision), addonAfter);
28
+ }, addonBefore, (0, _client.toFixedByStep)(value, step), addonAfter);
32
29
  };
33
30
 
34
31
  exports.ReadPretty = ReadPretty;