@jsonforms/material-renderers 3.0.0-beta.4 → 3.0.0-rc.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 (65) hide show
  1. package/docs/assets/js/search.json +1 -1
  2. package/docs/globals.html +167 -40
  3. package/docs/index.html +15 -0
  4. package/docs/interfaces/categorizationstate.html +1 -1
  5. package/docs/interfaces/categorizationstepperstate.html +1 -1
  6. package/docs/interfaces/inputref.html +168 -0
  7. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +49 -4
  8. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +46 -1
  9. package/docs/interfaces/materiallabelablelayoutrendererprops.html +328 -0
  10. package/docs/interfaces/materiallayoutrendererprops.html +5 -0
  11. package/docs/interfaces/withoptionlabel.html +3 -3
  12. package/lib/additional/MaterialLabelRenderer.d.ts +3 -3
  13. package/lib/cells/MaterialEnumCell.d.ts +2 -1
  14. package/lib/cells/MaterialOneOfEnumCell.d.ts +2 -1
  15. package/lib/controls/MaterialEnumControl.d.ts +2 -1
  16. package/lib/controls/MaterialOneOfEnumControl.d.ts +2 -1
  17. package/lib/controls/index.d.ts +2 -2
  18. package/lib/jsonforms-react-material.cjs.js +143 -65
  19. package/lib/jsonforms-react-material.cjs.js.map +1 -1
  20. package/lib/jsonforms-react-material.esm.js +137 -57
  21. package/lib/jsonforms-react-material.esm.js.map +1 -1
  22. package/lib/layouts/MaterialCategorizationLayout.d.ts +4 -3
  23. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +4 -3
  24. package/lib/layouts/MaterialGroupLayout.d.ts +2 -2
  25. package/lib/layouts/MaterialHorizontalLayout.d.ts +1 -1
  26. package/lib/layouts/MaterialVerticalLayout.d.ts +1 -1
  27. package/lib/mui-controls/MuiAutocomplete.d.ts +2 -2
  28. package/lib/mui-controls/MuiSelect.d.ts +2 -1
  29. package/lib/util/datejs.d.ts +17 -1
  30. package/lib/util/i18nDefaults.d.ts +3 -0
  31. package/lib/util/index.d.ts +1 -0
  32. package/lib/util/layout.d.ts +3 -0
  33. package/package.json +9 -9
  34. package/src/additional/MaterialLabelRenderer.tsx +5 -7
  35. package/src/additional/MaterialListWithDetailRenderer.tsx +4 -0
  36. package/src/cells/MaterialEnumCell.tsx +4 -3
  37. package/src/cells/MaterialOneOfEnumCell.tsx +3 -3
  38. package/src/controls/MaterialDateControl.tsx +30 -12
  39. package/src/controls/MaterialDateTimeControl.tsx +32 -13
  40. package/src/controls/MaterialEnumControl.tsx +12 -5
  41. package/src/controls/MaterialOneOfEnumControl.tsx +13 -5
  42. package/src/controls/MaterialRadioGroup.tsx +1 -1
  43. package/src/controls/MaterialTimeControl.tsx +31 -13
  44. package/src/layouts/MaterialCategorizationLayout.tsx +18 -9
  45. package/src/layouts/MaterialCategorizationStepperLayout.tsx +19 -12
  46. package/src/layouts/MaterialGroupLayout.tsx +6 -5
  47. package/src/mui-controls/MuiAutocomplete.tsx +81 -37
  48. package/src/mui-controls/MuiInputText.tsx +4 -1
  49. package/src/mui-controls/MuiSelect.tsx +10 -5
  50. package/src/util/datejs.tsx +73 -0
  51. package/src/util/i18nDefaults.ts +3 -0
  52. package/src/util/index.ts +1 -0
  53. package/src/util/layout.tsx +4 -0
  54. package/stats.html +1 -1
  55. package/test/renderers/MaterialArrayLayout.test.tsx +4 -4
  56. package/test/renderers/MaterialCategorizationLayout.test.tsx +17 -7
  57. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +21 -11
  58. package/test/renderers/MaterialDateControl.test.tsx +27 -0
  59. package/test/renderers/MaterialDateTimeControl.test.tsx +29 -2
  60. package/test/renderers/MaterialGroupLayout.test.tsx +4 -1
  61. package/test/renderers/MaterialInputControl.test.tsx +4 -0
  62. package/test/renderers/MaterialLabelRenderer.test.tsx +2 -1
  63. package/test/renderers/MaterialTimeControl.test.tsx +28 -1
  64. package/test/renderers/util.ts +5 -0
  65. package/src/util/datejs.ts +0 -32
@@ -1,11 +1,11 @@
1
- import { createDefaultValue, Resolve, encode, Paths, formatErrorMessage, errorsAt, rankWith, isObjectControl, findUISchema, Generate, isAllOfControl, findMatchingUISchema, createCombinatorRenderInfos, isAnyOfControl, isOneOfControl, getAjv, and, uiTypeIs, schemaMatches, hasType, schemaSubPathMatches, or, isObjectArrayControl, isPrimitiveArrayControl, isObjectArray, computeLabel, composePaths, isBooleanControl, optionIs, isDescriptionHidden, showAsRequired, isEnumControl, isDateControl, isTimeControl, isDateTimeControl, isRangeControl, isIntegerControl, isNumberControl, isStringControl, isOneOfEnumControl, withIncreasedRank, isVisible, update, moveUp, moveDown, getFirstPrimitiveProp, createId, removeId, isObjectArrayWithNesting, isNumberFormatControl, categorizationHasCategory } from '@jsonforms/core';
2
- import React, { useMemo, Fragment, useState, useCallback, useEffect } from 'react';
3
- import { DispatchCell, useJsonForms, withJsonFormsArrayLayoutProps, withJsonFormsDetailProps, JsonFormsDispatch, withJsonFormsAllOfProps, withJsonFormsAnyOfProps, withJsonFormsOneOfProps, withJsonFormsMultiEnumProps, withJsonFormsLayoutProps, withJsonFormsMasterListItemProps, withJsonFormsControlProps, withJsonFormsEnumProps, Control, withJsonFormsOneOfEnumProps, withJsonFormsContext, withJsonFormsCellProps, withJsonFormsEnumCellProps, withJsonFormsOneOfEnumCellProps } from '@jsonforms/react';
1
+ import { createDefaultValue, Resolve, encode, Paths, formatErrorMessage, errorsAt, rankWith, isObjectControl, findUISchema, Generate, isAllOfControl, findMatchingUISchema, createCombinatorRenderInfos, isAnyOfControl, isOneOfControl, getAjv, and, uiTypeIs, schemaMatches, hasType, schemaSubPathMatches, or, isObjectArrayControl, isPrimitiveArrayControl, isObjectArray, computeLabel, composePaths, isBooleanControl, optionIs, isDescriptionHidden, showAsRequired, isEnumControl, isDateControl, isTimeControl, isDateTimeControl, isRangeControl, isIntegerControl, isNumberControl, isStringControl, isOneOfEnumControl, withIncreasedRank, isVisible, deriveLabelForUISchemaElement, update, moveUp, moveDown, getFirstPrimitiveProp, createId, removeId, isObjectArrayWithNesting, isNumberFormatControl, categorizationHasCategory } from '@jsonforms/core';
2
+ import React, { useMemo, Fragment, useState, useCallback, useRef, useEffect } from 'react';
3
+ import { DispatchCell, useJsonForms, withJsonFormsArrayLayoutProps, withJsonFormsDetailProps, JsonFormsDispatch, withJsonFormsAllOfProps, withJsonFormsAnyOfProps, withJsonFormsOneOfProps, withJsonFormsMultiEnumProps, withJsonFormsLabelProps, withJsonFormsMasterListItemProps, withJsonFormsControlProps, withJsonFormsEnumProps, withTranslateProps, Control, withJsonFormsOneOfEnumProps, withJsonFormsLayoutProps, withJsonFormsContext, withJsonFormsCellProps, withJsonFormsEnumCellProps, withJsonFormsOneOfEnumCellProps } from '@jsonforms/react';
4
4
  import isEmpty from 'lodash/isEmpty';
5
5
  import union from 'lodash/union';
6
6
  import startCase from 'lodash/startCase';
7
7
  import range from 'lodash/range';
8
- import { TableCell, styled as styled$1, Badge, Tooltip, TableRow, Grid, Typography, Hidden, IconButton, FormHelperText, Table, TableHead, TableBody, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tabs, Tab, Checkbox, Select, MenuItem, Input, useTheme, InputAdornment, FormControl, FormGroup, FormControlLabel, Toolbar, ListItem, ListItemAvatar, Avatar, ListItemText, ListItemSecondaryAction, List, Switch, InputLabel, Autocomplete, TextField, FormLabel, Slider, RadioGroup, Radio, Card, CardHeader, CardContent, AppBar, Accordion, AccordionSummary, AccordionDetails, Stepper, Step, StepButton } from '@mui/material';
8
+ import { TableCell, styled as styled$1, Badge, Tooltip, TableRow, Grid, Typography, Hidden, IconButton, FormHelperText, Table, TableHead, TableBody, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tabs, Tab, Checkbox, TextField, Select, MenuItem, Input, useTheme, InputAdornment, FormControl, FormGroup, FormControlLabel, Toolbar, ListItem, ListItemAvatar, Avatar, ListItemText, ListItemSecondaryAction, List, Switch, InputLabel, Autocomplete, FormLabel, Slider, RadioGroup, Radio, Card, CardHeader, CardContent, AppBar, Accordion, AccordionSummary, AccordionDetails, Stepper, Step, StepButton } from '@mui/material';
9
9
  import DeleteIcon from '@mui/icons-material/Delete';
10
10
  import ArrowDownward from '@mui/icons-material/ArrowDownward';
11
11
  import ArrowUpward from '@mui/icons-material/ArrowUpward';
@@ -19,8 +19,8 @@ import customParsing from 'dayjs/plugin/customParseFormat';
19
19
  import debounce from 'lodash/debounce';
20
20
  import Close from '@mui/icons-material/Close';
21
21
  import map from 'lodash/map';
22
- import { LocalizationProvider, DatePicker, DateTimePicker, TimePicker } from '@mui/lab';
23
- import AdapterDayjs from '@mui/lab/AdapterDayjs';
22
+ import { LocalizationProvider, DatePicker, DateTimePicker, TimePicker } from '@mui/x-date-pickers';
23
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
24
24
  import get from 'lodash/get';
25
25
  import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
26
26
  import Input$1 from '@mui/material/Input';
@@ -327,20 +327,14 @@ const MuiCheckbox = React.memo((props) => {
327
327
  return (React.createElement(Checkbox, { checked: checked, onChange: (_ev, isChecked) => handleChange(path, isChecked), className: className, id: id, disabled: !enabled, inputProps: inputProps }));
328
328
  });
329
329
 
330
- const MuiSelect = React.memo((props) => {
331
- const { data, className, id, enabled, uischema, path, handleChange, options, config } = props;
332
- const appliedUiSchemaOptions = merge({}, config, uischema.options);
333
- return (React.createElement(Select, { className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: ev => handleChange(path, ev.target.value), fullWidth: true, variant: 'standard' }, [React.createElement(MenuItem, { value: '', key: 'empty' })].concat(options.map(optionValue => (React.createElement(MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label))))));
334
- });
335
-
336
330
  dayjs.extend(customParsing);
337
- const createOnChangeHandler = (path, handleChange, saveFormat) => (time) => {
331
+ const createOnChangeHandler = (path, handleChange, saveFormat) => (time, textInputValue) => {
338
332
  if (!time) {
339
333
  handleChange(path, undefined);
340
334
  return;
341
335
  }
342
336
  const result = dayjs(time).format(saveFormat);
343
- handleChange(path, result === 'Invalid Date' ? undefined : result);
337
+ handleChange(path, result === 'Invalid Date' ? textInputValue : result);
344
338
  };
345
339
  const getData = (data, saveFormat) => {
346
340
  if (!data) {
@@ -352,6 +346,22 @@ const getData = (data, saveFormat) => {
352
346
  }
353
347
  return dayjsData;
354
348
  };
349
+ const ResettableTextField = ({ rawValue, dayjsValueIsValid, valueInInputFormat, focused, inputProps, ...props }) => {
350
+ const value = useRef({ lastInput: inputProps?.value, toShow: inputProps?.value });
351
+ if (!focused) {
352
+ if (!dayjsValueIsValid) {
353
+ value.current.toShow = typeof rawValue === 'string' || rawValue === null || rawValue === undefined ? rawValue : JSON.stringify(rawValue);
354
+ }
355
+ else {
356
+ value.current.toShow = valueInInputFormat;
357
+ }
358
+ }
359
+ if (focused && inputProps?.value !== value.current.lastInput) {
360
+ value.current.lastInput = inputProps?.value;
361
+ value.current.toShow = inputProps?.value;
362
+ }
363
+ return React.createElement(TextField, Object.assign({}, props, { inputProps: { ...inputProps, value: value.current.toShow || '' } }));
364
+ };
355
365
 
356
366
  const renderLayoutElements = (elements, schema, path, enabled, renderers, cells) => {
357
367
  return elements.map((child, index) => (React.createElement(Grid, { item: true, key: `${path}-${index}`, xs: true },
@@ -373,8 +383,8 @@ const withAjvProps = (Component) => (props) => {
373
383
  return (React.createElement(Component, Object.assign({}, props, { ajv: ajv })));
374
384
  };
375
385
 
376
- const eventToValue$2 = (ev) => ev.target.value;
377
- const useDebouncedChange = (handleChange, defaultValue, data, path, eventToValueFunction = eventToValue$2, timeout = 300) => {
386
+ const eventToValue$3 = (ev) => ev.target.value;
387
+ const useDebouncedChange = (handleChange, defaultValue, data, path, eventToValueFunction = eventToValue$3, timeout = 300) => {
378
388
  const [input, setInput] = useState(data ?? defaultValue);
379
389
  useEffect(() => {
380
390
  setInput(data ?? defaultValue);
@@ -396,23 +406,35 @@ const useFocus = () => {
396
406
  return [focused, onFocus, onBlur];
397
407
  };
398
408
 
409
+ const i18nDefaults = {
410
+ 'enum.none': 'None'
411
+ };
412
+
413
+ const MuiSelect = React.memo((props) => {
414
+ const { data, className, id, enabled, schema, uischema, path, handleChange, options, config, t } = props;
415
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
416
+ const noneOptionLabel = useMemo(() => t('enum.none', i18nDefaults['enum.none'], { schema, uischema, path }), [t, schema, uischema, path]);
417
+ return (React.createElement(Select, { className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: ev => handleChange(path, ev.target.value || undefined), fullWidth: true, variant: 'standard' }, [React.createElement(MenuItem, { value: '', key: 'jsonforms.enum.none' },
418
+ React.createElement("em", null, noneOptionLabel))].concat(options.map(optionValue => (React.createElement(MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label))))));
419
+ });
420
+
399
421
  const toNumber$1 = (value) => value === '' ? undefined : parseInt(value, 10);
400
- const eventToValue$1 = (ev) => toNumber$1(ev.target.value);
422
+ const eventToValue$2 = (ev) => toNumber$1(ev.target.value);
401
423
  const MuiInputInteger = React.memo((props) => {
402
424
  const { data, className, id, enabled, uischema, path, handleChange, config } = props;
403
425
  const inputProps = { step: '1' };
404
426
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
405
- const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue$1);
427
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue$2);
406
428
  return (React.createElement(Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
407
429
  });
408
430
 
409
431
  const toNumber = (value) => value === '' ? undefined : parseFloat(value);
410
- const eventToValue = (ev) => toNumber(ev.target.value);
432
+ const eventToValue$1 = (ev) => toNumber(ev.target.value);
411
433
  const MuiInputNumber = React.memo((props) => {
412
434
  const { data, className, id, enabled, uischema, path, handleChange, config } = props;
413
435
  const inputProps = { step: '0.1' };
414
436
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
415
- const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue);
437
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue$1);
416
438
  return (React.createElement(Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
417
439
  });
418
440
 
@@ -433,6 +455,7 @@ const MuiInputNumberFormat = React.memo((props) => {
433
455
  return (React.createElement(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 }));
434
456
  });
435
457
 
458
+ const eventToValue = (ev) => ev.target.value === '' ? undefined : ev.target.value;
436
459
  const MuiInputText = React.memo((props) => {
437
460
  const [showAdornment, setShowAdornment] = useState(false);
438
461
  const { data, config, className, id, enabled, uischema, isValid, path, handleChange, schema, muiInputProps, inputComponent } = props;
@@ -449,7 +472,7 @@ const MuiInputText = React.memo((props) => {
449
472
  if (appliedUiSchemaOptions.trim && maxLength !== undefined) {
450
473
  inputProps.size = maxLength;
451
474
  }
452
- const [inputText, onChange, onClear] = useDebouncedChange(handleChange, '', data, path);
475
+ const [inputText, onChange, onClear] = useDebouncedChange(handleChange, '', data, path, eventToValue);
453
476
  const onPointerEnter = () => setShowAdornment(true);
454
477
  const onPointerLeave = () => setShowAdornment(false);
455
478
  const theme = useTheme();
@@ -503,12 +526,11 @@ var MaterialEnumArrayRenderer$1 = withJsonFormsMultiEnumProps(MaterialEnumArrayR
503
526
  const materialArrayControlTester = rankWith(3, or(isObjectArrayControl, isPrimitiveArrayControl));
504
527
 
505
528
  const materialLabelRendererTester = rankWith(1, uiTypeIs('Label'));
506
- const MaterialLabelRenderer = ({ uischema, visible }) => {
507
- const labelElement = uischema;
529
+ const MaterialLabelRenderer = ({ text, visible }) => {
508
530
  return (React.createElement(Hidden, { xsUp: !visible },
509
- React.createElement(Typography, { variant: 'h6' }, labelElement.text !== undefined && labelElement.text !== null && labelElement.text)));
531
+ React.createElement(Typography, { variant: 'h6' }, text)));
510
532
  };
511
- var MaterialLabelRenderer$1 = withJsonFormsLayoutProps(MaterialLabelRenderer);
533
+ var MaterialLabelRenderer$1 = withJsonFormsLabelProps(MaterialLabelRenderer);
512
534
 
513
535
  const ArrayLayoutToolbar = React.memo(({ label, errors, addItem, path, createDefault }) => {
514
536
  return (React.createElement(Toolbar, { disableGutters: true },
@@ -552,6 +574,9 @@ const MaterialListWithDetailRenderer = ({ uischemas, schema, uischema, path, err
552
574
  const handleCreateDefaultValue = useCallback(() => createDefaultValue(schema), [createDefaultValue]);
553
575
  const foundUISchema = useMemo(() => findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema), [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
554
576
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
577
+ React.useEffect(() => {
578
+ setSelectedIndex(undefined);
579
+ }, [schema]);
555
580
  return (React.createElement(Hidden, { xsUp: !visible },
556
581
  React.createElement(ArrayLayoutToolbar, { label: computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), errors: errors, path: path, addItem: addItem, createDefault: handleCreateDefaultValue }),
557
582
  React.createElement(Grid, { container: true, direction: 'row', spacing: 2 },
@@ -606,24 +631,40 @@ const MaterialInputControl = (props) => {
606
631
  };
607
632
 
608
633
  const MuiAutocomplete = (props) => {
609
- const { data, className, id, enabled, uischema, path, handleChange, options, config, getOptionLabel, renderOption, filterOptions } = props;
634
+ const { description, errors, visible, required, label, data, className, id, enabled, uischema, path, handleChange, options, config, getOptionLabel, renderOption, filterOptions, isValid } = props;
610
635
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
611
636
  const [inputValue, setInputValue] = React.useState(data ?? '');
637
+ const [focused, onFocus, onBlur] = useFocus();
612
638
  const findOption = options.find(o => o.value === data) ?? null;
613
- return (React.createElement(Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: (_event, newValue) => {
614
- handleChange(path, newValue?.value);
615
- }, inputValue: inputValue, onInputChange: (_event, newInputValue) => {
616
- setInputValue(newInputValue);
617
- }, autoHighlight: true, autoSelect: true, autoComplete: true, fullWidth: true, options: options, getOptionLabel: getOptionLabel || (option => option?.label), style: { marginTop: 16 }, renderInput: params => (React.createElement(Input, { style: { width: '100%' }, type: 'text', inputProps: params.inputProps, inputRef: params.InputProps.ref, autoFocus: appliedUiSchemaOptions.focus, disabled: !enabled })), renderOption: renderOption, filterOptions: filterOptions }));
639
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
640
+ const firstFormHelperText = showDescription
641
+ ? description
642
+ : !isValid
643
+ ? errors
644
+ : null;
645
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
646
+ return (React.createElement(Hidden, { xsUp: !visible },
647
+ React.createElement(Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: (_event, newValue) => {
648
+ handleChange(path, newValue?.value);
649
+ }, inputValue: inputValue, onInputChange: (_event, newInputValue) => {
650
+ setInputValue(newInputValue);
651
+ }, autoHighlight: true, autoSelect: true, autoComplete: true, fullWidth: true, options: options, getOptionLabel: getOptionLabel || (option => option?.label), freeSolo: false, renderInput: params => {
652
+ return (React.createElement(TextField, Object.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 })));
653
+ }, renderOption: renderOption, filterOptions: filterOptions }),
654
+ React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
655
+ React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText)));
618
656
  };
619
657
 
620
658
  const MaterialEnumControl = (props) => {
621
- const { config, uischema } = props;
659
+ const { config, uischema, errors } = props;
622
660
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
623
- return (React.createElement(MaterialInputControl, Object.assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
661
+ const isValid = errors.length === 0;
662
+ return (appliedUiSchemaOptions.autocomplete === false ?
663
+ React.createElement(MaterialInputControl, Object.assign({}, props, { input: MuiSelect })) :
664
+ React.createElement(MuiAutocomplete, Object.assign({}, props, { isValid: isValid })));
624
665
  };
625
666
  const materialEnumControlTester = rankWith(2, isEnumControl);
626
- var MaterialEnumControl$1 = withJsonFormsEnumProps(MaterialEnumControl);
667
+ var MaterialEnumControl$1 = withJsonFormsEnumProps(withTranslateProps(React.memo(MaterialEnumControl)), false);
627
668
 
628
669
  const MaterialNativeControl = (props) => {
629
670
  const [focused, onFocus, onBlur] = useFocus();
@@ -647,6 +688,7 @@ const MaterialDateControl = (props) => {
647
688
  const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
648
689
  const format = appliedUiSchemaOptions.dateFormat ?? 'YYYY-MM-DD';
649
690
  const saveFormat = appliedUiSchemaOptions.dateSaveFormat ?? 'YYYY-MM-DD';
691
+ const views = appliedUiSchemaOptions.views ?? ['year', 'day'];
650
692
  const firstFormHelperText = showDescription
651
693
  ? description
652
694
  : !isValid
@@ -654,9 +696,18 @@ const MaterialDateControl = (props) => {
654
696
  : null;
655
697
  const secondFormHelperText = showDescription && !isValid ? errors : null;
656
698
  const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
699
+ const value = getData(data, saveFormat);
700
+ const valueInInputFormat = value ? value.format(format) : '';
657
701
  return (React.createElement(Hidden, { xsUp: !visible },
658
702
  React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
659
- React.createElement(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: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
703
+ React.createElement(DatePicker, { label: label, value: value, onChange: onChange, inputFormat: format, disableMaskedInput: true, views: views, disabled: !enabled, componentsProps: {
704
+ actionBar: {
705
+ actions: (variant) => (variant === 'desktop' ? [] : ['clear', 'cancel', 'accept'])
706
+ }
707
+ }, renderInput: params => (React.createElement(ResettableTextField, Object.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: {
708
+ ...params.inputProps,
709
+ type: 'text',
710
+ }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
660
711
  React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
661
712
  React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
662
713
  };
@@ -671,6 +722,7 @@ const MaterialDateTimeControl = (props) => {
671
722
  const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
672
723
  const format = appliedUiSchemaOptions.dateTimeFormat ?? 'YYYY-MM-DD HH:mm';
673
724
  const saveFormat = appliedUiSchemaOptions.dateTimeSaveFormat ?? undefined;
725
+ const views = appliedUiSchemaOptions.views ?? ['year', 'day', 'hours', 'minutes'];
674
726
  const firstFormHelperText = showDescription
675
727
  ? description
676
728
  : !isValid
@@ -678,9 +730,18 @@ const MaterialDateTimeControl = (props) => {
678
730
  : null;
679
731
  const secondFormHelperText = showDescription && !isValid ? errors : null;
680
732
  const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
733
+ const value = getData(data, saveFormat);
734
+ const valueInInputFormat = value ? value.format(format) : '';
681
735
  return (React.createElement(Hidden, { xsUp: !visible },
682
736
  React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
683
- React.createElement(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: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
737
+ React.createElement(DateTimePicker, { label: label, value: value, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: views, disabled: !enabled, componentsProps: {
738
+ actionBar: {
739
+ actions: (variant) => (variant === 'desktop' ? [] : ['clear', 'cancel', 'accept'])
740
+ }
741
+ }, renderInput: params => (React.createElement(ResettableTextField, Object.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: {
742
+ ...params.inputProps,
743
+ type: 'text',
744
+ }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
684
745
  React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
685
746
  React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
686
747
  };
@@ -695,6 +756,7 @@ const MaterialTimeControl = (props) => {
695
756
  const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
696
757
  const format = appliedUiSchemaOptions.timeFormat ?? 'HH:mm';
697
758
  const saveFormat = appliedUiSchemaOptions.timeSaveFormat ?? 'HH:mm:ss';
759
+ const views = appliedUiSchemaOptions.views ?? ['hours', 'minutes'];
698
760
  const firstFormHelperText = showDescription
699
761
  ? description
700
762
  : !isValid
@@ -702,9 +764,18 @@ const MaterialTimeControl = (props) => {
702
764
  : null;
703
765
  const secondFormHelperText = showDescription && !isValid ? errors : null;
704
766
  const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
767
+ const value = getData(data, saveFormat);
768
+ const valueInInputFormat = value ? value.format(format) : '';
705
769
  return (React.createElement(Hidden, { xsUp: !visible },
706
770
  React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
707
- React.createElement(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: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
771
+ React.createElement(TimePicker, { label: label, value: value, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: views, disabled: !enabled, componentsProps: {
772
+ actionBar: {
773
+ actions: (variant) => (variant === 'desktop' ? [] : ['clear', 'cancel', 'accept'])
774
+ }
775
+ }, renderInput: params => (React.createElement(ResettableTextField, Object.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: {
776
+ ...params.inputProps,
777
+ type: 'text'
778
+ }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
708
779
  React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
709
780
  React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
710
781
  };
@@ -756,7 +827,7 @@ const MaterialRadioGroup = (props) => {
756
827
  return (React.createElement(Hidden, { xsUp: !visible },
757
828
  React.createElement(FormControl, { component: 'fieldset', fullWidth: !appliedUiSchemaOptions.trim, onFocus: onFocus, onBlur: onBlur },
758
829
  React.createElement(FormLabel, { htmlFor: id, error: !isValid, component: 'legend', required: showAsRequired(required, appliedUiSchemaOptions.hideRequiredAsterisk) }, label),
759
- React.createElement(RadioGroup, { value: props.data, onChange: onChange, row: true }, options.map(option => (React.createElement(FormControlLabel, { value: option.value, key: option.label, control: React.createElement(Radio, { checked: data === option.value }), label: option.label, disabled: !enabled })))),
830
+ React.createElement(RadioGroup, { value: props.data ?? '', onChange: onChange, row: true }, options.map(option => (React.createElement(FormControlLabel, { value: option.value, key: option.label, control: React.createElement(Radio, { checked: data === option.value }), label: option.label, disabled: !enabled })))),
760
831
  React.createElement(FormHelperText, { error: !isValid }, !isValid ? errors : showDescription ? description : null))));
761
832
  };
762
833
 
@@ -818,12 +889,15 @@ const materialAnyOfStringOrEnumControlTester = rankWith(5, simpleAnyOf);
818
889
  var MaterialAnyOfStringOrEnumControl$1 = withJsonFormsControlProps(MaterialAnyOfStringOrEnumControl);
819
890
 
820
891
  const MaterialOneOfEnumControl = (props) => {
821
- const { config, uischema } = props;
892
+ const { config, uischema, errors } = props;
822
893
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
823
- return (React.createElement(MaterialInputControl, Object.assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
894
+ const isValid = errors.length === 0;
895
+ return (appliedUiSchemaOptions.autocomplete === false ?
896
+ React.createElement(MaterialInputControl, Object.assign({}, props, { input: MuiSelect })) :
897
+ React.createElement(MuiAutocomplete, Object.assign({}, props, { isValid: isValid })));
824
898
  };
825
899
  const materialOneOfEnumControlTester = rankWith(5, isOneOfEnumControl);
826
- var MaterialOneOfEnumControl$1 = withJsonFormsOneOfEnumProps(MaterialOneOfEnumControl);
900
+ var MaterialOneOfEnumControl$1 = withJsonFormsOneOfEnumProps(withTranslateProps(React.memo(MaterialOneOfEnumControl)), false);
827
901
 
828
902
  const MaterialOneOfRadioGroupControl = (props) => {
829
903
  return React.createElement(MaterialRadioGroup, Object.assign({}, props));
@@ -851,17 +925,17 @@ const Unwrapped = {
851
925
 
852
926
  const groupTester = rankWith(1, uiTypeIs('Group'));
853
927
  const style = { marginBottom: '10px' };
854
- const GroupComponent = React.memo(({ visible, enabled, uischema, ...props }) => {
928
+ const GroupComponent = React.memo(({ visible, enabled, uischema, label, ...props }) => {
855
929
  const groupLayout = uischema;
856
930
  return (React.createElement(Hidden, { xsUp: !visible },
857
931
  React.createElement(Card, { style: style },
858
- !isEmpty(groupLayout.label) && (React.createElement(CardHeader, { title: groupLayout.label })),
932
+ !isEmpty(label) && (React.createElement(CardHeader, { title: label })),
859
933
  React.createElement(CardContent, null,
860
934
  React.createElement(MaterialLayoutRenderer, Object.assign({}, props, { visible: visible, enabled: enabled, elements: groupLayout.elements }))))));
861
935
  });
862
- const MaterializedGroupLayoutRenderer = ({ uischema, schema, path, visible, enabled, renderers, cells, direction }) => {
936
+ const MaterializedGroupLayoutRenderer = ({ uischema, schema, path, visible, enabled, renderers, cells, direction, label }) => {
863
937
  const groupLayout = uischema;
864
- return (React.createElement(GroupComponent, { elements: groupLayout.elements, schema: schema, path: path, direction: direction, visible: visible, enabled: enabled, uischema: uischema, renderers: renderers, cells: cells }));
938
+ return (React.createElement(GroupComponent, { elements: groupLayout.elements, schema: schema, path: path, direction: direction, visible: visible, enabled: enabled, uischema: uischema, renderers: renderers, cells: cells, label: label }));
865
939
  };
866
940
  var MaterialGroupLayout = withJsonFormsLayoutProps(MaterializedGroupLayoutRenderer);
867
941
  const materialGroupTester = withIncreasedRank(1, groupTester);
@@ -903,10 +977,10 @@ const isSingleLevelCategorization = and(uiTypeIs('Categorization'), (uischema) =
903
977
  });
904
978
  const materialCategorizationTester = rankWith(1, isSingleLevelCategorization);
905
979
  const MaterialCategorizationLayoutRenderer = (props) => {
906
- const { data, path, renderers, cells, schema, uischema, visible, enabled, selected, onChange, ajv } = props;
980
+ const { data, path, renderers, cells, schema, uischema, visible, enabled, selected, onChange, ajv, t } = props;
907
981
  const categorization = uischema;
908
982
  const [activeCategory, setActiveCategory] = useState(selected ?? 0);
909
- const categories = categorization.elements.filter((category) => isVisible(category, data, undefined, ajv));
983
+ const categories = useMemo(() => categorization.elements.filter((category) => isVisible(category, data, undefined, ajv)), [categorization, data, ajv]);
910
984
  const childProps = {
911
985
  elements: categories[activeCategory].elements,
912
986
  schema,
@@ -923,13 +997,16 @@ const MaterialCategorizationLayoutRenderer = (props) => {
923
997
  }
924
998
  setActiveCategory(value);
925
999
  };
1000
+ const tabLabels = useMemo(() => {
1001
+ return categories.map((e) => deriveLabelForUISchemaElement(e, t));
1002
+ }, [categories, t]);
926
1003
  return (React.createElement(Hidden, { xsUp: !visible },
927
1004
  React.createElement(AppBar, { position: 'static' },
928
- React.createElement(Tabs, { value: activeCategory, onChange: onTabChange, textColor: 'inherit', indicatorColor: 'secondary', variant: 'scrollable' }, categories.map((e, idx) => (React.createElement(Tab, { key: idx, label: e.label }))))),
1005
+ React.createElement(Tabs, { value: activeCategory, onChange: onTabChange, textColor: 'inherit', indicatorColor: 'secondary', variant: 'scrollable' }, categories.map((_, idx) => (React.createElement(Tab, { key: idx, label: tabLabels[idx] }))))),
929
1006
  React.createElement("div", { style: { marginTop: '0.5em' } },
930
1007
  React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps)))));
931
1008
  };
932
- var MaterialCategorizationLayout = withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationLayoutRenderer));
1009
+ var MaterialCategorizationLayout = withAjvProps(withTranslateProps(withJsonFormsLayoutProps(MaterialCategorizationLayoutRenderer)));
933
1010
 
934
1011
  const iconStyle = { float: 'right' };
935
1012
  const ExpandPanelRendererComponent = (props) => {
@@ -1058,7 +1135,7 @@ var MaterialDateCell$1 = withJsonFormsCellProps(MaterialDateCell);
1058
1135
 
1059
1136
  const MaterialEnumCell = (props) => (React.createElement(MuiSelect, Object.assign({}, props)));
1060
1137
  const materialEnumCellTester = rankWith(2, isEnumControl);
1061
- var MaterialEnumCell$1 = withJsonFormsEnumCellProps(MaterialEnumCell);
1138
+ var MaterialEnumCell$1 = withJsonFormsEnumCellProps(withTranslateProps(React.memo(MaterialEnumCell)), false);
1062
1139
 
1063
1140
  const MaterialIntegerCell = (props) => (React.createElement(MuiInputInteger, Object.assign({}, props)));
1064
1141
  const materialIntegerCellTester = rankWith(2, isIntegerControl);
@@ -1074,7 +1151,7 @@ var MaterialNumberFormatCell$1 = withJsonFormsCellProps(MaterialNumberFormatCell
1074
1151
 
1075
1152
  const MaterialOneOfEnumCell = (props) => (React.createElement(MuiSelect, Object.assign({}, props)));
1076
1153
  const materialOneOfEnumCellTester = rankWith(2, isOneOfEnumControl);
1077
- var MaterialOneOfEnumCell$1 = withJsonFormsOneOfEnumCellProps(MaterialOneOfEnumCell);
1154
+ var MaterialOneOfEnumCell$1 = withJsonFormsOneOfEnumCellProps(withTranslateProps(React.memo(MaterialOneOfEnumCell)), false);
1078
1155
 
1079
1156
  const MaterialTextCell = (props) => (React.createElement(MuiInputText, Object.assign({}, props)));
1080
1157
  const materialTextCellTester = rankWith(1, isStringControl);
@@ -1103,7 +1180,7 @@ const MaterialCategorizationStepperLayoutRenderer = (props) => {
1103
1180
  const handleStep = (step) => {
1104
1181
  setActiveCategory(step);
1105
1182
  };
1106
- const { data, path, renderers, schema, uischema, visible, cells, config, ajv } = props;
1183
+ const { data, path, renderers, schema, uischema, visible, cells, config, ajv, t } = props;
1107
1184
  const categorization = uischema;
1108
1185
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
1109
1186
  const buttonWrapperStyle = {
@@ -1117,7 +1194,7 @@ const MaterialCategorizationStepperLayoutRenderer = (props) => {
1117
1194
  const buttonStyle = {
1118
1195
  marginRight: '1em'
1119
1196
  };
1120
- const categories = categorization.elements.filter((category) => isVisible(category, data, undefined, ajv));
1197
+ const categories = useMemo(() => categorization.elements.filter((category) => isVisible(category, data, undefined, ajv)), [categorization, data, ajv]);
1121
1198
  const childProps = {
1122
1199
  elements: categories[activeCategory].elements,
1123
1200
  schema,
@@ -1127,16 +1204,19 @@ const MaterialCategorizationStepperLayoutRenderer = (props) => {
1127
1204
  renderers,
1128
1205
  cells
1129
1206
  };
1207
+ const tabLabels = useMemo(() => {
1208
+ return categories.map((e) => deriveLabelForUISchemaElement(e, t));
1209
+ }, [categories, t]);
1130
1210
  return (React.createElement(Hidden, { xsUp: !visible },
1131
- React.createElement(Stepper, { activeStep: activeCategory, nonLinear: true }, categories.map((e, idx) => (React.createElement(Step, { key: e.label },
1132
- React.createElement(StepButton, { onClick: () => handleStep(idx) }, e.label))))),
1211
+ React.createElement(Stepper, { activeStep: activeCategory, nonLinear: true }, categories.map((_, idx) => (React.createElement(Step, { key: tabLabels[idx] },
1212
+ React.createElement(StepButton, { onClick: () => handleStep(idx) }, tabLabels[idx]))))),
1133
1213
  React.createElement("div", null,
1134
1214
  React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps))),
1135
1215
  !!appliedUiSchemaOptions.showNavButtons ? (React.createElement("div", { style: buttonWrapperStyle },
1136
1216
  React.createElement(Button, { style: buttonNextStyle, variant: "contained", color: "primary", disabled: activeCategory >= categories.length - 1, onClick: () => handleStep(activeCategory + 1) }, "Next"),
1137
1217
  React.createElement(Button, { style: buttonStyle, color: "secondary", variant: "contained", disabled: activeCategory <= 0, onClick: () => handleStep(activeCategory - 1) }, "Previous"))) : (React.createElement(React.Fragment, null))));
1138
1218
  };
1139
- var MaterialCategorizationStepperLayout = withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationStepperLayoutRenderer));
1219
+ var MaterialCategorizationStepperLayout = withAjvProps(withTranslateProps(withJsonFormsLayoutProps(MaterialCategorizationStepperLayoutRenderer)));
1140
1220
 
1141
1221
  const materialRenderers = [
1142
1222
  {
@@ -1209,5 +1289,5 @@ const materialCells = [
1209
1289
  { tester: materialTimeCellTester, cell: MaterialTimeCell$1 }
1210
1290
  ];
1211
1291
 
1212
- export { CustomizableCells as Customizable, MaterialAllOfRenderer$1 as MaterialAllOfRenderer, MaterialAnyOfRenderer$1 as MaterialAnyOfRenderer, MaterialAnyOfStringOrEnumControl$1 as MaterialAnyOfStringOrEnumControl, MaterialArrayControlRenderer$1 as MaterialArrayControlRenderer, MaterialArrayLayout, MaterialBooleanCell$1 as MaterialBooleanCell, MaterialBooleanControl$1 as MaterialBooleanControl, MaterialBooleanToggleCell$1 as MaterialBooleanToggleCell, MaterialBooleanToggleControl$1 as MaterialBooleanToggleControl, MaterialCategorizationLayout, MaterialDateCell$1 as MaterialDateCell, MaterialDateControl$1 as MaterialDateControl, MaterialDateTimeControl$1 as MaterialDateTimeControl, MaterialEnumArrayRenderer$1 as MaterialEnumArrayRenderer, MaterialEnumCell$1 as MaterialEnumCell, MaterialEnumControl$1 as MaterialEnumControl, MaterialGroupLayout, MaterialHorizontalLayout, MaterialInputControl, MaterialIntegerCell$1 as MaterialIntegerCell, MaterialIntegerControl$1 as MaterialIntegerControl, MaterialLayoutRenderer, MaterialNativeControl$1 as MaterialNativeControl, MaterialNumberCell$1 as MaterialNumberCell, MaterialNumberControl$1 as MaterialNumberControl, MaterialNumberFormatCell$1 as MaterialNumberFormatCell, MaterialObjectRenderer$1 as MaterialObjectRenderer, MaterialOneOfEnumCell$1 as MaterialOneOfEnumCell, MaterialOneOfEnumControl$1 as MaterialOneOfEnumControl, MaterialOneOfRadioGroupControl$1 as MaterialOneOfRadioGroupControl, MaterialOneOfRenderer$1 as MaterialOneOfRenderer, MaterialRadioGroupControl$1 as MaterialRadioGroupControl, MaterialSliderControl$1 as MaterialSliderControl, MaterialTextCell$1 as MaterialTextCell, MaterialTextControl$1 as MaterialTextControl, MaterialTimeCell$1 as MaterialTimeCell, MaterialTimeControl$1 as MaterialTimeControl, MaterialVerticalLayout, MuiCheckbox, MuiInputInteger, MuiInputNumber, MuiInputNumberFormat, MuiInputText, MuiInputTime, MuiSelect, Unwrapped, createOnChangeHandler, getData, materialAllOfControlTester, materialAnyOfControlTester, materialAnyOfStringOrEnumControlTester, materialArrayControlTester, materialArrayLayoutTester, materialBooleanCellTester, materialBooleanControlTester, materialBooleanToggleCellTester, materialBooleanToggleControlTester, materialCategorizationTester, materialCells, materialDateCellTester, materialDateControlTester, materialDateTimeControlTester, materialEnumArrayRendererTester, materialEnumCellTester, materialEnumControlTester, materialGroupTester, materialHorizontalLayoutTester, materialIntegerCellTester, materialIntegerControlTester, materialNativeControlTester, materialNumberCellTester, materialNumberControlTester, materialNumberFormatCellTester, materialObjectControlTester, materialOneOfControlTester, materialOneOfEnumCellTester, materialOneOfEnumControlTester, materialOneOfRadioGroupControlTester, materialRadioGroupControlTester, materialRenderers, materialSliderControlTester, materialTextCellTester, materialTextControlTester, materialTimeCellTester, materialTimeControlTester, materialVerticalLayoutTester, renderLayoutElements, useDebouncedChange, useFocus, withAjvProps };
1292
+ export { CustomizableCells as Customizable, MaterialAllOfRenderer$1 as MaterialAllOfRenderer, MaterialAnyOfRenderer$1 as MaterialAnyOfRenderer, MaterialAnyOfStringOrEnumControl$1 as MaterialAnyOfStringOrEnumControl, MaterialArrayControlRenderer$1 as MaterialArrayControlRenderer, MaterialArrayLayout, MaterialBooleanCell$1 as MaterialBooleanCell, MaterialBooleanControl$1 as MaterialBooleanControl, MaterialBooleanToggleCell$1 as MaterialBooleanToggleCell, MaterialBooleanToggleControl$1 as MaterialBooleanToggleControl, MaterialCategorizationLayout, MaterialDateCell$1 as MaterialDateCell, MaterialDateControl$1 as MaterialDateControl, MaterialDateTimeControl$1 as MaterialDateTimeControl, MaterialEnumArrayRenderer$1 as MaterialEnumArrayRenderer, MaterialEnumCell$1 as MaterialEnumCell, MaterialEnumControl$1 as MaterialEnumControl, MaterialGroupLayout, MaterialHorizontalLayout, MaterialInputControl, MaterialIntegerCell$1 as MaterialIntegerCell, MaterialIntegerControl$1 as MaterialIntegerControl, MaterialLayoutRenderer, MaterialNativeControl$1 as MaterialNativeControl, MaterialNumberCell$1 as MaterialNumberCell, MaterialNumberControl$1 as MaterialNumberControl, MaterialNumberFormatCell$1 as MaterialNumberFormatCell, MaterialObjectRenderer$1 as MaterialObjectRenderer, MaterialOneOfEnumCell$1 as MaterialOneOfEnumCell, MaterialOneOfEnumControl$1 as MaterialOneOfEnumControl, MaterialOneOfRadioGroupControl$1 as MaterialOneOfRadioGroupControl, MaterialOneOfRenderer$1 as MaterialOneOfRenderer, MaterialRadioGroupControl$1 as MaterialRadioGroupControl, MaterialSliderControl$1 as MaterialSliderControl, MaterialTextCell$1 as MaterialTextCell, MaterialTextControl$1 as MaterialTextControl, MaterialTimeCell$1 as MaterialTimeCell, MaterialTimeControl$1 as MaterialTimeControl, MaterialVerticalLayout, MuiCheckbox, MuiInputInteger, MuiInputNumber, MuiInputNumberFormat, MuiInputText, MuiInputTime, MuiSelect, ResettableTextField, Unwrapped, createOnChangeHandler, getData, i18nDefaults, materialAllOfControlTester, materialAnyOfControlTester, materialAnyOfStringOrEnumControlTester, materialArrayControlTester, materialArrayLayoutTester, materialBooleanCellTester, materialBooleanControlTester, materialBooleanToggleCellTester, materialBooleanToggleControlTester, materialCategorizationTester, materialCells, materialDateCellTester, materialDateControlTester, materialDateTimeControlTester, materialEnumArrayRendererTester, materialEnumCellTester, materialEnumControlTester, materialGroupTester, materialHorizontalLayoutTester, materialIntegerCellTester, materialIntegerControlTester, materialNativeControlTester, materialNumberCellTester, materialNumberControlTester, materialNumberFormatCellTester, materialObjectControlTester, materialOneOfControlTester, materialOneOfEnumCellTester, materialOneOfEnumControlTester, materialOneOfRadioGroupControlTester, materialRadioGroupControlTester, materialRenderers, materialSliderControlTester, materialTextCellTester, materialTextControlTester, materialTimeCellTester, materialTimeControlTester, materialVerticalLayoutTester, renderLayoutElements, useDebouncedChange, useFocus, withAjvProps };
1213
1293
  //# sourceMappingURL=jsonforms-react-material.esm.js.map