@jsonforms/material-renderers 3.0.0-beta.5 → 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 (53) hide show
  1. package/docs/assets/js/search.json +1 -1
  2. package/docs/globals.html +77 -31
  3. package/docs/index.html +6 -0
  4. package/docs/interfaces/categorizationstate.html +1 -1
  5. package/docs/interfaces/categorizationstepperstate.html +1 -1
  6. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +49 -4
  7. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +46 -1
  8. package/docs/interfaces/materiallabelablelayoutrendererprops.html +328 -0
  9. package/docs/interfaces/materiallayoutrendererprops.html +5 -0
  10. package/docs/interfaces/withoptionlabel.html +3 -3
  11. package/lib/additional/MaterialLabelRenderer.d.ts +3 -3
  12. package/lib/cells/MaterialEnumCell.d.ts +2 -1
  13. package/lib/cells/MaterialOneOfEnumCell.d.ts +2 -1
  14. package/lib/controls/MaterialEnumControl.d.ts +2 -1
  15. package/lib/controls/MaterialOneOfEnumControl.d.ts +2 -1
  16. package/lib/controls/index.d.ts +2 -2
  17. package/lib/jsonforms-react-material.cjs.js +82 -46
  18. package/lib/jsonforms-react-material.cjs.js.map +1 -1
  19. package/lib/jsonforms-react-material.esm.js +79 -48
  20. package/lib/jsonforms-react-material.esm.js.map +1 -1
  21. package/lib/layouts/MaterialCategorizationLayout.d.ts +4 -3
  22. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +4 -3
  23. package/lib/layouts/MaterialGroupLayout.d.ts +2 -2
  24. package/lib/layouts/MaterialHorizontalLayout.d.ts +1 -1
  25. package/lib/layouts/MaterialVerticalLayout.d.ts +1 -1
  26. package/lib/mui-controls/MuiAutocomplete.d.ts +2 -2
  27. package/lib/mui-controls/MuiSelect.d.ts +2 -1
  28. package/lib/util/i18nDefaults.d.ts +3 -0
  29. package/lib/util/index.d.ts +1 -0
  30. package/lib/util/layout.d.ts +3 -0
  31. package/package.json +6 -6
  32. package/src/additional/MaterialLabelRenderer.tsx +5 -7
  33. package/src/cells/MaterialEnumCell.tsx +4 -3
  34. package/src/cells/MaterialOneOfEnumCell.tsx +3 -3
  35. package/src/controls/MaterialEnumControl.tsx +12 -5
  36. package/src/controls/MaterialOneOfEnumControl.tsx +13 -5
  37. package/src/layouts/MaterialCategorizationLayout.tsx +18 -9
  38. package/src/layouts/MaterialCategorizationStepperLayout.tsx +19 -12
  39. package/src/layouts/MaterialGroupLayout.tsx +6 -5
  40. package/src/mui-controls/MuiAutocomplete.tsx +81 -38
  41. package/src/mui-controls/MuiInputText.tsx +4 -1
  42. package/src/mui-controls/MuiSelect.tsx +10 -5
  43. package/src/util/i18nDefaults.ts +3 -0
  44. package/src/util/index.ts +1 -0
  45. package/src/util/layout.tsx +4 -0
  46. package/stats.html +1 -1
  47. package/test/renderers/MaterialArrayLayout.test.tsx +4 -4
  48. package/test/renderers/MaterialCategorizationLayout.test.tsx +17 -7
  49. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +21 -11
  50. package/test/renderers/MaterialGroupLayout.test.tsx +4 -1
  51. package/test/renderers/MaterialInputControl.test.tsx +4 -0
  52. package/test/renderers/MaterialLabelRenderer.test.tsx +2 -1
  53. package/test/renderers/util.ts +5 -0
@@ -448,12 +448,6 @@ 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
452
  var createOnChangeHandler = function (path, handleChange, saveFormat) { return function (time, textInputValue) {
459
453
  if (!time) {
@@ -514,9 +508,9 @@ var withAjvProps = function (Component) {
514
508
  };
515
509
  };
516
510
 
517
- var eventToValue$2 = function (ev) { return ev.target.value; };
511
+ var eventToValue$3 = function (ev) { return ev.target.value; };
518
512
  var useDebouncedChange = function (handleChange, defaultValue, data, path, eventToValueFunction, timeout) {
519
- if (eventToValueFunction === void 0) { eventToValueFunction = eventToValue$2; }
513
+ if (eventToValueFunction === void 0) { eventToValueFunction = eventToValue$3; }
520
514
  if (timeout === void 0) { timeout = 300; }
521
515
  var _a = React.useState(data !== null && data !== void 0 ? data : defaultValue), input = _a[0], setInput = _a[1];
522
516
  React.useEffect(function () {
@@ -539,27 +533,39 @@ var useFocus = function () {
539
533
  return [focused, onFocus, onBlur];
540
534
  };
541
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
+
542
548
  var toNumber$1 = function (value) {
543
549
  return value === '' ? undefined : parseInt(value, 10);
544
550
  };
545
- var eventToValue$1 = function (ev) { return toNumber$1(ev.target.value); };
551
+ var eventToValue$2 = function (ev) { return toNumber$1(ev.target.value); };
546
552
  var MuiInputInteger = React__default["default"].memo(function (props) {
547
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;
548
554
  var inputProps = { step: '1' };
549
555
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
550
- 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];
551
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 }));
552
558
  });
553
559
 
554
560
  var toNumber = function (value) {
555
561
  return value === '' ? undefined : parseFloat(value);
556
562
  };
557
- var eventToValue = function (ev) { return toNumber(ev.target.value); };
563
+ var eventToValue$1 = function (ev) { return toNumber(ev.target.value); };
558
564
  var MuiInputNumber = React__default["default"].memo(function (props) {
559
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;
560
566
  var inputProps = { step: '0.1' };
561
567
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
562
- 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];
563
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 }));
564
570
  });
565
571
 
@@ -580,6 +586,7 @@ var MuiInputNumberFormat = React__default["default"].memo(function (props) {
580
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 }));
581
587
  });
582
588
 
589
+ var eventToValue = function (ev) { return ev.target.value === '' ? undefined : ev.target.value; };
583
590
  var MuiInputText = React__default["default"].memo(function (props) {
584
591
  var _a, _b, _c;
585
592
  var _d = React.useState(false), showAdornment = _d[0], setShowAdornment = _d[1];
@@ -597,7 +604,7 @@ var MuiInputText = React__default["default"].memo(function (props) {
597
604
  if (appliedUiSchemaOptions.trim && maxLength !== undefined) {
598
605
  inputProps.size = maxLength;
599
606
  }
600
- 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];
601
608
  var onPointerEnter = function () { return setShowAdornment(true); };
602
609
  var onPointerLeave = function () { return setShowAdornment(false); };
603
610
  var theme = material.useTheme();
@@ -661,12 +668,11 @@ var materialArrayControlTester = core.rankWith(3, core.or(core.isObjectArrayCont
661
668
 
662
669
  var materialLabelRendererTester = core.rankWith(1, core.uiTypeIs('Label'));
663
670
  var MaterialLabelRenderer = function (_a) {
664
- var uischema = _a.uischema, visible = _a.visible;
665
- var labelElement = uischema;
671
+ var text = _a.text, visible = _a.visible;
666
672
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
667
- 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)));
668
674
  };
669
- var MaterialLabelRenderer$1 = react.withJsonFormsLayoutProps(MaterialLabelRenderer);
675
+ var MaterialLabelRenderer$1 = react.withJsonFormsLabelProps(MaterialLabelRenderer);
670
676
 
671
677
  var ArrayLayoutToolbar = React__default["default"].memo(function (_a) {
672
678
  var label = _a.label, errors = _a.errors, addItem = _a.addItem, path = _a.path, createDefault = _a.createDefault;
@@ -772,24 +778,40 @@ var MaterialInputControl = function (props) {
772
778
 
773
779
  var MuiAutocomplete = function (props) {
774
780
  var _a;
775
- 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;
776
782
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
777
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];
778
785
  var findOption = (_a = options.find(function (o) { return o.value === data; })) !== null && _a !== void 0 ? _a : null;
779
- return (React__default["default"].createElement(material.Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: function (_event, newValue) {
780
- handleChange(path, newValue === null || newValue === void 0 ? void 0 : newValue.value);
781
- }, inputValue: inputValue, onInputChange: function (_event, newInputValue) {
782
- setInputValue(newInputValue);
783
- }, 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, 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)));
784
803
  };
785
804
 
786
805
  var MaterialEnumControl = function (props) {
787
- var config = props.config, uischema = props.uischema;
806
+ var config = props.config, uischema = props.uischema, errors = props.errors;
788
807
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
789
- 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 })));
790
812
  };
791
813
  var materialEnumControlTester = core.rankWith(2, core.isEnumControl);
792
- var MaterialEnumControl$1 = react.withJsonFormsEnumProps(MaterialEnumControl);
814
+ var MaterialEnumControl$1 = react.withJsonFormsEnumProps(react.withTranslateProps(React__default["default"].memo(MaterialEnumControl)), false);
793
815
 
794
816
  var MaterialNativeControl = function (props) {
795
817
  var _a;
@@ -1006,12 +1028,15 @@ var materialAnyOfStringOrEnumControlTester = core.rankWith(5, simpleAnyOf);
1006
1028
  var MaterialAnyOfStringOrEnumControl$1 = react.withJsonFormsControlProps(MaterialAnyOfStringOrEnumControl);
1007
1029
 
1008
1030
  var MaterialOneOfEnumControl = function (props) {
1009
- var config = props.config, uischema = props.uischema;
1031
+ var config = props.config, uischema = props.uischema, errors = props.errors;
1010
1032
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
1011
- 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 })));
1012
1037
  };
1013
1038
  var materialOneOfEnumControlTester = core.rankWith(5, core.isOneOfEnumControl);
1014
- var MaterialOneOfEnumControl$1 = react.withJsonFormsOneOfEnumProps(MaterialOneOfEnumControl);
1039
+ var MaterialOneOfEnumControl$1 = react.withJsonFormsOneOfEnumProps(react.withTranslateProps(React__default["default"].memo(MaterialOneOfEnumControl)), false);
1015
1040
 
1016
1041
  var MaterialOneOfRadioGroupControl = function (props) {
1017
1042
  return React__default["default"].createElement(MaterialRadioGroup, __assign({}, props));
@@ -1040,18 +1065,18 @@ var Unwrapped = {
1040
1065
  var groupTester = core.rankWith(1, core.uiTypeIs('Group'));
1041
1066
  var style = { marginBottom: '10px' };
1042
1067
  var GroupComponent = React__default["default"].memo(function (_a) {
1043
- 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"]);
1044
1069
  var groupLayout = uischema;
1045
1070
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1046
1071
  React__default["default"].createElement(material.Card, { style: style },
1047
- !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 })),
1048
1073
  React__default["default"].createElement(material.CardContent, null,
1049
1074
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, props, { visible: visible, enabled: enabled, elements: groupLayout.elements }))))));
1050
1075
  });
1051
1076
  var MaterializedGroupLayoutRenderer = function (_a) {
1052
- 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;
1053
1078
  var groupLayout = uischema;
1054
- 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 }));
1055
1080
  };
1056
1081
  var MaterialGroupLayout = react.withJsonFormsLayoutProps(MaterializedGroupLayoutRenderer);
1057
1082
  var materialGroupTester = core.withIncreasedRank(1, groupTester);
@@ -1095,12 +1120,12 @@ var isSingleLevelCategorization = core.and(core.uiTypeIs('Categorization'), func
1095
1120
  });
1096
1121
  var materialCategorizationTester = core.rankWith(1, isSingleLevelCategorization);
1097
1122
  var MaterialCategorizationLayoutRenderer = function (props) {
1098
- 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;
1099
1124
  var categorization = uischema;
1100
1125
  var _a = React.useState(selected !== null && selected !== void 0 ? selected : 0), activeCategory = _a[0], setActiveCategory = _a[1];
1101
- var categories = categorization.elements.filter(function (category) {
1126
+ var categories = React.useMemo(function () { return categorization.elements.filter(function (category) {
1102
1127
  return core.isVisible(category, data, undefined, ajv);
1103
- });
1128
+ }); }, [categorization, data, ajv]);
1104
1129
  var childProps = {
1105
1130
  elements: categories[activeCategory].elements,
1106
1131
  schema: schema,
@@ -1117,13 +1142,18 @@ var MaterialCategorizationLayoutRenderer = function (props) {
1117
1142
  }
1118
1143
  setActiveCategory(value);
1119
1144
  };
1145
+ var tabLabels = React.useMemo(function () {
1146
+ return categories.map(function (e) {
1147
+ return core.deriveLabelForUISchemaElement(e, t);
1148
+ });
1149
+ }, [categories, t]);
1120
1150
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1121
1151
  React__default["default"].createElement(material.AppBar, { position: 'static' },
1122
- 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] })); }))),
1123
1153
  React__default["default"].createElement("div", { style: { marginTop: '0.5em' } },
1124
1154
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, childProps)))));
1125
1155
  };
1126
- var MaterialCategorizationLayout = react.withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationLayoutRenderer));
1156
+ var MaterialCategorizationLayout = withAjvProps(react.withTranslateProps(react.withJsonFormsLayoutProps(MaterialCategorizationLayoutRenderer)));
1127
1157
 
1128
1158
  var iconStyle = { float: 'right' };
1129
1159
  var ExpandPanelRendererComponent = function (props) {
@@ -1260,7 +1290,7 @@ var MaterialDateCell$1 = react.withJsonFormsCellProps(MaterialDateCell);
1260
1290
 
1261
1291
  var MaterialEnumCell = function (props) { return (React__default["default"].createElement(MuiSelect, __assign({}, props))); };
1262
1292
  var materialEnumCellTester = core.rankWith(2, core.isEnumControl);
1263
- var MaterialEnumCell$1 = react.withJsonFormsEnumCellProps(MaterialEnumCell);
1293
+ var MaterialEnumCell$1 = react.withJsonFormsEnumCellProps(react.withTranslateProps(React__default["default"].memo(MaterialEnumCell)), false);
1264
1294
 
1265
1295
  var MaterialIntegerCell = function (props) { return (React__default["default"].createElement(MuiInputInteger, __assign({}, props))); };
1266
1296
  var materialIntegerCellTester = core.rankWith(2, core.isIntegerControl);
@@ -1276,7 +1306,7 @@ var MaterialNumberFormatCell$1 = react.withJsonFormsCellProps(MaterialNumberForm
1276
1306
 
1277
1307
  var MaterialOneOfEnumCell = function (props) { return (React__default["default"].createElement(MuiSelect, __assign({}, props))); };
1278
1308
  var materialOneOfEnumCellTester = core.rankWith(2, core.isOneOfEnumControl);
1279
- var MaterialOneOfEnumCell$1 = react.withJsonFormsOneOfEnumCellProps(MaterialOneOfEnumCell);
1309
+ var MaterialOneOfEnumCell$1 = react.withJsonFormsOneOfEnumCellProps(react.withTranslateProps(React__default["default"].memo(MaterialOneOfEnumCell)), false);
1280
1310
 
1281
1311
  var MaterialTextCell = function (props) { return (React__default["default"].createElement(MuiInputText, __assign({}, props))); };
1282
1312
  var materialTextCellTester = core.rankWith(1, core.isStringControl);
@@ -1305,7 +1335,7 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1305
1335
  var handleStep = function (step) {
1306
1336
  setActiveCategory(step);
1307
1337
  };
1308
- 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;
1309
1339
  var categorization = uischema;
1310
1340
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
1311
1341
  var buttonWrapperStyle = {
@@ -1319,9 +1349,9 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1319
1349
  var buttonStyle = {
1320
1350
  marginRight: '1em'
1321
1351
  };
1322
- var categories = categorization.elements.filter(function (category) {
1352
+ var categories = React.useMemo(function () { return categorization.elements.filter(function (category) {
1323
1353
  return core.isVisible(category, data, undefined, ajv);
1324
- });
1354
+ }); }, [categorization, data, ajv]);
1325
1355
  var childProps = {
1326
1356
  elements: categories[activeCategory].elements,
1327
1357
  schema: schema,
@@ -1331,16 +1361,21 @@ var MaterialCategorizationStepperLayoutRenderer = function (props) {
1331
1361
  renderers: renderers,
1332
1362
  cells: cells
1333
1363
  };
1364
+ var tabLabels = React.useMemo(function () {
1365
+ return categories.map(function (e) {
1366
+ return core.deriveLabelForUISchemaElement(e, t);
1367
+ });
1368
+ }, [categories, t]);
1334
1369
  return (React__default["default"].createElement(material.Hidden, { xsUp: !visible },
1335
- 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 },
1336
- 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]))); })),
1337
1372
  React__default["default"].createElement("div", null,
1338
1373
  React__default["default"].createElement(MaterialLayoutRenderer, __assign({}, childProps))),
1339
1374
  !!appliedUiSchemaOptions.showNavButtons ? (React__default["default"].createElement("div", { style: buttonWrapperStyle },
1340
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"),
1341
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))));
1342
1377
  };
1343
- var MaterialCategorizationStepperLayout = react.withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationStepperLayoutRenderer));
1378
+ var MaterialCategorizationStepperLayout = withAjvProps(react.withTranslateProps(react.withJsonFormsLayoutProps(MaterialCategorizationStepperLayoutRenderer)));
1344
1379
 
1345
1380
  var materialRenderers = [
1346
1381
  {
@@ -1463,6 +1498,7 @@ exports.ResettableTextField = ResettableTextField;
1463
1498
  exports.Unwrapped = Unwrapped;
1464
1499
  exports.createOnChangeHandler = createOnChangeHandler;
1465
1500
  exports.getData = getData;
1501
+ exports.i18nDefaults = i18nDefaults;
1466
1502
  exports.materialAllOfControlTester = materialAllOfControlTester;
1467
1503
  exports.materialAnyOfControlTester = materialAnyOfControlTester;
1468
1504
  exports.materialAnyOfStringOrEnumControlTester = materialAnyOfStringOrEnumControlTester;