@jsonforms/material-renderers 3.0.0-beta.3 → 3.0.0-rc.0

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 (68) hide show
  1. package/README.md +71 -13
  2. package/docs/assets/js/search.json +1 -1
  3. package/docs/globals.html +174 -80
  4. package/docs/index.html +85 -13
  5. package/docs/interfaces/categorizationstate.html +1 -1
  6. package/docs/interfaces/categorizationstepperstate.html +1 -1
  7. package/docs/interfaces/inputref.html +168 -0
  8. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +49 -4
  9. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +46 -1
  10. package/docs/interfaces/materiallabelablelayoutrendererprops.html +328 -0
  11. package/docs/interfaces/materiallayoutrendererprops.html +5 -0
  12. package/docs/interfaces/withoptionlabel.html +3 -3
  13. package/lib/additional/MaterialLabelRenderer.d.ts +3 -3
  14. package/lib/cells/MaterialEnumCell.d.ts +2 -1
  15. package/lib/cells/MaterialOneOfEnumCell.d.ts +2 -1
  16. package/lib/controls/MaterialEnumControl.d.ts +2 -1
  17. package/lib/controls/MaterialOneOfEnumControl.d.ts +2 -1
  18. package/lib/controls/index.d.ts +2 -2
  19. package/lib/jsonforms-react-material.cjs.js +125 -61
  20. package/lib/jsonforms-react-material.cjs.js.map +1 -1
  21. package/lib/jsonforms-react-material.esm.js +124 -58
  22. package/lib/jsonforms-react-material.esm.js.map +1 -1
  23. package/lib/layouts/MaterialArrayLayoutRenderer.d.ts +1 -1
  24. package/lib/layouts/MaterialCategorizationLayout.d.ts +4 -3
  25. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +4 -3
  26. package/lib/layouts/MaterialGroupLayout.d.ts +2 -2
  27. package/lib/layouts/MaterialHorizontalLayout.d.ts +1 -1
  28. package/lib/layouts/MaterialVerticalLayout.d.ts +1 -1
  29. package/lib/mui-controls/MuiAutocomplete.d.ts +2 -2
  30. package/lib/mui-controls/MuiSelect.d.ts +2 -1
  31. package/lib/util/datejs.d.ts +17 -1
  32. package/lib/util/i18nDefaults.d.ts +3 -0
  33. package/lib/util/index.d.ts +1 -0
  34. package/lib/util/layout.d.ts +3 -0
  35. package/package.json +7 -7
  36. package/src/additional/MaterialLabelRenderer.tsx +5 -7
  37. package/src/cells/MaterialEnumCell.tsx +4 -3
  38. package/src/cells/MaterialOneOfEnumCell.tsx +3 -3
  39. package/src/complex/MaterialTableControl.tsx +1 -1
  40. package/src/controls/MaterialDateControl.tsx +23 -6
  41. package/src/controls/MaterialDateTimeControl.tsx +23 -6
  42. package/src/controls/MaterialEnumControl.tsx +12 -5
  43. package/src/controls/MaterialOneOfEnumControl.tsx +13 -5
  44. package/src/controls/MaterialTimeControl.tsx +24 -7
  45. package/src/layouts/ExpandPanelRenderer.tsx +2 -1
  46. package/src/layouts/MaterialArrayLayoutRenderer.tsx +3 -25
  47. package/src/layouts/MaterialCategorizationLayout.tsx +18 -9
  48. package/src/layouts/MaterialCategorizationStepperLayout.tsx +19 -12
  49. package/src/layouts/MaterialGroupLayout.tsx +6 -5
  50. package/src/mui-controls/MuiAutocomplete.tsx +81 -37
  51. package/src/mui-controls/MuiInputText.tsx +4 -1
  52. package/src/mui-controls/MuiSelect.tsx +10 -5
  53. package/src/util/datejs.tsx +73 -0
  54. package/src/util/i18nDefaults.ts +3 -0
  55. package/src/util/index.ts +1 -0
  56. package/src/util/layout.tsx +4 -0
  57. package/stats.html +1 -1
  58. package/test/renderers/MaterialArrayLayout.test.tsx +36 -5
  59. package/test/renderers/MaterialCategorizationLayout.test.tsx +17 -7
  60. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +21 -11
  61. package/test/renderers/MaterialDateControl.test.tsx +27 -0
  62. package/test/renderers/MaterialDateTimeControl.test.tsx +27 -0
  63. package/test/renderers/MaterialGroupLayout.test.tsx +4 -1
  64. package/test/renderers/MaterialInputControl.test.tsx +4 -0
  65. package/test/renderers/MaterialLabelRenderer.test.tsx +2 -1
  66. package/test/renderers/MaterialTimeControl.test.tsx +27 -0
  67. package/test/renderers/util.ts +5 -0
  68. package/src/util/datejs.ts +0 -32
@@ -270,7 +270,7 @@ var TableRows = function (_a) {
270
270
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
271
271
  return (React__default["default"].createElement(React__default["default"].Fragment, null, range__default["default"](data).map(function (index) {
272
272
  var childPath = core.Paths.compose(path, "" + index);
273
- return (React__default["default"].createElement(NonEmptyRow, { key: childPath, childPath: childPath, rowIndex: index, schema: schema, openDeleteDialog: openDeleteDialog, moveUpCreator: moveUp, moveDownCreator: moveDown, enableUp: index !== 0, enableDown: index !== data - 1, showSortButtons: appliedUiSchemaOptions.showSortButtons, enabled: enabled, cells: cells, path: path }));
273
+ return (React__default["default"].createElement(NonEmptyRow, { key: childPath, childPath: childPath, rowIndex: index, schema: schema, openDeleteDialog: openDeleteDialog, moveUpCreator: moveUp, moveDownCreator: moveDown, enableUp: index !== 0, enableDown: index !== data - 1, showSortButtons: appliedUiSchemaOptions.showSortButtons || appliedUiSchemaOptions.showArrayTableSortButtons, enabled: enabled, cells: cells, path: path }));
274
274
  })));
275
275
  };
276
276
  var MaterialTableControl = (function (_super) {
@@ -448,20 +448,14 @@ var MuiCheckbox = React__default["default"].memo(function (props) {
448
448
  return (React__default["default"].createElement(material.Checkbox, { checked: checked, onChange: function (_ev, isChecked) { return handleChange(path, isChecked); }, className: className, id: id, disabled: !enabled, inputProps: inputProps }));
449
449
  });
450
450
 
451
- var MuiSelect = React__default["default"].memo(function (props) {
452
- var data = props.data, className = props.className, id = props.id, enabled = props.enabled, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config;
453
- var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
454
- return (React__default["default"].createElement(material.Select, { className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: function (ev) { return handleChange(path, ev.target.value); }, fullWidth: true, variant: 'standard' }, [React__default["default"].createElement(material.MenuItem, { value: '', key: 'empty' })].concat(options.map(function (optionValue) { return (React__default["default"].createElement(material.MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label)); }))));
455
- });
456
-
457
451
  dayjs__default["default"].extend(customParsing__default["default"]);
458
- var createOnChangeHandler = function (path, handleChange, saveFormat) { return function (time) {
452
+ var createOnChangeHandler = function (path, handleChange, saveFormat) { return function (time, textInputValue) {
459
453
  if (!time) {
460
454
  handleChange(path, undefined);
461
455
  return;
462
456
  }
463
457
  var result = dayjs__default["default"](time).format(saveFormat);
464
- handleChange(path, result === 'Invalid Date' ? undefined : result);
458
+ handleChange(path, result === 'Invalid Date' ? textInputValue : result);
465
459
  }; };
466
460
  var getData = function (data, saveFormat) {
467
461
  if (!data) {
@@ -473,6 +467,23 @@ var getData = function (data, saveFormat) {
473
467
  }
474
468
  return dayjsData;
475
469
  };
470
+ var ResettableTextField = function (_a) {
471
+ var rawValue = _a.rawValue, dayjsValueIsValid = _a.dayjsValueIsValid, valueInInputFormat = _a.valueInInputFormat, focused = _a.focused, inputProps = _a.inputProps, props = __rest(_a, ["rawValue", "dayjsValueIsValid", "valueInInputFormat", "focused", "inputProps"]);
472
+ var value = React.useRef({ lastInput: inputProps === null || inputProps === void 0 ? void 0 : inputProps.value, toShow: inputProps === null || inputProps === void 0 ? void 0 : inputProps.value });
473
+ if (!focused) {
474
+ if (!dayjsValueIsValid) {
475
+ value.current.toShow = typeof rawValue === 'string' || rawValue === null || rawValue === undefined ? rawValue : JSON.stringify(rawValue);
476
+ }
477
+ else {
478
+ value.current.toShow = valueInInputFormat;
479
+ }
480
+ }
481
+ if (focused && (inputProps === null || inputProps === void 0 ? void 0 : inputProps.value) !== value.current.lastInput) {
482
+ value.current.lastInput = inputProps === null || inputProps === void 0 ? void 0 : inputProps.value;
483
+ value.current.toShow = inputProps === null || inputProps === void 0 ? void 0 : inputProps.value;
484
+ }
485
+ return React__default["default"].createElement(material.TextField, __assign({}, props, { inputProps: __assign(__assign({}, inputProps), { value: value.current.toShow || '' }) }));
486
+ };
476
487
 
477
488
  var renderLayoutElements = function (elements, schema, path, enabled, renderers, cells) {
478
489
  return elements.map(function (child, index) { return (React__default["default"].createElement(material.Grid, { item: true, key: path + "-" + index, xs: true },
@@ -497,9 +508,9 @@ var withAjvProps = function (Component) {
497
508
  };
498
509
  };
499
510
 
500
- var eventToValue$2 = function (ev) { return ev.target.value; };
511
+ var eventToValue$3 = function (ev) { return ev.target.value; };
501
512
  var useDebouncedChange = function (handleChange, defaultValue, data, path, eventToValueFunction, timeout) {
502
- if (eventToValueFunction === void 0) { eventToValueFunction = eventToValue$2; }
513
+ if (eventToValueFunction === void 0) { eventToValueFunction = eventToValue$3; }
503
514
  if (timeout === void 0) { timeout = 300; }
504
515
  var _a = React.useState(data !== null && data !== void 0 ? data : defaultValue), input = _a[0], setInput = _a[1];
505
516
  React.useEffect(function () {
@@ -522,27 +533,39 @@ var useFocus = function () {
522
533
  return [focused, onFocus, onBlur];
523
534
  };
524
535
 
536
+ var i18nDefaults = {
537
+ 'enum.none': 'None'
538
+ };
539
+
540
+ var MuiSelect = React__default["default"].memo(function (props) {
541
+ var data = props.data, className = props.className, id = props.id, enabled = props.enabled, schema = props.schema, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config, t = props.t;
542
+ var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
543
+ var noneOptionLabel = React.useMemo(function () { return t('enum.none', i18nDefaults['enum.none'], { schema: schema, uischema: uischema, path: path }); }, [t, schema, uischema, path]);
544
+ return (React__default["default"].createElement(material.Select, { className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: function (ev) { return handleChange(path, ev.target.value || undefined); }, fullWidth: true, variant: 'standard' }, [React__default["default"].createElement(material.MenuItem, { value: '', key: 'jsonforms.enum.none' },
545
+ React__default["default"].createElement("em", null, noneOptionLabel))].concat(options.map(function (optionValue) { return (React__default["default"].createElement(material.MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label)); }))));
546
+ });
547
+
525
548
  var toNumber$1 = function (value) {
526
549
  return value === '' ? undefined : parseInt(value, 10);
527
550
  };
528
- var eventToValue$1 = function (ev) { return toNumber$1(ev.target.value); };
551
+ var eventToValue$2 = function (ev) { return toNumber$1(ev.target.value); };
529
552
  var MuiInputInteger = React__default["default"].memo(function (props) {
530
553
  var data = props.data, className = props.className, id = props.id, enabled = props.enabled, uischema = props.uischema, path = props.path, handleChange = props.handleChange, config = props.config;
531
554
  var inputProps = { step: '1' };
532
555
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
533
- var _a = useDebouncedChange(handleChange, '', data, path, eventToValue$1), inputValue = _a[0], onChange = _a[1];
556
+ var _a = useDebouncedChange(handleChange, '', data, path, eventToValue$2), inputValue = _a[0], onChange = _a[1];
534
557
  return (React__default["default"].createElement(material.Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
535
558
  });
536
559
 
537
560
  var toNumber = function (value) {
538
561
  return value === '' ? undefined : parseFloat(value);
539
562
  };
540
- var eventToValue = function (ev) { return toNumber(ev.target.value); };
563
+ var eventToValue$1 = function (ev) { return toNumber(ev.target.value); };
541
564
  var MuiInputNumber = React__default["default"].memo(function (props) {
542
565
  var data = props.data, className = props.className, id = props.id, enabled = props.enabled, uischema = props.uischema, path = props.path, handleChange = props.handleChange, config = props.config;
543
566
  var inputProps = { step: '0.1' };
544
567
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
545
- var _a = useDebouncedChange(handleChange, '', data, path, eventToValue), inputValue = _a[0], onChange = _a[1];
568
+ var _a = useDebouncedChange(handleChange, '', data, path, eventToValue$1), inputValue = _a[0], onChange = _a[1];
546
569
  return (React__default["default"].createElement(material.Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
547
570
  });
548
571
 
@@ -563,6 +586,7 @@ var MuiInputNumberFormat = React__default["default"].memo(function (props) {
563
586
  return (React__default["default"].createElement(material.Input, { type: 'text', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, multiline: appliedUiSchemaOptions.multi, fullWidth: !appliedUiSchemaOptions.trim || maxLength === undefined, inputProps: inputProps, error: !isValid }));
564
587
  });
565
588
 
589
+ var eventToValue = function (ev) { return ev.target.value === '' ? undefined : ev.target.value; };
566
590
  var MuiInputText = React__default["default"].memo(function (props) {
567
591
  var _a, _b, _c;
568
592
  var _d = React.useState(false), showAdornment = _d[0], setShowAdornment = _d[1];
@@ -580,7 +604,7 @@ var MuiInputText = React__default["default"].memo(function (props) {
580
604
  if (appliedUiSchemaOptions.trim && maxLength !== undefined) {
581
605
  inputProps.size = maxLength;
582
606
  }
583
- var _e = useDebouncedChange(handleChange, '', data, path), inputText = _e[0], onChange = _e[1], onClear = _e[2];
607
+ var _e = useDebouncedChange(handleChange, '', data, path, eventToValue), inputText = _e[0], onChange = _e[1], onClear = _e[2];
584
608
  var onPointerEnter = function () { return setShowAdornment(true); };
585
609
  var onPointerLeave = function () { return setShowAdornment(false); };
586
610
  var theme = material.useTheme();
@@ -644,12 +668,11 @@ var materialArrayControlTester = core.rankWith(3, core.or(core.isObjectArrayCont
644
668
 
645
669
  var materialLabelRendererTester = core.rankWith(1, core.uiTypeIs('Label'));
646
670
  var MaterialLabelRenderer = function (_a) {
647
- var uischema = _a.uischema, visible = _a.visible;
648
- var labelElement = uischema;
671
+ var text = _a.text, visible = _a.visible;
649
672
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
650
- React__default["default"].createElement(material.Typography, { variant: 'h6' }, labelElement.text !== undefined && labelElement.text !== null && labelElement.text)));
673
+ React__default["default"].createElement(material.Typography, { variant: 'h6' }, text)));
651
674
  };
652
- var MaterialLabelRenderer$1 = react.withJsonFormsLayoutProps(MaterialLabelRenderer);
675
+ var MaterialLabelRenderer$1 = react.withJsonFormsLabelProps(MaterialLabelRenderer);
653
676
 
654
677
  var ArrayLayoutToolbar = React__default["default"].memo(function (_a) {
655
678
  var label = _a.label, errors = _a.errors, addItem = _a.addItem, path = _a.path, createDefault = _a.createDefault;
@@ -755,24 +778,40 @@ var MaterialInputControl = function (props) {
755
778
 
756
779
  var MuiAutocomplete = function (props) {
757
780
  var _a;
758
- var data = props.data, className = props.className, id = props.id, enabled = props.enabled, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config, getOptionLabel = props.getOptionLabel, renderOption = props.renderOption, filterOptions = props.filterOptions;
781
+ var description = props.description, errors = props.errors, visible = props.visible, required = props.required, label = props.label, data = props.data, className = props.className, id = props.id, enabled = props.enabled, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config, getOptionLabel = props.getOptionLabel, renderOption = props.renderOption, filterOptions = props.filterOptions, isValid = props.isValid;
759
782
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
760
783
  var _b = React__default["default"].useState(data !== null && data !== void 0 ? data : ''), inputValue = _b[0], setInputValue = _b[1];
784
+ var _c = useFocus(), focused = _c[0], onFocus = _c[1], onBlur = _c[2];
761
785
  var findOption = (_a = options.find(function (o) { return o.value === data; })) !== null && _a !== void 0 ? _a : null;
762
- return (React__default["default"].createElement(material.Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: function (_event, newValue) {
763
- handleChange(path, newValue === null || newValue === void 0 ? void 0 : newValue.value);
764
- }, inputValue: inputValue, onInputChange: function (_event, newInputValue) {
765
- setInputValue(newInputValue);
766
- }, autoHighlight: true, autoSelect: true, autoComplete: true, fullWidth: true, options: options, getOptionLabel: getOptionLabel || (function (option) { return option === null || option === void 0 ? void 0 : option.label; }), style: { marginTop: 16 }, renderInput: function (params) { return (React__default["default"].createElement(material.Input, { style: { width: '100%' }, type: 'text', inputProps: params.inputProps, inputRef: params.InputProps.ref, autoFocus: appliedUiSchemaOptions.focus, disabled: !enabled })); }, renderOption: renderOption, filterOptions: filterOptions }));
786
+ var showDescription = !core.isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
787
+ var firstFormHelperText = showDescription
788
+ ? description
789
+ : !isValid
790
+ ? errors
791
+ : null;
792
+ var secondFormHelperText = showDescription && !isValid ? errors : null;
793
+ return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
794
+ React__default["default"].createElement(material.Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: function (_event, newValue) {
795
+ handleChange(path, newValue === null || newValue === void 0 ? void 0 : newValue.value);
796
+ }, inputValue: inputValue, onInputChange: function (_event, newInputValue) {
797
+ setInputValue(newInputValue);
798
+ }, autoHighlight: true, autoSelect: true, autoComplete: true, fullWidth: true, options: options, getOptionLabel: getOptionLabel || (function (option) { return option === null || option === void 0 ? void 0 : option.label; }), freeSolo: false, renderInput: function (params) {
799
+ return (React__default["default"].createElement(material.TextField, __assign({ label: label, variant: 'standard', type: 'text', inputProps: params.inputProps, inputRef: params.InputProps.ref, autoFocus: appliedUiSchemaOptions.focus, disabled: !enabled }, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, focused: focused })));
800
+ }, renderOption: renderOption, filterOptions: filterOptions }),
801
+ React__default["default"].createElement(material.FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
802
+ React__default["default"].createElement(material.FormHelperText, { error: !isValid }, secondFormHelperText)));
767
803
  };
768
804
 
769
805
  var MaterialEnumControl = function (props) {
770
- var config = props.config, uischema = props.uischema;
806
+ var config = props.config, uischema = props.uischema, errors = props.errors;
771
807
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
772
- return (React__default["default"].createElement(MaterialInputControl, __assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
808
+ var isValid = errors.length === 0;
809
+ return (appliedUiSchemaOptions.autocomplete === false ?
810
+ React__default["default"].createElement(MaterialInputControl, __assign({}, props, { input: MuiSelect })) :
811
+ React__default["default"].createElement(MuiAutocomplete, __assign({}, props, { isValid: isValid })));
773
812
  };
774
813
  var materialEnumControlTester = core.rankWith(2, core.isEnumControl);
775
- var MaterialEnumControl$1 = react.withJsonFormsEnumProps(MaterialEnumControl);
814
+ var MaterialEnumControl$1 = react.withJsonFormsEnumProps(react.withTranslateProps(React__default["default"].memo(MaterialEnumControl)), false);
776
815
 
777
816
  var MaterialNativeControl = function (props) {
778
817
  var _a;
@@ -790,14 +829,15 @@ var materialNativeControlTester = core.rankWith(2, core.or(core.isDateControl, c
790
829
  var MaterialNativeControl$1 = react.withJsonFormsControlProps(MaterialNativeControl);
791
830
 
792
831
  var MaterialDateControl = function (props) {
793
- var _a, _b;
794
- var _c = useFocus(), focused = _c[0], onFocus = _c[1], onBlur = _c[2];
832
+ var _a, _b, _c;
833
+ var _d = useFocus(), focused = _d[0], onFocus = _d[1], onBlur = _d[2];
795
834
  var description = props.description, id = props.id, errors = props.errors, label = props.label, uischema = props.uischema, visible = props.visible, enabled = props.enabled, required = props.required, path = props.path, handleChange = props.handleChange, data = props.data, config = props.config;
796
835
  var isValid = errors.length === 0;
797
836
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
798
837
  var showDescription = !core.isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
799
838
  var format = (_a = appliedUiSchemaOptions.dateFormat) !== null && _a !== void 0 ? _a : 'YYYY-MM-DD';
800
839
  var saveFormat = (_b = appliedUiSchemaOptions.dateSaveFormat) !== null && _b !== void 0 ? _b : 'YYYY-MM-DD';
840
+ var views = (_c = appliedUiSchemaOptions.views) !== null && _c !== void 0 ? _c : ['year', 'day'];
801
841
  var firstFormHelperText = showDescription
802
842
  ? description
803
843
  : !isValid
@@ -805,9 +845,11 @@ var MaterialDateControl = function (props) {
805
845
  : null;
806
846
  var secondFormHelperText = showDescription && !isValid ? errors : null;
807
847
  var onChange = React.useMemo(function () { return createOnChangeHandler(path, handleChange, saveFormat); }, [path, handleChange, saveFormat]);
848
+ var value = getData(data, saveFormat);
849
+ var valueInInputFormat = value ? value.format(format) : '';
808
850
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
809
851
  React__default["default"].createElement(lab.LocalizationProvider, { dateAdapter: AdapterDayjs__default["default"] },
810
- React__default["default"].createElement(lab.DatePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(material.TextField, __assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
852
+ React__default["default"].createElement(lab.DatePicker, { label: label, value: value, clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, views: views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(ResettableTextField, __assign({}, params, { rawValue: data, dayjsValueIsValid: value !== null, valueInInputFormat: valueInInputFormat, focused: focused, id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
811
853
  React__default["default"].createElement(material.FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
812
854
  React__default["default"].createElement(material.FormHelperText, { error: !isValid }, secondFormHelperText))));
813
855
  };
@@ -815,14 +857,15 @@ var materialDateControlTester = core.rankWith(4, core.isDateControl);
815
857
  var MaterialDateControl$1 = react.withJsonFormsControlProps(MaterialDateControl);
816
858
 
817
859
  var MaterialDateTimeControl = function (props) {
818
- var _a, _b;
819
- var _c = useFocus(), focused = _c[0], onFocus = _c[1], onBlur = _c[2];
860
+ var _a, _b, _c;
861
+ var _d = useFocus(), focused = _d[0], onFocus = _d[1], onBlur = _d[2];
820
862
  var id = props.id, description = props.description, errors = props.errors, label = props.label, uischema = props.uischema, visible = props.visible, enabled = props.enabled, required = props.required, path = props.path, handleChange = props.handleChange, data = props.data, config = props.config;
821
863
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
822
864
  var isValid = errors.length === 0;
823
865
  var showDescription = !core.isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
824
866
  var format = (_a = appliedUiSchemaOptions.dateTimeFormat) !== null && _a !== void 0 ? _a : 'YYYY-MM-DD HH:mm';
825
867
  var saveFormat = (_b = appliedUiSchemaOptions.dateTimeSaveFormat) !== null && _b !== void 0 ? _b : undefined;
868
+ var views = (_c = appliedUiSchemaOptions.views) !== null && _c !== void 0 ? _c : ['year', 'day', 'hours', 'minutes'];
826
869
  var firstFormHelperText = showDescription
827
870
  ? description
828
871
  : !isValid
@@ -830,9 +873,11 @@ var MaterialDateTimeControl = function (props) {
830
873
  : null;
831
874
  var secondFormHelperText = showDescription && !isValid ? errors : null;
832
875
  var onChange = React.useMemo(function () { return createOnChangeHandler(path, handleChange, saveFormat); }, [path, handleChange, saveFormat]);
876
+ var value = getData(data, saveFormat);
877
+ var valueInInputFormat = value ? value.format(format) : '';
833
878
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
834
879
  React__default["default"].createElement(lab.LocalizationProvider, { dateAdapter: AdapterDayjs__default["default"] },
835
- React__default["default"].createElement(lab.DateTimePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(material.TextField, __assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
880
+ React__default["default"].createElement(lab.DateTimePicker, { label: label, value: value, clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(ResettableTextField, __assign({}, params, { rawValue: data, dayjsValueIsValid: value !== null, valueInInputFormat: valueInInputFormat, focused: focused, id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
836
881
  React__default["default"].createElement(material.FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
837
882
  React__default["default"].createElement(material.FormHelperText, { error: !isValid }, secondFormHelperText))));
838
883
  };
@@ -840,14 +885,15 @@ var materialDateTimeControlTester = core.rankWith(2, core.isDateTimeControl);
840
885
  var MaterialDateTimeControl$1 = react.withJsonFormsControlProps(MaterialDateTimeControl);
841
886
 
842
887
  var MaterialTimeControl = function (props) {
843
- var _a, _b;
844
- var _c = useFocus(), focused = _c[0], onFocus = _c[1], onBlur = _c[2];
888
+ var _a, _b, _c;
889
+ var _d = useFocus(), focused = _d[0], onFocus = _d[1], onBlur = _d[2];
845
890
  var id = props.id, description = props.description, errors = props.errors, label = props.label, uischema = props.uischema, visible = props.visible, enabled = props.enabled, required = props.required, path = props.path, handleChange = props.handleChange, data = props.data, config = props.config;
846
891
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
847
892
  var isValid = errors.length === 0;
848
893
  var showDescription = !core.isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
849
894
  var format = (_a = appliedUiSchemaOptions.timeFormat) !== null && _a !== void 0 ? _a : 'HH:mm';
850
895
  var saveFormat = (_b = appliedUiSchemaOptions.timeSaveFormat) !== null && _b !== void 0 ? _b : 'HH:mm:ss';
896
+ var views = (_c = appliedUiSchemaOptions.views) !== null && _c !== void 0 ? _c : ['hours', 'minutes'];
851
897
  var firstFormHelperText = showDescription
852
898
  ? description
853
899
  : !isValid
@@ -855,9 +901,11 @@ var MaterialTimeControl = function (props) {
855
901
  : null;
856
902
  var secondFormHelperText = showDescription && !isValid ? errors : null;
857
903
  var onChange = React.useMemo(function () { return createOnChangeHandler(path, handleChange, saveFormat); }, [path, handleChange, saveFormat]);
904
+ var value = getData(data, saveFormat);
905
+ var valueInInputFormat = value ? value.format(format) : '';
858
906
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
859
907
  React__default["default"].createElement(lab.LocalizationProvider, { dateAdapter: AdapterDayjs__default["default"] },
860
- React__default["default"].createElement(lab.TimePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(material.TextField, __assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
908
+ React__default["default"].createElement(lab.TimePicker, { label: label, value: value, clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: function (params) { return (React__default["default"].createElement(ResettableTextField, __assign({}, params, { rawValue: data, dayjsValueIsValid: value !== null, valueInInputFormat: valueInInputFormat, focused: focused, id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: __assign(__assign({}, params.inputProps), { type: 'text' }), InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))); } }),
861
909
  React__default["default"].createElement(material.FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
862
910
  React__default["default"].createElement(material.FormHelperText, { error: !isValid }, secondFormHelperText))));
863
911
  };
@@ -980,12 +1028,15 @@ var materialAnyOfStringOrEnumControlTester = core.rankWith(5, simpleAnyOf);
980
1028
  var MaterialAnyOfStringOrEnumControl$1 = react.withJsonFormsControlProps(MaterialAnyOfStringOrEnumControl);
981
1029
 
982
1030
  var MaterialOneOfEnumControl = function (props) {
983
- var config = props.config, uischema = props.uischema;
1031
+ var config = props.config, uischema = props.uischema, errors = props.errors;
984
1032
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
985
- return (React__default["default"].createElement(MaterialInputControl, __assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
1033
+ var isValid = errors.length === 0;
1034
+ return (appliedUiSchemaOptions.autocomplete === false ?
1035
+ React__default["default"].createElement(MaterialInputControl, __assign({}, props, { input: MuiSelect })) :
1036
+ React__default["default"].createElement(MuiAutocomplete, __assign({}, props, { isValid: isValid })));
986
1037
  };
987
1038
  var materialOneOfEnumControlTester = core.rankWith(5, core.isOneOfEnumControl);
988
- var MaterialOneOfEnumControl$1 = react.withJsonFormsOneOfEnumProps(MaterialOneOfEnumControl);
1039
+ var MaterialOneOfEnumControl$1 = react.withJsonFormsOneOfEnumProps(react.withTranslateProps(React__default["default"].memo(MaterialOneOfEnumControl)), false);
989
1040
 
990
1041
  var MaterialOneOfRadioGroupControl = function (props) {
991
1042
  return React__default["default"].createElement(MaterialRadioGroup, __assign({}, props));
@@ -1014,18 +1065,18 @@ var Unwrapped = {
1014
1065
  var groupTester = core.rankWith(1, core.uiTypeIs('Group'));
1015
1066
  var style = { marginBottom: '10px' };
1016
1067
  var GroupComponent = React__default["default"].memo(function (_a) {
1017
- var visible = _a.visible, enabled = _a.enabled, uischema = _a.uischema, props = __rest(_a, ["visible", "enabled", "uischema"]);
1068
+ var visible = _a.visible, enabled = _a.enabled, uischema = _a.uischema, label = _a.label, props = __rest(_a, ["visible", "enabled", "uischema", "label"]);
1018
1069
  var groupLayout = uischema;
1019
1070
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1020
1071
  React__default["default"].createElement(material.Card, { style: style },
1021
- !isEmpty__default["default"](groupLayout.label) && (React__default["default"].createElement(material.CardHeader, { title: groupLayout.label })),
1072
+ !isEmpty__default["default"](label) && (React__default["default"].createElement(material.CardHeader, { title: label })),
1022
1073
  React__default["default"].createElement(material.CardContent, null,
1023
1074
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, props, { visible: visible, enabled: enabled, elements: groupLayout.elements }))))));
1024
1075
  });
1025
1076
  var MaterializedGroupLayoutRenderer = function (_a) {
1026
- var uischema = _a.uischema, schema = _a.schema, path = _a.path, visible = _a.visible, enabled = _a.enabled, renderers = _a.renderers, cells = _a.cells, direction = _a.direction;
1077
+ var uischema = _a.uischema, schema = _a.schema, path = _a.path, visible = _a.visible, enabled = _a.enabled, renderers = _a.renderers, cells = _a.cells, direction = _a.direction, label = _a.label;
1027
1078
  var groupLayout = uischema;
1028
- return (React__default["default"].createElement(GroupComponent, { elements: groupLayout.elements, schema: schema, path: path, direction: direction, visible: visible, enabled: enabled, uischema: uischema, renderers: renderers, cells: cells }));
1079
+ return (React__default["default"].createElement(GroupComponent, { elements: groupLayout.elements, schema: schema, path: path, direction: direction, visible: visible, enabled: enabled, uischema: uischema, renderers: renderers, cells: cells, label: label }));
1029
1080
  };
1030
1081
  var MaterialGroupLayout = react.withJsonFormsLayoutProps(MaterializedGroupLayoutRenderer);
1031
1082
  var materialGroupTester = core.withIncreasedRank(1, groupTester);
@@ -1069,12 +1120,12 @@ var isSingleLevelCategorization = core.and(core.uiTypeIs('Categorization'), func
1069
1120
  });
1070
1121
  var materialCategorizationTester = core.rankWith(1, isSingleLevelCategorization);
1071
1122
  var MaterialCategorizationLayoutRenderer = function (props) {
1072
- var data = props.data, path = props.path, renderers = props.renderers, cells = props.cells, schema = props.schema, uischema = props.uischema, visible = props.visible, enabled = props.enabled, selected = props.selected, onChange = props.onChange, ajv = props.ajv;
1123
+ var data = props.data, path = props.path, renderers = props.renderers, cells = props.cells, schema = props.schema, uischema = props.uischema, visible = props.visible, enabled = props.enabled, selected = props.selected, onChange = props.onChange, ajv = props.ajv, t = props.t;
1073
1124
  var categorization = uischema;
1074
1125
  var _a = React.useState(selected !== null && selected !== void 0 ? selected : 0), activeCategory = _a[0], setActiveCategory = _a[1];
1075
- var categories = categorization.elements.filter(function (category) {
1126
+ var categories = React.useMemo(function () { return categorization.elements.filter(function (category) {
1076
1127
  return core.isVisible(category, data, undefined, ajv);
1077
- });
1128
+ }); }, [categorization, data, ajv]);
1078
1129
  var childProps = {
1079
1130
  elements: categories[activeCategory].elements,
1080
1131
  schema: schema,
@@ -1091,13 +1142,18 @@ var MaterialCategorizationLayoutRenderer = function (props) {
1091
1142
  }
1092
1143
  setActiveCategory(value);
1093
1144
  };
1145
+ var tabLabels = React.useMemo(function () {
1146
+ return categories.map(function (e) {
1147
+ return core.deriveLabelForUISchemaElement(e, t);
1148
+ });
1149
+ }, [categories, t]);
1094
1150
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1095
1151
  React__default["default"].createElement(material.AppBar, { position: 'static' },
1096
- React__default["default"].createElement(material.Tabs, { value: activeCategory, onChange: onTabChange, textColor: 'inherit', indicatorColor: 'secondary', variant: 'scrollable' }, categories.map(function (e, idx) { return (React__default["default"].createElement(material.Tab, { key: idx, label: e.label })); }))),
1152
+ React__default["default"].createElement(material.Tabs, { value: activeCategory, onChange: onTabChange, textColor: 'inherit', indicatorColor: 'secondary', variant: 'scrollable' }, categories.map(function (_, idx) { return (React__default["default"].createElement(material.Tab, { key: idx, label: tabLabels[idx] })); }))),
1097
1153
  React__default["default"].createElement("div", { style: { marginTop: '0.5em' } },
1098
1154
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, childProps)))));
1099
1155
  };
1100
- var MaterialCategorizationLayout = react.withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationLayoutRenderer));
1156
+ var MaterialCategorizationLayout = withAjvProps(react.withTranslateProps(react.withJsonFormsLayoutProps(MaterialCategorizationLayoutRenderer)));
1101
1157
 
1102
1158
  var iconStyle = { float: 'right' };
1103
1159
  var ExpandPanelRendererComponent = function (props) {
@@ -1112,6 +1168,7 @@ var ExpandPanelRendererComponent = function (props) {
1112
1168
  return core.findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema);
1113
1169
  }, [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
1114
1170
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
1171
+ var showSortButtons = appliedUiSchemaOptions.showSortButtons || appliedUiSchemaOptions.showArrayLayoutSortButtons;
1115
1172
  return (React__default["default"].createElement(material.Accordion, { "aria-labelledby": labelHtmlId, expanded: expanded, onChange: handleExpansion(childPath) },
1116
1173
  React__default["default"].createElement(material.AccordionSummary, { expandIcon: React__default["default"].createElement(ExpandMoreIcon__default["default"], null) },
1117
1174
  React__default["default"].createElement(material.Grid, { container: true, alignItems: 'center' },
@@ -1125,7 +1182,7 @@ var ExpandPanelRendererComponent = function (props) {
1125
1182
  React__default["default"].createElement(material.Grid, { container: true, justifyContent: 'flex-end' },
1126
1183
  React__default["default"].createElement(material.Grid, { item: true },
1127
1184
  React__default["default"].createElement(material.Grid, { container: true, direction: 'row', justifyContent: 'center', alignItems: 'center' },
1128
- appliedUiSchemaOptions.showSortButtons ? (React__default["default"].createElement(React.Fragment, null,
1185
+ showSortButtons ? (React__default["default"].createElement(React.Fragment, null,
1129
1186
  React__default["default"].createElement(material.Grid, { item: true },
1130
1187
  React__default["default"].createElement(material.IconButton, { onClick: moveUp(path, index), style: iconStyle, disabled: !enableMoveUp, "aria-label": "Move up", size: 'large' },
1131
1188
  React__default["default"].createElement(ArrowUpward__default["default"], null))),
@@ -1201,12 +1258,12 @@ var MaterialArrayLayoutComponent = function (props) {
1201
1258
  var MaterialArrayLayout$1 = React__default["default"].memo(MaterialArrayLayoutComponent);
1202
1259
 
1203
1260
  var MaterialArrayLayoutRenderer = function (_a) {
1204
- var visible = _a.visible, enabled = _a.enabled, id = _a.id, uischema = _a.uischema, schema = _a.schema, label = _a.label, rootSchema = _a.rootSchema, renderers = _a.renderers, cells = _a.cells, data = _a.data, path = _a.path, errors = _a.errors, uischemas = _a.uischemas, addItem = _a.addItem;
1261
+ var visible = _a.visible, addItem = _a.addItem, props = __rest(_a, ["visible", "addItem"]);
1205
1262
  var addItemCb = React.useCallback(function (p, value) { return addItem(p, value); }, [
1206
1263
  addItem
1207
1264
  ]);
1208
1265
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1209
- React__default["default"].createElement(MaterialArrayLayout$1, { label: label, uischema: uischema, schema: schema, id: id, rootSchema: rootSchema, errors: errors, enabled: enabled, visible: visible, data: data, path: path, addItem: addItemCb, renderers: renderers, cells: cells, uischemas: uischemas })));
1266
+ React__default["default"].createElement(MaterialArrayLayout$1, __assign({ visible: visible, addItem: addItemCb }, props))));
1210
1267
  };
1211
1268
  var materialArrayLayoutTester = core.rankWith(4, core.isObjectArrayWithNesting);
1212
1269
  var MaterialArrayLayout = react.withJsonFormsArrayLayoutProps(MaterialArrayLayoutRenderer);
@@ -1233,7 +1290,7 @@ var MaterialDateCell$1 = react.withJsonFormsCellProps(MaterialDateCell);
1233
1290
 
1234
1291
  var MaterialEnumCell = function (props) { return (React__default["default"].createElement(MuiSelect, __assign({}, props))); };
1235
1292
  var materialEnumCellTester = core.rankWith(2, core.isEnumControl);
1236
- var MaterialEnumCell$1 = react.withJsonFormsEnumCellProps(MaterialEnumCell);
1293
+ var MaterialEnumCell$1 = react.withJsonFormsEnumCellProps(react.withTranslateProps(React__default["default"].memo(MaterialEnumCell)), false);
1237
1294
 
1238
1295
  var MaterialIntegerCell = function (props) { return (React__default["default"].createElement(MuiInputInteger, __assign({}, props))); };
1239
1296
  var materialIntegerCellTester = core.rankWith(2, core.isIntegerControl);
@@ -1249,7 +1306,7 @@ var MaterialNumberFormatCell$1 = react.withJsonFormsCellProps(MaterialNumberForm
1249
1306
 
1250
1307
  var MaterialOneOfEnumCell = function (props) { return (React__default["default"].createElement(MuiSelect, __assign({}, props))); };
1251
1308
  var materialOneOfEnumCellTester = core.rankWith(2, core.isOneOfEnumControl);
1252
- var MaterialOneOfEnumCell$1 = react.withJsonFormsOneOfEnumCellProps(MaterialOneOfEnumCell);
1309
+ var MaterialOneOfEnumCell$1 = react.withJsonFormsOneOfEnumCellProps(react.withTranslateProps(React__default["default"].memo(MaterialOneOfEnumCell)), false);
1253
1310
 
1254
1311
  var MaterialTextCell = function (props) { return (React__default["default"].createElement(MuiInputText, __assign({}, props))); };
1255
1312
  var materialTextCellTester = core.rankWith(1, core.isStringControl);
@@ -1278,7 +1335,7 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1278
1335
  var handleStep = function (step) {
1279
1336
  setActiveCategory(step);
1280
1337
  };
1281
- var data = props.data, path = props.path, renderers = props.renderers, schema = props.schema, uischema = props.uischema, visible = props.visible, cells = props.cells, config = props.config, ajv = props.ajv;
1338
+ var data = props.data, path = props.path, renderers = props.renderers, schema = props.schema, uischema = props.uischema, visible = props.visible, cells = props.cells, config = props.config, ajv = props.ajv, t = props.t;
1282
1339
  var categorization = uischema;
1283
1340
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
1284
1341
  var buttonWrapperStyle = {
@@ -1292,9 +1349,9 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1292
1349
  var buttonStyle = {
1293
1350
  marginRight: '1em'
1294
1351
  };
1295
- var categories = categorization.elements.filter(function (category) {
1352
+ var categories = React.useMemo(function () { return categorization.elements.filter(function (category) {
1296
1353
  return core.isVisible(category, data, undefined, ajv);
1297
- });
1354
+ }); }, [categorization, data, ajv]);
1298
1355
  var childProps = {
1299
1356
  elements: categories[activeCategory].elements,
1300
1357
  schema: schema,
@@ -1304,16 +1361,21 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1304
1361
  renderers: renderers,
1305
1362
  cells: cells
1306
1363
  };
1364
+ var tabLabels = React.useMemo(function () {
1365
+ return categories.map(function (e) {
1366
+ return core.deriveLabelForUISchemaElement(e, t);
1367
+ });
1368
+ }, [categories, t]);
1307
1369
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1308
- React__default["default"].createElement(material.Stepper, { activeStep: activeCategory, nonLinear: true }, categories.map(function (e, idx) { return (React__default["default"].createElement(material.Step, { key: e.label },
1309
- React__default["default"].createElement(material.StepButton, { onClick: function () { return handleStep(idx); } }, e.label))); })),
1370
+ React__default["default"].createElement(material.Stepper, { activeStep: activeCategory, nonLinear: true }, categories.map(function (_, idx) { return (React__default["default"].createElement(material.Step, { key: tabLabels[idx] },
1371
+ React__default["default"].createElement(material.StepButton, { onClick: function () { return handleStep(idx); } }, tabLabels[idx]))); })),
1310
1372
  React__default["default"].createElement("div", null,
1311
1373
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, childProps))),
1312
1374
  !!appliedUiSchemaOptions.showNavButtons ? (React__default["default"].createElement("div", { style: buttonWrapperStyle },
1313
1375
  React__default["default"].createElement(material.Button, { style: buttonNextStyle, variant: "contained", color: "primary", disabled: activeCategory >= categories.length - 1, onClick: function () { return handleStep(activeCategory + 1); } }, "Next"),
1314
1376
  React__default["default"].createElement(material.Button, { style: buttonStyle, color: "secondary", variant: "contained", disabled: activeCategory <= 0, onClick: function () { return handleStep(activeCategory - 1); } }, "Previous"))) : (React__default["default"].createElement(React__default["default"].Fragment, null))));
1315
1377
  };
1316
- var MaterialCategorizationStepperLayout = react.withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationStepperLayoutRenderer));
1378
+ var MaterialCategorizationStepperLayout = withAjvProps(react.withTranslateProps(react.withJsonFormsLayoutProps(MaterialCategorizationStepperLayoutRenderer)));
1317
1379
 
1318
1380
  var materialRenderers = [
1319
1381
  {
@@ -1432,9 +1494,11 @@ exports.MuiInputNumberFormat = MuiInputNumberFormat;
1432
1494
  exports.MuiInputText = MuiInputText;
1433
1495
  exports.MuiInputTime = MuiInputTime;
1434
1496
  exports.MuiSelect = MuiSelect;
1497
+ exports.ResettableTextField = ResettableTextField;
1435
1498
  exports.Unwrapped = Unwrapped;
1436
1499
  exports.createOnChangeHandler = createOnChangeHandler;
1437
1500
  exports.getData = getData;
1501
+ exports.i18nDefaults = i18nDefaults;
1438
1502
  exports.materialAllOfControlTester = materialAllOfControlTester;
1439
1503
  exports.materialAnyOfControlTester = materialAnyOfControlTester;
1440
1504
  exports.materialAnyOfStringOrEnumControlTester = materialAnyOfStringOrEnumControlTester;