@iobroker/adapter-react-v5 5.0.8 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/Components/404.d.ts +2 -5
  2. package/Components/404.js +10 -10
  3. package/Components/ColorPicker.d.ts +41 -4
  4. package/Components/ColorPicker.js +35 -32
  5. package/Components/ComplexCron.d.ts +35 -4
  6. package/Components/ComplexCron.js +14 -15
  7. package/Components/CustomModal.d.ts +4 -3
  8. package/Components/CustomModal.js +13 -14
  9. package/Components/FileBrowser.d.ts +116 -4
  10. package/Components/FileBrowser.js +160 -164
  11. package/Components/FileViewer.js +10 -8
  12. package/Components/Icon.d.ts +1 -0
  13. package/Components/Icon.js +11 -4
  14. package/Components/IconPicker.d.ts +5 -1
  15. package/Components/IconPicker.js +47 -49
  16. package/Components/ObjectBrowser.d.ts +12 -15
  17. package/Components/ObjectBrowser.js +331 -326
  18. package/Components/SaveCloseButtons.d.ts +6 -3
  19. package/Components/SaveCloseButtons.js +4 -5
  20. package/Components/Schedule.d.ts +62 -3
  21. package/Components/Schedule.js +112 -117
  22. package/Components/SelectWithIcon.d.ts +17 -4
  23. package/Components/SelectWithIcon.js +11 -7
  24. package/Components/SimpleCron/index.d.ts +19 -3
  25. package/Components/SimpleCron/index.js +8 -9
  26. package/Components/TabContainer.d.ts +3 -4
  27. package/Components/TabContainer.js +3 -7
  28. package/Components/TabContent.d.ts +2 -3
  29. package/Components/TabContent.js +2 -4
  30. package/Components/TableResize.d.ts +26 -3
  31. package/Components/TableResize.js +1 -39
  32. package/Components/TextWithIcon.d.ts +4 -4
  33. package/Components/TextWithIcon.js +6 -7
  34. package/Components/TreeTable.d.ts +42 -5
  35. package/Components/TreeTable.js +39 -37
  36. package/Components/UploadImage.d.ts +13 -4
  37. package/Components/UploadImage.js +11 -13
  38. package/Components/Utils.d.ts +2 -1
  39. package/Components/Utils.js +31 -0
  40. package/Dialogs/ComplexCron.d.ts +11 -3
  41. package/Dialogs/ComplexCron.js +2 -3
  42. package/Dialogs/Confirm.d.ts +20 -7
  43. package/Dialogs/Confirm.js +4 -15
  44. package/Dialogs/Cron.d.ts +14 -3
  45. package/Dialogs/Cron.js +3 -11
  46. package/Dialogs/SelectFile.d.ts +12 -3
  47. package/Dialogs/SelectFile.js +8 -9
  48. package/Dialogs/SelectID.d.ts +1 -1
  49. package/Dialogs/SelectID.js +1 -1
  50. package/Dialogs/SimpleCron.d.ts +10 -3
  51. package/Dialogs/SimpleCron.js +2 -10
  52. package/README.md +74 -0
  53. package/package.json +6 -7
@@ -11,10 +11,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
11
11
  */
12
12
  // please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined
13
13
  const react_1 = __importDefault(require("react"));
14
- const styles_1 = require("@mui/styles");
15
14
  const material_1 = require("@mui/material");
16
15
  const icons_material_1 = require("@mui/icons-material");
17
- const Utils_1 = __importDefault(require("../Components/Utils"));
18
16
  const i18n_1 = __importDefault(require("../i18n"));
19
17
  const FileBrowser_1 = __importDefault(require("../Components/FileBrowser"));
20
18
  const styles = {
@@ -26,7 +24,8 @@ const styles = {
26
24
  height: '95%',
27
25
  },
28
26
  dialogMobile: {
29
- padding: 4,
27
+ // it is sx
28
+ padding: '4px',
30
29
  width: '100%',
31
30
  maxWidth: '100%',
32
31
  maxHeight: 'calc(100% - 16px)',
@@ -89,7 +88,7 @@ class DialogSelectFile extends react_1.default.Component {
89
88
  react_1.default.createElement("span", { key: "selected" },
90
89
  i18n_1.default.t('ra_Selected'),
91
90
  "\u00A0"),
92
- react_1.default.createElement("span", { key: "id", className: this.props.classes.headerID }, this.state.selected),
91
+ react_1.default.createElement("span", { key: "id", style: styles.headerID }, this.state.selected),
93
92
  ];
94
93
  }
95
94
  else {
@@ -97,16 +96,16 @@ class DialogSelectFile extends react_1.default.Component {
97
96
  react_1.default.createElement("span", { key: "selected" },
98
97
  i18n_1.default.t('ra_Selected'),
99
98
  "\u00A0"),
100
- react_1.default.createElement("span", { key: "id", className: this.props.classes.headerID }, i18n_1.default.t('%s items', this.state.selected.length)),
99
+ react_1.default.createElement("span", { key: "id", style: styles.headerID }, i18n_1.default.t('%s items', this.state.selected.length)),
101
100
  ];
102
101
  }
103
102
  }
104
103
  else {
105
104
  title = this.props.title || i18n_1.default.t('ra_Please select file...');
106
105
  }
107
- return react_1.default.createElement(material_1.Dialog, { onClose: () => { }, maxWidth: false, classes: { paper: Utils_1.default.clsx(this.props.classes.dialog, this.props.classes.dialogMobile) }, fullWidth: true, open: !0, "aria-labelledby": "ar_dialog_selectfile_title" },
108
- react_1.default.createElement(material_1.DialogTitle, { id: "ar_dialog_selectfile_title", classes: { root: this.props.classes.titleRoot } }, title),
109
- react_1.default.createElement(material_1.DialogContent, { className: Utils_1.default.clsx(this.props.classes.content, this.props.classes.contentMobile) },
106
+ return react_1.default.createElement(material_1.Dialog, { onClose: () => { }, maxWidth: false, sx: { '& .MuiDialog-paper': Object.assign(Object.assign({}, styles.dialog), styles.dialogMobile) }, fullWidth: true, open: !0, "aria-labelledby": "ar_dialog_selectfile_title" },
107
+ react_1.default.createElement(material_1.DialogTitle, { id: "ar_dialog_selectfile_title", sx: { '&.MuiDialogTitle-root': styles.titleRoot } }, title),
108
+ react_1.default.createElement(material_1.DialogContent, { style: Object.assign(Object.assign({}, styles.content), styles.contentMobile) },
110
109
  react_1.default.createElement(FileBrowser_1.default, { ready: true, imagePrefix: this.props.imagePrefix || this.props.prefix || '../', allowUpload: !!this.props.allowUpload, allowDownload: this.props.allowDownload !== false, allowCreateFolder: !!this.props.allowCreateFolder, allowDelete: !!this.props.allowDelete, allowView: this.props.allowView !== false, showViewTypeButton: this.props.showViewTypeButton !== false, showToolbar: this.props.showToolbar !== false, limitPath: this.props.limitPath, filterFiles: this.props.filterFiles, filterByType: this.props.filterByType, selected: this.props.selected, restrictToFolder: this.props.restrictToFolder, allowNonRestricted: this.props.allowNonRestricted, onSelect: (selected, isDoubleClick, isFolder) => {
111
110
  this.setState({ selected: Array.isArray(selected) ? selected : [selected] }, () => isDoubleClick && (!this.props.selectOnlyFolders || isFolder) && this.handleOk());
112
111
  }, t: this.props.t || i18n_1.default.t, lang: this.props.lang || i18n_1.default.getLanguage(), socket: this.props.socket, themeType: this.props.themeType, themeName: this.props.themeName, showExpertButton: this.props.showExpertButton, expertMode: this.props.expertMode, showTypeSelector: this.props.showTypeSelector })),
@@ -115,4 +114,4 @@ class DialogSelectFile extends react_1.default.Component {
115
114
  react_1.default.createElement(material_1.Button, { color: "grey", variant: "contained", onClick: () => this.handleCancel(), startIcon: react_1.default.createElement(icons_material_1.Cancel, null) }, this.props.cancel || i18n_1.default.t('ra_Cancel'))));
116
115
  }
117
116
  }
118
- exports.default = (0, styles_1.withStyles)(styles)(DialogSelectFile);
117
+ exports.default = DialogSelectFile;
@@ -7,7 +7,7 @@
7
7
  import React, { Component } from 'react';
8
8
  import type Connection from '../Connection';
9
9
  import { ObjectBrowserColumn, ObjectBrowserCustomFilter, ObjectBrowserType } from '../Components/types';
10
- interface SelectIDFilters {
10
+ export interface SelectIDFilters {
11
11
  id?: string;
12
12
  name?: string;
13
13
  room?: string;
@@ -111,7 +111,7 @@ class DialogSelectID extends react_1.Component {
111
111
  return react_1.default.createElement(material_1.Dialog, { onClose: () => { }, maxWidth: false, sx: {
112
112
  '& .MuiDialog-paper': {
113
113
  height: '95%',
114
- padding: 4,
114
+ p: '4px',
115
115
  width: '100%',
116
116
  maxWidth: '100%',
117
117
  maxHeight: 'calc(100% - 16px)',
@@ -6,7 +6,14 @@ interface DialogCronProps {
6
6
  cron?: string;
7
7
  cancel?: string;
8
8
  ok?: string;
9
- classes: Record<string, string>;
10
9
  }
11
- declare const _default: React.JSXElementConstructor<Omit<DialogCronProps, "classes"> & import("@mui/styles").StyledComponentProps<string> & object>;
12
- export default _default;
10
+ interface DialogCronState {
11
+ cron: string;
12
+ }
13
+ declare class DialogSimpleCron extends React.Component<DialogCronProps, DialogCronState> {
14
+ constructor(props: DialogCronProps);
15
+ handleCancel(): void;
16
+ handleOk(): void;
17
+ render(): React.JSX.Element;
18
+ }
19
+ export default DialogSimpleCron;
@@ -4,20 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
- const styles_1 = require("@mui/styles");
8
7
  const material_1 = require("@mui/material");
9
8
  const icons_material_1 = require("@mui/icons-material");
10
9
  const SimpleCron_1 = __importDefault(require("../Components/SimpleCron"));
11
10
  const i18n_1 = __importDefault(require("../i18n"));
12
11
  // Generates cron expression
13
12
  const styles = {
14
- headerID: {
15
- fontWeight: 'bold',
16
- fontStyle: 'italic',
17
- },
18
- radio: {
19
- display: 'inline-block',
20
- },
21
13
  dialogPaper: {
22
14
  height: 'calc(100% - 96px)',
23
15
  },
@@ -47,7 +39,7 @@ class DialogSimpleCron extends react_1.default.Component {
47
39
  this.props.onClose();
48
40
  }
49
41
  render() {
50
- return react_1.default.createElement(material_1.Dialog, { onClose: () => { }, maxWidth: "md", fullWidth: true, classes: { paper: this.props.classes.dialogPaper }, open: !0, "aria-labelledby": "cron-dialog-title" },
42
+ return react_1.default.createElement(material_1.Dialog, { onClose: () => { }, maxWidth: "md", fullWidth: true, sx: { '& .MuiDialog-paper': styles.dialogPaper }, open: !0, "aria-labelledby": "cron-dialog-title" },
51
43
  react_1.default.createElement(material_1.DialogTitle, { id: "cron-dialog-title" }, this.props.title || i18n_1.default.t('ra_Define CRON...')),
52
44
  react_1.default.createElement(material_1.DialogContent, { style: { height: '100%', overflow: 'hidden' } },
53
45
  react_1.default.createElement(SimpleCron_1.default, { cronExpression: this.state.cron, onChange: cron => this.setState({ cron }), language: i18n_1.default.getLanguage() })),
@@ -56,4 +48,4 @@ class DialogSimpleCron extends react_1.default.Component {
56
48
  react_1.default.createElement(material_1.Button, { variant: "contained", onClick: () => this.handleCancel(), color: "grey", startIcon: react_1.default.createElement(icons_material_1.Cancel, null) }, this.props.cancel || i18n_1.default.t('ra_Cancel'))));
57
49
  }
58
50
  }
59
- exports.default = (0, styles_1.withStyles)(styles)(DialogSimpleCron);
51
+ exports.default = DialogSimpleCron;
package/README.md CHANGED
@@ -686,6 +686,76 @@ class JsonComponent extends ConfigGeneric {
686
686
  ...
687
687
  }
688
688
  ```
689
+ ## Migration from v5 to v6
690
+ The main change is that the `withStyles` was removed. So you have to replace all `withStyles` with `sx` or `style` properties.
691
+
692
+ You can read more about sx [here](https://mui.com/system/getting-started/the-sx-prop/).
693
+ - Remove at start of the file `import { withStyles } from '@mui/styles';`
694
+ - Replace at the very end of the file `export default withStyles(styles)(MyComponent);` with `export default MyComponent;`
695
+ - Modify `const styles`:
696
+ Before:
697
+ ```
698
+ const styles: Record<string, any> = (theme: IobTheme) => ({
699
+ dialog: {
700
+ height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,
701
+ padding: theme.spacing(1),
702
+ },
703
+ ...
704
+ });
705
+ ```
706
+
707
+ After:
708
+ ```
709
+ const styles: Record<string, any> = {
710
+ dialog: (theme: IobTheme) => ({
711
+ height: `calc(100% - ${theme => theme.mixins.toolbar.minHeight}px)`,
712
+ p: 1,
713
+ }),
714
+ };
715
+ ```
716
+
717
+ - Modify `className`:
718
+ Before: `<div className={this.props.classes.box}>`
719
+
720
+ After: `<Box component="div" sx={styles.box}>`
721
+
722
+ Before: `<div className={Utils.clsx(this.props.classes.box1, condition && this.props.classes.box2)}>`
723
+
724
+ After: `<Box component="div" sx={Utils.getStyle(this.props.theme, this.props.classes.box1, condition && this.props.classes.box2)}>`
725
+ Or if no one style is a function: `<Box component="div" sx={{ ...this.props.classes.box1, ...(condition ? this.props.classes.box2 : undefined) }}>`
726
+
727
+ Do not use `sx` if the style is not dynamic (not a function). Use `style` instead.
728
+
729
+ Be aware, that all paddings and margins are now in `theme.spacing(1)` format.
730
+ So you have to replace all `padding: 8` with `padding: 1` or with `padding: '8px'`.
731
+
732
+ The best practice is to replace `padding` with `p` and `margin` with `m`, so you will see immediately that it is a padding or margin for `sx` property.
733
+
734
+ - Modify `classes`:
735
+ Before: `<Dialog classes={{ scrollPaper: this.props.classes.dialog, paper: this.props.classes.paper }}>`
736
+
737
+ After: `<Dialog sx={{ '&.MuiDialog-scrollPaper': styles.dialog, '& .MuiDialog-paper': styles.paper }}>`
738
+
739
+ Before: `<Dialog classes={{ scrollPaper: this.props.classes.dialog, paper: this.props.classes.paper }}>`
740
+
741
+ After: `<Dialog sx={{ '&.MuiDialog-scrollPaper': styles.dialog, '& .MuiDialog-paper': styles.paper }}>`
742
+
743
+ Before: `<ListItem classes={{ root: styles.listItem }} >`
744
+
745
+ After: `<ListItem sx={{ '&.MuiListItem-root': styles.listItem }} >`
746
+
747
+ Before: `<Typography component="h2" variant="h6" classes={{ root: styles.typography }}>`
748
+
749
+ After: `<Typography component="h2" variant="h6" sx={{ '&.MuiTypography-root': styles.typography }}>`
750
+
751
+ Before: `<Badge classes={{ 'badge': styles.expertBadge }}>`
752
+
753
+ After: `<Badge sx={{ '& .MuiBadge-badge': styles.expertBadge }}>`
754
+
755
+ Before: `<Tooltip title={this.props.t('ra_Refresh tree')} classes={{ popper: styles.tooltip }}>`
756
+
757
+ After: `<Tooltip title={this.props.t('ra_Refresh tree')} componentsProps={{ popper: { sx: { pointerEvents: 'none' } } }}>`
758
+ Or: `<Tooltip title={this.props.t('ra_Refresh tree')} componentsProps={{ popper: { sx: styles.tooltip } }}>`
689
759
 
690
760
  ## Warning
691
761
  `react-inlinesvg@4.0.5` cannot be used. Use `react-inlinesvg@4.0.3` instead.
@@ -695,6 +765,10 @@ class JsonComponent extends ConfigGeneric {
695
765
  -->
696
766
 
697
767
  ## Changelog
768
+ ### 6.0.1 (2024-06-19)
769
+ * (bluefox) Removed the usage of `withStyles` in favor of `sx` and `style` properties (see [Migration from v5 to v6](#migration-from-v5-to-v6)
770
+ * (bluefox) (BREAKING) Higher version of `@mui/material` (5.15.20) is used
771
+
698
772
  ### 5.0.8 (2024-06-15)
699
773
  * (bluefox) Added `modulefederation.admin.config.js` for module federation
700
774
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iobroker/adapter-react-v5",
3
- "version": "5.0.8",
3
+ "version": "6.0.1",
4
4
  "description": "React classes to develop admin interfaces for ioBroker with react.",
5
5
  "author": {
6
6
  "name": "Denis Haev (bluefox)",
@@ -30,12 +30,11 @@
30
30
  "@emotion/react": "^11.11.4",
31
31
  "@emotion/styled": "^11.11.5",
32
32
  "@iobroker/socket-client": "^2.4.18",
33
- "@iobroker/types": "^6.0.4",
34
- "@iobroker/js-controller-common": "^6.0.4",
35
- "@iobroker/js-controller-common-db": "^6.0.4",
33
+ "@iobroker/types": "^6.0.5",
34
+ "@iobroker/js-controller-common": "^6.0.5",
35
+ "@iobroker/js-controller-common-db": "^6.0.5",
36
36
  "@mui/icons-material": "^5.15.20",
37
- "@mui/material": "5.14.14",
38
- "@mui/styles": "5.14.14",
37
+ "@mui/material": "^5.15.20",
39
38
  "@mui/x-date-pickers": "^7.7.0",
40
39
  "@sentry/browser": "^8.9.2",
41
40
  "react-color": "^2.19.3",
@@ -43,6 +42,6 @@
43
42
  "react-cropper": "^2.3.3",
44
43
  "react-dropzone": "^14.2.3",
45
44
  "react-icons": "^5.2.1",
46
- "react-inlinesvg": "4.0.3"
45
+ "react-inlinesvg": "4.1.3"
47
46
  }
48
47
  }