@iobroker/adapter-react-v5 0.0.3 → 1.0.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 (48) hide show
  1. package/Components/ColorPicker.js +6 -2
  2. package/Components/ColorPicker.js.map +1 -1
  3. package/Components/ComplexCron.js +1 -1
  4. package/Components/ComplexCron.js.map +1 -1
  5. package/Components/FileBrowser.js +6 -6
  6. package/Components/FileBrowser.js.map +1 -1
  7. package/Components/FileViewer.js +12 -20
  8. package/Components/FileViewer.js.map +1 -1
  9. package/Components/Icon.js +1 -1
  10. package/Components/Icon.js.map +1 -1
  11. package/Components/IconPicker.js +1 -2
  12. package/Components/IconPicker.js.map +1 -1
  13. package/Components/IconSelector.js.map +1 -1
  14. package/Components/Image.js +2 -1
  15. package/Components/Image.js.map +1 -1
  16. package/Components/Loader.js +8 -14
  17. package/Components/Loader.js.map +1 -1
  18. package/Components/Logo.js +8 -8
  19. package/Components/Logo.js.map +1 -1
  20. package/Components/MDUtils.js.map +1 -1
  21. package/Components/ObjectBrowser.js +307 -68
  22. package/Components/ObjectBrowser.js.map +1 -1
  23. package/Components/Schedule.js +1 -2
  24. package/Components/Schedule.js.map +1 -1
  25. package/Components/SelectWithIcon.js +40 -4
  26. package/Components/SelectWithIcon.js.map +1 -1
  27. package/Components/TextWithIcon.js +5 -3
  28. package/Components/TextWithIcon.js.map +1 -1
  29. package/Dialogs/ComplexCron.js +1 -1
  30. package/Dialogs/ComplexCron.js.map +1 -1
  31. package/Dialogs/Confirm.js +1 -1
  32. package/Dialogs/Confirm.js.map +1 -1
  33. package/Dialogs/Cron.js +1 -1
  34. package/Dialogs/Cron.js.map +1 -1
  35. package/Dialogs/Error.js +1 -1
  36. package/Dialogs/Error.js.map +1 -1
  37. package/Dialogs/Message.js +1 -1
  38. package/Dialogs/Message.js.map +1 -1
  39. package/Dialogs/SelectID.js +1 -1
  40. package/Dialogs/SelectID.js.map +1 -1
  41. package/Dialogs/SimpleCron.js +1 -1
  42. package/Dialogs/SimpleCron.js.map +1 -1
  43. package/Dialogs/TextInput.js +11 -11
  44. package/Dialogs/TextInput.js.map +1 -1
  45. package/GenericApp.js +7 -4
  46. package/GenericApp.js.map +1 -1
  47. package/README.md +31 -0
  48. package/package.json +4 -4
@@ -95,17 +95,6 @@ var EXTENSIONS = {
95
95
  code: ['js', 'json'],
96
96
  txt: ['log', 'txt', 'html', 'css', 'xml']
97
97
  };
98
- exports.EXTENSIONS = EXTENSIONS;
99
-
100
- function getFileExtension(fileName) {
101
- var pos = fileName.lastIndexOf('.');
102
-
103
- if (pos !== -1) {
104
- return fileName.substring(pos + 1).toLowerCase();
105
- } else {
106
- return null;
107
- }
108
- }
109
98
  /**
110
99
  * @typedef {object} FileViewerProps
111
100
  * @property {string} [key] The key to identify this component.
@@ -118,6 +107,7 @@ function getFileExtension(fileName) {
118
107
  * @extends {React.Component<FileViewerProps>}
119
108
  */
120
109
 
110
+ exports.EXTENSIONS = EXTENSIONS;
121
111
 
122
112
  var FileViewer = /*#__PURE__*/function (_React$Component) {
123
113
  _inherits(FileViewer, _React$Component);
@@ -133,8 +123,7 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
133
123
  _classCallCheck(this, FileViewer);
134
124
 
135
125
  _this = _super.call(this, props);
136
- _this.ext = getFileExtension(_this.props.href); // todo: replace later with Utils.getFileExtension
137
-
126
+ _this.ext = _Utils["default"].getFileExtension(_this.props.href);
138
127
  _this.state = {
139
128
  text: null,
140
129
  code: null,
@@ -179,7 +168,9 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
179
168
  className: this.props.classes.textarea,
180
169
  multiline: true,
181
170
  value: this.state.code,
182
- readOnly: true
171
+ InputProps: {
172
+ readOnly: true
173
+ }
183
174
  });
184
175
  } else if (this.state.text !== null) {
185
176
  return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
@@ -187,7 +178,9 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
187
178
  className: this.props.classes.textarea,
188
179
  value: this.state.code,
189
180
  multiline: true,
190
- readOnly: true
181
+ InputProps: {
182
+ readOnly: true
183
+ }
191
184
  });
192
185
  }
193
186
  }
@@ -198,12 +191,12 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
198
191
 
199
192
  return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
200
193
  className: this.props.classes.dialog,
201
- open: this.props.href,
194
+ open: !!this.props.href,
202
195
  onClose: function onClose() {
203
196
  return _this2.props.onClose();
204
197
  },
205
198
  fullWidth: true,
206
- fullScreen: true,
199
+ fullScreen: this.props.fullScreen !== undefined ? this.props.fullScreen : true,
207
200
  "aria-labelledby": "form-dialog-title"
208
201
  }, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
209
202
  id: "form-dialog-title"
@@ -231,10 +224,9 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
231
224
 
232
225
  FileViewer.propTypes = {
233
226
  t: _propTypes["default"].func,
234
- lang: _propTypes["default"].string,
235
- expertMode: _propTypes["default"].bool,
236
227
  onClose: _propTypes["default"].func,
237
- href: _propTypes["default"].string.isRequired
228
+ href: _propTypes["default"].string.isRequired,
229
+ fullScreen: _propTypes["default"].bool
238
230
  };
239
231
  /** @type {typeof FileViewer} */
240
232
 
@@ -1 +1 @@
1
- {"version":3,"sources":["FileViewer.js"],"names":["withWidth","WrappedComponent","props","styles","theme","dialog","height","maxHeight","maxWidth","content","textAlign","textarea","width","img","objectFit","EXTENSIONS","images","code","txt","getFileExtension","fileName","pos","lastIndexOf","substring","toLowerCase","FileViewer","ext","href","state","text","copyPossible","includes","fetch","then","response","data","setState","e","target","onerror","src","NoImage","classes","onClose","t","getContent","Utils","copyToClipboard","React","Component","propTypes","PropTypes","func","lang","string","expertMode","bool","isRequired","_export"],"mappings":"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","sourcesContent":["import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport TextField from '@mui/material/TextField';\n\nimport NoImage from '../assets/no_icon.svg';\nimport Utils from './Utils';\n\n// Icons\nimport {FaCopy as CopyIcon} from 'react-icons/fa';\nimport CloseIcon from '@mui/icons-material/Close';\n\n// FIXME checkout https://mui.com/components/use-media-query/#migrating-from-withwidth\nconst withWidth = () => (WrappedComponent) => (props) => <WrappedComponent {...props} width=\"xs\" />;\n\nconst styles = theme => ({\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n content: {\n textAlign: 'center',\n },\n textarea: {\n width: '100%',\n height: '100%',\n },\n img: {\n width: 'auto',\n height: 'calc(100% - 5px)',\n objectFit: 'contain',\n }\n});\n\nexport const EXTENSIONS = {\n images: ['png', 'jpg', 'svg', 'jpeg', 'jpg'],\n code: ['js', 'json'],\n txt: ['log', 'txt', 'html', 'css', 'xml'],\n};\n\nfunction getFileExtension(fileName) {\n const pos = fileName.lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n } else {\n return null;\n }\n}\n\n/**\n * @typedef {object} FileViewerProps\n * @property {string} [key] The key to identify this component.\n * @property {import('../types').Translator} t Translation function\n * @property {ioBroker.Languages} [lang] The selected language.\n * @property {boolean} [expertMode] Is expert mode enabled? (default: false)\n * @property {() => void} onClose Callback when the viewer is closed.\n * @property {string} href The URL to the file to be displayed.\n *\n * @extends {React.Component<FileViewerProps>}\n */\nclass FileViewer extends React.Component {\n /**\n * @param {Readonly<FileViewerProps>} props\n */\n constructor(props) {\n super(props);\n\n this.ext = getFileExtension(this.props.href); // todo: replace later with Utils.getFileExtension\n\n this.state = {\n text: null,\n code: null,\n copyPossible: EXTENSIONS.code.includes(this.ext) || EXTENSIONS.txt.includes(this.ext)\n };\n\n if (this.state.copyPossible) {\n fetch(this.props.href)\n .then(response => response.text())\n .then(data => {\n if (EXTENSIONS.txt.includes(this.ext)) {\n this.setState({text: data});\n } else if (EXTENSIONS.code.includes(this.ext)) {\n this.setState({code: data});\n }\n });\n }\n }\n\n static getDerivedStateFromProps() {\n\n }\n\n getContent() {\n if (EXTENSIONS.images.includes(this.ext)) {\n return <img\n onError={ e => {\n e.target.onerror = null;\n e.target.src = NoImage\n } }\n className={ this.props.classes.img }\n src={ this.props.href } alt={ this.props.href }/>;\n } else if (this.state.code !== null) {\n return <TextField\n variant=\"standard\" \n className={ this.props.classes.textarea }\n multiline\n value={ this.state.code }\n readOnly={true}/>;\n } else if (this.state.text !== null) {\n return <TextField\n variant=\"standard\" \n className={ this.props.classes.textarea }\n value={ this.state.code }\n multiline\n readOnly={true}/>;\n }\n }\n\n render() {\n return <Dialog\n className={ this.props.classes.dialog }\n open={ this.props.href }\n onClose={ () => this.props.onClose() }\n fullWidth={ true }\n fullScreen={ true }\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{ this.props.t('View: %s', this.props.href) }</DialogTitle>\n <DialogContent className={ this.props.classes.content }>\n { this.getContent() }\n </DialogContent>\n <DialogActions>\n { this.state.copyPossible ? <Button color=\"grey\" onClick={e => Utils.copyToClipboard(this.state.text || this.state.code, e) } >\n <CopyIcon />\n { this.props.t('Copy content') }\n </Button> : null }\n\n <Button onClick={() => this.props.onClose()} color=\"primary\">\n <CloseIcon />\n { this.props.t('Close') }\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nFileViewer.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n expertMode: PropTypes.bool,\n onClose: PropTypes.func,\n href: PropTypes.string.isRequired\n};\n\n/** @type {typeof FileViewer} */\nconst _export = withWidth()(withStyles(styles)(FileViewer));\nexport default _export;\n"],"file":"FileViewer.js"}
1
+ {"version":3,"sources":["FileViewer.js"],"names":["withWidth","WrappedComponent","props","styles","theme","dialog","height","maxHeight","maxWidth","content","textAlign","textarea","width","img","objectFit","EXTENSIONS","images","code","txt","FileViewer","ext","Utils","getFileExtension","href","state","text","copyPossible","includes","fetch","then","response","data","setState","e","target","onerror","src","NoImage","classes","readOnly","onClose","fullScreen","undefined","t","getContent","copyToClipboard","React","Component","propTypes","PropTypes","func","string","isRequired","bool","_export"],"mappings":"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","sourcesContent":["import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport TextField from '@mui/material/TextField';\n\nimport NoImage from '../assets/no_icon.svg';\nimport Utils from './Utils';\n\n// Icons\nimport {FaCopy as CopyIcon} from 'react-icons/fa';\nimport CloseIcon from '@mui/icons-material/Close';\n\n// FIXME checkout https://mui.com/components/use-media-query/#migrating-from-withwidth\nconst withWidth = () => WrappedComponent => props => <WrappedComponent {...props} width=\"xs\" />;\n\nconst styles = theme => ({\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n content: {\n textAlign: 'center',\n },\n textarea: {\n width: '100%',\n height: '100%',\n },\n img: {\n width: 'auto',\n height: 'calc(100% - 5px)',\n objectFit: 'contain',\n }\n});\n\nexport const EXTENSIONS = {\n images: ['png', 'jpg', 'svg', 'jpeg', 'jpg'],\n code: ['js', 'json'],\n txt: ['log', 'txt', 'html', 'css', 'xml'],\n};\n\n/**\n * @typedef {object} FileViewerProps\n * @property {string} [key] The key to identify this component.\n * @property {import('../types').Translator} t Translation function\n * @property {ioBroker.Languages} [lang] The selected language.\n * @property {boolean} [expertMode] Is expert mode enabled? (default: false)\n * @property {() => void} onClose Callback when the viewer is closed.\n * @property {string} href The URL to the file to be displayed.\n *\n * @extends {React.Component<FileViewerProps>}\n */\nclass FileViewer extends React.Component {\n /**\n * @param {Readonly<FileViewerProps>} props\n */\n constructor(props) {\n super(props);\n\n this.ext = Utils.getFileExtension(this.props.href);\n\n this.state = {\n text: null,\n code: null,\n copyPossible: EXTENSIONS.code.includes(this.ext) || EXTENSIONS.txt.includes(this.ext),\n };\n\n if (this.state.copyPossible) {\n fetch(this.props.href)\n .then(response => response.text())\n .then(data => {\n if (EXTENSIONS.txt.includes(this.ext)) {\n this.setState({ text: data });\n } else if (EXTENSIONS.code.includes(this.ext)) {\n this.setState({ code: data });\n }\n });\n }\n }\n\n static getDerivedStateFromProps() {\n\n }\n\n getContent() {\n if (EXTENSIONS.images.includes(this.ext)) {\n return <img\n onError={ e => {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n className={ this.props.classes.img }\n src={ this.props.href }\n alt={ this.props.href }\n />;\n } else if (this.state.code !== null) {\n return <TextField\n variant=\"standard\"\n className={ this.props.classes.textarea }\n multiline\n value={ this.state.code }\n InputProps={{\n readOnly: true,\n }}\n />;\n } else if (this.state.text !== null) {\n return <TextField\n variant=\"standard\"\n className={ this.props.classes.textarea }\n value={ this.state.code }\n multiline\n InputProps={{\n readOnly: true,\n }}\n />;\n }\n }\n\n render() {\n return <Dialog\n className={ this.props.classes.dialog }\n open={ !!this.props.href }\n onClose={ () => this.props.onClose() }\n fullWidth\n fullScreen={this.props.fullScreen !== undefined ? this.props.fullScreen : true}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{ this.props.t('View: %s', this.props.href) }</DialogTitle>\n <DialogContent className={ this.props.classes.content }>\n { this.getContent() }\n </DialogContent>\n <DialogActions>\n { this.state.copyPossible ? <Button color=\"grey\" onClick={e => Utils.copyToClipboard(this.state.text || this.state.code, e) } >\n <CopyIcon />\n { this.props.t('Copy content') }\n </Button> : null }\n\n <Button onClick={() => this.props.onClose()} color=\"primary\">\n <CloseIcon />\n { this.props.t('Close') }\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nFileViewer.propTypes = {\n t: PropTypes.func,\n\n onClose: PropTypes.func,\n href: PropTypes.string.isRequired,\n fullScreen: PropTypes.bool,\n};\n\n/** @type {typeof FileViewer} */\nconst _export = withWidth()(withStyles(styles)(FileViewer));\nexport default _export;\n"],"file":"FileViewer.js"}
@@ -223,7 +223,7 @@ var Icon = /*#__PURE__*/function (_React$Component) {
223
223
  Icon.propTypes = {
224
224
  color: _propTypes["default"].string,
225
225
  title: _propTypes["default"].string,
226
- src: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
226
+ src: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]).isRequired,
227
227
  className: _propTypes["default"].string,
228
228
  imagePrefix: _propTypes["default"].string,
229
229
  style: _propTypes["default"].object,
@@ -1 +1 @@
1
- {"version":3,"sources":["Icon.js"],"names":["getSystemIcon","obj","icon","id","_id","startsWith","endsWith","type","getSelectIdIcon","imagePrefix","src","common","cIcon","includes","instance","name","split","Icon","props","length","title","undefined","Object","assign","height","marginTop","styleUTF8","style","Utils","clsx","className","width","React","Component","propTypes","color","PropTypes","string","oneOfType","object"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAEO,SAASA,aAAT,CAAuBC,GAAvB,EAA4B;AAC/B,MAAIC,IAAJ;AACA,MAAMC,EAAE,GAAGF,GAAH,aAAGA,GAAH,uBAAGA,GAAG,CAAEG,GAAhB;;AAEA,MAAI,CAACD,EAAL,EAAS;AACL,WAAO,IAAP;AACH,GAN8B,CAQ/B;;;AACA,MAAIA,EAAE,CAACE,UAAH,CAAc,UAAd,KAA8BF,EAAE,KAAK,QAAzC,EAAoD;AAChDD,IAAAA,IAAI,gBAAG,gCAAC,gCAAD;AAAY,MAAA,SAAS,EAAC;AAAtB,MAAP;AACH,GAFD,MAEO,IAAIC,EAAE,KAAK,YAAP,IAAuBA,EAAE,KAAK,cAAlC,EAAkD;AACrDD,IAAAA,IAAI,gBAAG,gCAAC,iBAAD;AAAW,MAAA,SAAS,EAAC;AAArB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,KAAK,OAAP,IAAkBA,EAAE,KAAK,SAA7B,EAAwC;AAC3CD,IAAAA,IAAI,gBAAG,gCAAC,qBAAD;AAAW,MAAA,SAAS,EAAC;AAArB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,KAAK,gBAAX,EAA6B;AAChCD,IAAAA,IAAI,gBAAG,gCAAC,gCAAD;AAAY,MAAA,SAAS,EAAC;AAAtB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,KAAK,cAAX,EAA2B;AAC9BD,IAAAA,IAAI,gBAAG,gCAAC,gCAAD;AAAW,MAAA,SAAS,EAAC;AAArB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,KAAK,aAAX,EAA0B;AAC7BD,IAAAA,IAAI,gBAAG,gCAAC,0BAAD;AAAU,MAAA,SAAS,EAAC;AAApB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,KAAK,aAAX,EAA0B;AAC7BD,IAAAA,IAAI,gBAAG,gCAAC,kBAAD;AAAU,MAAA,SAAS,EAAC;AAApB,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,CAACG,QAAH,CAAY,aAAZ,KAA8BH,EAAE,CAACG,QAAH,CAAY,YAAZ,CAAlC,EAA6D;AAChEJ,IAAAA,IAAI,gBAAG,gCAAC,gBAAD;AAAgB,MAAA,SAAS,EAAC;AAA1B,MAAP;AACH,GAFM,MAEA,IAAIC,EAAE,CAACG,QAAH,CAAY,OAAZ,CAAJ,EAA0B;AAC7BJ,IAAAA,IAAI,gBAAG,gCAAC,gBAAD;AAAU,MAAA,SAAS,EAAC;AAApB,MAAP;AACH,GAFM,MAEA,IAAI,CAAAD,GAAG,SAAH,IAAAA,GAAG,WAAH,YAAAA,GAAG,CAAEM,IAAL,MAAc,MAAlB,EAA0B;AAC7BL,IAAAA,IAAI,gBAAG,gCAAC,uBAAD;AAAU,MAAA,SAAS,EAAC;AAApB,MAAP;AACH;;AAED,SAAOA,IAAI,IAAI,IAAf;AACH;;AAEM,SAASM,eAAT,CAAyBP,GAAzB,EAA8BQ,WAA9B,EAA2C;AAC9CA,EAAAA,WAAW,GAAGA,WAAW,IAAI,GAA7B,CAD8C,CACb;;AACjC,MAAIC,GAAG,GAAG,EAAV;AACA,MAAMC,MAAM,GAAGV,GAAH,aAAGA,GAAH,uBAAGA,GAAG,CAAEU,MAApB;;AAEA,MAAIA,MAAJ,EAAY;AACR,QAAMC,KAAK,GAAGD,MAAM,CAACT,IAArB;;AACA,QAAIU,KAAJ,EAAW;AACP,UAAI,CAACA,KAAK,CAACP,UAAN,CAAiB,aAAjB,CAAL,EAAsC;AAClC,YAAIO,KAAK,CAACC,QAAN,CAAe,GAAf,CAAJ,EAAyB;AACrB,cAAIC,QAAJ;;AACA,cAAIb,GAAG,CAACM,IAAJ,KAAa,UAAb,IAA2BN,GAAG,CAACM,IAAJ,KAAa,SAA5C,EAAuD;AACnDG,YAAAA,GAAG,GAAGD,WAAW,GAAG,WAAd,GAA4BE,MAAM,CAACI,IAAnC,GAA0C,GAA1C,GAAgDH,KAAtD;AACH,WAFD,MAEO,IAAIX,GAAG,CAACG,GAAJ,IAAWH,GAAG,CAACG,GAAJ,CAAQC,UAAR,CAAmB,iBAAnB,CAAf,EAAsD;AACzDS,YAAAA,QAAQ,GAAGb,GAAG,CAACG,GAAJ,CAAQY,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAX;;AACA,gBAAIJ,KAAK,CAAC,CAAD,CAAL,KAAa,GAAjB,EAAsB;AAClBE,cAAAA,QAAQ,CAAC,CAAD,CAAR,IAAeF,KAAf;AACH,aAFD,MAEO;AACHE,cAAAA,QAAQ,CAAC,CAAD,CAAR,IAAe,MAAMF,KAArB;AACH;;AACDF,YAAAA,GAAG,GAAGD,WAAW,GAAG,WAAd,GAA4BK,QAAQ,CAAC,CAAD,CAA1C;AACH,WARM,MAQA;AACHA,YAAAA,QAAQ,GAAGb,GAAG,CAACG,GAAJ,CAAQY,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAX;;AACA,gBAAIJ,KAAK,CAAC,CAAD,CAAL,KAAa,GAAjB,EAAsB;AAClBE,cAAAA,QAAQ,CAAC,CAAD,CAAR,IAAeF,KAAf;AACH,aAFD,MAEO;AACHE,cAAAA,QAAQ,CAAC,CAAD,CAAR,IAAe,MAAMF,KAArB;AACH;;AACDF,YAAAA,GAAG,GAAGD,WAAW,GAAG,WAAd,GAA4BK,QAAQ,CAAC,CAAD,CAA1C;AACH;AACJ,SArBD,MAqBO;AACH,iBAAO,IAAP;AACH;AACJ,OAzBD,MAyBO;AACH;AACAJ,QAAAA,GAAG,GAAGE,KAAN;AACH;AACJ;AACJ;;AAED,SAAOF,GAAG,IAAI,IAAd;AACH;;IAEKO,I;;;;;;;;;;;;;WACF,kBAAS;AACL,UAAI,KAAKC,KAAL,CAAWR,GAAf,EAAoB;AAChB,YAAI,OAAO,KAAKQ,KAAL,CAAWR,GAAlB,KAA0B,QAA9B,EAAwC;AACpC,cAAI,KAAKQ,KAAL,CAAWR,GAAX,CAAeS,MAAf,GAAwB,CAA5B,EAA+B;AAC3B,gCAAO;AAAM,cAAA,KAAK,EAAE,KAAKD,KAAL,CAAWE,KAAX,IAAoBC,SAAjC;AAA4C,cAAA,KAAK,EAAEC,MAAM,CAACC,MAAP,CAAc;AAACC,gBAAAA,MAAM,EAAE,EAAT;AAAaC,gBAAAA,SAAS,EAAE,CAAC;AAAzB,eAAd,EAA2C,KAAKP,KAAL,CAAWQ,SAAX,IAAwB,KAAKR,KAAL,CAAWS,KAA9E,CAAnD;AAAyI,cAAA,SAAS,EAAGC,kBAAMC,IAAN,CAAW,KAAKX,KAAL,CAAWY,SAAtB,EAAiC,SAAjC;AAArJ,eAAoM,KAAKZ,KAAL,CAAWR,GAA/M,CAAP,CAD2B,CACwM;AACtO,WAFD,MAEO;AACH,gBAAI,KAAKQ,KAAL,CAAWR,GAAX,CAAeL,UAAf,CAA0B,gBAA1B,CAAJ,EAAiD;AAAA;;AAC7C,kCAAO,gCAAC,0BAAD;AAAK,gBAAA,KAAK,EAAE,KAAKa,KAAL,CAAWE,KAAX,IAAoBC,SAAhC;AAA2C,gBAAA,GAAG,EAAE,KAAKH,KAAL,CAAWR,GAA3D;AAAgE,gBAAA,SAAS,EAAGkB,kBAAMC,IAAN,CAAW,KAAKX,KAAL,CAAWY,SAAtB,EAAiC,SAAjC,CAA5E;AAA0H,gBAAA,KAAK,EAAE,2BAAKZ,KAAL,CAAWS,KAAX,wEAAkBI,KAAlB,KAA2B,EAA5J;AAAgK,gBAAA,MAAM,EAAE,4BAAKb,KAAL,CAAWS,KAAX,0EAAkBH,MAAlB,4BAA4B,KAAKN,KAAL,CAAWS,KAAvC,uDAA4B,mBAAkBI,KAA9C,KAAuD,EAA/N;AAAmO,gBAAA,KAAK,EAAE,KAAKb,KAAL,CAAWS,KAAX,IAAoB;AAA9P,gBAAP;AACH,aAFD,MAEO;AACH,kCAAO;AAAK,gBAAA,KAAK,EAAE,KAAKT,KAAL,CAAWE,KAAX,IAAoBC,SAAhC;AAA2C,gBAAA,KAAK,EAAE,KAAKH,KAAL,CAAWS,KAAX,IAAoB,EAAtE;AAA0E,gBAAA,SAAS,EAAGC,kBAAMC,IAAN,CAAW,KAAKX,KAAL,CAAWY,SAAtB,EAAiC,SAAjC,CAAtF;AAAoI,gBAAA,GAAG,EAAG,KAAKZ,KAAL,CAAWR,GAArJ;AAA2J,gBAAA,GAAG,EAAC;AAA/J,gBAAP;AACH;AACJ;AACJ,SAVD,MAUO;AACH,iBAAO,KAAKQ,KAAL,CAAWR,GAAlB;AACH;AACJ,OAdD,MAcO;AACH,eAAO,IAAP;AACH;AACJ;;;;EAnBcsB,kBAAMC,S;;AAsBzBhB,IAAI,CAACiB,SAAL,GAAiB;AACbC,EAAAA,KAAK,EAAEC,sBAAUC,MADJ;AAEbjB,EAAAA,KAAK,EAAEgB,sBAAUC,MAFJ;AAGb3B,EAAAA,GAAG,EAAE0B,sBAAUE,SAAV,CAAoB,CAACF,sBAAUC,MAAX,EAAmBD,sBAAUG,MAA7B,CAApB,CAHQ;AAIbT,EAAAA,SAAS,EAAEM,sBAAUC,MAJR;AAKb5B,EAAAA,WAAW,EAAE2B,sBAAUC,MALV;AAMbV,EAAAA,KAAK,EAAES,sBAAUG,MANJ;AAObb,EAAAA,SAAS,EAAEU,sBAAUG;AAPR,CAAjB;eAUetB,I","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nimport IconSystem from '@mui/icons-material/SettingsApplications';\nimport IconPhoto from '@mui/icons-material/Photo';\nimport IconGroup from '@mui/icons-material/SupervisedUserCircle';\nimport IconUser from '@mui/icons-material/PersonOutlined';\nimport IconHost from '@mui/icons-material/Router';\nimport IconConnection from '@mui/icons-material/Wifi';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconMeta from '@mui/icons-material/Description';\nimport IconAlias from '../icons/IconAlias';\n\nimport Utils from './Utils';\n\nexport function getSystemIcon(obj) {\n let icon;\n const id = obj?._id;\n\n if (!id) {\n return null;\n }\n\n // system or design have special icons\n if (id.startsWith('_design/') || (id === 'system')) {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === '0_userdata' || id === '0_userdata.0') {\n icon = <IconPhoto className=\"iconOwn\" />;\n } else if (id === 'alias' || id === 'alias.0') {\n icon = <IconAlias className=\"iconOwn\" />;\n } else if (id === 'system.adapter') {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === 'system.group') {\n icon = <IconGroup className=\"iconOwn\" />;\n } else if (id === 'system.user') {\n icon = <IconUser className=\"iconOwn\" />;\n } else if (id === 'system.host') {\n icon = <IconHost className=\"iconOwn\" />;\n } else if (id.endsWith('.connection') || id.endsWith('.connected')) {\n icon = <IconConnection className=\"iconOwn\" />;\n } else if (id.endsWith('.info')) {\n icon = <IconInfo className=\"iconOwn\" />;\n } else if (obj?.type === 'meta') {\n icon = <IconMeta className=\"iconOwn\" />;\n }\n\n return icon || null;\n}\n\nexport function getSelectIdIcon(obj, imagePrefix) {\n imagePrefix = imagePrefix || '.';//http://localhost:8081';\n let src = '';\n const common = obj?.common;\n\n if (common) {\n const cIcon = common.icon;\n if (cIcon) {\n if (!cIcon.startsWith('data:image/')) {\n if (cIcon.includes('.')) {\n let instance;\n if (obj.type === 'instance' || obj.type === 'adapter') {\n src = imagePrefix + '/adapter/' + common.name + '/' + cIcon;\n } else if (obj._id && obj._id.startsWith('system.adapter.')) {\n instance = obj._id.split('.', 3);\n if (cIcon[0] === '/') {\n instance[2] += cIcon;\n } else {\n instance[2] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[2];\n } else {\n instance = obj._id.split('.', 2);\n if (cIcon[0] === '/') {\n instance[0] += cIcon;\n } else {\n instance[0] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[0];\n }\n } else {\n return null;\n }\n } else {\n // base 64 image\n src = cIcon;\n }\n }\n }\n\n return src || null;\n}\n\nclass Icon extends React.Component {\n render() {\n if (this.props.src) {\n if (typeof this.props.src === 'string') {\n if (this.props.src.length < 3) {\n return <span title={this.props.title || undefined} style={Object.assign({height: 27, marginTop: -8}, this.props.styleUTF8 || this.props.style)} className={ Utils.clsx(this.props.className, 'iconOwn') }>{this.props.src}</span>; // utf-8 char\n } else {\n if (this.props.src.startsWith('data:image/svg')) {\n return <SVG title={this.props.title || undefined} src={this.props.src} className={ Utils.clsx(this.props.className, 'iconOwn') } width={this.props.style?.width || 28} height={this.props.style?.height || this.props.style?.width || 28} style={this.props.style || {}}/>;\n } else {\n return <img title={this.props.title || undefined} style={this.props.style || {}} className={ Utils.clsx(this.props.className, 'iconOwn') } src={ this.props.src } alt=\"\" />;\n }\n }\n } else {\n return this.props.src;\n }\n } else {\n return null;\n }\n }\n}\n\nIcon.propTypes = {\n color: PropTypes.string,\n title: PropTypes.string,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n style: PropTypes.object,\n styleUTF8: PropTypes.object,\n};\n\nexport default Icon;"],"file":"Icon.js"}
1
+ {"version":3,"sources":["Icon.js"],"names":["getSystemIcon","obj","icon","id","_id","startsWith","endsWith","type","getSelectIdIcon","imagePrefix","src","common","cIcon","includes","instance","name","split","Icon","props","length","title","undefined","Object","assign","height","marginTop","styleUTF8","style","Utils","clsx","className","width","React","Component","propTypes","color","PropTypes","string","oneOfType","object","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nimport IconSystem from '@mui/icons-material/SettingsApplications';\nimport IconPhoto from '@mui/icons-material/Photo';\nimport IconGroup from '@mui/icons-material/SupervisedUserCircle';\nimport IconUser from '@mui/icons-material/PersonOutlined';\nimport IconHost from '@mui/icons-material/Router';\nimport IconConnection from '@mui/icons-material/Wifi';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconMeta from '@mui/icons-material/Description';\nimport IconAlias from '../icons/IconAlias';\n\nimport Utils from './Utils';\n\nexport function getSystemIcon(obj) {\n let icon;\n const id = obj?._id;\n\n if (!id) {\n return null;\n }\n\n // system or design have special icons\n if (id.startsWith('_design/') || (id === 'system')) {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === '0_userdata' || id === '0_userdata.0') {\n icon = <IconPhoto className=\"iconOwn\" />;\n } else if (id === 'alias' || id === 'alias.0') {\n icon = <IconAlias className=\"iconOwn\" />;\n } else if (id === 'system.adapter') {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === 'system.group') {\n icon = <IconGroup className=\"iconOwn\" />;\n } else if (id === 'system.user') {\n icon = <IconUser className=\"iconOwn\" />;\n } else if (id === 'system.host') {\n icon = <IconHost className=\"iconOwn\" />;\n } else if (id.endsWith('.connection') || id.endsWith('.connected')) {\n icon = <IconConnection className=\"iconOwn\" />;\n } else if (id.endsWith('.info')) {\n icon = <IconInfo className=\"iconOwn\" />;\n } else if (obj?.type === 'meta') {\n icon = <IconMeta className=\"iconOwn\" />;\n }\n\n return icon || null;\n}\n\nexport function getSelectIdIcon(obj, imagePrefix) {\n imagePrefix = imagePrefix || '.';//http://localhost:8081';\n let src = '';\n const common = obj?.common;\n\n if (common) {\n const cIcon = common.icon;\n if (cIcon) {\n if (!cIcon.startsWith('data:image/')) {\n if (cIcon.includes('.')) {\n let instance;\n if (obj.type === 'instance' || obj.type === 'adapter') {\n src = imagePrefix + '/adapter/' + common.name + '/' + cIcon;\n } else if (obj._id && obj._id.startsWith('system.adapter.')) {\n instance = obj._id.split('.', 3);\n if (cIcon[0] === '/') {\n instance[2] += cIcon;\n } else {\n instance[2] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[2];\n } else {\n instance = obj._id.split('.', 2);\n if (cIcon[0] === '/') {\n instance[0] += cIcon;\n } else {\n instance[0] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[0];\n }\n } else {\n return null;\n }\n } else {\n // base 64 image\n src = cIcon;\n }\n }\n }\n\n return src || null;\n}\n\nclass Icon extends React.Component {\n render() {\n if (this.props.src) {\n if (typeof this.props.src === 'string') {\n if (this.props.src.length < 3) {\n return <span title={this.props.title || undefined} style={Object.assign({height: 27, marginTop: -8}, this.props.styleUTF8 || this.props.style)} className={ Utils.clsx(this.props.className, 'iconOwn') }>{this.props.src}</span>; // utf-8 char\n } else {\n if (this.props.src.startsWith('data:image/svg')) {\n return <SVG title={this.props.title || undefined} src={this.props.src} className={ Utils.clsx(this.props.className, 'iconOwn') } width={this.props.style?.width || 28} height={this.props.style?.height || this.props.style?.width || 28} style={this.props.style || {}}/>;\n } else {\n return <img title={this.props.title || undefined} style={this.props.style || {}} className={ Utils.clsx(this.props.className, 'iconOwn') } src={ this.props.src } alt=\"\" />;\n }\n }\n } else {\n return this.props.src;\n }\n } else {\n return null;\n }\n }\n}\n\nIcon.propTypes = {\n color: PropTypes.string,\n title: PropTypes.string,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n style: PropTypes.object,\n styleUTF8: PropTypes.object,\n};\n\nexport default Icon;"],"file":"Icon.js"}
@@ -173,10 +173,9 @@ IconPicker.propTypes = {
173
173
  icon: _propTypes["default"].object,
174
174
  customClasses: _propTypes["default"].object,
175
175
  label: _propTypes["default"].string,
176
- name: _propTypes["default"].string,
177
176
  value: _propTypes["default"].any,
178
177
  disabled: _propTypes["default"].bool,
179
- onChange: _propTypes["default"].func,
178
+ onChange: _propTypes["default"].func.isRequired,
180
179
  icons: _propTypes["default"].array,
181
180
  onlyRooms: _propTypes["default"].bool,
182
181
  onlyDevices: _propTypes["default"].bool
@@ -1 +1 @@
1
- {"version":3,"sources":["IconPicker.js"],"names":["IconPicker","props","IconCustom","icon","useStyles","theme","formContainer","display","justifyContent","alignItems","formControl","padding","flexGrow","divContainer","width","height","whiteSpace","lineHeight","marginRight","dragField","textAlign","minHeight","border","borderRadius","formIcon","margin","opacity","text","verticalAlign","classes","onDrop","acceptedFiles","reader","FileReader","addEventListener","onChange","result","readAsDataURL","getRootProps","getInputProps","isDragActive","root","customClasses","label","value","Utils","clsx","previewClassName","disabled","I18n","t","icons","onlyRooms","onlyDevices","base64","getLanguage","backgroundColor","cursor","propTypes","PropTypes","string","object","name","any","bool","func","array"],"mappings":"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","sourcesContent":["import React, {useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport {useDropzone} from 'react-dropzone';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport IconSelector from './IconSelector';\nimport Icon from './Icon';\nimport I18n from '../i18n';\nimport Utils from './Utils';\n\n/**\n * @typedef {object} IconPickerProps\n * @property {string} [value] The value.\n * @property {string} [label] The label.\n * @property {boolean} [disabled] Set to true to disable the icon picker.\n * @property {(icon: string) => void} onChange The icon change callback.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {React.CSSProperties} [style] Additional styling for this component.\n * @property {string} [className] The CSS class name.\n *\n * @extends {React.Component<IconPickerProps>}\n */\nlet IconPicker = function (props) {\n let IconCustom = props.icon;\n\n const useStyles = makeStyles(theme => ({\n formContainer : {\n display: 'flex',\n justifyContent: 'left',\n alignItems: 'center'\n },\n formControl : {\n display: 'flex',\n padding: 24,\n flexGrow: 1000\n },\n divContainer: {\n width: 32 + 24,\n height: 32,\n whiteSpace: 'nowrap',\n lineHeight: '32px',\n marginRight: 8\n },\n dragField: {\n textAlign: 'center',\n display: 'table',\n minHeight: 90,\n width: 'calc(100% - 60px)',\n border: '2px dashed #777',\n borderRadius: 10,\n padding: 4,\n },\n formIcon : {\n margin: 10,\n opacity: 0.6\n },\n text: {\n display: 'table-cell',\n verticalAlign: 'middle',\n }\n }));\n\n const classes = useStyles();\n\n const onDrop = useCallback(acceptedFiles => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () =>\n props.onChange(reader.result), false);\n\n if (acceptedFiles[0]) {\n reader.readAsDataURL(acceptedFiles[0]);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});\n\n return <div className={classes.formContainer}>\n {IconCustom ? <IconCustom className={ classes.formIcon }/> : null}\n <FormControl variant=\"standard\" className={classes.formControl} style={{padding: 3}}>\n <InputLabel shrink classes={{root: props.customClasses?.label}}>\n { props.label }\n </InputLabel>\n <div className={ classes.formContainer }>\n {props.value ?\n <div className={ classes.divContainer }>\n <Icon alt=\"\" className={Utils.clsx(props.previewClassName, props.customClasses?.icon)} src={props.value}/>\n {!props.disabled && <IconButton\n style={{verticalAlign: 'top'}}\n title={I18n.t('ra_Clear icon')}\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <ClearIcon/>\n </IconButton>}\n </div>\n :\n (!props.disabled && <IconSelector\n icons={props.icons}\n onlyRooms={props.onlyRooms}\n onlyDevices={props.onlyDevices}\n onSelect={base64 => props.onChange(base64)}\n t={I18n.t}\n lang={I18n.getLanguage()}\n />)\n }\n\n {!props.disabled && <div\n {...getRootProps()}\n className={classes.dragField}\n style={isDragActive ? {backgroundColor: 'rgba(0, 255, 0, 0.1)'} : {cursor: 'pointer'}}\n >\n <input {...getInputProps()} />\n {\n isDragActive ?\n <span className={classes.text}>{I18n.t('ra_Drop the files here...')}</span> :\n <span className={classes.text}>{I18n.t(`ra_Drag 'n' drop some files here, or click to select files`)}</span>\n }\n </div>}\n </div>\n </FormControl>\n </div>;\n};\n\nIconPicker.propTypes = {\n previewClassName: PropTypes.string,\n icon: PropTypes.object,\n customClasses: PropTypes.object,\n label: PropTypes.string,\n name: PropTypes.string,\n value: PropTypes.any,\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n};\n\n/** @type {typeof IconPicker} */\nexport default IconPicker;"],"file":"IconPicker.js"}
1
+ {"version":3,"sources":["IconPicker.js"],"names":["IconPicker","props","IconCustom","icon","useStyles","theme","formContainer","display","justifyContent","alignItems","formControl","padding","flexGrow","divContainer","width","height","whiteSpace","lineHeight","marginRight","dragField","textAlign","minHeight","border","borderRadius","formIcon","margin","opacity","text","verticalAlign","classes","onDrop","acceptedFiles","reader","FileReader","addEventListener","onChange","result","readAsDataURL","getRootProps","getInputProps","isDragActive","root","customClasses","label","value","Utils","clsx","previewClassName","disabled","I18n","t","icons","onlyRooms","onlyDevices","base64","getLanguage","backgroundColor","cursor","propTypes","PropTypes","string","object","any","bool","func","isRequired","array"],"mappings":"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","sourcesContent":["import React, {useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport {useDropzone} from 'react-dropzone';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport IconSelector from './IconSelector';\nimport Icon from './Icon';\nimport I18n from '../i18n';\nimport Utils from './Utils';\n\n/**\n * @typedef {object} IconPickerProps\n * @property {string} [value] The value.\n * @property {string} [label] The label.\n * @property {boolean} [disabled] Set to true to disable the icon picker.\n * @property {(icon: string) => void} onChange The icon change callback.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {React.CSSProperties} [style] Additional styling for this component.\n * @property {string} [className] The CSS class name.\n *\n * @extends {React.Component<IconPickerProps>}\n */\nlet IconPicker = function (props) {\n let IconCustom = props.icon;\n\n const useStyles = makeStyles(theme => ({\n formContainer : {\n display: 'flex',\n justifyContent: 'left',\n alignItems: 'center'\n },\n formControl : {\n display: 'flex',\n padding: 24,\n flexGrow: 1000\n },\n divContainer: {\n width: 32 + 24,\n height: 32,\n whiteSpace: 'nowrap',\n lineHeight: '32px',\n marginRight: 8\n },\n dragField: {\n textAlign: 'center',\n display: 'table',\n minHeight: 90,\n width: 'calc(100% - 60px)',\n border: '2px dashed #777',\n borderRadius: 10,\n padding: 4,\n },\n formIcon : {\n margin: 10,\n opacity: 0.6\n },\n text: {\n display: 'table-cell',\n verticalAlign: 'middle',\n }\n }));\n\n const classes = useStyles();\n\n const onDrop = useCallback(acceptedFiles => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () =>\n props.onChange(reader.result), false);\n\n if (acceptedFiles[0]) {\n reader.readAsDataURL(acceptedFiles[0]);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});\n\n return <div className={classes.formContainer}>\n {IconCustom ? <IconCustom className={ classes.formIcon }/> : null}\n <FormControl variant=\"standard\" className={classes.formControl} style={{padding: 3}}>\n <InputLabel shrink classes={{root: props.customClasses?.label}}>\n { props.label }\n </InputLabel>\n <div className={ classes.formContainer }>\n {props.value ?\n <div className={ classes.divContainer }>\n <Icon alt=\"\" className={Utils.clsx(props.previewClassName, props.customClasses?.icon)} src={props.value}/>\n {!props.disabled && <IconButton\n style={{verticalAlign: 'top'}}\n title={I18n.t('ra_Clear icon')}\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <ClearIcon/>\n </IconButton>}\n </div>\n :\n (!props.disabled && <IconSelector\n icons={props.icons}\n onlyRooms={props.onlyRooms}\n onlyDevices={props.onlyDevices}\n onSelect={base64 => props.onChange(base64)}\n t={I18n.t}\n lang={I18n.getLanguage()}\n />)\n }\n\n {!props.disabled && <div\n {...getRootProps()}\n className={classes.dragField}\n style={isDragActive ? {backgroundColor: 'rgba(0, 255, 0, 0.1)'} : {cursor: 'pointer'}}\n >\n <input {...getInputProps()} />\n {\n isDragActive ?\n <span className={classes.text}>{I18n.t('ra_Drop the files here...')}</span> :\n <span className={classes.text}>{I18n.t(`ra_Drag 'n' drop some files here, or click to select files`)}</span>\n }\n </div>}\n </div>\n </FormControl>\n </div>;\n};\n\nIconPicker.propTypes = {\n previewClassName: PropTypes.string,\n icon: PropTypes.object,\n customClasses: PropTypes.object,\n label: PropTypes.string,\n value: PropTypes.any,\n disabled: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n};\n\n/** @type {typeof IconPicker} */\nexport default IconPicker;"],"file":"IconPicker.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["IconSelector.js"],"names":["IconSelector","props","state","opened","names","filter","icons","loading","setState","templates","onlyRooms","onlyDevices","rooms","promises","forEach","item","name","lang","en","_id","i","find","_item","_i","icon","template","image","require","e","Promise","resolve","push","Utils","getSvg","then","devices","offset","length","all","isAnyName","map","href","src","parts","split","pop","startsWith","t","loadAllIcons","minWidth","marginRight","marginLeft","target","value","toLowerCase","endAdornment","undefined","width","textAlign","includes","onSelect","height","borderRadius","Component","propTypes","PropTypes","array","bool","func","isRequired","string"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport Icon from './Icon';\nimport Utils from './Utils';\n\nimport devices from '../assets/devices/list.json';\nimport rooms from '../assets/rooms/list.json';\n\nclass IconSelector extends Component {\n constructor(props) {\n super(props);\n this.state = {\n opened: false,\n names: [],\n filter: '',\n icons: props.icons || null,\n };\n }\n\n loadAllIcons() {\n if (this.state.loading || this.state.icons) {\n return;\n }\n this.setState({loading: true}, () => {\n const icons = [];\n const names = [];\n\n if (!this.props.icons) {\n let templates = this.props.onlyRooms || (!this.props.onlyRooms && !this.props.onlyDevices) ? rooms : null;\n\n const promises = [];\n if (templates) {\n templates.forEach(item => {\n if (item.name && typeof item.name === 'object') {\n item.name = item.name[this.props.lang] || item.name.en || item._id;\n }\n item.name = item.name || item._id;\n });\n\n templates = templates.filter((item, i) => !templates.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));\n\n templates.forEach((template, i) => {\n let image;\n try {\n image = require(`../assets/rooms/${template.icon}`);\n } catch (e) {\n return Promise.resolve(null);\n }\n\n names[i] = template.name;\n\n promises.push(Utils.getSvg(image)\n .then(icon =>\n icons[i] = icon));\n });\n }\n\n templates = this.props.onlyDevices || (!this.props.onlyRooms && !this.props.onlyDevices) ? devices : null;\n if (templates) {\n const offset = promises.length;\n templates && templates.forEach(item => {\n if (item.name && typeof item.name === 'object') {\n item.name = item.name[this.props.lang] || item.name.en || item._id;\n }\n item.name = item.name || item._id;\n });\n\n templates = templates.filter((item, i) => !templates.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));\n\n templates.forEach((template, i) => {\n let image;\n try {\n image = require(`../assets/devices/${template.icon}`);\n } catch (e) {\n return Promise.resolve(null);\n }\n\n names[i + offset] = template.name;\n\n promises.push(Utils.getSvg(image)\n .then(icon =>\n icons[i + offset] = icon));\n });\n }\n Promise.all(promises)\n .then(() =>\n this.setState({icons, loading: false, names, isAnyName: names.find(i => i)}));\n } else {\n const promises = this.props.icons.map((item, i) => {\n let href;\n if (typeof item === 'object') {\n href = item.icon || item.src || item.href;\n names[i] = typeof item.name === 'object' ? item.name[this.props.lang] || item.name.en || item._id : item.name;\n if (!names[i]) {\n const parts = href.split('.');\n parts.pop();\n names[i] = parts[parts.length - 1];\n }\n } else {\n href = item;\n }\n\n if (href) {\n if (href.startsWith('data:')) {\n icons[i] = href;\n return Promise.resolve();\n } else {\n return Utils.getSvg(href)\n .then(icon =>\n icons[i] = icon);\n }\n } else {\n return Promise.resolve();\n }\n });\n\n Promise.all(promises)\n .then(() =>\n this.setState({icons, loading: false, names, isAnyName: names.find(i => i)}));\n }\n });\n }\n\n render() {\n if (this.state.loading) {\n return <CircularProgress />;\n }\n\n return <>\n <Button\n color=\"grey\" \n variant=\"outlined\"\n title={this.props.t('ra_Select predefined icon')}\n onClick={() => this.setState({opened: true}, () => this.loadAllIcons())} style={{minWidth: 40, marginRight: 8}}\n >...</Button>\n {this.state.opened ? <Dialog onClose={() => this.setState({opened: false})} open={true}>\n <DialogTitle>{this.props.t('ra_Select predefined icon')}\n {this.state.isAnyName ? <TextField\n variant=\"standard\" \n margin=\"dense\"\n style={{marginLeft: 20}}\n value={this.state.filter}\n onChange={e => this.setState({filter: e.target.value.toLowerCase()})}\n placeholder={this.props.t('Filter')}\n InputProps={{\n endAdornment: this.state.filter\n ?\n <IconButton\n size=\"small\"\n onClick={() => this.setState({filter: ''})}>\n <ClearIcon />\n </IconButton>\n :\n undefined,\n }}\n /> : null}\n </DialogTitle>\n <DialogContent>\n <div style={{width: '100%', textAlign: 'center'}}>\n {this.state.icons && this.state.icons.map((icon, i) => {\n if (!this.state.filter || (this.state.names[i] && this.state.names[i].toLowerCase().includes(this.state.filter))) {\n return (\n <Tooltip title={this.state.names[i] || ''} key={i}><IconButton\n onClick={() =>\n this.setState({opened: false}, () =>\n this.props.onSelect(icon))}\n size=\"large\">\n <Icon src={icon} alt={i} style={{width: 32, height: 32, borderRadius: 5}}/>\n </IconButton></Tooltip>\n );\n } else {\n return null;\n }\n })}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\" \n variant=\"contained\"\n onClick={() => this.setState({opened: false})}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog> : null}\n </>;\n }\n}\n\nIconSelector.propTypes = {\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n t: PropTypes.func.isRequired,\n lang: PropTypes.string.isRequired,\n};\n\n/** @type {typeof IconSelector} */\nexport default IconSelector;"],"file":"IconSelector.js"}
1
+ {"version":3,"sources":["IconSelector.js"],"names":["IconSelector","props","state","opened","names","filter","icons","loading","setState","templates","onlyRooms","onlyDevices","rooms","promises","forEach","item","name","lang","en","_id","i","find","_item","_i","icon","template","image","require","e","Promise","resolve","push","Utils","getSvg","then","devices","offset","length","all","isAnyName","map","href","src","parts","split","pop","startsWith","t","loadAllIcons","minWidth","marginRight","marginLeft","target","value","toLowerCase","endAdornment","undefined","width","textAlign","includes","onSelect","height","borderRadius","Component","propTypes","PropTypes","array","bool","func","isRequired","string"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEMA,Y;;;;;AACF,wBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACf,8BAAMA,KAAN;AACA,UAAKC,KAAL,GAAa;AACTC,MAAAA,MAAM,EAAE,KADC;AAETC,MAAAA,KAAK,EAAE,EAFE;AAGTC,MAAAA,MAAM,EAAE,EAHC;AAITC,MAAAA,KAAK,EAAEL,KAAK,CAACK,KAAN,IAAe;AAJb,KAAb;AAFe;AAQlB;;;;WAED,wBAAe;AAAA;;AACX,UAAI,KAAKJ,KAAL,CAAWK,OAAX,IAAsB,KAAKL,KAAL,CAAWI,KAArC,EAA4C;AACxC;AACH;;AACD,WAAKE,QAAL,CAAc;AAACD,QAAAA,OAAO,EAAE;AAAV,OAAd,EAA+B,YAAM;AACjC,YAAMD,KAAK,GAAG,EAAd;AACA,YAAMF,KAAK,GAAG,EAAd;;AAEA,YAAI,CAAC,MAAI,CAACH,KAAL,CAAWK,KAAhB,EAAuB;AACnB,cAAIG,SAAS,GAAG,MAAI,CAACR,KAAL,CAAWS,SAAX,IAAyB,CAAC,MAAI,CAACT,KAAL,CAAWS,SAAZ,IAAyB,CAAC,MAAI,CAACT,KAAL,CAAWU,WAA9D,GAA6EC,iBAA7E,GAAqF,IAArG;AAEA,cAAMC,QAAQ,GAAG,EAAjB;;AACA,cAAIJ,SAAJ,EAAe;AACXA,YAAAA,SAAS,CAACK,OAAV,CAAkB,UAAAC,IAAI,EAAI;AACtB,kBAAIA,IAAI,CAACC,IAAL,IAAa,QAAOD,IAAI,CAACC,IAAZ,MAAqB,QAAtC,EAAgD;AAC5CD,gBAAAA,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,CAAU,MAAI,CAACf,KAAL,CAAWgB,IAArB,KAA8BF,IAAI,CAACC,IAAL,CAAUE,EAAxC,IAA8CH,IAAI,CAACI,GAA/D;AACH;;AACDJ,cAAAA,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,IAAaD,IAAI,CAACI,GAA9B;AACH,aALD;AAOAV,YAAAA,SAAS,GAAGA,SAAS,CAACJ,MAAV,CAAiB,UAACU,IAAD,EAAOK,CAAP;AAAA,qBAAa,CAACX,SAAS,CAACY,IAAV,CAAe,UAACC,KAAD,EAAQC,EAAR;AAAA,uBAAeH,CAAC,KAAKG,EAAN,IAAYD,KAAK,CAACE,IAAN,KAAeT,IAAI,CAACS,IAAhC,IAAwCF,KAAK,CAACN,IAAN,KAAeD,IAAI,CAACC,IAA3E;AAAA,eAAf,CAAd;AAAA,aAAjB,CAAZ;AAEAP,YAAAA,SAAS,CAACK,OAAV,CAAkB,UAACW,QAAD,EAAWL,CAAX,EAAiB;AAC/B,kBAAIM,KAAJ;;AACA,kBAAI;AACAA,gBAAAA,KAAK,GAAGC,OAAO,2BAAoBF,QAAQ,CAACD,IAA7B,EAAf;AACH,eAFD,CAEE,OAAOI,CAAP,EAAU;AACR,uBAAOC,OAAO,CAACC,OAAR,CAAgB,IAAhB,CAAP;AACH;;AAED1B,cAAAA,KAAK,CAACgB,CAAD,CAAL,GAAWK,QAAQ,CAACT,IAApB;AAEAH,cAAAA,QAAQ,CAACkB,IAAT,CAAcC,kBAAMC,MAAN,CAAaP,KAAb,EACTQ,IADS,CACJ,UAAAV,IAAI;AAAA,uBACNlB,KAAK,CAACc,CAAD,CAAL,GAAWI,IADL;AAAA,eADA,CAAd;AAGH,aAbD;AAcH;;AAEDf,UAAAA,SAAS,GAAG,MAAI,CAACR,KAAL,CAAWU,WAAX,IAA2B,CAAC,MAAI,CAACV,KAAL,CAAWS,SAAZ,IAAyB,CAAC,MAAI,CAACT,KAAL,CAAWU,WAAhE,GAA+EwB,gBAA/E,GAAyF,IAArG;;AACA,cAAI1B,SAAJ,EAAe;AACX,gBAAM2B,MAAM,GAAGvB,QAAQ,CAACwB,MAAxB;AACA5B,YAAAA,SAAS,IAAIA,SAAS,CAACK,OAAV,CAAkB,UAAAC,IAAI,EAAI;AACnC,kBAAIA,IAAI,CAACC,IAAL,IAAa,QAAOD,IAAI,CAACC,IAAZ,MAAqB,QAAtC,EAAgD;AAC5CD,gBAAAA,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,CAAU,MAAI,CAACf,KAAL,CAAWgB,IAArB,KAA8BF,IAAI,CAACC,IAAL,CAAUE,EAAxC,IAA8CH,IAAI,CAACI,GAA/D;AACH;;AACDJ,cAAAA,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,IAAaD,IAAI,CAACI,GAA9B;AACH,aALY,CAAb;AAOAV,YAAAA,SAAS,GAAGA,SAAS,CAACJ,MAAV,CAAiB,UAACU,IAAD,EAAOK,CAAP;AAAA,qBAAa,CAACX,SAAS,CAACY,IAAV,CAAe,UAACC,KAAD,EAAQC,EAAR;AAAA,uBAAeH,CAAC,KAAKG,EAAN,IAAYD,KAAK,CAACE,IAAN,KAAeT,IAAI,CAACS,IAAhC,IAAwCF,KAAK,CAACN,IAAN,KAAeD,IAAI,CAACC,IAA3E;AAAA,eAAf,CAAd;AAAA,aAAjB,CAAZ;AAEAP,YAAAA,SAAS,CAACK,OAAV,CAAkB,UAACW,QAAD,EAAWL,CAAX,EAAiB;AAC/B,kBAAIM,KAAJ;;AACA,kBAAI;AACAA,gBAAAA,KAAK,GAAGC,OAAO,6BAAsBF,QAAQ,CAACD,IAA/B,EAAf;AACH,eAFD,CAEE,OAAOI,CAAP,EAAU;AACR,uBAAOC,OAAO,CAACC,OAAR,CAAgB,IAAhB,CAAP;AACH;;AAED1B,cAAAA,KAAK,CAACgB,CAAC,GAAGgB,MAAL,CAAL,GAAoBX,QAAQ,CAACT,IAA7B;AAEAH,cAAAA,QAAQ,CAACkB,IAAT,CAAcC,kBAAMC,MAAN,CAAaP,KAAb,EACTQ,IADS,CACJ,UAAAV,IAAI;AAAA,uBACNlB,KAAK,CAACc,CAAC,GAAGgB,MAAL,CAAL,GAAoBZ,IADd;AAAA,eADA,CAAd;AAGH,aAbD;AAcH;;AACDK,UAAAA,OAAO,CAACS,GAAR,CAAYzB,QAAZ,EACKqB,IADL,CACU;AAAA,mBACF,MAAI,CAAC1B,QAAL,CAAc;AAACF,cAAAA,KAAK,EAALA,KAAD;AAAQC,cAAAA,OAAO,EAAE,KAAjB;AAAwBH,cAAAA,KAAK,EAALA,KAAxB;AAA+BmC,cAAAA,SAAS,EAAEnC,KAAK,CAACiB,IAAN,CAAW,UAAAD,CAAC;AAAA,uBAAIA,CAAJ;AAAA,eAAZ;AAA1C,aAAd,CADE;AAAA,WADV;AAGH,SA5DD,MA4DO;AACH,cAAMP,SAAQ,GAAG,MAAI,CAACZ,KAAL,CAAWK,KAAX,CAAiBkC,GAAjB,CAAqB,UAACzB,IAAD,EAAOK,CAAP,EAAa;AAC/C,gBAAIqB,IAAJ;;AACA,gBAAI,QAAO1B,IAAP,MAAgB,QAApB,EAA8B;AAC1B0B,cAAAA,IAAI,GAAG1B,IAAI,CAACS,IAAL,IAAaT,IAAI,CAAC2B,GAAlB,IAAyB3B,IAAI,CAAC0B,IAArC;AACArC,cAAAA,KAAK,CAACgB,CAAD,CAAL,GAAW,QAAOL,IAAI,CAACC,IAAZ,MAAqB,QAArB,GAAgCD,IAAI,CAACC,IAAL,CAAU,MAAI,CAACf,KAAL,CAAWgB,IAArB,KAA8BF,IAAI,CAACC,IAAL,CAAUE,EAAxC,IAA8CH,IAAI,CAACI,GAAnF,GAAyFJ,IAAI,CAACC,IAAzG;;AACA,kBAAI,CAACZ,KAAK,CAACgB,CAAD,CAAV,EAAe;AACX,oBAAMuB,KAAK,GAAGF,IAAI,CAACG,KAAL,CAAW,GAAX,CAAd;AACAD,gBAAAA,KAAK,CAACE,GAAN;AACAzC,gBAAAA,KAAK,CAACgB,CAAD,CAAL,GAAWuB,KAAK,CAACA,KAAK,CAACN,MAAN,GAAe,CAAhB,CAAhB;AACH;AACJ,aARD,MAQO;AACHI,cAAAA,IAAI,GAAG1B,IAAP;AACH;;AAED,gBAAI0B,IAAJ,EAAU;AACN,kBAAIA,IAAI,CAACK,UAAL,CAAgB,OAAhB,CAAJ,EAA8B;AAC1BxC,gBAAAA,KAAK,CAACc,CAAD,CAAL,GAAWqB,IAAX;AACA,uBAAOZ,OAAO,CAACC,OAAR,EAAP;AACH,eAHD,MAGO;AACH,uBAAOE,kBAAMC,MAAN,CAAaQ,IAAb,EACFP,IADE,CACG,UAAAV,IAAI;AAAA,yBACNlB,KAAK,CAACc,CAAD,CAAL,GAAWI,IADL;AAAA,iBADP,CAAP;AAGH;AACJ,aATD,MASO;AACH,qBAAOK,OAAO,CAACC,OAAR,EAAP;AACH;AACJ,WA1BgB,CAAjB;;AA4BAD,UAAAA,OAAO,CAACS,GAAR,CAAYzB,SAAZ,EACKqB,IADL,CACU;AAAA,mBACF,MAAI,CAAC1B,QAAL,CAAc;AAACF,cAAAA,KAAK,EAALA,KAAD;AAAQC,cAAAA,OAAO,EAAE,KAAjB;AAAwBH,cAAAA,KAAK,EAALA,KAAxB;AAA+BmC,cAAAA,SAAS,EAAEnC,KAAK,CAACiB,IAAN,CAAW,UAAAD,CAAC;AAAA,uBAAIA,CAAJ;AAAA,eAAZ;AAA1C,aAAd,CADE;AAAA,WADV;AAGH;AACJ,OAjGD;AAkGH;;;WAED,kBAAS;AAAA;;AACL,UAAI,KAAKlB,KAAL,CAAWK,OAAf,EAAwB;AACpB,4BAAO,gCAAC,4BAAD,OAAP;AACH;;AAED,0BAAO,+EACH,gCAAC,kBAAD;AACI,QAAA,KAAK,EAAC,MADV;AAEI,QAAA,OAAO,EAAC,UAFZ;AAGI,QAAA,KAAK,EAAE,KAAKN,KAAL,CAAW8C,CAAX,CAAa,2BAAb,CAHX;AAII,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACvC,QAAL,CAAc;AAACL,YAAAA,MAAM,EAAE;AAAT,WAAd,EAA8B;AAAA,mBAAM,MAAI,CAAC6C,YAAL,EAAN;AAAA,WAA9B,CAAN;AAAA,SAJb;AAI6E,QAAA,KAAK,EAAE;AAACC,UAAAA,QAAQ,EAAE,EAAX;AAAeC,UAAAA,WAAW,EAAE;AAA5B;AAJpF,eADG,EAOF,KAAKhD,KAAL,CAAWC,MAAX,gBAAoB,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACK,QAAL,CAAc;AAACL,YAAAA,MAAM,EAAE;AAAT,WAAd,CAAN;AAAA,SAAjB;AAAuD,QAAA,IAAI,EAAE;AAA7D,sBACjB,gCAAC,uBAAD,QAAc,KAAKF,KAAL,CAAW8C,CAAX,CAAa,2BAAb,CAAd,EACK,KAAK7C,KAAL,CAAWqC,SAAX,gBAAuB,gCAAC,qBAAD;AACpB,QAAA,OAAO,EAAC,UADY;AAEpB,QAAA,MAAM,EAAC,OAFa;AAGpB,QAAA,KAAK,EAAE;AAACY,UAAAA,UAAU,EAAE;AAAb,SAHa;AAIpB,QAAA,KAAK,EAAE,KAAKjD,KAAL,CAAWG,MAJE;AAKpB,QAAA,QAAQ,EAAE,kBAAAuB,CAAC;AAAA,iBAAI,MAAI,CAACpB,QAAL,CAAc;AAACH,YAAAA,MAAM,EAAEuB,CAAC,CAACwB,MAAF,CAASC,KAAT,CAAeC,WAAf;AAAT,WAAd,CAAJ;AAAA,SALS;AAMpB,QAAA,WAAW,EAAE,KAAKrD,KAAL,CAAW8C,CAAX,CAAa,QAAb,CANO;AAOpB,QAAA,UAAU,EAAE;AACRQ,UAAAA,YAAY,EAAE,KAAKrD,KAAL,CAAWG,MAAX,gBAEV,gCAAC,sBAAD;AACI,YAAA,IAAI,EAAC,OADT;AAEI,YAAA,OAAO,EAAE;AAAA,qBAAM,MAAI,CAACG,QAAL,CAAc;AAACH,gBAAAA,MAAM,EAAE;AAAT,eAAd,CAAN;AAAA;AAFb,0BAGI,gCAAC,iBAAD,OAHJ,CAFU,GAQVmD;AATI;AAPQ,QAAvB,GAkBI,IAnBT,CADiB,eAsBjB,gCAAC,yBAAD,qBACI;AAAK,QAAA,KAAK,EAAE;AAACC,UAAAA,KAAK,EAAE,MAAR;AAAgBC,UAAAA,SAAS,EAAE;AAA3B;AAAZ,SACK,KAAKxD,KAAL,CAAWI,KAAX,IAAoB,KAAKJ,KAAL,CAAWI,KAAX,CAAiBkC,GAAjB,CAAqB,UAAChB,IAAD,EAAOJ,CAAP,EAAa;AACnD,YAAI,CAAC,MAAI,CAAClB,KAAL,CAAWG,MAAZ,IAAuB,MAAI,CAACH,KAAL,CAAWE,KAAX,CAAiBgB,CAAjB,KAAuB,MAAI,CAAClB,KAAL,CAAWE,KAAX,CAAiBgB,CAAjB,EAAoBkC,WAApB,GAAkCK,QAAlC,CAA2C,MAAI,CAACzD,KAAL,CAAWG,MAAtD,CAAlD,EAAkH;AAC9G,8BAAO,gCAAC,mBAAD;AAAS,YAAA,KAAK,EAAE,MAAI,CAACH,KAAL,CAAWE,KAAX,CAAiBgB,CAAjB,KAAuB,EAAvC;AAA2C,YAAA,GAAG,EAAEA;AAAhD,0BACH,gCAAC,sBAAD;AACI,YAAA,OAAO,EAAE;AAAA,qBACL,MAAI,CAACZ,QAAL,CAAc;AAACL,gBAAAA,MAAM,EAAE;AAAT,eAAd,EAA+B;AAAA,uBAC3B,MAAI,CAACF,KAAL,CAAW2D,QAAX,CAAoBpC,IAApB,CAD2B;AAAA,eAA/B,CADK;AAAA,aADb;AAKI,YAAA,IAAI,EAAC;AALT,0BAOI,gCAAC,gBAAD;AAAM,YAAA,GAAG,EAAEA,IAAX;AAAiB,YAAA,GAAG,EAAEJ,CAAtB;AAAyB,YAAA,KAAK,EAAE;AAACqC,cAAAA,KAAK,EAAE,EAAR;AAAYI,cAAAA,MAAM,EAAE,EAApB;AAAwBC,cAAAA,YAAY,EAAE;AAAtC;AAAhC,YAPJ,CADG,CAAP;AAWH,SAZD,MAYO;AACH,iBAAO,IAAP;AACH;AACJ,OAhBoB,CADzB,CADJ,CAtBiB,eA2CjB,gCAAC,yBAAD,qBACI,gCAAC,kBAAD;AACI,QAAA,KAAK,EAAC,MADV;AAEI,QAAA,OAAO,EAAC,WAFZ;AAGI,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACtD,QAAL,CAAc;AAACL,YAAAA,MAAM,EAAE;AAAT,WAAd,CAAN;AAAA,SAHb;AAII,QAAA,SAAS,eAAE,gCAAC,iBAAD;AAJf,SAMK,KAAKF,KAAL,CAAW8C,CAAX,CAAa,OAAb,CANL,CADJ,CA3CiB,CAApB,GAqDW,IA5DT,CAAP;AA8DH;;;;EAtLsBgB,gB;;AAyL3B/D,YAAY,CAACgE,SAAb,GAAyB;AACrB1D,EAAAA,KAAK,EAAE2D,sBAAUC,KADI;AAErBxD,EAAAA,SAAS,EAAEuD,sBAAUE,IAFA;AAGrBxD,EAAAA,WAAW,EAAEsD,sBAAUE,IAHF;AAIrBP,EAAAA,QAAQ,EAAEK,sBAAUG,IAAV,CAAeC,UAJJ;AAKrBtB,EAAAA,CAAC,EAAEkB,sBAAUG,IAAV,CAAeC,UALG;AAMrBpD,EAAAA,IAAI,EAAEgD,sBAAUK,MAAV,CAAiBD;AANF,CAAzB;AASA;;eACerE,Y","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport Icon from './Icon';\nimport Utils from './Utils';\n\nimport devices from '../assets/devices/list.json';\nimport rooms from '../assets/rooms/list.json';\n\nclass IconSelector extends Component {\n constructor(props) {\n super(props);\n this.state = {\n opened: false,\n names: [],\n filter: '',\n icons: props.icons || null,\n };\n }\n\n loadAllIcons() {\n if (this.state.loading || this.state.icons) {\n return;\n }\n this.setState({loading: true}, () => {\n const icons = [];\n const names = [];\n\n if (!this.props.icons) {\n let templates = this.props.onlyRooms || (!this.props.onlyRooms && !this.props.onlyDevices) ? rooms : null;\n\n const promises = [];\n if (templates) {\n templates.forEach(item => {\n if (item.name && typeof item.name === 'object') {\n item.name = item.name[this.props.lang] || item.name.en || item._id;\n }\n item.name = item.name || item._id;\n });\n\n templates = templates.filter((item, i) => !templates.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));\n\n templates.forEach((template, i) => {\n let image;\n try {\n image = require(`../assets/rooms/${template.icon}`);\n } catch (e) {\n return Promise.resolve(null);\n }\n\n names[i] = template.name;\n\n promises.push(Utils.getSvg(image)\n .then(icon =>\n icons[i] = icon));\n });\n }\n\n templates = this.props.onlyDevices || (!this.props.onlyRooms && !this.props.onlyDevices) ? devices : null;\n if (templates) {\n const offset = promises.length;\n templates && templates.forEach(item => {\n if (item.name && typeof item.name === 'object') {\n item.name = item.name[this.props.lang] || item.name.en || item._id;\n }\n item.name = item.name || item._id;\n });\n\n templates = templates.filter((item, i) => !templates.find((_item, _i) => i !== _i && _item.icon === item.icon && _item.name === item.name));\n\n templates.forEach((template, i) => {\n let image;\n try {\n image = require(`../assets/devices/${template.icon}`);\n } catch (e) {\n return Promise.resolve(null);\n }\n\n names[i + offset] = template.name;\n\n promises.push(Utils.getSvg(image)\n .then(icon =>\n icons[i + offset] = icon));\n });\n }\n Promise.all(promises)\n .then(() =>\n this.setState({icons, loading: false, names, isAnyName: names.find(i => i)}));\n } else {\n const promises = this.props.icons.map((item, i) => {\n let href;\n if (typeof item === 'object') {\n href = item.icon || item.src || item.href;\n names[i] = typeof item.name === 'object' ? item.name[this.props.lang] || item.name.en || item._id : item.name;\n if (!names[i]) {\n const parts = href.split('.');\n parts.pop();\n names[i] = parts[parts.length - 1];\n }\n } else {\n href = item;\n }\n\n if (href) {\n if (href.startsWith('data:')) {\n icons[i] = href;\n return Promise.resolve();\n } else {\n return Utils.getSvg(href)\n .then(icon =>\n icons[i] = icon);\n }\n } else {\n return Promise.resolve();\n }\n });\n\n Promise.all(promises)\n .then(() =>\n this.setState({icons, loading: false, names, isAnyName: names.find(i => i)}));\n }\n });\n }\n\n render() {\n if (this.state.loading) {\n return <CircularProgress />;\n }\n\n return <>\n <Button\n color=\"grey\"\n variant=\"outlined\"\n title={this.props.t('ra_Select predefined icon')}\n onClick={() => this.setState({opened: true}, () => this.loadAllIcons())} style={{minWidth: 40, marginRight: 8}}\n >...</Button>\n {this.state.opened ? <Dialog onClose={() => this.setState({opened: false})} open={true}>\n <DialogTitle>{this.props.t('ra_Select predefined icon')}\n {this.state.isAnyName ? <TextField\n variant=\"standard\"\n margin=\"dense\"\n style={{marginLeft: 20}}\n value={this.state.filter}\n onChange={e => this.setState({filter: e.target.value.toLowerCase()})}\n placeholder={this.props.t('Filter')}\n InputProps={{\n endAdornment: this.state.filter\n ?\n <IconButton\n size=\"small\"\n onClick={() => this.setState({filter: ''})}>\n <ClearIcon />\n </IconButton>\n :\n undefined,\n }}\n /> : null}\n </DialogTitle>\n <DialogContent>\n <div style={{width: '100%', textAlign: 'center'}}>\n {this.state.icons && this.state.icons.map((icon, i) => {\n if (!this.state.filter || (this.state.names[i] && this.state.names[i].toLowerCase().includes(this.state.filter))) {\n return <Tooltip title={this.state.names[i] || ''} key={i}>\n <IconButton\n onClick={() =>\n this.setState({opened: false}, () =>\n this.props.onSelect(icon))\n }\n size=\"large\"\n >\n <Icon src={icon} alt={i} style={{width: 32, height: 32, borderRadius: 5}}/>\n </IconButton>\n </Tooltip>;\n } else {\n return null;\n }\n })}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.setState({opened: false})}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog> : null}\n </>;\n }\n}\n\nIconSelector.propTypes = {\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n t: PropTypes.func.isRequired,\n lang: PropTypes.string.isRequired,\n};\n\n/** @type {typeof IconSelector} */\nexport default IconSelector;"],"file":"IconSelector.js"}
@@ -189,6 +189,7 @@ var Image = /*#__PURE__*/function (_React$Component) {
189
189
 
190
190
  if (props && state && props.color !== state.color) {
191
191
  newState.color = props.color;
192
+ newState.created = false;
192
193
  changed = true;
193
194
  }
194
195
 
@@ -206,7 +207,7 @@ var Image = /*#__PURE__*/function (_React$Component) {
206
207
 
207
208
  Image.propTypes = {
208
209
  color: _propTypes["default"].string,
209
- src: _propTypes["default"].string,
210
+ src: _propTypes["default"].string.isRequired,
210
211
  className: _propTypes["default"].string,
211
212
  imagePrefix: _propTypes["default"].string
212
213
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["Image.js"],"names":["getElementFromSource","src","svgContainer","document","createElement","innerHTML","svg","firstElementChild","remove","removeChild","serializeAttrs","map","ret","prop","i","length","key","name","startsWith","replace","g","toUpperCase","value","Image","props","state","created","color","imgError","showError","getSvgFromData","len","substring","atob","inner","svgProps","attributes","className","__html","e","setTimeout","setState","IconNoIcon","imagePrefix","newState","changed","React","Component","propTypes","PropTypes","string"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport IconNoIcon from '../assets/no_icon.svg';\n\nfunction getElementFromSource(src) {\n const svgContainer = document.createElement('div');\n svgContainer.innerHTML = src;\n const svg = svgContainer.firstElementChild;\n if (svg.remove) {\n svg.remove();\n } else {\n svgContainer.removeChild(svg);\n }\n svgContainer.remove();\n return svg;\n}\n\nfunction serializeAttrs(map) {\n const ret = {};\n for (let prop, i = 0; i < map.length; i++) {\n const key = map[i].name;\n if (key === 'class') {\n prop = 'className';\n }\n else if (!key.startsWith('data-')) {\n prop = key.replace(/[-|:]([a-z])/g, g => g[1].toUpperCase());\n } else {\n prop = key;\n }\n\n ret[prop] = map[i].value;\n }\n return ret;\n}\n\n/**\n * @typedef {object} ImageProps\n * @property {string} [key] The key to identify this component.\n * @property {string} [color] The color.\n * @property {string} [src] The source of the image.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {string} [className] The CSS class name.\n * @property {boolean} [showError] Show image errors (or just show no image)?\n *\n * @extends {React.Component<ImageProps>}\n */\nclass Image extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n svg: !!(this.props.src && this.props.src.startsWith('data:')),\n created: true,\n color: this.props.color || '',\n src: this.props.src || '',\n imgError: false,\n showError: this.props.showError,\n };\n\n this.svg = this.state.svg ? this.getSvgFromData(this.state.src) : null;\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n\n if (props && state && props.src !== state.src) {\n newState.src = props.src;\n newState.svg = props.src && props.src.startsWith('data:');\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.color !== state.color) {\n newState.color = props.color;\n changed = true;\n }\n if (props && state && props.showError !== state.showError) {\n newState.showError = props.showError;\n changed = true;\n }\n\n return changed ? newState : null;\n }\n\n getSvgFromData(src) {\n const len = 'data:image/svg+xml;base64,';\n if (!src.startsWith(len)) {\n return null;\n }\n src = src.substring(len.length);\n try {\n src = atob(src);\n const svg = getElementFromSource(src);\n const inner = svg.innerHTML;\n const svgProps = serializeAttrs(svg.attributes || []);\n\n svg.remove();\n\n return <svg\n className={this.props.className}\n style={this.state.color ? {color: this.state.color} : {}}\n {...svgProps}\n dangerouslySetInnerHTML={{ __html: inner }}\n />;\n } catch (e) {\n\n }\n return null;\n }\n\n render() {\n if (this.state.svg) {\n if (!this.state.created) {\n setTimeout(() => {\n this.svg = this.getSvgFromData(this.state.src);\n this.setState({created: true});\n }, 50);\n }\n\n return this.svg;\n } else if (this.state.src) {\n return <img\n className={this.props.className}\n src={this.state.imgError ? IconNoIcon : (this.props.imagePrefix || '') + this.state.src || IconNoIcon}\n alt=\"\"\n onError={() => this.props.showError ? this.setState({imgError: true}) : this.setState({src: ''})}\n />;\n } else {\n return null;\n }\n }\n}\n\nImage.propTypes = {\n color: PropTypes.string,\n src: PropTypes.string,\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n};\n\nexport default Image;"],"file":"Image.js"}
1
+ {"version":3,"sources":["Image.js"],"names":["getElementFromSource","src","svgContainer","document","createElement","innerHTML","svg","firstElementChild","remove","removeChild","serializeAttrs","map","ret","prop","i","length","key","name","startsWith","replace","g","toUpperCase","value","Image","props","state","created","color","imgError","showError","getSvgFromData","len","substring","atob","inner","svgProps","attributes","className","__html","e","setTimeout","setState","IconNoIcon","imagePrefix","newState","changed","React","Component","propTypes","PropTypes","string","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport IconNoIcon from '../assets/no_icon.svg';\n\nfunction getElementFromSource(src) {\n const svgContainer = document.createElement('div');\n svgContainer.innerHTML = src;\n const svg = svgContainer.firstElementChild;\n if (svg.remove) {\n svg.remove();\n } else {\n svgContainer.removeChild(svg);\n }\n svgContainer.remove();\n return svg;\n}\n\nfunction serializeAttrs(map) {\n const ret = {};\n for (let prop, i = 0; i < map.length; i++) {\n const key = map[i].name;\n if (key === 'class') {\n prop = 'className';\n }\n else if (!key.startsWith('data-')) {\n prop = key.replace(/[-|:]([a-z])/g, g => g[1].toUpperCase());\n } else {\n prop = key;\n }\n\n ret[prop] = map[i].value;\n }\n return ret;\n}\n\n/**\n * @typedef {object} ImageProps\n * @property {string} [key] The key to identify this component.\n * @property {string} [color] The color.\n * @property {string} [src] The source of the image.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {string} [className] The CSS class name.\n * @property {boolean} [showError] Show image errors (or just show no image)?\n *\n * @extends {React.Component<ImageProps>}\n */\nclass Image extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n svg: !!(this.props.src && this.props.src.startsWith('data:')),\n created: true,\n color: this.props.color || '',\n src: this.props.src || '',\n imgError: false,\n showError: this.props.showError,\n };\n\n this.svg = this.state.svg ? this.getSvgFromData(this.state.src) : null;\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n\n if (props && state && props.src !== state.src) {\n newState.src = props.src;\n newState.svg = props.src && props.src.startsWith('data:');\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.color !== state.color) {\n newState.color = props.color;\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.showError !== state.showError) {\n newState.showError = props.showError;\n changed = true;\n }\n\n return changed ? newState : null;\n }\n\n getSvgFromData(src) {\n const len = 'data:image/svg+xml;base64,';\n if (!src.startsWith(len)) {\n return null;\n }\n src = src.substring(len.length);\n try {\n src = atob(src);\n const svg = getElementFromSource(src);\n const inner = svg.innerHTML;\n const svgProps = serializeAttrs(svg.attributes || []);\n\n svg.remove();\n\n return <svg\n className={this.props.className}\n style={this.state.color ? {color: this.state.color} : {}}\n {...svgProps}\n dangerouslySetInnerHTML={{ __html: inner }}\n />;\n } catch (e) {\n\n }\n return null;\n }\n\n render() {\n if (this.state.svg) {\n if (!this.state.created) {\n setTimeout(() => {\n this.svg = this.getSvgFromData(this.state.src);\n this.setState({created: true});\n }, 50);\n }\n\n return this.svg;\n } else if (this.state.src) {\n return <img\n className={this.props.className}\n src={this.state.imgError ? IconNoIcon : (this.props.imagePrefix || '') + this.state.src || IconNoIcon}\n alt=\"\"\n onError={() => this.props.showError ? this.setState({imgError: true}) : this.setState({src: ''})}\n />;\n } else {\n return null;\n }\n }\n}\n\nImage.propTypes = {\n color: PropTypes.string,\n src: PropTypes.string.isRequired,\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n};\n\nexport default Image;"],"file":"Image.js"}
@@ -56,30 +56,24 @@ var Loader = /*#__PURE__*/function (_React$Component) {
56
56
 
57
57
  var _super = _createSuper(Loader);
58
58
 
59
- /**
60
- * @param {LoaderProps} props
61
- */
62
- function Loader(props) {
63
- var _this;
64
-
59
+ function Loader() {
65
60
  _classCallCheck(this, Loader);
66
61
 
67
- _this = _super.call(this, props);
68
- _this.size = _this.props.size || 234;
69
- return _this;
62
+ return _super.apply(this, arguments);
70
63
  }
71
64
 
72
65
  _createClass(Loader, [{
73
66
  key: "render",
74
67
  value: function render() {
68
+ var size = this.props.size || 234;
75
69
  var theme = this.props.themeType || this.props.theme || 'light';
76
70
  return /*#__PURE__*/_react["default"].createElement("div", {
77
71
  className: 'logo-back logo-background-' + theme
78
72
  }, /*#__PURE__*/_react["default"].createElement("div", {
79
73
  className: "logo-div",
80
74
  style: {
81
- width: this.size,
82
- height: this.size
75
+ width: size,
76
+ height: size
83
77
  }
84
78
  }, /*#__PURE__*/_react["default"].createElement("div", {
85
79
  className: 'logo-top logo-background-' + theme,
@@ -94,7 +88,7 @@ var Loader = /*#__PURE__*/function (_React$Component) {
94
88
  }), /*#__PURE__*/_react["default"].createElement("div", {
95
89
  className: 'logo-border logo-background-' + theme + ' logo-animate-wait',
96
90
  style: {
97
- borderWidth: this.size * 0.132
91
+ borderWidth: size * 0.132
98
92
  }
99
93
  }), /*#__PURE__*/_react["default"].createElement("div", {
100
94
  className: 'logo-i logo-animate-color-inside-' + theme
@@ -111,8 +105,8 @@ var Loader = /*#__PURE__*/function (_React$Component) {
111
105
  })), /*#__PURE__*/_react["default"].createElement("div", {
112
106
  className: 'logo-animate-grow logo-animate-grow-' + theme,
113
107
  style: {
114
- width: this.size + 11,
115
- height: this.size + 11
108
+ width: size + 11,
109
+ height: size + 11
116
110
  }
117
111
  }));
118
112
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["Loader.js"],"names":["styles","theme","Loader","props","size","themeType","width","height","left","borderWidth","top","bottom","React","Component","propTypes","PropTypes","number","string","_export"],"mappings":";;;;;;;;;AAMA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK,EAAL;AAAA,CAApB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;IACMC,M;;;;;AACF;AACJ;AACA;AACI,kBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACf,8BAAMA,KAAN;AACA,UAAKC,IAAL,GAAY,MAAKD,KAAL,CAAWC,IAAX,IAAmB,GAA/B;AAFe;AAGlB;;;;WAED,kBAAS;AACL,UAAMH,KAAK,GAAG,KAAKE,KAAL,CAAWE,SAAX,IAAwB,KAAKF,KAAL,CAAWF,KAAnC,IAA4C,OAA1D;AACA,0BAAO;AAAK,QAAA,SAAS,EAAE,+BAA+BA;AAA/C,sBACH;AAAK,QAAA,SAAS,EAAC,UAAf;AAA0B,QAAA,KAAK,EAAE;AAACK,UAAAA,KAAK,EAAE,KAAKF,IAAb;AAAmBG,UAAAA,MAAM,EAAE,KAAKH;AAAhC;AAAjC,sBACI;AAAK,QAAA,SAAS,EAAE,8BAA8BH,KAA9C;AAAqD,QAAA,KAAK,EAAE;AAACO,UAAAA,IAAI,EAAE;AAAP;AAA5D,QADJ,eAEI;AAAK,QAAA,SAAS,EAAE,8BAA8BP,KAA9C;AAAqD,QAAA,KAAK,EAAE;AAACO,UAAAA,IAAI,EAAE;AAAP;AAA5D,QAFJ,eAGI;AACI,QAAA,SAAS,EAAE,iCAAiCP,KAAjC,GAAyC,oBADxD;AAEI,QAAA,KAAK,EAAE;AAACQ,UAAAA,WAAW,EAAE,KAAKL,IAAL,GAAY;AAA1B;AAFX,QAHJ,eAOI;AAAK,QAAA,SAAS,EAAE,sCAAsCH;AAAtD,QAPJ,eAQI;AAAK,QAAA,SAAS,EAAE,0CAA0CA,KAA1D;AAAiE,QAAA,KAAK,EAAE;AAACS,UAAAA,GAAG,EAAE;AAAN;AAAxE,QARJ,eASI;AAAK,QAAA,SAAS,EAAE,0CAA0CT,KAA1D;AAAiE,QAAA,KAAK,EAAE;AAACU,UAAAA,MAAM,EAAE;AAAT;AAAxE,QATJ,CADG,eAYH;AAAK,QAAA,SAAS,EAAE,yCAAyCV,KAAzD;AACK,QAAA,KAAK,EAAE;AAACK,UAAAA,KAAK,EAAE,KAAKF,IAAL,GAAY,EAApB;AAAwBG,UAAAA,MAAM,EAAE,KAAKH,IAAL,GAAY;AAA5C;AADZ,QAZG,CAAP;AAgBH;;;;EA3BgBQ,kBAAMC,S;;AA8B3BX,MAAM,CAACY,SAAP,GAAmB;AACfV,EAAAA,IAAI,EAAEW,sBAAUC,MADD;AAEfX,EAAAA,SAAS,EAAEU,sBAAUE;AAFN,CAAnB;AAKA;;AACA,IAAMC,OAAO,GAAG,4BAAWlB,MAAX,EAAmBE,MAAnB,CAAhB;;eACegB,O","sourcesContent":["/**\n * Copyright 2018-2021 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport './loader.css'\n\nconst styles = theme => ({\n\n});\n\n/**\n * @typedef {object} LoaderProps\n * @property {string} [key] The key to identify this component.\n * @property {number} [size] The size in pixels of this loader.\n * @property {string} [themeType] The chosen theme type.\n * @property {string} [theme] The chosen theme.\n *\n * @extends {React.Component<LoaderProps>}\n */\nclass Loader extends React.Component {\n /**\n * @param {LoaderProps} props\n */\n constructor(props) {\n super(props);\n this.size = this.props.size || 234;\n }\n\n render() {\n const theme = this.props.themeType || this.props.theme || 'light';\n return <div className={'logo-back logo-background-' + theme}>\n <div className=\"logo-div\" style={{width: this.size, height: this.size}}>\n <div className={'logo-top logo-background-' + theme} style={{left: '37%'}}/>\n <div className={'logo-top logo-background-' + theme} style={{left: '57%'}}/>\n <div\n className={'logo-border logo-background-' + theme + ' logo-animate-wait'}\n style={{borderWidth: this.size * 0.132}}\n />\n <div className={'logo-i logo-animate-color-inside-' + theme}/>\n <div className={'logo-i-top logo-animate-color-inside-' + theme} style={{top: '18%'}}/>\n <div className={'logo-i-top logo-animate-color-inside-' + theme} style={{bottom: '18%'}}/>\n </div>\n <div className={'logo-animate-grow logo-animate-grow-' + theme}\n style={{width: this.size + 11, height: this.size + 11}}\n />\n </div>;\n }\n}\n\nLoader.propTypes = {\n size: PropTypes.number,\n themeType: PropTypes.string\n};\n\n/** @type {typeof Loader} */\nconst _export = withStyles(styles)(Loader);\nexport default _export;"],"file":"Loader.js"}
1
+ {"version":3,"sources":["Loader.js"],"names":["styles","theme","Loader","size","props","themeType","width","height","left","borderWidth","top","bottom","React","Component","propTypes","PropTypes","number","string","_export"],"mappings":";;;;;;;;;AAMA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK,EAAL;AAAA,CAApB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;IACMC,M;;;;;;;;;;;;;WACF,kBAAS;AACL,UAAMC,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAX,IAAmB,GAAhC;AACA,UAAMF,KAAK,GAAG,KAAKG,KAAL,CAAWC,SAAX,IAAwB,KAAKD,KAAL,CAAWH,KAAnC,IAA4C,OAA1D;AACA,0BAAO;AAAK,QAAA,SAAS,EAAE,+BAA+BA;AAA/C,sBACH;AAAK,QAAA,SAAS,EAAC,UAAf;AAA0B,QAAA,KAAK,EAAE;AAACK,UAAAA,KAAK,EAAEH,IAAR;AAAcI,UAAAA,MAAM,EAAEJ;AAAtB;AAAjC,sBACI;AAAK,QAAA,SAAS,EAAE,8BAA8BF,KAA9C;AAAqD,QAAA,KAAK,EAAE;AAACO,UAAAA,IAAI,EAAE;AAAP;AAA5D,QADJ,eAEI;AAAK,QAAA,SAAS,EAAE,8BAA8BP,KAA9C;AAAqD,QAAA,KAAK,EAAE;AAACO,UAAAA,IAAI,EAAE;AAAP;AAA5D,QAFJ,eAGI;AACI,QAAA,SAAS,EAAE,iCAAiCP,KAAjC,GAAyC,oBADxD;AAEI,QAAA,KAAK,EAAE;AAACQ,UAAAA,WAAW,EAAEN,IAAI,GAAG;AAArB;AAFX,QAHJ,eAOI;AAAK,QAAA,SAAS,EAAE,sCAAsCF;AAAtD,QAPJ,eAQI;AAAK,QAAA,SAAS,EAAE,0CAA0CA,KAA1D;AAAiE,QAAA,KAAK,EAAE;AAACS,UAAAA,GAAG,EAAE;AAAN;AAAxE,QARJ,eASI;AAAK,QAAA,SAAS,EAAE,0CAA0CT,KAA1D;AAAiE,QAAA,KAAK,EAAE;AAACU,UAAAA,MAAM,EAAE;AAAT;AAAxE,QATJ,CADG,eAYH;AAAK,QAAA,SAAS,EAAE,yCAAyCV,KAAzD;AACK,QAAA,KAAK,EAAE;AAACK,UAAAA,KAAK,EAAEH,IAAI,GAAG,EAAf;AAAmBI,UAAAA,MAAM,EAAEJ,IAAI,GAAG;AAAlC;AADZ,QAZG,CAAP;AAgBH;;;;EApBgBS,kBAAMC,S;;AAuB3BX,MAAM,CAACY,SAAP,GAAmB;AACfX,EAAAA,IAAI,EAAEY,sBAAUC,MADD;AAEfX,EAAAA,SAAS,EAAEU,sBAAUE;AAFN,CAAnB;AAKA;;AACA,IAAMC,OAAO,GAAG,4BAAWlB,MAAX,EAAmBE,MAAnB,CAAhB;;eACegB,O","sourcesContent":["/**\n * Copyright 2018-2021 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport './loader.css'\n\nconst styles = theme => ({\n\n});\n\n/**\n * @typedef {object} LoaderProps\n * @property {string} [key] The key to identify this component.\n * @property {number} [size] The size in pixels of this loader.\n * @property {string} [themeType] The chosen theme type.\n * @property {string} [theme] The chosen theme.\n *\n * @extends {React.Component<LoaderProps>}\n */\nclass Loader extends React.Component {\n render() {\n const size = this.props.size || 234;\n const theme = this.props.themeType || this.props.theme || 'light';\n return <div className={'logo-back logo-background-' + theme}>\n <div className=\"logo-div\" style={{width: size, height: size}}>\n <div className={'logo-top logo-background-' + theme} style={{left: '37%'}}/>\n <div className={'logo-top logo-background-' + theme} style={{left: '57%'}}/>\n <div\n className={'logo-border logo-background-' + theme + ' logo-animate-wait'}\n style={{borderWidth: size * 0.132}}\n />\n <div className={'logo-i logo-animate-color-inside-' + theme}/>\n <div className={'logo-i-top logo-animate-color-inside-' + theme} style={{top: '18%'}}/>\n <div className={'logo-i-top logo-animate-color-inside-' + theme} style={{bottom: '18%'}}/>\n </div>\n <div className={'logo-animate-grow logo-animate-grow-' + theme}\n style={{width: size + 11, height: size + 11}}\n />\n </div>;\n }\n}\n\nLoader.propTypes = {\n size: PropTypes.number,\n themeType: PropTypes.string\n};\n\n/** @type {typeof Loader} */\nconst _export = withStyles(styles)(Loader);\nexport default _export;"],"file":"Loader.js"}
@@ -100,15 +100,15 @@ var Logo = /*#__PURE__*/function (_React$Component) {
100
100
 
101
101
  if (json["native"] && json.common) {
102
102
  if (json.common.name !== _this.props.common.name) {
103
- _this.props.onError(_i18n["default"].t('ra_otherConfig', json.common.name));
103
+ _this.props.onError && _this.props.onError(_i18n["default"].t('ra_otherConfig', json.common.name));
104
104
  } else {
105
- _this.props.onLoad(json["native"]);
105
+ _this.props.onLoad && _this.props.onLoad(json["native"]);
106
106
  }
107
107
  } else {
108
- _this.props.onError(_i18n["default"].t('ra_invalidConfig'));
108
+ _this.props.onError && _this.props.onError(_i18n["default"].t('ra_invalidConfig'));
109
109
  }
110
110
  } catch (e) {
111
- _this.props.onError(e.toString());
111
+ _this.props.onError && _this.props.onError(e.toString());
112
112
  }
113
113
  };
114
114
 
@@ -176,7 +176,7 @@ var Logo = /*#__PURE__*/function (_React$Component) {
176
176
  var win = window.open(_this3.props.common.readme, '_blank');
177
177
  win.focus();
178
178
  }
179
- }, /*#__PURE__*/_react["default"].createElement(_Help["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
179
+ }, /*#__PURE__*/_react["default"].createElement(_Help["default"], null)) : null, this.props.onLoad ? /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
180
180
  size: "small",
181
181
  color: "primary",
182
182
  "aria-label": "Load config",
@@ -185,7 +185,7 @@ var Logo = /*#__PURE__*/function (_React$Component) {
185
185
  onClick: function onClick() {
186
186
  return _this3.upload();
187
187
  }
188
- }, /*#__PURE__*/_react["default"].createElement(_VerticalAlignTop["default"], null)), /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
188
+ }, /*#__PURE__*/_react["default"].createElement(_VerticalAlignTop["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
189
189
  size: "small",
190
190
  color: "primary",
191
191
  "aria-label": "Save config",
@@ -218,8 +218,8 @@ Logo.propTypes = {
218
218
  style: _propTypes["default"].object,
219
219
  "native": _propTypes["default"].object.isRequired,
220
220
  instance: _propTypes["default"].number.isRequired,
221
- onError: _propTypes["default"].func,
222
- onLoad: _propTypes["default"].func
221
+ onError: _propTypes["default"].func.isRequired,
222
+ onLoad: _propTypes["default"].func.isRequired
223
223
  };
224
224
  /** @type {typeof Logo} */
225
225