@rjsf/antd 5.0.0-beta.9 → 5.0.1

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 (36) hide show
  1. package/dist/antd.cjs.development.js +1062 -1063
  2. package/dist/antd.cjs.development.js.map +1 -1
  3. package/dist/antd.cjs.production.min.js +1 -1
  4. package/dist/antd.cjs.production.min.js.map +1 -1
  5. package/dist/antd.esm.js +1058 -1065
  6. package/dist/antd.esm.js.map +1 -1
  7. package/dist/antd.umd.development.js +1065 -1067
  8. package/dist/antd.umd.development.js.map +1 -1
  9. package/dist/antd.umd.production.min.js +1 -1
  10. package/dist/antd.umd.production.min.js.map +1 -1
  11. package/dist/index.d.ts +16 -61
  12. package/package.json +27 -36
  13. package/dist/components/DatePicker/index.d.ts +0 -17
  14. package/dist/templates/ArrayFieldItemTemplate/index.d.ts +0 -21
  15. package/dist/templates/ArrayFieldTemplate/index.d.ts +0 -2
  16. package/dist/templates/BaseInputTemplate/index.d.ts +0 -15
  17. package/dist/templates/DescriptionField/index.d.ts +0 -5
  18. package/dist/templates/ErrorList/index.d.ts +0 -4
  19. package/dist/templates/FieldErrorTemplate/index.d.ts +0 -5
  20. package/dist/templates/FieldTemplate/WrapIfAdditional.d.ts +0 -16
  21. package/dist/templates/FieldTemplate/index.d.ts +0 -23
  22. package/dist/templates/IconButton/index.d.ts +0 -5
  23. package/dist/templates/ObjectFieldTemplate/index.d.ts +0 -2
  24. package/dist/templates/SubmitButton/index.d.ts +0 -4
  25. package/dist/templates/TitleField/index.d.ts +0 -2
  26. package/dist/widgets/AltDateTimeWidget/index.d.ts +0 -13
  27. package/dist/widgets/AltDateWidget/index.d.ts +0 -26
  28. package/dist/widgets/CheckboxWidget/index.d.ts +0 -13
  29. package/dist/widgets/CheckboxesWidget/index.d.ts +0 -13
  30. package/dist/widgets/DateTimeWidget/index.d.ts +0 -12
  31. package/dist/widgets/DateWidget/index.d.ts +0 -12
  32. package/dist/widgets/PasswordWidget/index.d.ts +0 -13
  33. package/dist/widgets/RadioWidget/index.d.ts +0 -14
  34. package/dist/widgets/RangeWidget/index.d.ts +0 -15
  35. package/dist/widgets/SelectWidget/index.d.ts +0 -21
  36. package/dist/widgets/TextareaWidget/index.d.ts +0 -13
@@ -23,6 +23,7 @@ var PlusCircleOutlined = require('@ant-design/icons/PlusCircleOutlined');
23
23
  var Form$1 = require('antd/lib/form');
24
24
  var isObject = require('lodash/isObject');
25
25
  var isNumber = require('lodash/isNumber');
26
+ var isString = require('lodash/isString');
26
27
  var Checkbox = require('antd/lib/checkbox');
27
28
  var dayjs = require('dayjs');
28
29
  var dayjsGenerateConfig = require('rc-picker/lib/generate/dayjs');
@@ -51,6 +52,7 @@ var PlusCircleOutlined__default = /*#__PURE__*/_interopDefaultLegacy(PlusCircleO
51
52
  var Form__default = /*#__PURE__*/_interopDefaultLegacy(Form$1);
52
53
  var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
53
54
  var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
55
+ var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
54
56
  var Checkbox__default = /*#__PURE__*/_interopDefaultLegacy(Checkbox);
55
57
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
56
58
  var dayjsGenerateConfig__default = /*#__PURE__*/_interopDefaultLegacy(dayjsGenerateConfig);
@@ -59,38 +61,38 @@ var Radio__default = /*#__PURE__*/_interopDefaultLegacy(Radio);
59
61
  var Slider__default = /*#__PURE__*/_interopDefaultLegacy(Slider);
60
62
  var Select__default = /*#__PURE__*/_interopDefaultLegacy(Select);
61
63
 
62
- const BTN_GRP_STYLE = {
64
+ var BTN_GRP_STYLE = {
63
65
  width: "100%"
64
66
  };
65
- const BTN_STYLE = {
67
+ var BTN_STYLE = {
66
68
  width: "calc(100% / 3)"
67
69
  };
68
-
69
- const ArrayFieldItemTemplate = _ref => {
70
- let {
71
- children,
72
- disabled,
73
- formContext,
74
- hasMoveDown,
75
- hasMoveUp,
76
- hasRemove,
77
- hasToolbar,
78
- index,
79
- onDropIndexClick,
80
- onReorderClick,
81
- readonly,
82
- registry,
83
- uiSchema
84
- } = _ref;
85
- const {
86
- MoveDownButton,
87
- MoveUpButton,
88
- RemoveButton
89
- } = registry.templates.ButtonTemplates;
90
- const {
91
- rowGutter = 24,
92
- toolbarAlign = "top"
93
- } = formContext;
70
+ /** The `ArrayFieldItemTemplate` component is the template used to render an items of an array.
71
+ *
72
+ * @param props - The `ArrayFieldTemplateItemType` props for the component
73
+ */
74
+ function ArrayFieldItemTemplate(props) {
75
+ var children = props.children,
76
+ disabled = props.disabled,
77
+ hasMoveDown = props.hasMoveDown,
78
+ hasMoveUp = props.hasMoveUp,
79
+ hasRemove = props.hasRemove,
80
+ hasToolbar = props.hasToolbar,
81
+ index = props.index,
82
+ onDropIndexClick = props.onDropIndexClick,
83
+ onReorderClick = props.onReorderClick,
84
+ readonly = props.readonly,
85
+ registry = props.registry,
86
+ uiSchema = props.uiSchema;
87
+ var _registry$templates$B = registry.templates.ButtonTemplates,
88
+ MoveDownButton = _registry$templates$B.MoveDownButton,
89
+ MoveUpButton = _registry$templates$B.MoveUpButton,
90
+ RemoveButton = _registry$templates$B.RemoveButton;
91
+ var _registry$formContext = registry.formContext,
92
+ _registry$formContext2 = _registry$formContext.rowGutter,
93
+ rowGutter = _registry$formContext2 === void 0 ? 24 : _registry$formContext2,
94
+ _registry$formContext3 = _registry$formContext.toolbarAlign,
95
+ toolbarAlign = _registry$formContext3 === void 0 ? "top" : _registry$formContext3;
94
96
  return /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
95
97
  align: toolbarAlign,
96
98
  key: "array-item-" + index,
@@ -105,177 +107,181 @@ const ArrayFieldItemTemplate = _ref => {
105
107
  disabled: disabled || readonly || !hasMoveUp,
106
108
  onClick: onReorderClick(index, index - 1),
107
109
  style: BTN_STYLE,
108
- uiSchema: uiSchema
110
+ uiSchema: uiSchema,
111
+ registry: registry
109
112
  }), (hasMoveUp || hasMoveDown) && /*#__PURE__*/React__default["default"].createElement(MoveDownButton, {
110
113
  disabled: disabled || readonly || !hasMoveDown,
111
114
  onClick: onReorderClick(index, index + 1),
112
115
  style: BTN_STYLE,
113
- uiSchema: uiSchema
116
+ uiSchema: uiSchema,
117
+ registry: registry
114
118
  }), hasRemove && /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
115
119
  disabled: disabled || readonly,
116
120
  onClick: onDropIndexClick(index),
117
121
  style: BTN_STYLE,
118
- uiSchema: uiSchema
122
+ uiSchema: uiSchema,
123
+ registry: registry
119
124
  }))));
120
- };
121
-
122
- ArrayFieldItemTemplate.defaultProps = {
123
- formContext: {}
124
- };
125
+ }
125
126
 
126
127
  function _extends() {
127
128
  _extends = Object.assign ? Object.assign.bind() : function (target) {
128
129
  for (var i = 1; i < arguments.length; i++) {
129
130
  var source = arguments[i];
130
-
131
131
  for (var key in source) {
132
132
  if (Object.prototype.hasOwnProperty.call(source, key)) {
133
133
  target[key] = source[key];
134
134
  }
135
135
  }
136
136
  }
137
-
138
137
  return target;
139
138
  };
140
139
  return _extends.apply(this, arguments);
141
140
  }
141
+ function _objectWithoutPropertiesLoose(source, excluded) {
142
+ if (source == null) return {};
143
+ var target = {};
144
+ var sourceKeys = Object.keys(source);
145
+ var key, i;
146
+ for (i = 0; i < sourceKeys.length; i++) {
147
+ key = sourceKeys[i];
148
+ if (excluded.indexOf(key) >= 0) continue;
149
+ target[key] = source[key];
150
+ }
151
+ return target;
152
+ }
142
153
 
143
- const DESCRIPTION_COL_STYLE$1 = {
154
+ var _excluded$1 = ["key"];
155
+ var DESCRIPTION_COL_STYLE$1 = {
144
156
  paddingBottom: "8px"
145
157
  };
158
+ /** The `ArrayFieldTemplate` component is the template used to render all items in an array.
159
+ *
160
+ * @param props - The `ArrayFieldTemplateItemType` props for the component
161
+ */
162
+ function ArrayFieldTemplate(props) {
163
+ var canAdd = props.canAdd,
164
+ className = props.className,
165
+ disabled = props.disabled,
166
+ formContext = props.formContext,
167
+ idSchema = props.idSchema,
168
+ items = props.items,
169
+ onAddClick = props.onAddClick,
170
+ readonly = props.readonly,
171
+ registry = props.registry,
172
+ required = props.required,
173
+ schema = props.schema,
174
+ title = props.title,
175
+ uiSchema = props.uiSchema;
176
+ var uiOptions = utils.getUiOptions(uiSchema);
177
+ var ArrayFieldDescriptionTemplate = utils.getTemplate("ArrayFieldDescriptionTemplate", registry, uiOptions);
178
+ var ArrayFieldItemTemplate = utils.getTemplate("ArrayFieldItemTemplate", registry, uiOptions);
179
+ var ArrayFieldTitleTemplate = utils.getTemplate("ArrayFieldTitleTemplate", registry, uiOptions);
180
+ // Button templates are not overridden in the uiSchema
181
+ var AddButton = registry.templates.ButtonTemplates.AddButton;
182
+ var _formContext$labelAli = formContext.labelAlign,
183
+ labelAlign = _formContext$labelAli === void 0 ? "right" : _formContext$labelAli,
184
+ _formContext$rowGutte = formContext.rowGutter,
185
+ rowGutter = _formContext$rowGutte === void 0 ? 24 : _formContext$rowGutte;
186
+ return /*#__PURE__*/React__default["default"].createElement(context.ConfigConsumer, null, function (configProps) {
187
+ var getPrefixCls = configProps.getPrefixCls;
188
+ var prefixCls = getPrefixCls("form");
189
+ var labelClsBasic = prefixCls + "-item-label";
190
+ var labelColClassName = classNames__default["default"](labelClsBasic, labelAlign === "left" && labelClsBasic + "-left"
191
+ // labelCol.className,
192
+ );
193
+
194
+ return /*#__PURE__*/React__default["default"].createElement("fieldset", {
195
+ className: className,
196
+ id: idSchema.$id
197
+ }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
198
+ gutter: rowGutter
199
+ }, (uiOptions.title || title) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
200
+ className: labelColClassName,
201
+ span: 24
202
+ }, /*#__PURE__*/React__default["default"].createElement(ArrayFieldTitleTemplate, {
203
+ idSchema: idSchema,
204
+ required: required,
205
+ title: uiOptions.title || title,
206
+ schema: schema,
207
+ uiSchema: uiSchema,
208
+ registry: registry
209
+ })), (uiOptions.description || schema.description) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
210
+ span: 24,
211
+ style: DESCRIPTION_COL_STYLE$1
212
+ }, /*#__PURE__*/React__default["default"].createElement(ArrayFieldDescriptionTemplate, {
213
+ description: uiOptions.description || schema.description || "",
214
+ idSchema: idSchema,
215
+ schema: schema,
216
+ uiSchema: uiSchema,
217
+ registry: registry
218
+ })), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
219
+ className: "row array-item-list",
220
+ span: 24
221
+ }, items && items.map(function (_ref) {
222
+ var key = _ref.key,
223
+ itemProps = _objectWithoutPropertiesLoose(_ref, _excluded$1);
224
+ return /*#__PURE__*/React__default["default"].createElement(ArrayFieldItemTemplate, _extends({
225
+ key: key
226
+ }, itemProps));
227
+ })), canAdd && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
228
+ span: 24
229
+ }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
230
+ gutter: rowGutter,
231
+ justify: "end"
232
+ }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
233
+ flex: "192px"
234
+ }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
235
+ className: "array-item-add",
236
+ disabled: disabled || readonly,
237
+ onClick: onAddClick,
238
+ uiSchema: uiSchema,
239
+ registry: registry
240
+ }))))));
241
+ });
242
+ }
146
243
 
147
- const ArrayFieldTemplate = _ref => {
148
- let {
149
- canAdd,
150
- className,
151
- disabled,
152
- formContext,
153
- // formData,
154
- idSchema,
155
- items,
156
- onAddClick,
157
- prefixCls,
158
- readonly,
159
- registry,
160
- required,
161
- schema,
162
- title,
163
- uiSchema
164
- } = _ref;
165
- const uiOptions = utils.getUiOptions(uiSchema);
166
- const ArrayFieldDescriptionTemplate = utils.getTemplate("ArrayFieldDescriptionTemplate", registry, uiOptions);
167
- const ArrayFieldItemTemplate = utils.getTemplate("ArrayFieldItemTemplate", registry, uiOptions);
168
- const ArrayFieldTitleTemplate = utils.getTemplate("ArrayFieldTitleTemplate", registry, uiOptions); // Button templates are not overridden in the uiSchema
169
-
170
- const {
171
- ButtonTemplates: {
172
- AddButton
173
- }
174
- } = registry.templates;
175
- const {
176
- labelAlign = "right",
177
- rowGutter = 24
178
- } = formContext;
179
- const labelClsBasic = prefixCls + "-item-label";
180
- const labelColClassName = classNames__default["default"](labelClsBasic, labelAlign === "left" && labelClsBasic + "-left" // labelCol.className,
181
- );
182
- return /*#__PURE__*/React__default["default"].createElement("fieldset", {
183
- className: className,
184
- id: idSchema.$id
185
- }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
186
- gutter: rowGutter
187
- }, (uiOptions.title || title) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
188
- className: labelColClassName,
189
- span: 24
190
- }, /*#__PURE__*/React__default["default"].createElement(ArrayFieldTitleTemplate, {
191
- idSchema: idSchema,
192
- required: required,
193
- title: uiOptions.title || title,
194
- uiSchema: uiSchema,
195
- registry: registry
196
- })), (uiOptions.description || schema.description) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
197
- span: 24,
198
- style: DESCRIPTION_COL_STYLE$1
199
- }, /*#__PURE__*/React__default["default"].createElement(ArrayFieldDescriptionTemplate, {
200
- description: uiOptions.description || schema.description,
201
- idSchema: idSchema,
202
- uiSchema: uiSchema,
203
- registry: registry
204
- })), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
205
- className: "row array-item-list",
206
- span: 24
207
- }, items && items.map(itemProps => /*#__PURE__*/React__default["default"].createElement(ArrayFieldItemTemplate, _extends({}, itemProps, {
208
- formContext: formContext
209
- })))), canAdd && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
210
- span: 24
211
- }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
212
- gutter: rowGutter,
213
- justify: "end"
214
- }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
215
- flex: "192px"
216
- }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
217
- className: "array-item-add",
218
- disabled: disabled || readonly,
219
- onClick: onAddClick,
220
- uiSchema: uiSchema
221
- }))))));
222
- };
223
-
224
- var ArrayFieldTemplate$1 = /*#__PURE__*/context.withConfigConsumer({
225
- prefixCls: "form"
226
- })(ArrayFieldTemplate);
227
-
228
- const INPUT_STYLE$2 = {
244
+ var INPUT_STYLE$2 = {
229
245
  width: "100%"
230
246
  };
231
-
232
- const TextWidget = _ref => {
233
- let {
234
- // autofocus,
235
- disabled,
236
- formContext,
237
- id,
238
- // label,
239
- onBlur,
240
- onChange,
241
- onFocus,
242
- options,
243
- placeholder,
244
- readonly,
245
- // required,
246
- schema,
247
- value,
248
- type
249
- } = _ref;
250
- const inputProps = utils.getInputProps(schema, type, options, false);
251
- const {
252
- readonlyAsDisabled = true
253
- } = formContext;
254
-
255
- const handleNumberChange = nextValue => onChange(nextValue);
256
-
257
- const handleTextChange = _ref2 => {
258
- let {
259
- target
260
- } = _ref2;
247
+ /** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme.
248
+ * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only.
249
+ * It can be customized/overridden for other themes or individual implementations as needed.
250
+ *
251
+ * @param props - The `WidgetProps` for this template
252
+ */
253
+ function BaseInputTemplate(props) {
254
+ var disabled = props.disabled,
255
+ formContext = props.formContext,
256
+ id = props.id,
257
+ onBlur = props.onBlur,
258
+ onChange = props.onChange,
259
+ onFocus = props.onFocus,
260
+ options = props.options,
261
+ placeholder = props.placeholder,
262
+ readonly = props.readonly,
263
+ schema = props.schema,
264
+ value = props.value,
265
+ type = props.type;
266
+ var inputProps = utils.getInputProps(schema, type, options, false);
267
+ var _formContext$readonly = formContext.readonlyAsDisabled,
268
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
269
+ var handleNumberChange = function handleNumberChange(nextValue) {
270
+ return onChange(nextValue);
271
+ };
272
+ var handleTextChange = function handleTextChange(_ref) {
273
+ var target = _ref.target;
261
274
  return onChange(target.value === "" ? options.emptyValue : target.value);
262
275
  };
263
-
264
- const handleBlur = _ref3 => {
265
- let {
266
- target
267
- } = _ref3;
276
+ var handleBlur = function handleBlur(_ref2) {
277
+ var target = _ref2.target;
268
278
  return onBlur(id, target.value);
269
279
  };
270
-
271
- const handleFocus = _ref4 => {
272
- let {
273
- target
274
- } = _ref4;
280
+ var handleFocus = function handleFocus(_ref3) {
281
+ var target = _ref3.target;
275
282
  return onFocus(id, target.value);
276
283
  };
277
-
278
- const input = inputProps.type === "number" || inputProps.type === "integer" ? /*#__PURE__*/React__default["default"].createElement(InputNumber__default["default"], _extends({
284
+ var input = inputProps.type === "number" || inputProps.type === "integer" ? /*#__PURE__*/React__default["default"].createElement(InputNumber__default["default"], _extends({
279
285
  disabled: disabled || readonlyAsDisabled && readonly,
280
286
  id: id,
281
287
  name: id,
@@ -284,9 +290,10 @@ const TextWidget = _ref => {
284
290
  onFocus: !readonly ? handleFocus : undefined,
285
291
  placeholder: placeholder,
286
292
  style: INPUT_STYLE$2,
287
- list: schema.examples ? "examples_" + id : undefined
293
+ list: schema.examples ? utils.examplesId(id) : undefined
288
294
  }, inputProps, {
289
- value: value
295
+ value: value,
296
+ "aria-describedby": utils.ariaDescribedByIds(id, !!schema.examples)
290
297
  })) : /*#__PURE__*/React__default["default"].createElement(Input__default["default"], _extends({
291
298
  disabled: disabled || readonlyAsDisabled && readonly,
292
299
  id: id,
@@ -296,62 +303,66 @@ const TextWidget = _ref => {
296
303
  onFocus: !readonly ? handleFocus : undefined,
297
304
  placeholder: placeholder,
298
305
  style: INPUT_STYLE$2,
299
- list: schema.examples ? "examples_" + id : undefined
306
+ list: schema.examples ? utils.examplesId(id) : undefined
300
307
  }, inputProps, {
301
- value: value
308
+ value: value,
309
+ "aria-describedby": utils.ariaDescribedByIds(id, !!schema.examples)
302
310
  }));
303
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, input, schema.examples && /*#__PURE__*/React__default["default"].createElement("datalist", {
304
- id: "examples_" + id
305
- }, schema.examples.concat(schema.default ? [schema.default] : []).map(example => {
311
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, input, Array.isArray(schema.examples) && /*#__PURE__*/React__default["default"].createElement("datalist", {
312
+ id: utils.examplesId(id)
313
+ }, schema.examples.concat(schema["default"] && !schema.examples.includes(schema["default"]) ? [schema["default"]] : []).map(function (example) {
306
314
  return /*#__PURE__*/React__default["default"].createElement("option", {
307
315
  key: example,
308
316
  value: example
309
317
  });
310
318
  })));
311
- };
312
-
313
- const DescriptionField = _ref => {
314
- let {
315
- description,
316
- id // registry,
319
+ }
317
320
 
318
- } = _ref;
319
- return description && /*#__PURE__*/React__default["default"].createElement("span", {
321
+ /** The `DescriptionField` is the template to use to render the description of a field
322
+ *
323
+ * @param props - The `DescriptionFieldProps` for this component
324
+ */
325
+ function DescriptionField(props) {
326
+ var id = props.id,
327
+ description = props.description;
328
+ if (!description) {
329
+ return null;
330
+ }
331
+ return /*#__PURE__*/React__default["default"].createElement("span", {
320
332
  id: id
321
333
  }, description);
322
- };
323
-
324
- const ErrorList = _ref => {
325
- let {
326
- // errorSchema,
327
- errors // formContext,
328
- // schema,
329
- // uiSchema,
330
-
331
- } = _ref;
332
-
333
- const renderErrors = () => /*#__PURE__*/React__default["default"].createElement(List__default["default"], {
334
- className: "list-group",
335
- size: "small"
336
- }, errors.map((error, index) => /*#__PURE__*/React__default["default"].createElement(List__default["default"].Item, {
337
- key: index
338
- }, /*#__PURE__*/React__default["default"].createElement(Space__default["default"], null, /*#__PURE__*/React__default["default"].createElement(ExclamationCircleOutlined__default["default"], null), error.stack))));
334
+ }
339
335
 
336
+ /** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form`
337
+ *
338
+ * @param props - The `ErrorListProps` for this component
339
+ */
340
+ function ErrorList(_ref) {
341
+ var errors = _ref.errors;
342
+ var renderErrors = function renderErrors() {
343
+ return /*#__PURE__*/React__default["default"].createElement(List__default["default"], {
344
+ className: "list-group",
345
+ size: "small"
346
+ }, errors.map(function (error, index) {
347
+ return /*#__PURE__*/React__default["default"].createElement(List__default["default"].Item, {
348
+ key: index
349
+ }, /*#__PURE__*/React__default["default"].createElement(Space__default["default"], null, /*#__PURE__*/React__default["default"].createElement(ExclamationCircleOutlined__default["default"], null), error.stack));
350
+ }));
351
+ };
340
352
  return /*#__PURE__*/React__default["default"].createElement(Alert__default["default"], {
341
353
  className: "panel panel-danger errors",
342
354
  description: renderErrors(),
343
355
  message: "Errors",
344
356
  type: "error"
345
357
  });
346
- };
358
+ }
347
359
 
360
+ var _excluded = ["iconType", "icon", "uiSchema", "registry"];
348
361
  function IconButton(props) {
349
- const {
350
- iconType = "default",
351
- icon,
352
- uiSchema,
353
- ...otherProps
354
- } = props;
362
+ var _props$iconType = props.iconType,
363
+ iconType = _props$iconType === void 0 ? "default" : _props$iconType,
364
+ icon = props.icon,
365
+ otherProps = _objectWithoutPropertiesLoose(props, _excluded);
355
366
  return /*#__PURE__*/React__default["default"].createElement(Button__default["default"], _extends({
356
367
  type: iconType,
357
368
  icon: icon
@@ -381,183 +392,90 @@ function MoveUpButton(props) {
381
392
  }));
382
393
  }
383
394
  function RemoveButton(props) {
395
+ // The `block` prop is not part of the `IconButtonProps` defined in the template, so get it from the uiSchema instead
396
+ var options = utils.getUiOptions(props.uiSchema);
384
397
  return /*#__PURE__*/React__default["default"].createElement(IconButton, _extends({
385
398
  title: "Remove"
386
399
  }, props, {
387
400
  danger: true,
401
+ block: !!options.block,
388
402
  iconType: "primary",
389
403
  icon: /*#__PURE__*/React__default["default"].createElement(DeleteOutlined__default["default"], null)
390
404
  }));
391
405
  }
392
406
 
393
- /** The `FieldErrorTemplate` component renders the errors local to the particular field
394
- *
395
- * @param props - The `FieldErrorProps` for the errors being rendered
407
+ /** The `FieldErrorTemplate` component renders the errors local to the particular field
408
+ *
409
+ * @param props - The `FieldErrorProps` for the errors being rendered
396
410
  */
397
-
398
411
  function FieldErrorTemplate(props) {
399
- const {
400
- errors = [],
401
- idSchema
402
- } = props;
403
-
412
+ var _props$errors = props.errors,
413
+ errors = _props$errors === void 0 ? [] : _props$errors,
414
+ idSchema = props.idSchema;
404
415
  if (errors.length === 0) {
405
416
  return null;
406
417
  }
407
-
408
- const id = idSchema.$id + "__error";
418
+ var id = utils.errorId(idSchema);
409
419
  return /*#__PURE__*/React__default["default"].createElement("div", {
410
420
  id: id
411
- }, errors.map(error => /*#__PURE__*/React__default["default"].createElement("div", {
412
- key: "field-" + id + "-error-" + error
413
- }, error)));
414
- }
415
-
416
- const VERTICAL_LABEL_COL$1 = {
417
- span: 24
418
- };
419
- const VERTICAL_WRAPPER_COL$1 = {
420
- span: 24
421
- };
422
- const INPUT_STYLE$1 = {
423
- width: "100%"
424
- };
425
-
426
- const WrapIfAdditional = _ref => {
427
- let {
428
- children,
429
- classNames,
430
- disabled,
431
- formContext,
432
- id,
433
- label,
434
- onDropPropertyClick,
435
- onKeyChange,
436
- readonly,
437
- required,
438
- registry,
439
- schema,
440
- uiSchema
441
- } = _ref;
442
- const {
443
- colon,
444
- labelCol = VERTICAL_LABEL_COL$1,
445
- readonlyAsDisabled = true,
446
- rowGutter = 24,
447
- toolbarAlign = "top",
448
- wrapperCol = VERTICAL_WRAPPER_COL$1,
449
- wrapperStyle
450
- } = formContext;
451
- const {
452
- RemoveButton
453
- } = registry.templates.ButtonTemplates;
454
- const keyLabel = label + " Key"; // i18n ?
455
-
456
- const additional = (utils.ADDITIONAL_PROPERTY_FLAG in schema);
457
-
458
- if (!additional) {
421
+ }, errors.map(function (error) {
459
422
  return /*#__PURE__*/React__default["default"].createElement("div", {
460
- className: classNames
461
- }, children);
462
- }
463
-
464
- const handleBlur = _ref2 => {
465
- let {
466
- target
467
- } = _ref2;
468
- return onKeyChange(target.value);
469
- };
470
-
471
- return /*#__PURE__*/React__default["default"].createElement("div", {
472
- className: classNames
473
- }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
474
- align: toolbarAlign,
475
- gutter: rowGutter
476
- }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
477
- className: "form-additional",
478
- flex: "1"
479
- }, /*#__PURE__*/React__default["default"].createElement("div", {
480
- className: "form-group"
481
- }, /*#__PURE__*/React__default["default"].createElement(Form__default["default"].Item, {
482
- colon: colon,
483
- className: "form-group",
484
- hasFeedback: true,
485
- htmlFor: id + "-key",
486
- label: keyLabel,
487
- labelCol: labelCol,
488
- required: required,
489
- style: wrapperStyle,
490
- wrapperCol: wrapperCol
491
- }, /*#__PURE__*/React__default["default"].createElement(Input__default["default"], {
492
- className: "form-control",
493
- defaultValue: label,
494
- disabled: disabled || readonlyAsDisabled && readonly,
495
- id: id + "-key",
496
- name: id + "-key",
497
- onBlur: !readonly ? handleBlur : undefined,
498
- style: INPUT_STYLE$1,
499
- type: "text"
500
- })))), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
501
- className: "form-additional",
502
- flex: "1"
503
- }, children), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
504
- flex: "192px"
505
- }, /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
506
- block: true,
507
- className: "array-item-remove",
508
- disabled: disabled || readonly,
509
- onClick: onDropPropertyClick(label),
510
- uiSchema: uiSchema
511
- }))));
512
- };
423
+ key: "field-" + id + "-error-" + error
424
+ }, error);
425
+ }));
426
+ }
513
427
 
514
- const VERTICAL_LABEL_COL = {
428
+ var VERTICAL_LABEL_COL$1 = {
515
429
  span: 24
516
430
  };
517
- const VERTICAL_WRAPPER_COL = {
431
+ var VERTICAL_WRAPPER_COL$1 = {
518
432
  span: 24
519
433
  };
520
-
521
- const FieldTemplate = _ref => {
522
- let {
523
- children,
524
- classNames,
525
- description,
526
- disabled,
527
- displayLabel,
528
- errors,
529
- formContext,
530
- help,
531
- hidden,
532
- id,
533
- label,
534
- onDropPropertyClick,
535
- onKeyChange,
536
- rawErrors,
537
- rawHelp,
538
- readonly,
539
- registry,
540
- required,
541
- schema,
542
- uiSchema
543
- } = _ref;
544
- const {
545
- colon,
546
- labelCol = VERTICAL_LABEL_COL,
547
- wrapperCol = VERTICAL_WRAPPER_COL,
548
- wrapperStyle
549
- } = formContext;
550
-
434
+ /** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field
435
+ * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component.
436
+ *
437
+ * @param props - The `FieldTemplateProps` for this component
438
+ */
439
+ function FieldTemplate(props) {
440
+ var children = props.children,
441
+ classNames = props.classNames,
442
+ style = props.style,
443
+ description = props.description,
444
+ disabled = props.disabled,
445
+ displayLabel = props.displayLabel,
446
+ errors = props.errors,
447
+ formContext = props.formContext,
448
+ help = props.help,
449
+ hidden = props.hidden,
450
+ id = props.id,
451
+ label = props.label,
452
+ onDropPropertyClick = props.onDropPropertyClick,
453
+ onKeyChange = props.onKeyChange,
454
+ rawErrors = props.rawErrors,
455
+ rawDescription = props.rawDescription,
456
+ rawHelp = props.rawHelp,
457
+ readonly = props.readonly,
458
+ registry = props.registry,
459
+ required = props.required,
460
+ schema = props.schema,
461
+ uiSchema = props.uiSchema;
462
+ var colon = formContext.colon,
463
+ _formContext$labelCol = formContext.labelCol,
464
+ labelCol = _formContext$labelCol === void 0 ? VERTICAL_LABEL_COL$1 : _formContext$labelCol,
465
+ _formContext$wrapperC = formContext.wrapperCol,
466
+ wrapperCol = _formContext$wrapperC === void 0 ? VERTICAL_WRAPPER_COL$1 : _formContext$wrapperC,
467
+ wrapperStyle = formContext.wrapperStyle;
468
+ var uiOptions = utils.getUiOptions(uiSchema);
469
+ var WrapIfAdditionalTemplate = utils.getTemplate("WrapIfAdditionalTemplate", registry, uiOptions);
551
470
  if (hidden) {
552
471
  return /*#__PURE__*/React__default["default"].createElement("div", {
553
472
  className: "field-hidden"
554
473
  }, children);
555
474
  }
556
-
557
- return /*#__PURE__*/React__default["default"].createElement(WrapIfAdditional, {
475
+ return /*#__PURE__*/React__default["default"].createElement(WrapIfAdditionalTemplate, {
558
476
  classNames: classNames,
477
+ style: style,
559
478
  disabled: disabled,
560
- formContext: formContext,
561
479
  id: id,
562
480
  label: label,
563
481
  onDropPropertyClick: onDropPropertyClick,
@@ -569,9 +487,9 @@ const FieldTemplate = _ref => {
569
487
  registry: registry
570
488
  }, id === "root" ? children : /*#__PURE__*/React__default["default"].createElement(Form__default["default"].Item, {
571
489
  colon: colon,
572
- extra: description,
490
+ extra: rawDescription && description,
573
491
  hasFeedback: schema.type !== "array" && schema.type !== "object",
574
- help: !!rawHelp && help || errors,
492
+ help: !!rawHelp && help || (rawErrors !== null && rawErrors !== void 0 && rawErrors.length ? errors : undefined),
575
493
  htmlFor: id,
576
494
  label: displayLabel && label,
577
495
  labelCol: labelCol,
@@ -580,347 +498,469 @@ const FieldTemplate = _ref => {
580
498
  validateStatus: rawErrors !== null && rawErrors !== void 0 && rawErrors.length ? "error" : undefined,
581
499
  wrapperCol: wrapperCol
582
500
  }, children));
583
- };
501
+ }
584
502
 
585
- const DESCRIPTION_COL_STYLE = {
503
+ var DESCRIPTION_COL_STYLE = {
586
504
  paddingBottom: "8px"
587
505
  };
588
-
589
- const ObjectFieldTemplate = _ref => {
590
- let {
591
- description,
592
- disabled,
593
- formContext,
594
- formData,
595
- idSchema,
596
- onAddClick,
597
- prefixCls,
598
- properties,
599
- readonly,
600
- required,
601
- registry,
602
- schema,
603
- title,
604
- uiSchema
605
- } = _ref;
606
- const uiOptions = utils.getUiOptions(uiSchema);
607
- const TitleFieldTemplate = utils.getTemplate("TitleFieldTemplate", registry, uiOptions);
608
- const DescriptionFieldTemplate = utils.getTemplate("DescriptionFieldTemplate", registry, uiOptions); // Button templates are not overridden in the uiSchema
609
-
610
- const {
611
- ButtonTemplates: {
612
- AddButton
613
- }
614
- } = registry.templates;
615
- const {
616
- colSpan = 24,
617
- labelAlign = "right",
618
- rowGutter = 24
619
- } = formContext;
620
- const labelClsBasic = prefixCls + "-item-label";
621
- const labelColClassName = classNames__default["default"](labelClsBasic, labelAlign === "left" && labelClsBasic + "-left" // labelCol.className,
622
- );
623
-
624
- const findSchema = element => element.content.props.schema;
625
-
626
- const findSchemaType = element => findSchema(element).type;
627
-
628
- const findUiSchema = element => element.content.props.uiSchema;
629
-
630
- const findUiSchemaField = element => utils.getUiOptions(findUiSchema(element)).field;
631
-
632
- const findUiSchemaWidget = element => utils.getUiOptions(findUiSchema(element)).widget;
633
-
634
- const calculateColSpan = element => {
635
- const type = findSchemaType(element);
636
- const field = findUiSchemaField(element);
637
- const widget = findUiSchemaWidget(element);
638
- const defaultColSpan = properties.length < 2 || // Single or no field in object.
506
+ /** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the
507
+ * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all
508
+ * the properties.
509
+ *
510
+ * @param props - The `ObjectFieldTemplateProps` for this component
511
+ */
512
+ function ObjectFieldTemplate(props) {
513
+ var description = props.description,
514
+ disabled = props.disabled,
515
+ formContext = props.formContext,
516
+ formData = props.formData,
517
+ idSchema = props.idSchema,
518
+ onAddClick = props.onAddClick,
519
+ properties = props.properties,
520
+ readonly = props.readonly,
521
+ required = props.required,
522
+ registry = props.registry,
523
+ schema = props.schema,
524
+ title = props.title,
525
+ uiSchema = props.uiSchema;
526
+ var uiOptions = utils.getUiOptions(uiSchema);
527
+ var TitleFieldTemplate = utils.getTemplate("TitleFieldTemplate", registry, uiOptions);
528
+ var DescriptionFieldTemplate = utils.getTemplate("DescriptionFieldTemplate", registry, uiOptions);
529
+ // Button templates are not overridden in the uiSchema
530
+ var AddButton = registry.templates.ButtonTemplates.AddButton;
531
+ var _formContext$colSpan = formContext.colSpan,
532
+ colSpan = _formContext$colSpan === void 0 ? 24 : _formContext$colSpan,
533
+ _formContext$labelAli = formContext.labelAlign,
534
+ labelAlign = _formContext$labelAli === void 0 ? "right" : _formContext$labelAli,
535
+ _formContext$rowGutte = formContext.rowGutter,
536
+ rowGutter = _formContext$rowGutte === void 0 ? 24 : _formContext$rowGutte;
537
+ var findSchema = function findSchema(element) {
538
+ return element.content.props.schema;
539
+ };
540
+ var findSchemaType = function findSchemaType(element) {
541
+ return findSchema(element).type;
542
+ };
543
+ var findUiSchema = function findUiSchema(element) {
544
+ return element.content.props.uiSchema;
545
+ };
546
+ var findUiSchemaField = function findUiSchemaField(element) {
547
+ return utils.getUiOptions(findUiSchema(element)).field;
548
+ };
549
+ var findUiSchemaWidget = function findUiSchemaWidget(element) {
550
+ return utils.getUiOptions(findUiSchema(element)).widget;
551
+ };
552
+ var calculateColSpan = function calculateColSpan(element) {
553
+ var type = findSchemaType(element);
554
+ var field = findUiSchemaField(element);
555
+ var widget = findUiSchemaWidget(element);
556
+ var defaultColSpan = properties.length < 2 ||
557
+ // Single or no field in object.
639
558
  type === "object" || type === "array" || widget === "textarea" ? 24 : 12;
640
-
641
559
  if (isObject__default["default"](colSpan)) {
642
- return colSpan[widget] || colSpan[field] || colSpan[type] || defaultColSpan;
560
+ var colSpanObj = colSpan;
561
+ if (isString__default["default"](widget)) {
562
+ return colSpanObj[widget];
563
+ }
564
+ if (isString__default["default"](field)) {
565
+ return colSpanObj[field];
566
+ }
567
+ if (isString__default["default"](type)) {
568
+ return colSpanObj[type];
569
+ }
643
570
  }
644
-
645
571
  if (isNumber__default["default"](colSpan)) {
646
572
  return colSpan;
647
573
  }
648
-
649
574
  return defaultColSpan;
650
575
  };
576
+ return /*#__PURE__*/React__default["default"].createElement(context.ConfigConsumer, null, function (configProps) {
577
+ var getPrefixCls = configProps.getPrefixCls;
578
+ var prefixCls = getPrefixCls("form");
579
+ var labelClsBasic = prefixCls + "-item-label";
580
+ var labelColClassName = classNames__default["default"](labelClsBasic, labelAlign === "left" && labelClsBasic + "-left"
581
+ // labelCol.className,
582
+ );
583
+
584
+ return /*#__PURE__*/React__default["default"].createElement("fieldset", {
585
+ id: idSchema.$id
586
+ }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
587
+ gutter: rowGutter
588
+ }, (uiOptions.title || title) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
589
+ className: labelColClassName,
590
+ span: 24
591
+ }, /*#__PURE__*/React__default["default"].createElement(TitleFieldTemplate, {
592
+ id: utils.titleId(idSchema),
593
+ title: uiOptions.title || title,
594
+ required: required,
595
+ schema: schema,
596
+ uiSchema: uiSchema,
597
+ registry: registry
598
+ })), (uiOptions.description || description) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
599
+ span: 24,
600
+ style: DESCRIPTION_COL_STYLE
601
+ }, /*#__PURE__*/React__default["default"].createElement(DescriptionFieldTemplate, {
602
+ id: utils.descriptionId(idSchema),
603
+ description: uiOptions.description || description,
604
+ schema: schema,
605
+ uiSchema: uiSchema,
606
+ registry: registry
607
+ })), properties.filter(function (e) {
608
+ return !e.hidden;
609
+ }).map(function (element) {
610
+ return /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
611
+ key: element.name,
612
+ span: calculateColSpan(element)
613
+ }, element.content);
614
+ })), utils.canExpand(schema, uiSchema, formData) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
615
+ span: 24
616
+ }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
617
+ gutter: rowGutter,
618
+ justify: "end"
619
+ }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
620
+ flex: "192px"
621
+ }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
622
+ className: "object-property-expand",
623
+ disabled: disabled || readonly,
624
+ onClick: onAddClick(schema),
625
+ uiSchema: uiSchema,
626
+ registry: registry
627
+ })))));
628
+ });
629
+ }
651
630
 
652
- return /*#__PURE__*/React__default["default"].createElement("fieldset", {
653
- id: idSchema.$id
654
- }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
655
- gutter: rowGutter
656
- }, uiOptions.title !== false && (uiOptions.title || title) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
657
- className: labelColClassName,
658
- span: 24
659
- }, /*#__PURE__*/React__default["default"].createElement(TitleFieldTemplate, {
660
- id: idSchema.$id + "-title",
661
- required: required,
662
- title: uiOptions.title || title,
663
- uiSchema: uiSchema,
664
- registry: registry
665
- })), uiOptions.description !== false && (uiOptions.description || description) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
666
- span: 24,
667
- style: DESCRIPTION_COL_STYLE
668
- }, /*#__PURE__*/React__default["default"].createElement(DescriptionFieldTemplate, {
669
- description: uiOptions.description || description,
670
- id: idSchema.$id + "-description",
671
- registry: registry
672
- })), properties.filter(e => !e.hidden).map(element => /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
673
- key: element.name,
674
- span: calculateColSpan(element)
675
- }, element.content))), utils.canExpand(schema, uiSchema, formData) && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
676
- span: 24
677
- }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
678
- gutter: rowGutter,
679
- justify: "end"
680
- }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
681
- flex: "192px"
682
- }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
683
- className: "object-property-expand",
684
- disabled: disabled || readonly,
685
- onClick: onAddClick(schema),
686
- uiSchema: uiSchema
687
- })))));
688
- };
689
-
690
- var ObjectFieldTemplate$1 = /*#__PURE__*/context.withConfigConsumer({
691
- prefixCls: "form"
692
- })(ObjectFieldTemplate);
693
-
694
- var SubmitButton = (_ref => {
695
- let {
696
- uiSchema
697
- } = _ref;
698
- const {
699
- submitText,
700
- norender,
701
- props: submitButtonProps
702
- } = utils.getSubmitButtonOptions(uiSchema);
703
-
631
+ /** The `SubmitButton` renders a button that represent the `Submit` action on a form
632
+ */
633
+ function SubmitButton(_ref) {
634
+ var uiSchema = _ref.uiSchema;
635
+ var _getSubmitButtonOptio = utils.getSubmitButtonOptions(uiSchema),
636
+ submitText = _getSubmitButtonOptio.submitText,
637
+ norender = _getSubmitButtonOptio.norender,
638
+ submitButtonProps = _getSubmitButtonOptio.props;
704
639
  if (norender) {
705
640
  return null;
706
641
  }
707
-
708
642
  return /*#__PURE__*/React__default["default"].createElement(Button__default["default"], _extends({
709
643
  type: "submit"
710
644
  }, submitButtonProps, {
711
645
  htmlType: "submit"
712
646
  }), submitText);
713
- });
714
-
715
- const TitleField = _ref => {
716
- let {
717
- id,
718
- prefixCls,
719
- required,
720
- registry,
721
- title
722
- } = _ref;
723
- const {
724
- formContext
725
- } = registry;
726
- const {
727
- colon = true
728
- } = formContext;
729
- let labelChildren = title;
647
+ }
730
648
 
649
+ /** The `TitleField` is the template to use to render the title of a field
650
+ *
651
+ * @param props - The `TitleFieldProps` for this component
652
+ */
653
+ function TitleField(_ref) {
654
+ var id = _ref.id,
655
+ required = _ref.required,
656
+ registry = _ref.registry,
657
+ title = _ref.title;
658
+ var formContext = registry.formContext;
659
+ var _formContext$colon = formContext.colon,
660
+ colon = _formContext$colon === void 0 ? true : _formContext$colon;
661
+ var labelChildren = title;
731
662
  if (colon && typeof title === "string" && title.trim() !== "") {
732
663
  labelChildren = title.replace(/[::]\s*$/, "");
733
664
  }
734
-
735
- const labelClassName = classNames__default["default"]({
736
- [prefixCls + "-item-required"]: required,
737
- [prefixCls + "-item-no-colon"]: !colon
738
- });
739
-
740
- const handleLabelClick = () => {
665
+ var handleLabelClick = function handleLabelClick() {
741
666
  if (!id) {
742
667
  return;
743
668
  }
744
-
745
- const control = document.querySelector("[id=\"" + id + "\"]");
746
-
669
+ var control = document.querySelector("[id=\"" + id + "\"]");
747
670
  if (control && control.focus) {
748
671
  control.focus();
749
672
  }
750
673
  };
674
+ return title ? /*#__PURE__*/React__default["default"].createElement(context.ConfigConsumer, null, function (configProps) {
675
+ var _classNames;
676
+ var getPrefixCls = configProps.getPrefixCls;
677
+ var prefixCls = getPrefixCls("form");
678
+ var labelClassName = classNames__default["default"]((_classNames = {}, _classNames[prefixCls + "-item-required"] = required, _classNames[prefixCls + "-item-no-colon"] = !colon, _classNames));
679
+ return /*#__PURE__*/React__default["default"].createElement("label", {
680
+ className: labelClassName,
681
+ htmlFor: id,
682
+ onClick: handleLabelClick,
683
+ title: typeof title === "string" ? title : ""
684
+ }, labelChildren);
685
+ }) : null;
686
+ }
751
687
 
752
- return title ? /*#__PURE__*/React__default["default"].createElement("label", {
753
- className: labelClassName,
754
- htmlFor: id,
755
- onClick: handleLabelClick,
756
- title: typeof title === "string" ? title : ""
757
- }, labelChildren) : null;
688
+ var VERTICAL_LABEL_COL = {
689
+ span: 24
758
690
  };
759
-
760
- TitleField.defaultProps = {
761
- formContext: {}
691
+ var VERTICAL_WRAPPER_COL = {
692
+ span: 24
762
693
  };
763
- var TitleField$1 = /*#__PURE__*/context.withConfigConsumer({
764
- prefixCls: "form"
765
- })(TitleField);
694
+ var INPUT_STYLE$1 = {
695
+ width: "100%"
696
+ };
697
+ /** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are
698
+ * part of an `additionalProperties` part of a schema.
699
+ *
700
+ * @param props - The `WrapIfAdditionalProps` for this component
701
+ */
702
+ function WrapIfAdditionalTemplate(props) {
703
+ var _extends2;
704
+ var children = props.children,
705
+ classNames = props.classNames,
706
+ style = props.style,
707
+ disabled = props.disabled,
708
+ id = props.id,
709
+ label = props.label,
710
+ onDropPropertyClick = props.onDropPropertyClick,
711
+ onKeyChange = props.onKeyChange,
712
+ readonly = props.readonly,
713
+ required = props.required,
714
+ registry = props.registry,
715
+ schema = props.schema,
716
+ uiSchema = props.uiSchema;
717
+ var _registry$formContext = registry.formContext,
718
+ colon = _registry$formContext.colon,
719
+ _registry$formContext2 = _registry$formContext.labelCol,
720
+ labelCol = _registry$formContext2 === void 0 ? VERTICAL_LABEL_COL : _registry$formContext2,
721
+ _registry$formContext3 = _registry$formContext.readonlyAsDisabled,
722
+ readonlyAsDisabled = _registry$formContext3 === void 0 ? true : _registry$formContext3,
723
+ _registry$formContext4 = _registry$formContext.rowGutter,
724
+ rowGutter = _registry$formContext4 === void 0 ? 24 : _registry$formContext4,
725
+ _registry$formContext5 = _registry$formContext.toolbarAlign,
726
+ toolbarAlign = _registry$formContext5 === void 0 ? "top" : _registry$formContext5,
727
+ _registry$formContext6 = _registry$formContext.wrapperCol,
728
+ wrapperCol = _registry$formContext6 === void 0 ? VERTICAL_WRAPPER_COL : _registry$formContext6,
729
+ wrapperStyle = _registry$formContext.wrapperStyle;
730
+ // Button templates are not overridden in the uiSchema
731
+ var RemoveButton = registry.templates.ButtonTemplates.RemoveButton;
732
+ var keyLabel = label + " Key"; // i18n ?
733
+ var additional = (utils.ADDITIONAL_PROPERTY_FLAG in schema);
734
+ if (!additional) {
735
+ return /*#__PURE__*/React__default["default"].createElement("div", {
736
+ className: classNames,
737
+ style: style
738
+ }, children);
739
+ }
740
+ var handleBlur = function handleBlur(_ref) {
741
+ var target = _ref.target;
742
+ return onKeyChange(target.value);
743
+ };
744
+ // The `block` prop is not part of the `IconButtonProps` defined in the template, so put it into the uiSchema instead
745
+ var uiOptions = uiSchema ? uiSchema[utils.UI_OPTIONS_KEY] : {};
746
+ var buttonUiOptions = _extends({}, uiSchema, (_extends2 = {}, _extends2[utils.UI_OPTIONS_KEY] = _extends({}, uiOptions, {
747
+ block: true
748
+ }), _extends2));
749
+ return /*#__PURE__*/React__default["default"].createElement("div", {
750
+ className: classNames,
751
+ style: style
752
+ }, /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
753
+ align: toolbarAlign,
754
+ gutter: rowGutter
755
+ }, /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
756
+ className: "form-additional",
757
+ flex: "1"
758
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
759
+ className: "form-group"
760
+ }, /*#__PURE__*/React__default["default"].createElement(Form__default["default"].Item, {
761
+ colon: colon,
762
+ className: "form-group",
763
+ hasFeedback: true,
764
+ htmlFor: id + "-key",
765
+ label: keyLabel,
766
+ labelCol: labelCol,
767
+ required: required,
768
+ style: wrapperStyle,
769
+ wrapperCol: wrapperCol
770
+ }, /*#__PURE__*/React__default["default"].createElement(Input__default["default"], {
771
+ className: "form-control",
772
+ defaultValue: label,
773
+ disabled: disabled || readonlyAsDisabled && readonly,
774
+ id: id + "-key",
775
+ name: id + "-key",
776
+ onBlur: !readonly ? handleBlur : undefined,
777
+ style: INPUT_STYLE$1,
778
+ type: "text"
779
+ })))), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
780
+ className: "form-additional",
781
+ flex: "1"
782
+ }, children), /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
783
+ flex: "192px"
784
+ }, /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
785
+ className: "array-item-remove",
786
+ disabled: disabled || readonly,
787
+ onClick: onDropPropertyClick(label),
788
+ uiSchema: buttonUiOptions,
789
+ registry: registry
790
+ }))));
791
+ }
766
792
 
767
- const rangeOptions = (start, stop) => {
768
- let options = [];
793
+ function generateTemplates() {
794
+ return {
795
+ ArrayFieldItemTemplate: ArrayFieldItemTemplate,
796
+ ArrayFieldTemplate: ArrayFieldTemplate,
797
+ BaseInputTemplate: BaseInputTemplate,
798
+ ButtonTemplates: {
799
+ AddButton: AddButton,
800
+ MoveDownButton: MoveDownButton,
801
+ MoveUpButton: MoveUpButton,
802
+ RemoveButton: RemoveButton,
803
+ SubmitButton: SubmitButton
804
+ },
805
+ DescriptionFieldTemplate: DescriptionField,
806
+ ErrorListTemplate: ErrorList,
807
+ FieldErrorTemplate: FieldErrorTemplate,
808
+ FieldTemplate: FieldTemplate,
809
+ ObjectFieldTemplate: ObjectFieldTemplate,
810
+ TitleFieldTemplate: TitleField,
811
+ WrapIfAdditionalTemplate: WrapIfAdditionalTemplate
812
+ };
813
+ }
814
+ var index$1 = /*#__PURE__*/generateTemplates();
769
815
 
770
- for (let i = start; i <= stop; i++) {
816
+ var rangeOptions = function rangeOptions(start, stop) {
817
+ var options = [];
818
+ for (var i = start; i <= stop; i++) {
771
819
  options.push({
772
820
  value: i,
773
821
  label: utils.pad(i, 2)
774
822
  });
775
823
  }
776
-
777
824
  return options;
778
825
  };
779
-
780
- const readyForChange = state => {
781
- return Object.keys(state).every(key => typeof state[key] !== "undefined" && state[key] !== -1);
826
+ var readyForChange = function readyForChange(state) {
827
+ return Object.values(state).every(function (value) {
828
+ return value !== -1;
829
+ });
782
830
  };
783
-
784
- const AltDateWidget = _ref => {
785
- let {
786
- autofocus,
787
- disabled,
788
- formContext,
789
- id,
790
- onBlur,
791
- onChange,
792
- onFocus,
793
- options,
794
- readonly,
795
- registry,
796
- showTime,
797
- value
798
- } = _ref;
799
- const {
800
- SelectWidget
801
- } = registry.widgets;
802
- const {
803
- rowGutter = 24
804
- } = formContext;
805
- const [state, setState] = React.useState(utils.parseDateString(value, showTime));
806
- React.useEffect(() => {
831
+ function dateElementProps(state, time, yearsRange) {
832
+ if (yearsRange === void 0) {
833
+ yearsRange = [1900, new Date().getFullYear() + 2];
834
+ }
835
+ var year = state.year,
836
+ month = state.month,
837
+ day = state.day,
838
+ hour = state.hour,
839
+ minute = state.minute,
840
+ second = state.second;
841
+ var data = [{
842
+ type: "year",
843
+ range: yearsRange,
844
+ value: year
845
+ }, {
846
+ type: "month",
847
+ range: [1, 12],
848
+ value: month
849
+ }, {
850
+ type: "day",
851
+ range: [1, 31],
852
+ value: day
853
+ }];
854
+ if (time) {
855
+ data.push({
856
+ type: "hour",
857
+ range: [0, 23],
858
+ value: hour || -1
859
+ }, {
860
+ type: "minute",
861
+ range: [0, 59],
862
+ value: minute || -1
863
+ }, {
864
+ type: "second",
865
+ range: [0, 59],
866
+ value: second || -1
867
+ });
868
+ }
869
+ return data;
870
+ }
871
+ function AltDateWidget(props) {
872
+ var autofocus = props.autofocus,
873
+ disabled = props.disabled,
874
+ formContext = props.formContext,
875
+ id = props.id,
876
+ onBlur = props.onBlur,
877
+ onChange = props.onChange,
878
+ onFocus = props.onFocus,
879
+ options = props.options,
880
+ readonly = props.readonly,
881
+ registry = props.registry,
882
+ showTime = props.showTime,
883
+ value = props.value;
884
+ var SelectWidget = registry.widgets.SelectWidget;
885
+ var _formContext$rowGutte = formContext.rowGutter,
886
+ rowGutter = _formContext$rowGutte === void 0 ? 24 : _formContext$rowGutte;
887
+ var _useState = React.useState(utils.parseDateString(value, showTime)),
888
+ state = _useState[0],
889
+ setState = _useState[1];
890
+ React.useEffect(function () {
807
891
  setState(utils.parseDateString(value, showTime));
808
892
  }, [showTime, value]);
809
-
810
- const handleChange = (property, nextValue) => {
811
- const nextState = { ...state,
812
- [property]: typeof nextValue === "undefined" ? -1 : nextValue
813
- };
814
-
893
+ var handleChange = function handleChange(property, nextValue) {
894
+ var _extends2;
895
+ var nextState = _extends({}, state, (_extends2 = {}, _extends2[property] = typeof nextValue === "undefined" ? -1 : nextValue, _extends2));
815
896
  if (readyForChange(nextState)) {
816
897
  onChange(utils.toDateString(nextState, showTime));
817
898
  } else {
818
899
  setState(nextState);
819
900
  }
820
901
  };
821
-
822
- const handleNow = event => {
902
+ var handleNow = function handleNow(event) {
823
903
  event.preventDefault();
824
-
825
904
  if (disabled || readonly) {
826
905
  return;
827
906
  }
828
-
829
- const nextState = utils.parseDateString(new Date().toJSON(), showTime);
907
+ var nextState = utils.parseDateString(new Date().toJSON(), showTime);
830
908
  onChange(utils.toDateString(nextState, showTime));
831
909
  };
832
-
833
- const handleClear = event => {
910
+ var handleClear = function handleClear(event) {
834
911
  event.preventDefault();
835
-
836
912
  if (disabled || readonly) {
837
913
  return;
838
914
  }
839
-
840
915
  onChange(undefined);
841
916
  };
842
-
843
- const dateElementProps = () => {
844
- const {
845
- year,
846
- month,
847
- day,
848
- hour,
849
- minute,
850
- second
851
- } = state;
852
- const data = [{
853
- type: "year",
854
- range: options.yearsRange,
855
- value: year
856
- }, {
857
- type: "month",
858
- range: [1, 12],
859
- value: month
860
- }, {
861
- type: "day",
862
- range: [1, 31],
863
- value: day
864
- }];
865
-
866
- if (showTime) {
867
- data.push({
868
- type: "hour",
869
- range: [0, 23],
870
- value: hour
871
- }, {
872
- type: "minute",
873
- range: [0, 59],
874
- value: minute
875
- }, {
876
- type: "second",
877
- range: [0, 59],
878
- value: second
879
- });
880
- }
881
-
882
- return data;
917
+ var renderDateElement = function renderDateElement(elemProps) {
918
+ return /*#__PURE__*/React__default["default"].createElement(SelectWidget, {
919
+ autofocus: elemProps.autofocus,
920
+ className: "form-control",
921
+ disabled: elemProps.disabled,
922
+ id: elemProps.id,
923
+ name: elemProps.name,
924
+ onBlur: elemProps.onBlur,
925
+ onChange: function onChange(elemValue) {
926
+ return elemProps.select(elemProps.type, elemValue);
927
+ },
928
+ onFocus: elemProps.onFocus,
929
+ options: {
930
+ enumOptions: rangeOptions(elemProps.range[0], elemProps.range[1])
931
+ },
932
+ placeholder: elemProps.type,
933
+ readonly: elemProps.readonly,
934
+ schema: {
935
+ type: "integer"
936
+ },
937
+ value: elemProps.value,
938
+ registry: registry,
939
+ label: "",
940
+ "aria-describedby": utils.ariaDescribedByIds(id)
941
+ });
883
942
  };
884
-
885
- const renderDateElement = elemProps => /*#__PURE__*/React__default["default"].createElement(SelectWidget, {
886
- autofocus: elemProps.autofocus,
887
- className: "form-control",
888
- disabled: elemProps.disabled,
889
- id: elemProps.id,
890
- onBlur: elemProps.onBlur,
891
- onChange: elemValue => elemProps.select(elemProps.type, elemValue),
892
- onFocus: elemProps.onFocus,
893
- options: {
894
- enumOptions: rangeOptions(elemProps.range[0], elemProps.range[1])
895
- },
896
- placeholder: elemProps.type,
897
- readonly: elemProps.readonly,
898
- schema: {
899
- type: "integer"
900
- },
901
- value: elemProps.value
902
- });
903
-
904
943
  return /*#__PURE__*/React__default["default"].createElement(Row__default["default"], {
905
944
  gutter: [Math.floor(rowGutter / 2), Math.floor(rowGutter / 2)]
906
- }, dateElementProps().map((elemProps, i) => {
907
- const elemId = id + "_" + elemProps.type;
945
+ }, dateElementProps(state, showTime, options.yearsRange).map(function (elemProps, i) {
946
+ var elemId = id + "_" + elemProps.type;
908
947
  return /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
909
948
  flex: "88px",
910
949
  key: elemId
911
- }, renderDateElement({ ...elemProps,
950
+ }, renderDateElement(_extends({}, elemProps, {
912
951
  autofocus: autofocus && i === 0,
913
- disabled,
952
+ disabled: disabled,
914
953
  id: elemId,
915
- onBlur,
916
- onFocus,
917
- readonly,
918
- registry,
954
+ name: id,
955
+ onBlur: onBlur,
956
+ onFocus: onFocus,
957
+ readonly: readonly,
958
+ registry: registry,
919
959
  select: handleChange,
920
960
  // NOTE: antd components accept -1 rather than issue a warning
921
961
  // like material-ui, so we need to convert -1 to undefined here.
922
962
  value: elemProps.value < 0 ? undefined : elemProps.value
923
- }));
963
+ })));
924
964
  }), !options.hideNowButton && /*#__PURE__*/React__default["default"].createElement(Col__default["default"], {
925
965
  flex: "88px"
926
966
  }, /*#__PURE__*/React__default["default"].createElement(Button__default["default"], {
@@ -937,8 +977,7 @@ const AltDateWidget = _ref => {
937
977
  onClick: handleClear,
938
978
  type: "primary"
939
979
  }, "Clear")));
940
- };
941
-
980
+ }
942
981
  AltDateWidget.defaultProps = {
943
982
  autofocus: false,
944
983
  disabled: false,
@@ -949,173 +988,159 @@ AltDateWidget.defaultProps = {
949
988
  showTime: false
950
989
  };
951
990
 
952
- const AltDateTimeWidget = props => {
953
- const {
954
- AltDateWidget
955
- } = props.registry.widgets;
991
+ function AltDateTimeWidget(props) {
992
+ var AltDateWidget = props.registry.widgets.AltDateWidget;
956
993
  return /*#__PURE__*/React__default["default"].createElement(AltDateWidget, _extends({
957
994
  showTime: true
958
995
  }, props));
959
- };
960
-
961
- AltDateTimeWidget.defaultProps = { ...AltDateWidget.defaultProps,
996
+ }
997
+ AltDateTimeWidget.defaultProps = /*#__PURE__*/_extends({}, AltDateWidget.defaultProps, {
962
998
  showTime: true
963
- };
964
-
965
- const CheckboxesWidget = _ref => {
966
- let {
967
- autofocus,
968
- disabled,
969
- formContext,
970
- id,
971
- // label,
972
- onBlur,
973
- onChange,
974
- onFocus,
975
- options,
976
- // placeholder,
977
- readonly,
978
- // required,
979
- // schema,
980
- value
981
- } = _ref;
982
- const {
983
- readonlyAsDisabled = true
984
- } = formContext;
985
- const {
986
- enumOptions,
987
- enumDisabled,
988
- inline
989
- } = options;
990
-
991
- const handleChange = nextValue => onChange(nextValue);
999
+ });
992
1000
 
993
- const handleBlur = _ref2 => {
994
- let {
995
- target
996
- } = _ref2;
997
- return onBlur(id, target.value);
1001
+ /** The `CheckboxesWidget` is a widget for rendering checkbox groups.
1002
+ * It is typically used to represent an array of enums.
1003
+ *
1004
+ * @param props - The `WidgetProps` for this component
1005
+ */
1006
+ function CheckboxesWidget(_ref) {
1007
+ var autofocus = _ref.autofocus,
1008
+ disabled = _ref.disabled,
1009
+ formContext = _ref.formContext,
1010
+ id = _ref.id,
1011
+ onBlur = _ref.onBlur,
1012
+ onChange = _ref.onChange,
1013
+ onFocus = _ref.onFocus,
1014
+ options = _ref.options,
1015
+ readonly = _ref.readonly,
1016
+ value = _ref.value;
1017
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1018
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1019
+ var enumOptions = options.enumOptions,
1020
+ enumDisabled = options.enumDisabled,
1021
+ inline = options.inline,
1022
+ emptyValue = options.emptyValue;
1023
+ var handleChange = function handleChange(nextValue) {
1024
+ return onChange(utils.enumOptionsValueForIndex(nextValue, enumOptions, emptyValue));
998
1025
  };
999
-
1000
- const handleFocus = _ref3 => {
1001
- let {
1002
- target
1003
- } = _ref3;
1004
- return onFocus(id, target.value);
1026
+ var handleBlur = function handleBlur(_ref2) {
1027
+ var target = _ref2.target;
1028
+ return onBlur(id, utils.enumOptionsValueForIndex(target.value, enumOptions, emptyValue));
1005
1029
  };
1006
-
1007
- return Array.isArray(enumOptions) && enumOptions.length > 0 ? /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"].Group, {
1008
- disabled: disabled || readonlyAsDisabled && readonly,
1030
+ var handleFocus = function handleFocus(_ref3) {
1031
+ var target = _ref3.target;
1032
+ return onFocus(id, utils.enumOptionsValueForIndex(target.value, enumOptions, emptyValue));
1033
+ };
1034
+ // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided,
1035
+ // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors
1036
+ var extraProps = {
1009
1037
  id: id,
1010
- name: id,
1011
1038
  onBlur: !readonly ? handleBlur : undefined,
1039
+ onFocus: !readonly ? handleFocus : undefined
1040
+ };
1041
+ var selectedIndexes = utils.enumOptionsIndexForValue(value, enumOptions, true);
1042
+ return Array.isArray(enumOptions) && enumOptions.length > 0 ? /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"].Group, _extends({
1043
+ disabled: disabled || readonlyAsDisabled && readonly,
1044
+ name: id,
1012
1045
  onChange: !readonly ? handleChange : undefined,
1013
- onFocus: !readonly ? handleFocus : undefined,
1014
- value: value
1015
- }, enumOptions.map((_ref4, i) => {
1016
- let {
1017
- value: optionValue,
1018
- label: optionLabel
1019
- } = _ref4;
1046
+ value: selectedIndexes
1047
+ }, extraProps, {
1048
+ "aria-describedby": utils.ariaDescribedByIds(id)
1049
+ }), Array.isArray(enumOptions) && enumOptions.map(function (option, i) {
1020
1050
  return /*#__PURE__*/React__default["default"].createElement("span", {
1021
- key: optionValue
1051
+ key: i
1022
1052
  }, /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
1053
+ id: utils.optionId(id, i),
1054
+ name: id,
1023
1055
  autoFocus: i === 0 ? autofocus : false,
1024
- disabled: enumDisabled && enumDisabled.indexOf(value) !== -1,
1025
- value: optionValue
1026
- }, optionLabel), !inline && /*#__PURE__*/React__default["default"].createElement("br", null));
1056
+ disabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1,
1057
+ value: String(i)
1058
+ }, option.label), !inline && /*#__PURE__*/React__default["default"].createElement("br", null));
1027
1059
  })) : null;
1028
- };
1029
-
1030
- const CheckboxWidget = _ref => {
1031
- let {
1032
- autofocus,
1033
- disabled,
1034
- formContext,
1035
- id,
1036
- label,
1037
- onBlur,
1038
- onChange,
1039
- onFocus,
1040
- // options,
1041
- // placeholder,
1042
- readonly,
1043
- // required,
1044
- // schema,
1045
- value
1046
- } = _ref;
1047
- const {
1048
- readonlyAsDisabled = true
1049
- } = formContext;
1060
+ }
1050
1061
 
1051
- const handleChange = _ref2 => {
1052
- let {
1053
- target
1054
- } = _ref2;
1062
+ /** The `CheckBoxWidget` is a widget for rendering boolean properties.
1063
+ * It is typically used to represent a boolean.
1064
+ *
1065
+ * @param props - The `WidgetProps` for this component
1066
+ */
1067
+ function CheckboxWidget(props) {
1068
+ var autofocus = props.autofocus,
1069
+ disabled = props.disabled,
1070
+ formContext = props.formContext,
1071
+ id = props.id,
1072
+ label = props.label,
1073
+ onBlur = props.onBlur,
1074
+ onChange = props.onChange,
1075
+ onFocus = props.onFocus,
1076
+ readonly = props.readonly,
1077
+ value = props.value;
1078
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1079
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1080
+ var handleChange = function handleChange(_ref) {
1081
+ var target = _ref.target;
1055
1082
  return onChange(target.checked);
1056
1083
  };
1057
-
1058
- const handleBlur = _ref3 => {
1059
- let {
1060
- target
1061
- } = _ref3;
1084
+ var handleBlur = function handleBlur(_ref2) {
1085
+ var target = _ref2.target;
1062
1086
  return onBlur(id, target.checked);
1063
1087
  };
1064
-
1065
- const handleFocus = _ref4 => {
1066
- let {
1067
- target
1068
- } = _ref4;
1088
+ var handleFocus = function handleFocus(_ref3) {
1089
+ var target = _ref3.target;
1069
1090
  return onFocus(id, target.checked);
1070
1091
  };
1071
-
1072
- return /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
1092
+ // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided,
1093
+ // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors
1094
+ var extraProps = {
1095
+ onBlur: !readonly ? handleBlur : undefined,
1096
+ onFocus: !readonly ? handleFocus : undefined
1097
+ };
1098
+ return /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], _extends({
1073
1099
  autoFocus: autofocus,
1074
1100
  checked: typeof value === "undefined" ? false : value,
1075
1101
  disabled: disabled || readonlyAsDisabled && readonly,
1076
1102
  id: id,
1077
1103
  name: id,
1078
- onBlur: !readonly ? handleBlur : undefined,
1079
- onChange: !readonly ? handleChange : undefined,
1080
- onFocus: !readonly ? handleFocus : undefined
1081
- }, label);
1082
- };
1104
+ onChange: !readonly ? handleChange : undefined
1105
+ }, extraProps, {
1106
+ "aria-describedby": utils.ariaDescribedByIds(id)
1107
+ }), label);
1108
+ }
1083
1109
 
1084
- const DatePicker = /*#__PURE__*/generatePicker__default["default"](dayjsGenerateConfig__default["default"]);
1110
+ var DatePicker = /*#__PURE__*/generatePicker__default["default"](dayjsGenerateConfig__default["default"]);
1085
1111
 
1086
- const DATE_PICKER_STYLE$1 = {
1112
+ var DATE_PICKER_STYLE$1 = {
1087
1113
  width: "100%"
1088
1114
  };
1089
-
1090
- const DateTimeWidget = _ref => {
1091
- let {
1092
- // autofocus,
1093
- disabled,
1094
- formContext,
1095
- id,
1096
- // label,
1097
- onBlur,
1098
- onChange,
1099
- onFocus,
1100
- // options,
1101
- placeholder,
1102
- readonly,
1103
- // required,
1104
- // schema,
1105
- value
1106
- } = _ref;
1107
- const {
1108
- readonlyAsDisabled = true
1109
- } = formContext;
1110
-
1111
- const handleChange = nextValue => onChange(nextValue && nextValue.toISOString());
1112
-
1113
- const handleBlur = () => onBlur(id, value);
1114
-
1115
- const handleFocus = () => onFocus(id, value);
1116
-
1117
- const getPopupContainer = node => node.parentNode;
1118
-
1115
+ /** The `DateTimeWidget` component uses the `BaseInputTemplate` changing the type to `datetime-local` and transforms
1116
+ * the value to/from utc using the appropriate utility functions.
1117
+ *
1118
+ * @param props - The `WidgetProps` for this component
1119
+ */
1120
+ function DateTimeWidget(props) {
1121
+ var disabled = props.disabled,
1122
+ formContext = props.formContext,
1123
+ id = props.id,
1124
+ onBlur = props.onBlur,
1125
+ onChange = props.onChange,
1126
+ onFocus = props.onFocus,
1127
+ placeholder = props.placeholder,
1128
+ readonly = props.readonly,
1129
+ value = props.value;
1130
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1131
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1132
+ var handleChange = function handleChange(nextValue) {
1133
+ return onChange(nextValue && nextValue.toISOString());
1134
+ };
1135
+ var handleBlur = function handleBlur() {
1136
+ return onBlur(id, value);
1137
+ };
1138
+ var handleFocus = function handleFocus() {
1139
+ return onFocus(id, value);
1140
+ };
1141
+ var getPopupContainer = function getPopupContainer(node) {
1142
+ return node.parentNode;
1143
+ };
1119
1144
  return /*#__PURE__*/React__default["default"].createElement(DatePicker, {
1120
1145
  disabled: disabled || readonlyAsDisabled && readonly,
1121
1146
  getPopupContainer: getPopupContainer,
@@ -1127,43 +1152,43 @@ const DateTimeWidget = _ref => {
1127
1152
  placeholder: placeholder,
1128
1153
  showTime: true,
1129
1154
  style: DATE_PICKER_STYLE$1,
1130
- value: value && dayjs__default["default"](value)
1155
+ value: value && dayjs__default["default"](value),
1156
+ "aria-describedby": utils.ariaDescribedByIds(id)
1131
1157
  });
1132
- };
1158
+ }
1133
1159
 
1134
- const DATE_PICKER_STYLE = {
1160
+ var DATE_PICKER_STYLE = {
1135
1161
  width: "100%"
1136
1162
  };
1137
-
1138
- const DateWidget = _ref => {
1139
- let {
1140
- // autofocus,
1141
- disabled,
1142
- formContext,
1143
- id,
1144
- // label,
1145
- onBlur,
1146
- onChange,
1147
- onFocus,
1148
- // options,
1149
- placeholder,
1150
- readonly,
1151
- // required,
1152
- // schema,
1153
- value
1154
- } = _ref;
1155
- const {
1156
- readonlyAsDisabled = true
1157
- } = formContext;
1158
-
1159
- const handleChange = nextValue => onChange(nextValue && nextValue.format("YYYY-MM-DD"));
1160
-
1161
- const handleBlur = () => onBlur(id, value);
1162
-
1163
- const handleFocus = () => onFocus(id, value);
1164
-
1165
- const getPopupContainer = node => node.parentNode;
1166
-
1163
+ /** The `DateWidget` component uses the `BaseInputTemplate` changing the type to `date` and transforms
1164
+ * the value to undefined when it is falsy during the `onChange` handling.
1165
+ *
1166
+ * @param props - The `WidgetProps` for this component
1167
+ */
1168
+ function DateWidget(props) {
1169
+ var disabled = props.disabled,
1170
+ formContext = props.formContext,
1171
+ id = props.id,
1172
+ onBlur = props.onBlur,
1173
+ onChange = props.onChange,
1174
+ onFocus = props.onFocus,
1175
+ placeholder = props.placeholder,
1176
+ readonly = props.readonly,
1177
+ value = props.value;
1178
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1179
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1180
+ var handleChange = function handleChange(nextValue) {
1181
+ return onChange(nextValue && nextValue.format("YYYY-MM-DD"));
1182
+ };
1183
+ var handleBlur = function handleBlur() {
1184
+ return onBlur(id, value);
1185
+ };
1186
+ var handleFocus = function handleFocus() {
1187
+ return onFocus(id, value);
1188
+ };
1189
+ var getPopupContainer = function getPopupContainer(node) {
1190
+ return node.parentNode;
1191
+ };
1167
1192
  return /*#__PURE__*/React__default["default"].createElement(DatePicker, {
1168
1193
  disabled: disabled || readonlyAsDisabled && readonly,
1169
1194
  getPopupContainer: getPopupContainer,
@@ -1175,53 +1200,41 @@ const DateWidget = _ref => {
1175
1200
  placeholder: placeholder,
1176
1201
  showTime: false,
1177
1202
  style: DATE_PICKER_STYLE,
1178
- value: value && dayjs__default["default"](value)
1203
+ value: value && dayjs__default["default"](value),
1204
+ "aria-describedby": utils.ariaDescribedByIds(id)
1179
1205
  });
1180
- };
1181
-
1182
- const PasswordWidget = _ref => {
1183
- let {
1184
- // autofocus,
1185
- disabled,
1186
- formContext,
1187
- id,
1188
- // label,
1189
- onBlur,
1190
- onChange,
1191
- onFocus,
1192
- options,
1193
- placeholder,
1194
- readonly,
1195
- // required,
1196
- // schema,
1197
- value
1198
- } = _ref;
1199
- const {
1200
- readonlyAsDisabled = true
1201
- } = formContext;
1202
- const emptyValue = options.emptyValue || "";
1206
+ }
1203
1207
 
1204
- const handleChange = _ref2 => {
1205
- let {
1206
- target
1207
- } = _ref2;
1208
+ /** The `PasswordWidget` component uses the `BaseInputTemplate` changing the type to `password`.
1209
+ *
1210
+ * @param props - The `WidgetProps` for this component
1211
+ */
1212
+ function PasswordWidget(props) {
1213
+ var disabled = props.disabled,
1214
+ formContext = props.formContext,
1215
+ id = props.id,
1216
+ onBlur = props.onBlur,
1217
+ onChange = props.onChange,
1218
+ onFocus = props.onFocus,
1219
+ options = props.options,
1220
+ placeholder = props.placeholder,
1221
+ readonly = props.readonly,
1222
+ value = props.value;
1223
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1224
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1225
+ var emptyValue = options.emptyValue || "";
1226
+ var handleChange = function handleChange(_ref) {
1227
+ var target = _ref.target;
1208
1228
  return onChange(target.value === "" ? emptyValue : target.value);
1209
1229
  };
1210
-
1211
- const handleBlur = _ref3 => {
1212
- let {
1213
- target
1214
- } = _ref3;
1230
+ var handleBlur = function handleBlur(_ref2) {
1231
+ var target = _ref2.target;
1215
1232
  return onBlur(id, target.value);
1216
1233
  };
1217
-
1218
- const handleFocus = _ref4 => {
1219
- let {
1220
- target
1221
- } = _ref4;
1234
+ var handleFocus = function handleFocus(_ref3) {
1235
+ var target = _ref3.target;
1222
1236
  return onFocus(id, target.value);
1223
1237
  };
1224
-
1225
1238
  return /*#__PURE__*/React__default["default"].createElement(Input__default["default"].Password, {
1226
1239
  disabled: disabled || readonlyAsDisabled && readonly,
1227
1240
  id: id,
@@ -1230,251 +1243,238 @@ const PasswordWidget = _ref => {
1230
1243
  onChange: !readonly ? handleChange : undefined,
1231
1244
  onFocus: !readonly ? handleFocus : undefined,
1232
1245
  placeholder: placeholder,
1233
- value: value || ""
1246
+ value: value || "",
1247
+ "aria-describedby": utils.ariaDescribedByIds(id)
1234
1248
  });
1235
- };
1236
-
1237
- /* eslint-disable no-else-return */
1238
-
1239
- const RadioWidget = _ref => {
1240
- let {
1241
- autofocus,
1242
- disabled,
1243
- formContext,
1244
- id,
1245
- // label,
1246
- onBlur,
1247
- onChange,
1248
- onFocus,
1249
- options,
1250
- // placeholder,
1251
- readonly,
1252
- // required,
1253
- schema,
1254
- value
1255
- } = _ref;
1256
- const {
1257
- readonlyAsDisabled = true
1258
- } = formContext;
1259
- const {
1260
- enumOptions,
1261
- enumDisabled
1262
- } = options;
1249
+ }
1263
1250
 
1264
- const handleChange = _ref2 => {
1265
- let {
1266
- target: {
1267
- value: nextValue
1268
- }
1269
- } = _ref2;
1270
- return onChange(schema.type === "boolean" ? nextValue !== "false" : nextValue);
1251
+ /** The `RadioWidget` is a widget for rendering a radio group.
1252
+ * It is typically used with a string property constrained with enum options.
1253
+ *
1254
+ * @param props - The `WidgetProps` for this component
1255
+ */
1256
+ function RadioWidget(_ref) {
1257
+ var autofocus = _ref.autofocus,
1258
+ disabled = _ref.disabled,
1259
+ formContext = _ref.formContext,
1260
+ id = _ref.id,
1261
+ onBlur = _ref.onBlur,
1262
+ onChange = _ref.onChange,
1263
+ onFocus = _ref.onFocus,
1264
+ options = _ref.options,
1265
+ readonly = _ref.readonly,
1266
+ value = _ref.value;
1267
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1268
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1269
+ var enumOptions = options.enumOptions,
1270
+ enumDisabled = options.enumDisabled,
1271
+ emptyValue = options.emptyValue;
1272
+ var handleChange = function handleChange(_ref2) {
1273
+ var nextValue = _ref2.target.value;
1274
+ return onChange(utils.enumOptionsValueForIndex(nextValue, enumOptions, emptyValue));
1271
1275
  };
1272
-
1273
- const handleBlur = _ref3 => {
1274
- let {
1275
- target
1276
- } = _ref3;
1277
- return onBlur(id, target.value);
1276
+ var handleBlur = function handleBlur(_ref3) {
1277
+ var target = _ref3.target;
1278
+ return onBlur(id, utils.enumOptionsValueForIndex(target.value, enumOptions, emptyValue));
1278
1279
  };
1279
-
1280
- const handleFocus = _ref4 => {
1281
- let {
1282
- target
1283
- } = _ref4;
1284
- return onFocus(id, target.value);
1280
+ var handleFocus = function handleFocus(_ref4) {
1281
+ var target = _ref4.target;
1282
+ return onFocus(id, utils.enumOptionsValueForIndex(target.value, enumOptions, emptyValue));
1285
1283
  };
1286
-
1284
+ var selectedIndexes = utils.enumOptionsIndexForValue(value, enumOptions);
1287
1285
  return /*#__PURE__*/React__default["default"].createElement(Radio__default["default"].Group, {
1288
1286
  disabled: disabled || readonlyAsDisabled && readonly,
1289
1287
  id: id,
1290
1288
  name: id,
1291
- onBlur: !readonly ? handleBlur : undefined,
1292
1289
  onChange: !readonly ? handleChange : undefined,
1290
+ onBlur: !readonly ? handleBlur : undefined,
1293
1291
  onFocus: !readonly ? handleFocus : undefined,
1294
- value: "" + value
1295
- }, enumOptions.map((_ref5, i) => {
1296
- let {
1297
- value: optionValue,
1298
- label: optionLabel
1299
- } = _ref5;
1292
+ value: selectedIndexes,
1293
+ "aria-describedby": utils.ariaDescribedByIds(id)
1294
+ }, Array.isArray(enumOptions) && enumOptions.map(function (option, i) {
1300
1295
  return /*#__PURE__*/React__default["default"].createElement(Radio__default["default"], {
1296
+ id: utils.optionId(id, i),
1297
+ name: id,
1301
1298
  autoFocus: i === 0 ? autofocus : false,
1302
- disabled: enumDisabled && enumDisabled.indexOf(value) !== -1,
1303
- key: "" + optionValue,
1304
- value: "" + optionValue
1305
- }, optionLabel);
1299
+ disabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1,
1300
+ key: i,
1301
+ value: String(i)
1302
+ }, option.label);
1306
1303
  }));
1307
- };
1308
-
1309
- /* eslint-disable no-else-return */
1310
-
1311
- const RangeWidget = _ref => {
1312
- let {
1313
- autofocus,
1314
- disabled,
1315
- formContext,
1316
- id,
1317
- // label,
1318
- onBlur,
1319
- onChange,
1320
- onFocus,
1321
- options,
1322
- placeholder,
1323
- readonly,
1324
- // required,
1325
- schema,
1326
- value
1327
- } = _ref;
1328
- const {
1329
- readonlyAsDisabled = true
1330
- } = formContext;
1331
- const {
1332
- min,
1333
- max,
1334
- step
1335
- } = utils.rangeSpec(schema);
1336
- const emptyValue = options.emptyValue || "";
1337
-
1338
- const handleChange = nextValue => onChange(nextValue === "" ? emptyValue : nextValue);
1339
-
1340
- const handleBlur = () => onBlur(id, value);
1341
-
1342
- const handleFocus = () => onFocus(id, value);
1304
+ }
1343
1305
 
1344
- return /*#__PURE__*/React__default["default"].createElement(Slider__default["default"], {
1306
+ /** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result
1307
+ * in a div, with the value along side it.
1308
+ *
1309
+ * @param props - The `WidgetProps` for this component
1310
+ */
1311
+ function RangeWidget(props) {
1312
+ var autofocus = props.autofocus,
1313
+ disabled = props.disabled,
1314
+ formContext = props.formContext,
1315
+ id = props.id,
1316
+ onBlur = props.onBlur,
1317
+ onChange = props.onChange,
1318
+ onFocus = props.onFocus,
1319
+ options = props.options,
1320
+ placeholder = props.placeholder,
1321
+ readonly = props.readonly,
1322
+ schema = props.schema,
1323
+ value = props.value;
1324
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1325
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1326
+ var _rangeSpec = utils.rangeSpec(schema),
1327
+ min = _rangeSpec.min,
1328
+ max = _rangeSpec.max,
1329
+ step = _rangeSpec.step;
1330
+ var emptyValue = options.emptyValue || "";
1331
+ var handleChange = function handleChange(nextValue) {
1332
+ return onChange(nextValue === "" ? emptyValue : nextValue);
1333
+ };
1334
+ var handleBlur = function handleBlur() {
1335
+ return onBlur(id, value);
1336
+ };
1337
+ var handleFocus = function handleFocus() {
1338
+ return onFocus(id, value);
1339
+ };
1340
+ // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided,
1341
+ // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors
1342
+ var extraProps = {
1343
+ placeholder: placeholder,
1344
+ onBlur: !readonly ? handleBlur : undefined,
1345
+ onFocus: !readonly ? handleFocus : undefined
1346
+ };
1347
+ return /*#__PURE__*/React__default["default"].createElement(Slider__default["default"], _extends({
1345
1348
  autoFocus: autofocus,
1346
1349
  disabled: disabled || readonlyAsDisabled && readonly,
1347
1350
  id: id,
1348
1351
  max: max,
1349
1352
  min: min,
1350
- onBlur: !readonly ? handleBlur : undefined,
1351
1353
  onChange: !readonly ? handleChange : undefined,
1352
- onFocus: !readonly ? handleFocus : undefined,
1353
- placeholder: placeholder,
1354
1354
  range: false,
1355
1355
  step: step,
1356
1356
  value: value
1357
- });
1358
- };
1357
+ }, extraProps, {
1358
+ "aria-describedby": utils.ariaDescribedByIds(id)
1359
+ }));
1360
+ }
1359
1361
 
1360
- /* eslint-disable no-else-return */
1361
- const SELECT_STYLE = {
1362
+ var SELECT_STYLE = {
1362
1363
  width: "100%"
1363
1364
  };
1364
-
1365
- const SelectWidget = _ref => {
1366
- let {
1367
- autofocus,
1368
- disabled,
1369
- formContext,
1370
- id,
1371
- // label,
1372
- multiple,
1373
- onBlur,
1374
- onChange,
1375
- onFocus,
1376
- options,
1377
- placeholder,
1378
- readonly,
1379
- // required,
1380
- schema,
1381
- value
1382
- } = _ref;
1383
- const {
1384
- readonlyAsDisabled = true
1385
- } = formContext;
1386
- const {
1387
- enumOptions,
1388
- enumDisabled
1389
- } = options;
1390
-
1391
- const handleChange = nextValue => onChange(utils.processSelectValue(schema, nextValue, options));
1392
-
1393
- const handleBlur = () => onBlur(id, utils.processSelectValue(schema, value, options));
1394
-
1395
- const handleFocus = () => onFocus(id, utils.processSelectValue(schema, value, options));
1396
-
1397
- const getPopupContainer = node => node.parentNode;
1398
-
1399
- const stringify = currentValue => Array.isArray(currentValue) ? value.map(String) : String(value);
1400
-
1401
- return /*#__PURE__*/React__default["default"].createElement(Select__default["default"], {
1365
+ /** The `SelectWidget` is a widget for rendering dropdowns.
1366
+ * It is typically used with string properties constrained with enum options.
1367
+ *
1368
+ * @param props - The `WidgetProps` for this component
1369
+ */
1370
+ function SelectWidget(_ref) {
1371
+ var autofocus = _ref.autofocus,
1372
+ disabled = _ref.disabled,
1373
+ _ref$formContext = _ref.formContext,
1374
+ formContext = _ref$formContext === void 0 ? {} : _ref$formContext,
1375
+ id = _ref.id,
1376
+ multiple = _ref.multiple,
1377
+ onBlur = _ref.onBlur,
1378
+ onChange = _ref.onChange,
1379
+ onFocus = _ref.onFocus,
1380
+ options = _ref.options,
1381
+ placeholder = _ref.placeholder,
1382
+ readonly = _ref.readonly,
1383
+ value = _ref.value;
1384
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1385
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1386
+ var enumOptions = options.enumOptions,
1387
+ enumDisabled = options.enumDisabled,
1388
+ emptyValue = options.emptyValue;
1389
+ var handleChange = function handleChange(nextValue) {
1390
+ return onChange(utils.enumOptionsValueForIndex(nextValue, enumOptions, emptyValue));
1391
+ };
1392
+ var handleBlur = function handleBlur() {
1393
+ return onBlur(id, utils.enumOptionsValueForIndex(value, enumOptions, emptyValue));
1394
+ };
1395
+ var handleFocus = function handleFocus() {
1396
+ return onFocus(id, utils.enumOptionsValueForIndex(value, enumOptions, emptyValue));
1397
+ };
1398
+ var filterOption = function filterOption(input, option) {
1399
+ if (option && isString__default["default"](option.label)) {
1400
+ // labels are strings in this context
1401
+ return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
1402
+ }
1403
+ return false;
1404
+ };
1405
+ var getPopupContainer = function getPopupContainer(node) {
1406
+ return node.parentNode;
1407
+ };
1408
+ var selectedIndexes = utils.enumOptionsIndexForValue(value, enumOptions, multiple);
1409
+ // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided,
1410
+ // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors
1411
+ var extraProps = {
1412
+ name: id
1413
+ };
1414
+ return /*#__PURE__*/React__default["default"].createElement(Select__default["default"], _extends({
1402
1415
  autoFocus: autofocus,
1403
1416
  disabled: disabled || readonlyAsDisabled && readonly,
1404
1417
  getPopupContainer: getPopupContainer,
1405
1418
  id: id,
1406
1419
  mode: typeof multiple !== "undefined" ? "multiple" : undefined,
1407
- name: id,
1408
1420
  onBlur: !readonly ? handleBlur : undefined,
1409
1421
  onChange: !readonly ? handleChange : undefined,
1410
1422
  onFocus: !readonly ? handleFocus : undefined,
1411
1423
  placeholder: placeholder,
1412
1424
  style: SELECT_STYLE,
1413
- value: typeof value !== "undefined" ? stringify(value) : undefined
1414
- }, enumOptions.map(_ref2 => {
1415
- let {
1416
- value: optionValue,
1417
- label: optionLabel
1418
- } = _ref2;
1425
+ value: selectedIndexes
1426
+ }, extraProps, {
1427
+ filterOption: filterOption,
1428
+ "aria-describedby": utils.ariaDescribedByIds(id)
1429
+ }), Array.isArray(enumOptions) && enumOptions.map(function (_ref2, index) {
1430
+ var optionValue = _ref2.value,
1431
+ optionLabel = _ref2.label;
1419
1432
  return /*#__PURE__*/React__default["default"].createElement(Select__default["default"].Option, {
1420
- disabled: enumDisabled && enumDisabled.indexOf(optionValue) !== -1,
1421
- key: String(optionValue),
1422
- value: String(optionValue)
1433
+ disabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(optionValue) !== -1,
1434
+ key: String(index),
1435
+ value: String(index)
1423
1436
  }, optionLabel);
1424
1437
  }));
1425
- };
1426
-
1427
- SelectWidget.defaultProps = {
1428
- formContext: {}
1429
- };
1438
+ }
1430
1439
 
1431
- const INPUT_STYLE = {
1440
+ var INPUT_STYLE = {
1432
1441
  width: "100%"
1433
1442
  };
1434
-
1435
- const TextareaWidget = _ref => {
1436
- let {
1437
- // autofocus,
1438
- disabled,
1439
- formContext,
1440
- id,
1441
- // label,
1442
- onBlur,
1443
- onChange,
1444
- onFocus,
1445
- options,
1446
- placeholder,
1447
- readonly,
1448
- // required,
1449
- // schema,
1450
- value
1451
- } = _ref;
1452
- const {
1453
- readonlyAsDisabled = true
1454
- } = formContext;
1455
-
1456
- const handleChange = _ref2 => {
1457
- let {
1458
- target
1459
- } = _ref2;
1443
+ /** The `TextareaWidget` is a widget for rendering input fields as textarea.
1444
+ *
1445
+ * @param props - The `WidgetProps` for this component
1446
+ */
1447
+ function TextareaWidget(_ref) {
1448
+ var disabled = _ref.disabled,
1449
+ formContext = _ref.formContext,
1450
+ id = _ref.id,
1451
+ onBlur = _ref.onBlur,
1452
+ onChange = _ref.onChange,
1453
+ onFocus = _ref.onFocus,
1454
+ options = _ref.options,
1455
+ placeholder = _ref.placeholder,
1456
+ readonly = _ref.readonly,
1457
+ value = _ref.value;
1458
+ var _formContext$readonly = formContext.readonlyAsDisabled,
1459
+ readonlyAsDisabled = _formContext$readonly === void 0 ? true : _formContext$readonly;
1460
+ var handleChange = function handleChange(_ref2) {
1461
+ var target = _ref2.target;
1460
1462
  return onChange(target.value === "" ? options.emptyValue : target.value);
1461
1463
  };
1462
-
1463
- const handleBlur = _ref3 => {
1464
- let {
1465
- target
1466
- } = _ref3;
1464
+ var handleBlur = function handleBlur(_ref3) {
1465
+ var target = _ref3.target;
1467
1466
  return onBlur(id, target.value);
1468
1467
  };
1469
-
1470
- const handleFocus = _ref4 => {
1471
- let {
1472
- target
1473
- } = _ref4;
1468
+ var handleFocus = function handleFocus(_ref4) {
1469
+ var target = _ref4.target;
1474
1470
  return onFocus(id, target.value);
1475
1471
  };
1476
-
1477
- return /*#__PURE__*/React__default["default"].createElement(Input__default["default"].TextArea, {
1472
+ // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided,
1473
+ // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors
1474
+ var extraProps = {
1475
+ type: "textarea"
1476
+ };
1477
+ return /*#__PURE__*/React__default["default"].createElement(Input__default["default"].TextArea, _extends({
1478
1478
  disabled: disabled || readonlyAsDisabled && readonly,
1479
1479
  id: id,
1480
1480
  name: id,
@@ -1484,49 +1484,48 @@ const TextareaWidget = _ref => {
1484
1484
  placeholder: placeholder,
1485
1485
  rows: options.rows || 4,
1486
1486
  style: INPUT_STYLE,
1487
- type: "textarea",
1488
1487
  value: value
1489
- });
1490
- };
1488
+ }, extraProps, {
1489
+ "aria-describedby": utils.ariaDescribedByIds(id)
1490
+ }));
1491
+ }
1491
1492
 
1492
- const Widgets = {
1493
- AltDateTimeWidget,
1494
- AltDateWidget,
1495
- CheckboxesWidget,
1496
- CheckboxWidget,
1497
- DateTimeWidget,
1498
- DateWidget,
1499
- PasswordWidget,
1500
- RadioWidget,
1501
- RangeWidget,
1502
- SelectWidget,
1503
- TextareaWidget
1504
- };
1505
- const Theme = {
1506
- templates: {
1507
- ArrayFieldItemTemplate,
1508
- ArrayFieldTemplate: ArrayFieldTemplate$1,
1509
- BaseInputTemplate: TextWidget,
1510
- ButtonTemplates: {
1511
- AddButton,
1512
- MoveDownButton,
1513
- MoveUpButton,
1514
- RemoveButton,
1515
- SubmitButton
1516
- },
1517
- DescriptionFieldTemplate: DescriptionField,
1518
- ErrorListTemplate: ErrorList,
1519
- FieldErrorTemplate,
1520
- FieldTemplate,
1521
- ObjectFieldTemplate: ObjectFieldTemplate$1,
1522
- TitleFieldTemplate: TitleField$1
1523
- },
1524
- widgets: Widgets
1525
- };
1526
- const Form = /*#__PURE__*/core.withTheme(Theme);
1493
+ function generateWidgets() {
1494
+ return {
1495
+ AltDateTimeWidget: AltDateTimeWidget,
1496
+ AltDateWidget: AltDateWidget,
1497
+ CheckboxesWidget: CheckboxesWidget,
1498
+ CheckboxWidget: CheckboxWidget,
1499
+ DateTimeWidget: DateTimeWidget,
1500
+ DateWidget: DateWidget,
1501
+ PasswordWidget: PasswordWidget,
1502
+ RadioWidget: RadioWidget,
1503
+ RangeWidget: RangeWidget,
1504
+ SelectWidget: SelectWidget,
1505
+ TextareaWidget: TextareaWidget
1506
+ };
1507
+ }
1508
+ var index = /*#__PURE__*/generateWidgets();
1509
+
1510
+ function generateTheme() {
1511
+ return {
1512
+ templates: generateTemplates(),
1513
+ widgets: generateWidgets()
1514
+ };
1515
+ }
1516
+ var Theme = /*#__PURE__*/generateTheme();
1517
+ function generateForm() {
1518
+ return core.withTheme(generateTheme());
1519
+ }
1520
+ var Form = /*#__PURE__*/generateForm();
1527
1521
 
1528
1522
  exports.Form = Form;
1523
+ exports.Templates = index$1;
1529
1524
  exports.Theme = Theme;
1530
- exports.Widgets = Widgets;
1525
+ exports.Widgets = index;
1531
1526
  exports["default"] = Form;
1527
+ exports.generateForm = generateForm;
1528
+ exports.generateTemplates = generateTemplates;
1529
+ exports.generateTheme = generateTheme;
1530
+ exports.generateWidgets = generateWidgets;
1532
1531
  //# sourceMappingURL=antd.cjs.development.js.map