iobroker.javascript 8.1.0 → 8.1.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.
- package/README.md +4 -14
- package/admin/asset-manifest.json +9 -7
- package/admin/google-blockly/own/blocks_action.js +10 -10
- package/admin/google-blockly/own/blocks_sendto.js +6 -6
- package/admin/google-blockly/own/blocks_system.js +5 -5
- package/admin/google-blockly/own/blocks_words.js +0 -12
- package/admin/static/css/373.d5afd7f9.chunk.css +2 -0
- package/admin/static/css/373.d5afd7f9.chunk.css.map +1 -0
- package/admin/static/js/373.b2a9ea25.chunk.js +2 -0
- package/admin/static/js/373.b2a9ea25.chunk.js.map +1 -0
- package/admin/static/js/373.d6e46355.chunk.js +2 -0
- package/admin/static/js/373.d6e46355.chunk.js.map +1 -0
- package/admin/static/js/main.14858ad5.js +2 -0
- package/admin/static/js/main.14858ad5.js.map +1 -0
- package/admin/static/js/{main.b0892e26.js → main.19f79a05.js} +2 -2
- package/admin/static/js/{main.b0892e26.js.map → main.19f79a05.js.map} +1 -1
- package/admin/static/js/{main.99fd1618.js → main.29cba9c3.js} +2 -2
- package/admin/static/js/{main.99fd1618.js.map → main.29cba9c3.js.map} +1 -1
- package/admin/static/media/blockly2js.8fb8f9319a060341c081277b7b760c74.svg +24 -0
- package/admin/static/media/rules2js.a3f8ea14eb2673da17e7611b2299af6f.svg +24 -0
- package/admin/tab.html +1 -1
- package/io-package.json +14 -14
- package/package.json +1 -1
- package/admin/static/js/184.11bd6284.chunk.js +0 -2
- package/admin/static/js/184.11bd6284.chunk.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/184.11bd6284.chunk.js","mappings":"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","sources":["Dialogs/Rename.jsx","Dialogs/Delete.jsx","Dialogs/AddNewScript.jsx","Dialogs/New.jsx","Dialogs/Error.jsx","Dialogs/AdapterDebug.jsx","SideMenu.jsx","Log.jsx","Components/ScriptEditorVanilaMonaco.jsx","Dialogs/Export.jsx","Dialogs/Import.jsx","Components/BlocklyEditor.jsx","Dialogs/ScriptEditor.jsx","webpack://js/./src/Components/RulesEditor/style.module.scss?d9e3","webpack://js/./src/Components/RulesEditor/components/CardMenu/style.module.scss?24d8","Components/RulesEditor/helpers/MaterialDynamicIcon.jsx","Components/RulesEditor/components/CardMenu/index.jsx","webpack://js/./src/Components/RulesEditor/components/CurrentItem/style.module.scss?3318","Components/RulesEditor/helpers/deepCopy.jsx","Components/RulesEditor/helpers/filterElement.jsx","webpack://js/./src/Components/RulesEditor/components/GenericBlock/style.module.scss?9124","webpack://js/./src/Components/RulesEditor/components/CustomButton/style.module.scss?0052","Components/RulesEditor/components/CustomButton/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomCheckbox/style.module.scss?0cc5","Components/RulesEditor/components/CustomCheckbox/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomInput/style.module.scss?7193","Components/RulesEditor/components/CustomInput/index.jsx","Components/RulesEditor/components/CustomInstance/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomModal/style.module.scss?7408","Components/RulesEditor/components/CustomModal/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSelect/style.module.scss?40f6","Components/RulesEditor/components/CustomSelect/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSlider/style.module.scss?f41a","Components/RulesEditor/components/CustomSlider/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSwitch/style.module.scss?0c1c","Components/RulesEditor/components/CustomSwitch/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomTime/style.module.scss?880f","Components/RulesEditor/components/CustomTime/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomDate/style.module.scss?8a42","Components/RulesEditor/components/CustomDate/index.jsx","Components/RulesEditor/helpers/utils.jsx","Components/RulesEditor/helpers/Tour.jsx","Components/RulesEditor/components/GenericBlock/index.jsx","Components/RulesEditor/components/Blocks/ActionSayText.jsx","Components/RulesEditor/components/Blocks/ActionSendEmail.jsx","Components/RulesEditor/components/Blocks/ActionTelegram.jsx","Components/RulesEditor/components/Blocks/ActionPushover.jsx","Components/RulesEditor/components/Blocks/ActionWhatsappcmb.jsx","Components/RulesEditor/components/Blocks/ActionPushsafer.jsx","Components/RulesEditor/helpers/Compile.jsx","Components/RulesEditor/components/Blocks/TriggerScriptSave.jsx","Components/RulesEditor/components/Blocks/TriggerSchedule.jsx","Components/RulesEditor/components/Blocks/TriggerState.jsx","Components/RulesEditor/components/Blocks/ConditionState.jsx","Components/RulesEditor/components/Blocks/ConditionTime.jsx","Components/RulesEditor/components/Blocks/ConditionAstronomical.jsx","Components/RulesEditor/components/Blocks/ActionSetState.jsx","Components/RulesEditor/components/Blocks/ActionExec.jsx","Components/RulesEditor/components/Blocks/ActionHTTPCall.jsx","Components/RulesEditor/components/Blocks/ActionPrintText.jsx","Components/RulesEditor/components/Blocks/ActionPause.jsx","Components/RulesEditor/components/Blocks/ActionFunction.jsx","Components/RulesEditor/components/Blocks/ActionSetStateDelayed.jsx","Components/RulesEditor/components/Blocks/ActionOperateStates.jsx","Components/RulesEditor/components/StandardBlocks/index.jsx","Components/RulesEditor/components/ContextWrapper/index.jsx","Components/RulesEditor/components/CurrentItem/index.jsx","Components/RulesEditor/helpers/findElement.jsx","Components/RulesEditor/components/CustomDragLayer/index.jsx","webpack://js/./src/Components/RulesEditor/components/ContentBlockItems/style.module.scss?385e","Components/RulesEditor/hooks/useStateLocal.jsx","Components/RulesEditor/helpers/cardSort.jsx","webpack://js/./src/Components/RulesEditor/components/DragWrapper/style.module.scss?b1b7","Components/RulesEditor/components/DragWrapper/index.jsx","Components/RulesEditor/components/ContentBlockItems/DialogHelp.jsx","Components/RulesEditor/components/ContentBlockItems/DialogCondition.jsx","Components/RulesEditor/components/ContentBlockItems/index.jsx","webpack://js/./src/Components/RulesEditor/components/Menu/style.module.scss?9893","Components/RulesEditor/components/CardMenu/CustomDragItem.jsx","webpack://js/./src/Components/RulesEditor/components/HamburgerMenu/hamburgerMenu.module.scss?ab25","Components/RulesEditor/components/HamburgerMenu/index.jsx","Components/RulesEditor/components/Menu/index.jsx","Components/RulesEditor/index.jsx","Components/Debugger/Editor.jsx","Components/Debugger/Console.jsx","Components/Debugger/Stack.jsx","Components/Debugger/index.jsx","OpenAi/OpenAiPrompt.jsx","OpenAi/OpenAiDialog.jsx","Editor.jsx","Dialogs/ImportFile.jsx","App.jsx","serviceWorker.jsx","bootstrap.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass DialogRename extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n instance: props.instance || 0\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n this.prefix = this.getPrefix(props.id);\n this.oldId = props.id;\n }\n\n getPrefix(id) {\n const parts = (id || '').split('.');\n parts.pop();\n return parts.join('.');\n }\n\n getId(name) {\n name = (name || '').replace(/[\\\\/\\][*,;'\"`<>?\\s]/g, '_');\n return this.prefix + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.prefix = this.getPrefix(nextProps.id);\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onRename(this.oldId, this.state.id, this.state.name, this.state.instance);\n this.props.onClose();\n };\n\n handleChange = name => {\n this.setState({name, id: this.getId(name)});\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth\n open={!0}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Rename')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n label={I18n.t('Name')}\n value={this.state.name}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.state.id}\n disabled\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance'}}\n >\n {this.props.instances.map(instance => <MenuItem key={instance} value={instance}>{instance || '0'}</MenuItem>)}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogRename.propTypes = {\n onClose: PropTypes.func,\n onRename: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n folder: PropTypes.bool,\n};\n\nexport default DialogRename;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport withStyles from '@mui/styles/withStyles';\n\nconst styles = theme => ({\n\n});\n\nclass DialogDelete extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n };\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose(null);\n };\n\n handleOk = () => {\n this.props.onDelete(this.state.id);\n this.props.onClose(this.props.value);\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n open={!0}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Are you sure?')}</DialogTitle>\n <DialogContent>\n <IconDelete/>\n <span style={{fontSize: 14, fontWeight: 'bold'}}>{I18n.t('Delete %s', this.state.name)}</span>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogDelete.propTypes = {\n onClose: PropTypes.func,\n onDelete: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogDelete);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport CardMedia from '@mui/material/CardMedia';\n\nimport ImgJS from '../assets/tileJS.png';\nimport ImgTS from '../assets/tileTS.png';\nimport ImgBlockly from '../assets/tileBlockly.png';\nimport ImgRules from '../assets/tileRules.png';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n card: {\n maxWidth: 345,\n minWidth: 250,\n display: 'inline-block',\n margin: '0 10px 0 10px',\n },\n media: {\n height: 122,\n },\n text: {\n maxWidth: 218,\n minHeight: 30,\n },\n complexity: {\n fontWeight: 'bold',\n fontStyle: 'italic',\n marginBottom: theme.spacing(1),\n },\n});\n\nclass DialogAddNew extends React.Component {\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = type => {\n this.props.onClose(type);\n };\n\n openHtml(html) {\n const lang = I18n.getLanguage();\n if (!html.includes('javascript.md') && (lang === 'de' || lang === 'ru')) {\n html = html.replace(/\\/en\\//, '/' + lang + '/');\n }\n const win = window.open(html, '_blank');\n win.focus();\n }\n\n getJSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgJS}\n title=\"JavaScript\"\n />\n <CardContent>\n <h2>JavaScript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for programmers')}</div>\n <div className={this.props.classes.text}>{I18n.t('JS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" variant=\"contained\" onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"secondary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getTSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgTS}\n title=\"TypeScript\"\n />\n <CardContent>\n <h2>TypeScript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for professionals')}</div>\n <div className={this.props.classes.text}>{I18n.t('TS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" variant=\"contained\" onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"secondary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getBlocklyCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Blockly')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgBlockly}\n title=\"Blockly\"\n />\n <CardContent>\n <h2>Blockly</h2>\n <div className={this.props.classes.complexity}>{I18n.t('normal')}</div>\n <div className={this.props.classes.text}>{I18n.t('Blockly description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" variant=\"contained\" onClick={() => this.props.onClose && this.props.onClose('Blockly')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"secondary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/blockly.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getRulesCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Rules')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgRules}\n title=\"Rules\"\n />\n <CardContent>\n <h2>Rules</h2>\n <div className={this.props.classes.complexity}>{I18n.t('easy')}</div>\n <div className={this.props.classes.text}>{I18n.t('Rules description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" variant=\"contained\" onClick={() => this.props.onClose && this.props.onClose('Rules')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"secondary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n render() {\n return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n fullWidth\n open={!0}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Add new script')}</DialogTitle>\n <DialogContent style={{ textAlign: 'center' }}>\n {this.getRulesCard()}\n {this.getBlocklyCard()}\n {this.getJSCard()}\n {this.getTSCard()}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAddNew.propTypes = {\n onClose: PropTypes.func\n};\n\nexport default withStyles(styles)(DialogAddNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n\n});\n\nclass DialogNew extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name || 'Script',\n instance: props.instance || 0,\n parent: props.parent,\n error: ''\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n }\n\n getId(name) {\n name = name || this.state.name || '';\n name = name.replace(/[\\\\/\\][.*,;'\"`<>?\\s]/g, '_').trim().replace(/\\.$/, '_');\n return (this.state ? this.state.parent : this.props.parent) + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onAdd(this.getId(this.state.name), this.state.name, this.state.instance, this.props.type);\n this.props.onClose();\n };\n\n handleChange = name => {\n const id = this.getId(name);\n if (!name) {\n this.setState({name, id, error: I18n.t('Empty name is not allowed')});\n } else\n if (this.props.existingItems && this.props.existingItems.indexOf(id) !== -1) {\n this.setState({name, id, error: I18n.t('Duplicate name')});\n } else {\n this.setState({name, id, error: ''});\n }\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth\n open={!0}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Create new')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n error={!!this.state.error}\n label={I18n.t('Name')}\n value={this.state.name}\n helperText={this.state.error}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <FormControl variant=\"standard\" style={{width: '100%'}}>\n <InputLabel htmlFor=\"parent\">{I18n.t('Folder')}</InputLabel>\n <Select\n variant=\"standard\"\n style={{width: '100%'}}\n value={this.state.parent}\n onChange={e => this.setState({parent: e.target.value})}\n inputProps={{name: 'parent', id: 'parent'}}\n >\n {this.props.parents.map(parent => {\n const parts = parent.id.split('.');\n parts.splice(0, 2); // remove script.js\n const names = [];\n let id = 'script.js';\n parts.forEach((n, i) => {\n id += '.' + n;\n const el = this.props.parents.find(item => item.id === id);\n if (el) {\n names.push(el.name);\n } else {\n names.push(n);\n }\n });\n if (!names.length) {\n names.push(parent.name);\n }\n return (<MenuItem key={parent.id} value={parent.id}>{names.join(' / ')}</MenuItem>);\n })}\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.getId()}\n disabled\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance'}}\n >\n {this.props.instances.map(instance => (<MenuItem key={'instance' + instance} value={instance}>{instance || '0'}</MenuItem>))}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!!this.state.error} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogNew.propTypes = {\n onClose: PropTypes.func,\n onAdd: PropTypes.func,\n name: PropTypes.string,\n title: PropTypes.string,\n parent: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n parents: PropTypes.array,\n existingItems: PropTypes.array,\n folder: PropTypes.bool,\n type: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\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 DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n titleBackground: {\n background: theme.palette.error.main,\n },\n titleColor: {\n color: theme.palette.error.contrastText,\n '&>h2': {\n color: theme.palette.error.contrastText,\n }\n },\n});\n\nclass DialogError extends React.Component {\n constructor(props) {\n super(props);\n console.log('Error created')\n }\n handleOk = () => {\n this.props.onClose && this.props.onClose();\n };\n\n render() {\n return <Dialog\n open={!0}\n maxWidth=\"sm\"\n fullWidth\n onClose={() => this.handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle className={this.props.classes.titleBackground}\n classes={{ root: this.props.classes.titleColor }}\n id=\"alert-dialog-title\">{this.props.title || I18n.t('Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {this.props.text || I18n.t('Unknown error!')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogError.propTypes = {\n onClose: PropTypes.func,\n title: PropTypes.string,\n text: PropTypes.string,\n icon: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogError);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Grid from '@mui/material/Grid';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconClose from '@mui/icons-material/Close';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n icon: {\n width: 24,\n height: 24,\n },\n filter: {\n width: '100%',\n },\n filterWithButton: {\n width: '100%',\n },\n title: {\n fontWeight: 'bold',\n marginTop: theme.spacing(2),\n }\n});\n\n\nclass DialogAdapterDebug extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n instances: [],\n filter: window.localStorage.getItem('javascript.debug.filter') || '',\n showAskForStop: false,\n jsInstance: window.localStorage.getItem('javascript.debug.instance') || '',\n jsInstanceHost: '',\n adapterToDebug: window.localStorage.getItem('javascript.debug.adapter') || '',\n };\n }\n\n componentDidMount() {\n this.props.socket.getAdapterInstances()\n .then(instances => {\n instances = instances.filter(i => i && !i.common?.onlyWWW).map(item => {\n const name = item._id.replace(/^system\\.adapter\\./, '');\n const [adapter] = name.split('.');\n return {\n id: name,\n enabled: item.common?.enabled,\n host: item.common?.host,\n icon: item.common?.icon ? `../../adapter/${adapter}/${item.common.icon}` : '',\n };\n });\n instances.sort((a, b) => a.id > b.id ? 1 : (a.id < b.id ? -1 : 0));\n let jsInstance = this.state.jsInstance || '';\n let jsInstanceObj = this.state.jsInstance && instances.find(item => item.id === this.state.jsInstance);\n let jsInstanceHost;\n\n // check if selected instance is in the list\n if (!this.state.jsInstance || !jsInstanceObj) {\n jsInstance = instances.find(item => item.id.startsWith('javascript.')); // take the first one\n jsInstanceHost = jsInstance ? jsInstance.host : '';\n jsInstance = jsInstance ? jsInstance.id : '';\n } else {\n jsInstanceHost = jsInstanceObj ? jsInstanceObj.host : '';\n }\n\n let adapterToDebug = this.state.adapterToDebug || '';\n if (adapterToDebug && !instances.find(item => item.id === adapterToDebug)) {\n adapterToDebug = '';\n }\n\n this.setState({instances, jsInstance, adapterToDebug, jsInstanceHost});\n });\n }\n\n handleOk = () => {\n // TODO\n if (this.state.instances.find(item => item.id === this.state.adapterToDebug).enabled) {\n return this.props.socket.getObject('system.adapter.' + this.state.adapterToDebug)\n .then(obj => {\n obj.common.enabled = false;\n this.props.socket.setObject(obj._id, obj)\n .then(() =>\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug));\n })\n } else {\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug);\n }\n };\n\n\n renderJavascriptList() {\n const js = this.state.instances.filter(item => item.id.startsWith('javascript.'));\n if (js.length < 2) {\n return null;\n } else {\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Host')}</div>\n <List component=\"nav\">\n {js.map(item => <ListItem\n button\n selected={this.state.jsInstance === item.id}\n onClick={this.setState({jsInstance: item.id, jsInstanceHost: item.host})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n renderInstances() {\n if (!this.state.jsInstance) {\n return <Grid item/>;\n } else {\n const instances = this.state.instances.filter(item =>\n item.id !== this.state.jsInstance && item.host === this.state.jsInstanceHost && (!this.state.filter || item.id.includes(this.state.filter.toLowerCase()) ));\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Instances')}</div>\n <List component=\"nav\">\n {instances.map(item => <ListItem\n button\n selected={this.state.adapterToDebug === item.id}\n onDoubleClick={() => this.setState({adapterToDebug: item.id}, () => this.handleOk())}\n onClick={() => this.setState({adapterToDebug: item.id})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n render() {\n return <Dialog\n maxWidth=\"md\"\n fullWidth={false}\n open={!0}\n onClose={(event, reason) => false}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Debug instance')}</DialogTitle>\n <DialogContent>\n <Grid container direction=\"column\">\n <Grid item>\n <Input\n classes={{root: this.props.classes.filterWithButton}}\n value={this.state.filter}\n placeholder={I18n.t('Filter')}\n onChange={e => {\n this.setState({filter: e.target.value});\n window.localStorage.setItem('javascript.debug.filter', e.target.value);\n }}\n endAdornment={\n <InputAdornment position=\"end\">\n {this.state.filter ? <IconButton\n size=\"small\"\n aria-label=\"toggle password visibility\"\n onClick={() => this.setState({filter: ''})}\n >\n <IconClose />\n </IconButton> : ''}\n </InputAdornment>\n }\n />\n </Grid>\n <Grid item>\n <Grid container>\n {this.renderJavascriptList()}\n {this.renderInstances()}\n </Grid>\n </Grid>\n </Grid>\n\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!this.state.jsInstance || !this.state.adapterToDebug} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Start')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.props.onClose()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAdapterDebug.propTypes = {\n socket: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onDebug: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(DialogAdapterDebug);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Drawer from '@mui/material/Drawer';\nimport Divider from '@mui/material/Divider';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ListItemText from '@mui/material/ListItemText';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Input from '@mui/material/Input';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport { MdMoreVert as IconMore } from 'react-icons/md';\nimport { FaFolder as IconFolder } from 'react-icons/fa';\nimport { FaFolderOpen as IconFolderOpened } from 'react-icons/fa';\nimport { MdContentCopy as IconCopy } from 'react-icons/md';\nimport { MdDelete as IconDelete } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { MdClose as IconClear } from 'react-icons/md';\nimport { MdFormatClear as IconClose } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdAdd as IconAdd } from 'react-icons/md';\nimport { MdCreateNewFolder as IconAddFolder } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdSwapVert as IconReorder } from 'react-icons/md';\nimport { MdEdit as IconEdit } from 'react-icons/md';\nimport { MdSearch as IconFind } from 'react-icons/md';\nimport { MdPersonPin as IconExpert } from 'react-icons/md';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { MdPalette as IconDark } from 'react-icons/md';\nimport { MdUnfoldMore as IconExpandAll } from 'react-icons/md';\nimport { MdUnfoldLess as IconCollapseAll } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\n\nimport { red, green, yellow } from '@mui/material/colors';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgRules from './assets/rules.png';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport DialogRename from './Dialogs/Rename';\nimport DialogDelete from './Dialogs/Delete';\nimport DialogAddNewScript from './Dialogs/AddNewScript';\nimport DialogNew from './Dialogs/New';\nimport DialogError from './Dialogs/Error';\nimport DialogAdapterDebug from './Dialogs/AdapterDebug';\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_RUN = green[400];\nconst COLOR_PROBLEM = yellow[400];\nconst COLOR_PAUSE = red[400];\nconst ROOT_ID = 'script.js';\nconst COMMON_ID = ROOT_ID + '.common';\nconst GLOBAL_ID = ROOT_ID + '.global';\nconst NARROW_WIDTH = 350;\nconst LEVEL_PADDING = 16;\n\nconst SELECTED_STYLE = {\n background: '#164477',\n color: 'white'\n};\n\nconst styles = theme => ({\n drawerPaper: {\n position: 'relative',\n width: '100%', //Theme.menu.width,\n height: '100%',\n overflow: 'hidden',\n },\n toolbar: {\n height: theme.toolbar.height,\n },\n toolbarButtons: {\n color: theme.palette.mode === 'dark'? 'white !important' : 'black !important',\n },\n iconButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n toolbarSearch: {\n width: 'calc(100% - 105px)',\n lineHeight: '34px',\n marginLeft: 5,\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 2,\n },\n iconDropdownMenu: {\n paddingRight: 5,\n },\n iconOnTheRight: {\n position: 'absolute',\n right: 10,\n top: 'calc(50% - 8px)',\n },\n menu: {\n width: '100%',\n height: '100%',\n },\n innerMenu: {\n width: '100%',\n height: 'calc(100% - 76px)',\n overflowX: 'hidden',\n overflowY: 'auto',\n },\n listItemIcon: {\n minWidth: 32,\n },\n filterIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5,\n },\n scriptIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginTop: 4,\n marginBottom: 4,\n marginLeft: 8,\n marginRight: 4,\n },\n folder: {\n //background: theme.palette.mode === 'dark' ? '#6a6a6a' : '#e2e2e2',\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none',\n },\n folderReorder: {\n opacity: 0.3,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity',\n },\n folderIcon: {\n width: 20,\n height: 20,\n },\n folderIconReorder: {\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n folderIconNoReorder: {\n cursor: 'pointer',\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n script: {\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none',\n },\n scriptReorder: {\n opacity: 1,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity',\n },\n reorder: {\n //padding: '9px 16px 9px 9px',\n },\n expandButton: {\n width: 37,\n height: 37,\n },\n selected: SELECTED_STYLE,\n instances: {\n color: 'gray',\n fontSize: 'smaller',\n },\n childrenCount: {\n float: 'right',\n marginRight: 5,\n fontSize: 10,\n opacity: 0.4,\n },\n footer: {\n height: 24,\n },\n footerButtons: {\n '&:hover': {\n backgroundColor: '#dbdbdb',\n },\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n marginTop: 1,\n marginRight: 2,\n height: 22,\n width: 22,\n },\n footerButtonsRight: {\n float: 'right',\n },\n\n mainList: {\n '& .js-folder-dragover>div>li>.folder-reorder': {\n background: '#40adff'\n },\n '& .js-folder-dragging .folder-reorder': {\n opacity: 1,\n },\n '& .js-folder-dragging .script-reorder': {\n opacity: 0.3,\n },\n },\n});\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n def: ImgJS,\n 'Rules':ImgRules,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst getObjectName = (id, obj, lang) => {\n lang = lang || I18n.getLanguage();\n if (obj && obj.common && obj.common.name) {\n if (typeof obj.common.name === 'object') {\n return (obj.common.name[lang] || obj.common.name.en || id.replace(/^script\\.js./, '')).toString();\n } else {\n return obj.common.name.toString();\n }\n } else {\n return id.replace(/^script\\.js./, '');\n }\n};\n\nconst prepareList = data => {\n const result = [{\n id: ROOT_ID,\n depth: 0,\n index: 0,\n parent: null,\n title: 'root',\n type: 'folder',\n }];\n const ids = Object.keys(data);\n\n /*ids.sort((a, b) => {\n if ((a === 'script.js.common' || a === 'script.js.global') && (b === 'script.js.common' || b === 'script.js.global')) {\n return a > b ? 1 : -1;\n } else if (a === 'script.js.common' || a === 'script.js.global' || b === 'script.js.common' || b === 'script.js.global') {\n return 1;\n } else {\n return a > b ? 1 : -1;\n }\n });*/\n\n for (let i = 0; i < ids.length; i++) {\n const obj = data[ids[i]];\n const parts = ids[i].split('.');\n parts.pop();\n result.push({\n id: ids[i],\n title: getObjectName(ids[i], obj),\n enabled: obj && obj.common && obj.common.enabled,\n depth: parts.length - 1,\n type: obj.type === 'script' ? obj.common.engineType : 'folder',\n parent: parts.length > 1 ? parts.join('.') : null,\n instance: obj.common.engine ? parseInt(obj.common.engine.split('.').pop(), 10) || 0 : null,\n });\n }\n\n // Place all folder-less scripts at start\n /*result.sort((a, b) => {\n // without folders => always at start\n if (!a.parent && a.type !== 'folder' && !b.parent && b.type !== 'folder') {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (!a.parent && a.type !== 'folder') {\n return -1;\n } else if (!b.parent && b.type !== 'folder') {\n return 1;\n } else {\n // common and global are always at the end\n if ((a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) &&\n (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global'))) {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) {\n return 1;\n } else if (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global')) {\n return -1;\n } else {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n }\n }\n });*/\n\n let modified;\n do {\n modified = false;\n // check if all parents exists\n // eslint-disable-next-line\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (!parent) {\n const parts = item.parent.split('.');\n parts.pop();\n result.push({\n id: item.parent,\n title: item.parent.split('.').pop(),\n depth: parts.length - 1,\n type: 'folder',\n parent: parts.length > 1 ? parts.join('.') : null\n });\n modified = true;\n }\n }\n });\n } while (modified);\n\n // Folders first\n result.sort((a, b) => {\n const idA = a.id.toLowerCase();\n const idB = b.id.toLowerCase();\n if (a.type === 'folder' && b.type !== 'folder') {\n return -1;\n } else if (b.type === 'folder' && a.type !== 'folder') {\n return 1;\n }\n\n if (idA > idB) {\n return 1;\n } else if (idA < idB) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // Fill all indexes\n result.forEach((item, i) => item.index = i);\n\n // Fill all parentIndex\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (parent) {\n item.parentIndex = parent.index;\n }\n }\n });\n\n return result;\n};\n\nexport const Droppable = (props) => {\n const { onDrop} = props;\n\n const [{ isOver, isOverAny}, drop] = useDrop({\n accept: ['script'],\n drop: e => isOver ? onDrop(e) : undefined,\n collect: monitor => ({\n isOver: monitor.isOver({ shallow: true }),\n isOverAny: monitor.isOver(),\n }),\n });\n\n return <div ref={drop} className={Utils.clsx(isOver && 'js-folder-dragover', isOverAny && 'js-folder-dragging')}>\n {props.children}\n </div>;\n};\n\nexport const Draggable = props => {\n const { name } = props;\n const [{ opacity }, drag] = useDrag({\n type: 'script',\n item: () => ({name}),\n collect: monitor => ({opacity: monitor.isDragging() ? 0.3 : 1,}),\n });\n // About transform: https://github.com/react-dnd/react-dnd/issues/832#issuecomment-442071628\n return <div ref={drag} style={{ opacity, transform: 'translate3d(0, 0, 0)' }}>\n {props.children}\n </div>;\n};\n\nclass SideDrawer extends React.Component {\n constructor(props) {\n super(props);\n\n let expanded = window.localStorage ? window.localStorage.getItem('SideMenu.expanded') : '[]';\n try {\n expanded = JSON.parse(expanded) || [];\n } catch (e) {\n expanded = [];\n }\n\n this.inputRef = new React.createRef();\n\n this.state = {\n listItems: prepareList(props.scripts || {}),\n expanded: expanded,\n problems: [],\n reorder: false,\n themeName: this.props.themeName,\n selected: window.localStorage ? window.localStorage.getItem('SideMenu.selected') || null : null,\n creatingScript: false,\n creatingFolder: false,\n copingScript: '',\n renaming: null,\n deleting: null,\n choosingType: null,\n errorText: '',\n instances: props.instances || [],\n menuOpened: false,\n menuAnchorEl: null,\n searchMode: false,\n expertMode: this.props.expertMode,\n searchText: '',\n width: this.props.width || 300,\n typeFilter: window.localStorage ? window.localStorage.getItem('SideMenu.typeFilter') || '' : '', // blockly, js, ts\n statusFilter: window.localStorage ? window.localStorage.getItem('SideMenu.statusFilter') || '' : '',\n runningInstances: this.props.runningInstances || {},\n scriptsHash: props.scriptsHash,\n showAdapterDebug: false,\n };\n\n const newExp = this.ensureSelectedIsVisible();\n if (newExp) {\n this.state.expanded = newExp;\n }\n\n // debounce search process\n this.filterTimer = null;\n\n this.state.isAllZeroInstances = this.getIsAllZeroInstances();\n\n this.problems = null; //cache\n this.problemsTimer = null;\n this.onProblemUpdatedBound = this.onProblemUpdated.bind(this);\n }\n\n readProblems(cb, tasks) {\n if (!tasks) {\n tasks = Object.keys(this.props.scripts);\n }\n if (!tasks || !tasks.length) {\n cb && cb();\n } else {\n const id = tasks.shift();\n if (this.props.scripts[id] &&\n this.props.scripts[id].type === 'script' &&\n this.props.scripts[id].common &&\n this.props.scripts[id].common.enabled &&\n !id.match(/^script\\.js\\.global\\./) // GLOBAL_ID\n ) {\n const instance = this.props.scripts[id].common.engine.split('.').pop();\n const that = this; // sometimes lambda does not work\n const _id = `javascript.${instance}.scriptProblem.${id.substring(ROOT_ID.length + 1)}`;\n\n this.props.socket.getState(_id, (err, state) => {\n that.onProblemUpdated(_id, state);\n setTimeout(() => that.readProblems(cb, tasks), 0);\n });\n } else {\n setTimeout(() => this.readProblems(cb, tasks), 0);\n }\n }\n }\n\n componentDidMount() {\n this.readProblems(() => {\n this.props.instances.forEach(instance => {\n this.props.socket.subscribeState(`javascript.${instance}.scriptProblem.*`, this.onProblemUpdatedBound);\n });\n });\n }\n\n componentWillUnmount() {\n this.props.instances.forEach(instance => {\n this.props.socket.unsubscribeState(`javascript.${instance}.scriptProblem.*`, this.onProblemUpdatedBound);\n });\n }\n\n onProblemUpdated(id, state) {\n if (!state || !id) return;\n id = `${ROOT_ID}.${id.replace(/^javascript\\.\\d+\\.scriptProblem\\./, '')}`;\n\n if (!this.problems) {\n this.problems = JSON.parse(JSON.stringify(this.state.problems));\n }\n let changed = false;\n\n if (state.val) {\n if (this.problems.indexOf(id) === -1) {\n this.problems.push(id);\n changed = true;\n }\n } else {\n const pos = this.problems.indexOf(id);\n if (pos !== -1) {\n this.problems.splice(pos, 1);\n changed = true;\n }\n }\n\n if (changed && !this.problemsTimer) {\n this.problemsTimer = setTimeout(() => {\n this.problemsTimer = null;\n this.setState({ problems: this.problems });\n this.problems = null;\n }, 300);\n }\n }\n\n static filterListStatic(isSearchEnabled, listItems, searchMode, searchText, objects) {\n listItems = JSON.parse(JSON.stringify(listItems));\n let changed = false;\n let newState = {listItems};\n if (isSearchEnabled !== false && searchMode && searchText) {\n const text = searchText.toLowerCase();\n listItems.forEach(item => {\n const id = item.title.toLowerCase();\n item.filteredPartly = false;\n let found = id.includes(text);\n if (!found && (objects && objects[item.id] && objects[item.id].common && objects[item.id].common.source)) {\n if (objects[item.id].common.engineType === 'Blockly') {\n const pos = objects[item.id].common.source.lastIndexOf('//');\n found = objects[item.id].common.source.substring(0, pos).toLowerCase().includes(text);\n } else {\n found = objects[item.id].common.source.toLowerCase().includes(text);\n }\n }\n if (found) {\n if (item.filtered) {\n item.filtered = false;\n changed = true;\n }\n } else if (!item.filtered) {\n item.filtered = true;\n changed = true;\n }\n });\n\n if (changed) {\n // check that all parents of every non-filtered item are visible\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n if (!item.filtered || item.filteredPartly) {\n let it = item;\n do {\n if (it.parent && listItems[it.parentIndex]) {\n changed = true;\n listItems[it.parentIndex].filteredPartly = true;\n }\n it = it.parent && listItems[it.parentIndex] ? listItems[it.parentIndex] : null;\n } while(it);\n }\n }\n }\n } else {\n listItems.forEach(item => {\n if (item.filtered || item.filteredPartly) {\n item.filtered = false;\n item.filteredPartly = false;\n changed = true;\n }\n });\n if (isSearchEnabled === false) {\n newState.searchText = '';\n newState.searchMode = false;\n changed = true;\n }\n }\n\n return changed ? newState : null;\n }\n\n filterList(isSearchEnabled, cb) {\n const newState = SideDrawer.filterListStatic(\n isSearchEnabled,\n this.state.listItems,\n this.state.searchMode,\n this.state.searchText,\n this.props.scripts,\n );\n\n if (newState) {\n this.setState(newState, () => cb && cb());\n } else if (cb) {\n cb();\n }\n }\n\n static ensureSelectedIsVisibleStatic(selected, expanded, listItems) {\n expanded = JSON.parse(JSON.stringify(expanded));\n let changed = false;\n\n // ensure that the item is visible\n let el = typeof selected === 'object' ? selected : listItems.find(it => it.id === selected);\n do {\n // eslint-disable-next-line\n el = el && el.parent && listItems.find(it => it.id === el.parent);\n if (el) {\n if (expanded.indexOf(el.id) === -1) {\n expanded.push(el.id);\n changed = true;\n }\n }\n } while(el);\n return changed && expanded;\n }\n\n ensureSelectedIsVisible(selected, expanded) {\n SideDrawer.ensureSelectedIsVisibleStatic(selected || this.state.selected, expanded || this.state.expanded, this.state.listItems);\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n if (state.expertMode !== props.expertMode) {\n changed = true;\n newState.expertMode = props.expertMode;\n }\n if (state.scriptsHash !== props.scriptsHash && props.scripts) {\n const listItems = prepareList(props.scripts || {});\n\n newState.listItems = listItems;\n\n if (state.searchText) {\n const nState = SideDrawer.filterListStatic(true, listItems, state.searchMode, state.searchText, props.scripts);\n nState && Object.assign(newState, nState);\n }\n\n const isAllZeroInstances = SideDrawer.getIsAllZeroInstancesStatic(listItems, props.instances || []);\n\n const newExp = SideDrawer.ensureSelectedIsVisibleStatic(state.selected, state.expanded, state.listItems);\n\n newState.isAllZeroInstances = isAllZeroInstances;\n if (newExp) {\n newState.expanded = newExp;\n }\n changed = true;\n }\n\n if (state.width !== props.width) {\n changed = true;\n newState.width = props.width;\n }\n if (state.themeName !== props.themeName) {\n changed = true;\n newState.themeName = props.themeName;\n }\n\n if (props.selectId && state.selected !== props.selectId) {\n const item = state.listItems.find(item => item.id === props.selectId);\n\n if (!state.reorder && item) {\n const expanded = SideDrawer.ensureSelectedIsVisibleStatic(item, state.expanded, state.listItems);\n newState.selected = item.id;\n if (expanded) {\n newState.expanded = expanded;\n }\n changed = true;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n if (changed) {\n return newState;\n } else {\n return null;\n }\n }\n\n static getIsAllZeroInstancesStatic(listItems, instances) {\n let isAllZeroInstances = !instances[0] && instances.length <= 1;\n\n if (isAllZeroInstances) {\n listItems.forEach(item => {\n if (item.type !== 'folder' && item.instance !== 0) {\n isAllZeroInstances = false;\n }\n });\n }\n return isAllZeroInstances;\n }\n\n getIsAllZeroInstances(listItems, instances) {\n listItems = listItems || this.state.listItems;\n instances = instances || this.state.instances;\n return SideDrawer.getIsAllZeroInstancesStatic(listItems || this.state.listItems, instances || this.state.instances);\n }\n\n saveExpanded(expanded) {\n window.localStorage.setItem('SideMenu.expanded', JSON.stringify(expanded || this.state.expanded));\n }\n\n showError(errorText) {\n this.setState({ errorText });\n }\n\n onToggle(id, e) {\n e && e.stopPropagation();\n if (id === ROOT_ID) {\n return;\n }\n const expanded = [...this.state.expanded];\n const newState = {expanded};\n const pos = expanded.indexOf(id);\n if (pos !== -1) {\n expanded.splice(pos, 1);\n if (this.state.selected && this.state.selected.startsWith(`${id}.`)) {\n newState.selected = id;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', id);\n }\n } else {\n expanded.push(id);\n expanded.sort();\n }\n this.setState({ expanded });\n this.saveExpanded(expanded);\n }\n\n renderItemButtonsOnEnd(item, children) {\n if (this.state.reorder) {\n return null;\n }\n if (item.type !== 'folder') {\n let color = item.enabled ? COLOR_RUN : COLOR_PAUSE;\n if (item.enabled && this.state.problems.includes(item.id)) {\n color = COLOR_PROBLEM;\n }\n\n return [\n <IconButton\n className={Utils.clsx(this.props.classes.iconButtons, this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n onClick={e => {\n e.stopPropagation();\n this.props.onEnableDisable && this.props.onEnableDisable(item.id, !item.enabled)\n }}\n title={item.enabled ? I18n.t('Pause script') : I18n.t('Run script')}\n disabled={this.props.debugMode}\n key=\"startStop\"\n style={{ color }}\n size=\"medium\"\n >\n {item.enabled ? <IconPause /> : <IconPlay />}\n </IconButton>,\n this.state.width > NARROW_WIDTH ? <IconButton\n key=\"delete\"\n className={Utils.clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n title={I18n.t('Delete script')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"\n >\n <IconDelete/>\n </IconButton> : null,\n <IconButton\n className={Utils.clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n key=\"openInEdit\"\n title={I18n.t('Edit script or just double click')}\n onClick={e => this.onEdit(item, e)}\n size=\"medium\">\n <IconDoEdit/>\n </IconButton>,\n ];\n } else if (this.state.width > NARROW_WIDTH) {\n if (item.id !== ROOT_ID && item.id !== COMMON_ID && item.id !== GLOBAL_ID && (!children || !children.length)) {\n return <IconButton\n className={Utils.clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n key=\"delete\"\n title={I18n.t('Delete folder')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"\n >\n <IconDelete/>\n </IconButton>;\n } else {\n return null;\n }\n }\n }\n\n onDelete(item, e) {\n e && e.stopPropagation();\n return new Promise(resolve => {\n if (typeof item !== 'object') {\n this.setState({ deleting: item });\n } else {\n this.setState({ deleting: item.id });\n }\n });\n }\n\n onEdit(item, e) {\n this.onClick(item, e);\n this.props.onEdit && this.props.onEdit(item.id);\n }\n\n getTextStyle(item) {\n if (!this.state.reorder && item.type !== 'folder') {\n return {\n //width: 130,\n width: `calc(100% - ${this.state.width > NARROW_WIDTH ? 185 : 137}px)`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n flex: 'none',\n padding: '0 16px 0 0',\n };\n }\n\n return {\n whiteSpace: 'nowrap',\n padding: '0 16px 0 0',\n };\n }\n\n onClick(item, e) {\n e && e.stopPropagation();\n if (!this.state.reorder && item) {\n const expanded = this.ensureSelectedIsVisible(item);\n const newState = {selected: item.id};\n if (expanded) {\n newState.expanded = expanded;\n }\n this.setState(newState);\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n onDblClick(item, e) {\n e && e.stopPropagation();\n if (this.state.reorder) {\n return;\n }\n if (item.type === 'folder') {\n this.onToggle(item.id);\n } else {\n this.onEdit(item);\n }\n }\n\n isFilteredOut(item) {\n if (item.filtered && !item.filteredPartly) {\n return true;\n }\n\n if (this.state.typeFilter && item.type !== 'folder' && item.type !== this.state.typeFilter) {\n return true;\n }\n\n if (this.state.statusFilter &&\n item.type !== 'folder' &&\n (\n (this.state.statusFilter === 'running' && !item.enabled) ||\n (this.state.statusFilter === 'paused' && item.enabled) ||\n (this.state.statusFilter === 'problems' && (!item.enabled || this.state.problems.indexOf(item.id) === -1)))\n ) {\n return true;\n }\n\n return item.id === GLOBAL_ID && !this.state.expertMode;\n }\n\n renderListItem(item, children, childrenFiltered) {\n if (item.id === ROOT_ID && !this.state.reorder) {\n return null;\n }\n\n const depthPx = (this.state.reorder ? item.depth : item.depth - 1) * LEVEL_PADDING;\n\n let title = item.title;\n\n if (this.state.searchText) {\n const pos = title.toLowerCase().indexOf(this.state.searchText.toLowerCase());\n if (pos !== -1) {\n title = [\n <span key=\"first\">{title.substring(0, pos)}</span>,\n <span key=\"second\" style={{ color: 'orange' }}>{title.substring(pos, pos + this.state.searchText.length)}</span>,\n <span key=\"third\">{title.substring(pos + this.state.searchText.length)}</span>,\n ];\n }\n }\n\n if (!this.state.isAllZeroInstances && item.type !== 'folder') {\n title = [\n <span key=\"instance\" title={I18n.t('Instance')} className={this.props.classes.instances}>[{item.instance}] </span>,\n <span key=\"title\">{title}</span>,\n ];\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const style = Object.assign({\n marginLeft: depthPx,\n cursor: item.type === 'folder' && reorder ? 'default' : 'inherit',\n width: `calc(100% - ${depthPx}px)`,\n }, item.id === this.state.selected && !reorder ? SELECTED_STYLE : {});\n\n if (!reorder) {\n style.opacity = item.filteredPartly ? 0.5 : 1;\n }\n\n if (item.id === GLOBAL_ID && item.id !== this.state.selected) {\n style.color = '#00a200';\n }\n\n let isExpanded = item.id === ROOT_ID;\n if (!isExpanded && children) {\n isExpanded = this.state.expanded.includes(item.id);\n }\n\n let iconStyle = {};\n if (item.id === GLOBAL_ID) {\n iconStyle.color = '#356956';\n } else if (item.id === COMMON_ID) {\n iconStyle.color = '#4899e1';\n }\n let iconClass;\n if (item.type === 'folder') {\n iconClass = Utils.clsx(this.props.classes.folderIcon, reorder ? this.props.classes.folderIconReorder : this.props.classes.folderIconNoReorder);\n } else {\n iconClass = Utils.clsx(this.props.classes.scriptIcon, reorder ? this.props.classes.scriptIconReorder : this.props.classes.scriptIconNoReorder);\n }\n\n let childrenCount = null;\n if ((childrenFiltered && childrenFiltered.length) || (children && children.length)) {\n childrenCount = <span className={this.props.classes.childrenCount}>{childrenFiltered && childrenFiltered.length !== children.length ? `${childrenFiltered.length}(${children.length})` : children.length}</span>;\n }\n\n return <ListItem\n key={item.id}\n style={style}\n className={Utils.clsx(\n item.type === 'folder' ? this.props.classes.folder : this.props.classes.script,\n reorder && item.type === 'folder' && 'folder-reorder',\n reorder && item.type !== 'folder' && 'script-reorder',\n reorder && this.props.classes.reorder,\n reorder && item.type !== 'folder' && this.props.classes.scriptReorder,\n reorder && item.type === 'folder' && this.props.classes.folderReorder,\n )}\n onClick={e => this.onClick(item, e)}\n onDoubleClick={e => this.onDblClick(item, e)}\n >\n <ListItemIcon classes={{ root: this.props.classes.listItemIcon }}>{\n item.type === 'folder' ? (\n reorder || isExpanded ?\n <IconFolderOpened className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)} /> :\n <IconFolder className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)} />\n )\n :\n <img className={iconClass} alt={item.type} src={images[item.type] || images.def} />\n }</ListItemIcon>\n <ListItemText\n classes={{ primary: item.id === this.state.selected && !reorder ? this.props.classes.selected : undefined }}\n style={this.getTextStyle(item)} primary={<span>{title}{childrenCount}</span>} />\n <ListItemSecondaryAction>{this.renderItemButtonsOnEnd(item, children)}</ListItemSecondaryAction>\n </ListItem>;\n }\n\n onDragFinish(source, target) {\n let newId = `${target}.${source.split('.').pop()}`;\n if (newId !== source) {\n // If target yet exists => add Copy to\n if (this.state.listItems.find(item => item.id === newId)) {\n newId += `_${I18n.t('copy')}`;\n }\n\n this.props.onRename && this.props.onRename(source, newId);\n }\n return undefined;\n }\n\n renderOneItem(items, item /* , dragging */) {\n let childrenFiltered = (this.state.statusFilter || this.state.typeFilter) && items.filter(i => i.parent === item.id ? !this.isFilteredOut(i) : false);\n let children = items.filter(i => i.parent === item.id);\n\n if (this.isFilteredOut(item)) {\n return;\n }\n\n if (item.type === 'folder' && (this.state.statusFilter || this.state.typeFilter) && !childrenFiltered.length) {\n return;\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const element = this.renderListItem(item, children, childrenFiltered);\n const result = [];\n let reactChildren;\n if (children && (reorder || this.state.expanded.includes(item.id) || item.id === ROOT_ID)) {\n reactChildren = children.map(it => this.renderOneItem(items, it));\n }\n\n if (reorder) {\n if (item.type === 'folder') {\n result.push(<Droppable key={`droppable_${item.id}`} onDrop={e => this.onDragFinish(e.name, item.id)}>\n <Draggable key={`draggable_${item.id}`} name={item.id}>{element}</Draggable>\n {reactChildren || null}\n </Droppable>);\n } else {\n result.push(<Draggable key={`draggable_${item.id}`} name={item.id}>\n {element}\n {reactChildren || null}\n </Draggable>);\n }\n } else {\n result.push(element);\n reactChildren && reactChildren.forEach(e => result.push(e));\n }\n\n return result;\n }\n\n renderAllItems(items) {\n const result = items\n .filter(item => !item.parent)\n .map(item =>\n this.renderOneItem(items, item));\n\n return <List\n dense\n disablePadding\n className={this.props.classes.mainList}\n >\n {result}\n </List>;\n }\n\n onAddNew(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({ choosingType: true });\n }\n\n onCopy(e, id) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === id);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({ copingScript: id });\n }\n\n onAddNewFolder(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({ creatingFolder: true });\n }\n\n onRename(e) {\n e && e.stopPropagation();\n this.setState({ renaming: this.state.selected });\n }\n\n getUniqueName(copyId) {\n let i = 1;\n let word = `${I18n.t('Script')} `;\n if (copyId) {\n let name = getObjectName(copyId, this.props.scripts[copyId]);\n const m = name.match(/\\d+$/);\n if (m) {\n word = name.replace(/\\d+$/, '');\n i = parseInt(m[0], 10) + 1;\n } else {\n word = name;\n }\n }\n\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${word.replace(/\\.\\s/g, '_')}${i}`)) {\n i++;\n }\n /*ignore jslint end*/\n return word + i;\n }\n\n getUniqueFolderName() {\n let i = 1;\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${I18n.t('Folder')}_${i}`)) {\n i++;\n }\n return `${I18n.t('Folder')} ${i}`;\n }\n\n onCloseMenu(cb) {\n this.setState({ menuOpened: false, menuAnchorEl: null, menuAnchorFilterEl: null }, cb);\n }\n\n getFilterBadge() {\n return [\n this.state.statusFilter === true && <IconPlay className={this.props.classes.filterIcon} style={{ color: COLOR_RUN }}/>,\n this.state.statusFilter === false && <IconPause className={this.props.classes.filterIcon} style={{ color: COLOR_PAUSE }}/>,\n this.state.typeFilter === 'Blockly' && 'Bl',\n this.state.typeFilter === 'Javascript/js' && 'JS',\n this.state.typeFilter === 'TypeScript/ts' && 'TS',\n ];\n }\n\n getMainMenu(children, selectedItem) {\n return <Menu\n key=\"menu\"\n id=\"long-menu\"\n anchorEl={this.state.menuAnchorEl}\n open={this.state.menuOpened}\n onClose={() => this.setState({ menuOpened: false, menuAnchorEl: null })}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n // width: 200,\n },\n }}\n >\n {this.state.width <= NARROW_WIDTH ? <MenuItem\n key=\"delete\"\n disabled={this.props.debugMode || !this.state.selected || this.state.selected === GLOBAL_ID || this.state.selected === COMMON_ID || (children && children.length)}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.listItems.find(item => item.parent === this.state.selected)) {\n this.showError(I18n.t('Cannot delete non empty item!'));\n return;\n }\n\n this.setState({ menuOpened: false, menuAnchorEl: null }, () =>\n this.onDelete(this.state.selected).then(() => {}));\n }}><IconDelete className={this.props.classes.iconDropdownMenu} style={{ color: 'red' }}/>{I18n.t('Delete')}\n </MenuItem> : null}\n <MenuItem\n key=\"expertMode\"\n disabled={this.props.debugMode}\n selected={this.state.expertMode}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.props.onExpertModeChange && this.props.onExpertModeChange(!this.state.expertMode));\n }}>\n <IconExpert className={this.props.classes.iconDropdownMenu} style={{ color: this.state.expertMode ? 'orange' : 'inherit' }}/>{I18n.t('Expert mode')}\n </MenuItem>\n {this.props.onExport && <MenuItem\n key=\"exportAll\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onExport());\n }}>\n <IconExport className={this.props.classes.iconDropdownMenu} />{I18n.t('Export all scripts')}\n </MenuItem>}\n {this.props.onImport && <MenuItem\n disabled={this.props.debugMode}\n key=\"import\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onImport());\n }}>\n <IconImport className={this.props.classes.iconDropdownMenu} />{I18n.t('Import scripts')}\n </MenuItem>}\n {this.props.onThemeChange && <MenuItem\n key=\"dark\"\n onClick={() => this.onCloseMenu(() => {\n // TODO: use Utils.toggleTheme(themeName)\n // newThemeName = Utils.toggleTheme(themeName);\n const newThemeName = this.state.themeName === 'dark' ? 'blue' :\n this.state.themeName === 'blue' ? 'colored' : this.state.themeName === 'colored' ? 'light' :\n this.state.themeName === 'light' ? 'dark' : 'colored';\n this.props.onThemeChange(newThemeName);\n })}\n >\n <IconDark className={this.props.classes.iconDropdownMenu} />{I18n.t('Change theme (actual \"%s\")', this.state.themeName)}\n </MenuItem>}\n {this.props.onAddNew && <MenuItem\n key=\"copy\"\n disabled={!this.state.selected || !selectedItem || selectedItem.type === 'folder'}\n onClick={event => {\n const selected = this.state.selected;\n this.onCloseMenu(() => this.onCopy(event, selected));\n }}\n >\n <IconCopy className={this.props.classes.iconDropdownMenu} />\n {I18n.t('Copy script')}\n </MenuItem>}\n {this.state.expertMode && <MenuItem\n disabled={this.props.debugMode}\n key=\"debugInstance\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.setState({ showAdapterDebug: true }));\n }}\n >\n <IconDebug className={this.props.classes.iconDropdownMenu} />\n {I18n.t('Debug instance')}\n </MenuItem>}\n </Menu>;\n }\n\n // render menu and toolbar\n getToolbarButtons() {\n const result = [];\n const classes = this.props.classes;\n const reorder = this.state.reorder && !this.props.debugMode;\n if (this.state.searchMode && !this.props.debugMode) {\n result.push(<Input\n key=\"searchInput\"\n value={this.state.searchText}\n className={classes.toolbarSearch}\n ref={this.inputRef}\n autoFocus\n placeholder={I18n.t('Search...')}\n onChange={e => {\n this.setState({ searchText: e.target.value });\n this.filterTimer && clearTimeout(this.filterTimer);\n this.filterTimer = setTimeout(() => {\n this.filterTimer = null;\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n }, 400);\n }}\n />);\n\n result.push(<IconButton\n key=\"disableSearch\"\n className={classes.toolbarButtons}\n style={{ float: 'right' }}\n title={I18n.t('End search mode')}\n onClick={e => {\n e.stopPropagation();\n this.filterList(false, () => this.props.onSearch && this.props.onSearch(this.state.searchText));\n }}\n size=\"medium\"><IconClose /></IconButton>);\n\n this.state.searchText && result.push(<IconButton\n key=\"cleanSearch\"\n mini=\"true\"\n title={I18n.t('Clear search input')}\n className={classes.toolbarButtons}\n style={{ marginTop: 7, float: 'right' }}\n onClick={e => {\n e.stopPropagation();\n this.setState({ searchText: '' }, () => {\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n });\n }}\n size=\"medium\"\n >\n <IconClear fontSize=\"small\"/>\n </IconButton>);\n } else {\n if (!reorder) {\n // Open Menu\n result.push(<IconButton\n key=\"menuButton\"\n aria-label=\"More\"\n aria-owns={this.state.menuOpened ? 'long-menu' : undefined}\n title={I18n.t('Menu')}\n aria-haspopup=\"true\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ menuOpened: true, menuAnchorEl: event.currentTarget });\n }}\n size=\"medium\"\n >\n {/*<Badge className={classes.margin} badgeContent={this.getFilterBadge()}>*/}\n <IconMore />\n {/*</Badge>*/}\n </IconButton>);\n\n const selectedItem = this.state.listItems.find(it => it.id === this.state.selected);\n let children;\n if (selectedItem && this.state.width <= NARROW_WIDTH && selectedItem.type === 'folder') {\n children = this.state.listItems.filter(i => i.parent === this.state.selected);\n }\n\n // Menu\n result.push(this.getMainMenu(children, selectedItem));\n\n // New Script\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-script\"\n title={I18n.t('Create new script')}\n className={Utils.clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{ color: reorder ? 'red' : 'inherit' }}\n onClick={e => this.onAddNew(e)}\n size=\"medium\"\n >\n <IconAdd />\n </IconButton>);\n\n // New Folder\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-folder\"\n title={I18n.t('Create new folder')}\n className={Utils.clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{ color: reorder ? 'red' : 'inherit' }}\n onClick={() => this.onAddNewFolder()}\n size=\"medium\"\n >\n <IconAddFolder />\n </IconButton>);\n }\n\n // Search\n result.push(<IconButton\n key=\"search\"\n disabled={reorder || this.props.debugMode}\n className={Utils.clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n title={I18n.t('Search in scripts')}\n style={{ float: 'right', opacity: this.props.debugMode ? 0.5 : (reorder ? 0 : 1) }}\n onClick={e => {\n e.stopPropagation();\n this.setState({ searchMode: true });\n }}\n size=\"medium\"\n >\n <IconFind />\n </IconButton>);\n\n // Reorder button\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"reorder\"\n title={I18n.t('Reorder scripts in folders')}\n className={Utils.clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{ color: reorder ? 'red' : 'inherit', float: 'right' }}\n onClick={e => {\n e.stopPropagation();\n this.setState({ reorder: !this.state.reorder });\n }}\n size=\"medium\"\n >\n <IconReorder />\n </IconButton>);\n\n if (!reorder && this.state.selected && this.state.selected !== GLOBAL_ID && this.state.selected !== COMMON_ID) {\n // Rename\n result.push(<IconButton\n className={Utils.clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n title={I18n.t('Rename')}\n key=\"rename\"\n onClick={e => this.onRename(e)}\n size=\"medium\"\n >\n <IconEdit />\n </IconButton>);\n\n // const selectedItem = this.state.listItems.find(i => i.id === this.state.selected);\n // if (selectedItem && selectedItem.type !== 'folder') {\n // // Restart\n // result.push((<IconButton className={classes.toolbarButtons}\n // key=\"restart\"\n // onClick={e => {\n // e.stopPropagation();\n // this.props.onEnableDisable && this.props.onEnableDisable();\n // }}\n // ><IconRestart/></IconButton>));\n // }\n }\n result.push(<span key=\"version\" style={{ opacity: 0.5, fontSize: 10 }}>v{this.props.version}</span>);\n }\n return result;\n }\n\n getFolders() {\n const folders = [{ id: ROOT_ID, name: I18n.t('Root folder') }];\n this.state.listItems.forEach(item => {\n if (item.type === 'folder' && item.id !== ROOT_ID) { // root has been added above\n if (!item.id.startsWith(GLOBAL_ID) || this.state.expertMode) {\n folders.push({ id: item.id, name: item.title });\n }\n }\n });\n return folders;\n }\n\n onCollapseAll() {\n this.setState({ expanded: [] });\n this.saveExpanded([]);\n }\n\n onExpandAll() {\n const expanded = [];\n this.state.listItems.forEach(item =>\n this.state.listItems.find(it => it.parent === item.id) && expanded.push(item.id));\n this.setState({ expanded });\n this.saveExpanded(expanded);\n }\n\n getBottomButtons() {\n if (this.state.reorder || this.props.debugMode) {\n return null;\n }\n return [\n <IconPause\n key=\"filterByRunning\"\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_RUN, opacity: this.state.statusFilter === 'running' ? 1 : 0.3, background: this.state.statusFilter === 'running' ? 'gray' : 'inherit' }}\n title={I18n.t('Show only running scripts')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n const statusFilter = this.state.statusFilter === 'running' ? '' : 'running';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({ statusFilter });\n }}\n />,\n\n <IconPlay\n key=\"filterByPaused\"\n title={I18n.t('Show only paused scripts')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PAUSE, opacity: this.state.statusFilter === 'paused' ? 1 : 0.3, background: this.state.statusFilter === 'paused' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'paused' ? '' : 'paused';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({ statusFilter });\n }}\n />,\n <IconPause\n key=\"filterByProblem\"\n title={I18n.t('Show only scripts with problems')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PROBLEM, opacity: this.state.statusFilter === 'problems' ? 1 : 0.3, background: this.state.statusFilter === 'problems' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'problems' ? '' : 'problems';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({ statusFilter });\n }}\n />,\n <img\n key=\"filterBlockly\"\n className={this.props.classes.footerButtons}\n alt=\"Blockly\"\n style={{ opacity: this.state.typeFilter === 'Blockly' ? 1 : 0.3, background: this.state.typeFilter === 'Blockly' ? 'gray' : 'inherit' }}\n src={images.Blockly || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Blockly' ? '' : 'Blockly';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({ typeFilter });\n }}\n />,\n <img\n key=\"filterJS\"\n className={this.props.classes.footerButtons}\n alt=\"Javascript\"\n style={{ opacity: this.state.typeFilter === 'Javascript/js' ? 1 : 0.3, background: this.state.typeFilter === 'Javascript/js' ? 'gray' : 'inherit' }}\n src={images['Javascript/js'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Javascript/js' ? '' : 'Javascript/js';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({ typeFilter });\n }}\n />,\n <img\n key=\"filterTS\"\n className={this.props.classes.footerButtons}\n alt=\"TypeScript\"\n style={{ opacity: this.state.typeFilter === 'TypeScript/ts' ? 1 : 0.3, background: this.state.typeFilter === 'TypeScript/ts' ? 'gray' : 'inherit' }}\n src={images['TypeScript/ts'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'TypeScript/ts' ? '' : 'TypeScript/ts';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({ typeFilter });\n }}\n />,\n <img\n key=\"filterRules\"\n className={this.props.classes.footerButtons}\n alt=\"Rules\"\n style={{ opacity: this.state.typeFilter === 'Rules' ? 1 : 0.3, background: this.state.typeFilter === 'Rules' ? 'gray' : 'inherit' }}\n src={images['Rules'] || images.def}\n onClick={event => {\n const typeFilter = this.state.typeFilter === 'Rules' ? '' : 'Rules';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({ typeFilter });\n }}\n />,\n <IconExpandAll\n key=\"expandAll\"\n className={`${this.props.classes.footerButtons} ${this.props.classes.footerButtonsRight}`}\n title={I18n.t('Expand all')}\n onClick={() => this.onExpandAll()}\n />,\n this.state.expanded.length ? <IconCollapseAll\n key=\"collapseAll\"\n className={`${this.props.classes.footerButtons} ${this.props.classes.footerButtonsRight}`}\n title={I18n.t('Collapse all')}\n onClick={() => this.onCollapseAll()}\n /> : null,\n ];\n }\n\n getAdapterDebugDialog() {\n if (this.state.showAdapterDebug) {\n return <DialogAdapterDebug\n key=\"debug\"\n socket={this.props.socket}\n onClose={() => this.setState({ showAdapterDebug: false })}\n onDebug={(instance, adapter) => this.setState({ showAdapterDebug: false }, () => this.props.onDebugInstance({instance, adapter}))}\n />;\n }\n }\n\n render() {\n const {classes} = this.props;\n\n const renamingItem = this.state.renaming && this.state.listItems.find(i => i.id === this.state.renaming);\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n\n return [\n <Drawer\n key=\"drawer\"\n variant=\"permanent\"\n className={classes.menu}\n classes={{ paper: classes.drawerPaper }}\n anchor='left'\n onClick={() => this.onClick({id: ''})}\n >\n <div className={classes.toolbar}>\n {this.getToolbarButtons()}\n </div>\n\n <Divider/>\n\n <DragDropContext backend={HTML5Backend}>\n <div className={classes.innerMenu}>\n {this.renderAllItems(this.state.listItems)}\n </div>\n </DragDropContext>\n\n <Divider/>\n\n <div className={classes.footer}>{this.getBottomButtons()}</div>\n </Drawer>,\n\n renamingItem ? <DialogRename\n key=\"dialog-rename\"\n name={renamingItem.title}\n title={I18n.t('Rename')}\n id={this.state.renaming}\n folder={renamingItem.type === 'folder'}\n instance={renamingItem.instance}\n instances={this.props.instances}\n onClose={() => this.setState({ renaming: false })}\n onRename={(oldId, newName, newId, newInstance) => this.props.onRename && this.props.onRename(oldId, newName, newId, newInstance)}\n /> : null,\n\n this.state.deleting ? <DialogDelete\n key=\"dialog-delete\"\n name={this.state.listItems.find(i => i.id === this.state.deleting).title}\n id={this.state.deleting}\n onClose={() => this.setState({ deleting: false })}\n onDelete={id => this.props.onDelete && this.props.onDelete(id)}\n /> : null,\n\n this.state.choosingType ? <DialogAddNewScript\n key=\"dialog-script-type\"\n onClose={type => {\n const newState = { choosingType: false };\n if (type) {\n newState.creatingScript = type;\n }\n this.setState(newState);\n }}\n /> : null,\n\n this.state.creatingScript ? <DialogNew\n key=\"dialog-new-script\"\n onClose={() => this.setState({ creatingScript: false })}\n title={I18n.t('Create new script')}\n name={this.getUniqueName()}\n parents={this.getFolders()}\n folder={false}\n existingItems={this.state.listItems.map(item => item.id)}\n instance={this.props.instances[0] || 0}\n instances={this.props.instances}\n type={this.state.creatingScript}\n parent={this.parent}\n onAdd={(id, name, instance, type) =>\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type)}\n /> : null,\n\n this.state.copingScript ? <DialogNew\n key=\"dialog-copy-script\"\n onClose={() => this.setState({ copingScript: '' })}\n title={I18n.t('Copy script')}\n name={this.getUniqueName(this.state.copingScript)}\n parents={this.getFolders()}\n folder={false}\n instance={parseInt((copingItem && copingItem.common && copingItem.common.engine && copingItem.common.engine.split('.').pop()) || 0, 10)}\n instances={this.props.instances}\n type={(copingItem && copingItem.common && copingItem.common.engineType) || 'Javascript/js'}\n parent={this.parent}\n onAdd={(id, name, instance, type) => {\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n if (copingItem && copingItem.common) {\n // disable script by coping\n copingItem.common.enabled = false;\n }\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type, copingItem && copingItem.common && copingItem.common.source);\n }}\n /> : null,\n\n this.state.creatingFolder ? <DialogNew\n key=\"dialog-new-folder\"\n onClose={() => this.setState({ creatingFolder: false })}\n title={I18n.t('Create new folder')}\n parents={this.getFolders()}\n name={this.getUniqueFolderName()}\n parent={this.parent}\n onAdd={(id, name) => this.props.onAddNew && this.props.onAddNew(id, name, true)}\n /> : null,\n\n this.state.errorText ? <DialogError key=\"error\" onClose={() => this.setState({ errorText: '' })} text={this.state.errorText} /> : null,\n\n this.getAdapterDebugDialog(),\n ];\n }\n}\n\nSideDrawer.propTypes = {\n classes: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n scripts: PropTypes.object.isRequired,\n scriptsHash: PropTypes.number,\n onEdit: PropTypes.func,\n selectId: PropTypes.string,\n expertMode: PropTypes.bool,\n onExpertModeChange: PropTypes.func,\n onEnableDisable: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onSelect: PropTypes.func,\n onAddNew: PropTypes.func,\n onRename: PropTypes.func,\n onDelete: PropTypes.func,\n onImport: PropTypes.func,\n onExport: PropTypes.func,\n onSearch: PropTypes.func,\n onThemeChange: PropTypes.func,\n onDebugInstance: PropTypes.func,\n width: PropTypes.number,\n debugMode: PropTypes.bool,\n version: PropTypes.string,\n};\n\nexport default withStyles(styles)(SideDrawer);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport IconButton from '@mui/material/IconButton';\n\nimport { MdDeleteForever as IconDelete } from 'react-icons/md';\nimport { MdVerticalAlignBottom as IconBottom } from 'react-icons/md';\nimport { MdContentCopy as IconCopy } from 'react-icons/md';\nimport { MdVisibilityOff as IconHide } from 'react-icons/md';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\n// replace later with MdHorizontalSplit and MdVerticalSplit\nconst IconVerticalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAACFJREFUeAFjAIJRwP////8PYIKWHCigNQdKj/pn1D+jAABTG16wVQqVpQAAAABJRU5ErkJggg==';\nconst IconHorizontalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAABtJREFUeAFjAIJRwP8fCj7QkENn/4z6Z5QzCgBjbWaoyx1PqQAAAABJRU5ErkJggg==';\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) {\n i = `0${i.toString()}`;\n }\n text = `${i}:`;\n\n i = d.getMinutes();\n if (i < 10) {\n i = `0${i.toString()}`;\n }\n text += `${i}:`;\n i = d.getSeconds();\n if (i < 10) {\n i = `0${i.toString()}`;\n }\n text += `${i}.`;\n i = d.getMilliseconds();\n if (i < 10) {\n i = `00${i.toString()}`;\n } else if (i < 100) {\n i = `0${i.toString()}`;\n }\n text += i;\n return text;\n}\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black',\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n\n },\n toolbox: {\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90,\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold',\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4,\n },\n layoutIcon: {\n width: 24,\n height: 24,\n background: theme.palette.mode === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.mode === 'dark' ? 30 : undefined,\n },\n});\n\nfunction paddingMs(ms) {\n if (ms < 10) {\n return `00${ms}`;\n }\n if (ms < 100) {\n return `0${ms}`;\n }\n return ms;\n}\n\nlet gText = {};\n\nclass Log extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n selected: null,\n editing: this.props.editing || [],\n };\n this.lastIndex = null;\n this.messagesEnd = React.createRef();\n }\n\n generateLine(message) {\n return <tr key={`tr_${message.ts}_${message.message.substr(-10)}`} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.message}</td>\n </tr>;\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({ behavior: 'smooth' });\n }\n\n logHandler = message => {\n let allLines = this.state.lines;\n const scripts = this.state.editing.filter(id => message.message.includes(id));\n let selected;\n if (!scripts.length) {\n return;\n } else if (scripts.length === 1) {\n selected = scripts[0];\n } else {\n // try to get the script with the longest common substring\n scripts.sort();\n selected = scripts[scripts.length - 1];\n }\n\n let lines = allLines[selected] || [];\n let text = gText[selected] || [];\n\n lines.push(this.generateLine(message));\n let severity = message.severity;\n if (severity === 'info' || severity === 'warn') {\n severity += ' ';\n }\n const date = new Date(message.ts);\n text.push(`${date.toLocaleString()}.${paddingMs(date.getMilliseconds())}\\t[${severity}]: ${message.message}`);\n if (lines.length > 300) {\n lines.splice(0, lines.length - 300);\n text.splice(0, lines.length - 300);\n }\n gText[selected] = text;\n allLines[selected] = lines;\n\n this.setState({ lines: allLines });\n }\n\n componentDidMount() {\n this.props.socket.registerLogHandler(this.logHandler);\n }\n\n componentWillUnmount() {\n this.props.socket.unregisterLogHandler(this.logHandler);\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n static getDerivedStateFromProps(props, state) {\n let changed = false;\n let newState = {};\n\n if (props.selected !== state.selected) {\n let selected = props.selected;\n let allLines = state.lines;\n allLines[selected] = allLines[selected] || [];\n gText[selected] = gText[selected] || [];\n newState.selected = selected;\n changed = true;\n }\n\n if (JSON.stringify(props.editing) !== JSON.stringify(state.editing)) {\n const editing = JSON.parse(JSON.stringify(props.editing));\n changed = true;\n let allLines = state.lines;\n\n for (const id in gText) {\n if (gText.hasOwnProperty(id)) {\n if (!editing.includes(id)) {\n delete gText[id];\n delete allLines[id];\n }\n }\n }\n\n newState.editing = editing;\n }\n return changed ? newState : null;\n }\n\n onCopy() {\n Utils.copyToClipboard((gText[this.state.selected] || []).join('\\n'));\n }\n\n clearLog() {\n let allLines = this.state.lines;\n if (allLines[this.state.selected]) {\n allLines[this.state.selected] = [];\n }\n if (gText[this.state.selected]) {\n gText[this.state.selected] = [];\n }\n this.setState({ lines: allLines });\n }\n\n renderLogList(lines) {\n if (this.state.selected && lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>{lines}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{ float: 'left', clear: 'both' }}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{ paddingLeft: 10 }}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n render() {\n const lines = this.state.selected && this.state.lines[this.state.selected];\n return <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({ goBottom: !this.state.goBottom })}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom /></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.clearLog()}\n size=\"medium\"><IconDelete /></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy /></IconButton> : null}\n {this.props.onLayoutChange ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onLayoutChange()}\n title={I18n.t('Change layout')}\n size=\"medium\"><img className={this.props.classes.layoutIcon} alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} /></IconButton> : null}\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onHideLog()}\n title={I18n.t('Hide logs')}\n size=\"medium\"><IconHide /></IconButton>\n </div>\n {this.renderLogList(lines)}\n </div>;\n }\n}\n\nLog.propTypes = {\n selected: PropTypes.string,\n socket: PropTypes.object,\n onLayoutChange: PropTypes.func,\n verticalLayout: PropTypes.bool,\n};\n\nexport default withStyles(styles)(Log);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Fab } from '@mui/material';\n\nimport { MdGTranslate as IconNoCheck } from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nfunction isIdOfGlobalScript(id) {\n return /^script\\.js\\.global\\./.test(id);\n}\nlet index = 0;\nclass ScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: 'current',\n isDark: props.isDark || false,\n language: props.language || 'javascript',\n readOnly: props.readOnly || false,\n alive: true,\n check: false,\n searchText: this.props.searchText || '',\n typingsLoaded: false,\n };\n this.runningInstancesStr = JSON.stringify(this.props.runningInstances);\n this.monacoDiv = null; //ref\n this.editor = null;\n this.monaco = window.monaco;\n this.insert = '';\n this.originalCode = props.code || '';\n this.typings = {}; // TypeScript declarations\n this.lastSearch = '';\n }\n\n waitForMonaco(cb) {\n let monacoLoaded = this.monaco?.languages?.typescript?.typescriptDefaults?.getCompilerOptions;\n if (!monacoLoaded || !this.props.runningInstances) {\n this.monaco = window.monaco;\n monacoLoaded = this.monaco?.languages?.typescript?.typescriptDefaults?.getCompilerOptions;\n this.monacoCounter = this.monacoCounter || 0;\n this.monacoCounter++;\n if (!monacoLoaded && this.monacoCounter < 20) {\n console.log('wait for monaco loaded');\n setTimeout(() => this.waitForMonaco(cb), 200);\n return;\n }\n if (this.monacoCounter >= 20) {\n console.error('Cannot load monaco!');\n }\n } else {\n cb && cb();\n }\n }\n\n loadTypings(runningInstances) {\n if (!this.editor) {\n return;\n }\n runningInstances = runningInstances || this.props.runningInstances;\n\n const scriptAdapterInstance = runningInstances && Object.keys(runningInstances).find(id => runningInstances[id]);\n if (scriptAdapterInstance) {\n this.props.socket.sendTo(scriptAdapterInstance.replace('system.adapter.', ''), 'loadTypings', null)\n .then(result => {\n this.setState({ alive: true, check: true, typingsLoaded: true });\n this.setTypeCheck(true);\n if (result.typings) {\n this.typings = result.typings;\n this.setEditorTypings(this.state.name);\n } else {\n console.error(`failed to load typings: ${result.error}`);\n }\n });\n }\n }\n\n componentDidMount() {\n const monacoLoaded = this.monaco?.languages?.typescript?.typescriptDefaults?.getCompilerOptions;\n if (!monacoLoaded || !this.props.runningInstances) {\n this.monaco = window.monaco;\n if (!monacoLoaded) {\n console.log('wait for monaco loaded...');\n this.waitForMonaco(() => this.componentDidMount());\n\n return;\n }\n }\n if (!this.editor && monacoLoaded) {\n console.log('Init editor');\n this.props.onRegisterSelect && this.props.onRegisterSelect(() => this.editor.getModel().getValueInRange(this.editor.getSelection()));\n // For some reason, we have to get the original compiler options\n // and assign new properties one by one\n const compilerOptions = this.monaco.languages.typescript.typescriptDefaults['getCompilerOptions']();\n compilerOptions.target = this.monaco.languages.typescript.ScriptTarget.ES2015;\n compilerOptions.allowJs = true;\n compilerOptions.checkJs = this.props.checkJs !== false;\n compilerOptions.noLib = true;\n compilerOptions.lib = [];\n compilerOptions.useUnknownInCatchVariables = false;\n compilerOptions.moduleResolution = this.monaco.languages.typescript.ModuleResolutionKind.NodeJs;\n this.monaco.languages.typescript.typescriptDefaults.setCompilerOptions(compilerOptions);\n\n this.setTypeCheck(false);\n\n // Create the editor instances\n this.editor = this.monaco.editor.create(this.monacoDiv, {\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n glyphMargin: !!this.props.breakpoints,\n });\n\n this.editor.onDidChangeModelContent(() =>\n this.onChange(this.editor.getValue()));\n\n // Load typings for the JS editor\n /** @type {string} */\n this.loadTypings();\n\n this.editor.addCommand(this.monaco.KeyMod.CtrlCmd | this.monaco.KeyCode.KEY_S, () =>\n this.onForceSave());\n\n setTimeout(() => {\n this.highlightText(this.state.searchText);\n this.location = this.props.location;\n this.breakpoints = this.props.breakpoints;\n this.showDecorators();\n });\n }\n const options = {\n selectOnLineNumbers: true,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly: this.state.readOnly,\n language: this.state.language,\n isDark: this.state.isDark,\n };\n\n this.setEditorOptions(options);\n this.editor.focus();\n this.editor.setValue(this.originalCode);\n\n if (this.props.onToggleBreakpoint) {\n // add onMouseDown listener to toggle breakpoints\n this.editor.onMouseDown(e => {\n if (e.target.detail && e.target.detail.glyphMarginLeft !== undefined) {\n this.props.onToggleBreakpoint(e.target.position.lineNumber - 1);\n }\n });\n } else {\n // remove onMouseDown listener\n this.editor.onMouseDown(() => { /* nop */ });\n }\n }\n\n /**\n * Sets some options of the code editor\n * @param {object} options The editor options to change\n * @param {Partial<{readOnly: boolean, lineWrap: boolean, language: EditorLanguage, typeCheck: boolean}>} options\n */\n setEditorOptions(options) {\n if (options) {\n if (options.language) {\n this.setEditorLanguage(options.language);\n }\n if (options.readOnly !== undefined) {\n this.editor.updateOptions({ readOnly: options.readOnly });\n }\n if (options.lineWrap !== undefined) {\n this.editor.updateOptions({ wordWrap: options.lineWrap ? 'on' : 'off' });\n }\n if (options.typeCheck !== undefined) {\n this.setTypeCheck(options.typeCheck);\n }\n if (options.isDark !== undefined) {\n this.monaco.editor.setTheme(options.isDark ? 'vs-dark' : 'vs');\n }\n }\n }\n\n componentWillUnmount() {\n if (this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(null);\n this.editor.dispose();\n this.editor = null;\n }\n }\n\n /** @typedef {\"javascript\" | \"typescript\"} EditorLanguage */\n\n /**\n * Sets the language of the code editor\n * @param {EditorLanguage} language\n */\n setEditorLanguage(language) {\n // we need to recreate the model when changing languages,\n // so remember its settings\n const model = this.editor.getModel();\n const code = model.getValue();\n const uri = model.uri.path;\n\n const filenameWithoutExtension =\n typeof uri === 'string' && uri.includes('.')\n ? uri.substr(0, uri.lastIndexOf('.'))\n : 'index';\n\n const extension =\n language === 'javascript' ? 'js'\n : (language === 'typescript' ? 'ts' : language);\n\n // get rid of the original model\n model.dispose();\n\n // Both JS and TS need the model to work in TypeScript as the script type\n // is inferred from the file extension\n const newLanguage = (language === 'javascript' || language === 'typescript') ? 'typescript' : language;\n\n const newModel = this.monaco.editor.createModel(\n code,\n newLanguage,\n this.monaco.Uri.from({ path: `${filenameWithoutExtension}${index++}.${extension}` }),\n );\n\n this.editor.setModel(newModel);\n }\n\n /**\n * Enables or disables the type checking in the editor\n * @param {boolean} enabled - Whether type checking is enabled or not\n */\n setTypeCheck(enabled) {\n const options = {\n noSemanticValidation: !this.state.alive || !enabled, // toggle the type checking\n noSyntaxValidation: !this.state.alive // always check the syntax\n };\n this.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions(options);\n }\n\n /**\n * @param {string} [currentScriptName] The name of the current script\n */\n setEditorTypings(currentScriptName = '') {\n const isGlobalScript = isIdOfGlobalScript(currentScriptName);\n // The filename of the declarations this script can see if it is a global script\n const partialDeclarationsPath = `${currentScriptName}.d.ts`;\n const wantedTypings = [];\n for (const path of Object.keys(this.typings)) {\n // global scripts don't get to see all other global scripts\n // but only a part of them\n if (isGlobalScript) {\n if (path === 'global.d.ts') {\n continue;\n }\n if (path.startsWith('script.js.global') && path !== partialDeclarationsPath) {\n continue;\n }\n }\n wantedTypings.push({\n filePath: path,\n content: this.typings[path],\n });\n }\n\n // TODO BF: check https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-semantic-tokens-provider-example\n // to support 0.21.0\n\n if (this.monaco?.languages?.typescript?.typescriptDefaults?.setExtraLibs) {\n this.monaco.languages.typescript.typescriptDefaults.setExtraLibs(wantedTypings);\n } else if (this.monaco?.languages?.typescript?.typescriptDefaults?.addExtraLib) {\n const existingLibs = this.monaco.languages.typescript.typescriptDefaults.getExtraLibs();\n wantedTypings.forEach(lib => {\n if (!existingLibs[lib.filePath]) {\n this.monaco.languages.typescript.typescriptDefaults.addExtraLib(lib, lib.filePath);\n }\n });\n }\n }\n\n /**\n * Inserts some text into the given editor\n * @param {string} text The text to add\n */\n insertTextIntoEditor(text) {\n const selection = this.editor.getSelection();\n const range = new this.monaco.Range(\n selection.startLineNumber,\n selection.startColumn,\n selection.endLineNumber,\n selection.endColumn,\n );\n this.editor.executeEdits('', [{ range, text, forceMoveMarkers: true }]);\n this.editor.focus();\n }\n\n highlightText(text) {\n const range = text && this.editor.getModel().findMatches(text);\n if (range && range.length) {\n range.forEach(r => this.editor.setSelection(r.range));\n this.editor.revealLine(range[0].range.startLineNumber);\n } else if (this.editor) {\n const row = this.editor.getPosition().lineNumber;\n const col = this.editor.getPosition().column;\n this.editor.setSelection(new this.monaco.Range(row, col, row, col));\n }\n }\n\n showDecorators() {\n this.decorations = this.decorations || [];\n const decorations = [];\n if (this.location) {\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, this.location.columnNumber + 1, this.location.lineNumber + 1, 1000),\n options: {\n isWholeLine: false,\n className: this.props.isDark ? 'monacoCurrentLineDark' : 'monacoCurrentLine',\n },\n });\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, 0, this.location.lineNumber + 1, 0),\n options: {\n isWholeLine: true,\n className: this.props.isDark ? 'monacoCurrentFullLineDark' : 'monacoCurrentFullLine',\n },\n });\n }\n\n if (this.breakpoints) {\n this.breakpoints.forEach(bp => {\n decorations.push({\n range: new this.monaco.Range(bp.location.lineNumber + 1, 0, bp.location.lineNumber + 1, 100),\n options: {\n isWholeLine: true,\n glyphMarginClassName: this.props.isDark ? 'monacoBreakPointDark' : 'monacoBreakPoint',\n },\n });\n });\n }\n this.editor && (this.decorations =\n this.editor.deltaDecorations(this.decorations, decorations));\n }\n\n initNewScript(name, code) {\n this.setState({ name });\n this.originalCode = code || '';\n this.editor && this.editor.setValue(code);\n this.highlightText(this.lastSearch);\n this.showDecorators();\n // this.setEditorLanguage();\n // Update the typings because global scripts need different typings than normal scripts\n // and each global script has different typings\n this.setEditorTypings(name);\n }\n\n scrollToLineIfNeeded(lineNumber) {\n if (this.editor) {\n const ranges = this.editor.getVisibleRanges();\n if (!ranges || !ranges[0] || ranges[0].startLineNumber > lineNumber || lineNumber > ranges[0].endLineNumber) {\n this.editor.revealLineInCenter(lineNumber);\n }\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const options = {};\n if (this.state.name !== nextProps.name) {\n // A different script was selected\n this.initNewScript(nextProps.name, nextProps.code);\n }\n\n // if some running instance is found and\n if (JSON.stringify(nextProps.runningInstances) !== this.runningInstancesStr) {\n this.runningInstancesStr = JSON.stringify(nextProps.runningInstances);\n if (!this.state.typingsLoaded) {\n this.loadTypings(nextProps.runningInstances);\n }\n }\n\n // if the code not yet changed, update the new code\n if (this.editor && !nextProps.changed && (nextProps.code !== this.originalCode || nextProps.code !== this.editor.getValue())) {\n this.originalCode = nextProps.code;\n this.editor.setValue(this.originalCode);\n this.showDecorators();\n this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.highlightText(this.lastSearch);\n }\n\n if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location) &&\n JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)\n ) {\n this.location = nextProps.location;\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n // this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n } else if (JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n } else if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location)) {\n this.location = nextProps.location;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n // this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n }\n\n if (this.state.language !== (nextProps.language || 'javascript')) {\n this.setState({ language: nextProps.language || 'javascript' });\n options.language = nextProps.language || 'javascript';\n } else if (this.state.readOnly !== (nextProps.readOnly || false)) {\n this.setState({ readOnly: nextProps.readOnly || false });\n options.readOnly = nextProps.readOnly;\n } else if (this.state.isDark !== (nextProps.isDark || false)) {\n this.setState({ isDark: nextProps.isDark || false });\n options.isDark = nextProps.isDark;\n }\n\n this.setEditorOptions(options);\n\n if (this.insert !== nextProps.insert) {\n this.insert = nextProps.insert;\n if (this.insert) {\n console.log(`Insert text: ${this.insert}`);\n setTimeout(insert => {\n this.insertTextIntoEditor(insert);\n setTimeout(() => this.props.onInserted && this.props.onInserted(), 100);\n }, 100, this.insert);\n }\n }\n }\n\n onChange(newValue, e) {\n if (!this.props.readOnly) {\n this.props.onChange && this.props.onChange(this.editor.getValue());\n }\n }\n\n render() {\n if (!this.monaco?.languages?.typescript?.typescriptDefaults || !this.props.runningInstances) {\n setTimeout(() => {\n this.monaco = window.monaco;\n this.forceUpdate();\n }, 200);\n return null;\n }\n\n return <div ref={el => this.monacoDiv = el} style={{width: '100%', height: '100%', overflow: 'hidden', position: 'relative'}}>\n {!this.state.check && <Fab\n size=\"small\"\n title={I18n.t('Check is not active, because javascript adapter is disabled')}\n style={{ bottom: 10, right: 10, opacity: 0.5, position: 'absolute', zIndex: 1, background: 'red', color: 'white' }}\n color=\"secondary\"\n >\n <IconNoCheck />\n </Fab>}\n </div>;\n }\n}\n\nScriptEditor.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onForceSave: PropTypes.func,\n onInserted: PropTypes.func,\n isDark: PropTypes.bool,\n readOnly: PropTypes.bool,\n code: PropTypes.string,\n language: PropTypes.string,\n onRegisterSelect: PropTypes.func,\n searchText: PropTypes.string,\n checkJs: PropTypes.bool,\n changed: PropTypes.bool,\n\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default ScriptEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Popper from '@mui/material/Popper';\nimport Fade from '@mui/material/Fade';\nimport Paper from '@mui/material/Paper';\n\nimport IconCopy from '@mui/icons-material/FileCopy';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n textArea: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n textAreaLight: {\n background: 'lightgray',\n },\n dialog: {\n height: '95%',\n },\n typography: {\n padding: theme.spacing(2),\n },\n overflowY: {\n overflowY: 'hidden',\n },\n});\n\nclass DialogExport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n popper: '',\n };\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n onCopy(event) {\n Utils.copyToClipboard(this.props.text);\n const anchorEl = event.currentTarget;\n\n setTimeout(() => {\n this.setState({ popper: I18n.t('Copied'), anchorEl });\n setTimeout(() => this.setState({ popper: '', anchorEl: null }), 1000);\n }, 50);\n }\n\n render() {\n const classes = this.props.classes;\n const file = new Blob([this.props.text], {type: 'application/xml'});\n const fileName = this.props.scriptId.substring('scripts.js'.length) + '.xml';\n\n return <Dialog\n key=\"export-dialog\"\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth\n open={this.props.open}\n aria-labelledby=\"export-dialog-title\"\n >\n <DialogTitle id=\"export-dialog-title\">{I18n.t('Export selected blocks')}</DialogTitle>\n <DialogContent\n classes={{ root: classes.overflowY }}>\n <pre\n id=\"export-text\"\n className={`${classes.textArea} ${this.props.themeType === 'dark' ? '' : classes.textAreaLight}`}\n >{this.props.text}</pre>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"secondary\" startIcon={<IconExport/>}>\n <a download={fileName} target=\"_blank\" rel=\"noreferrer\" href={URL.createObjectURL(file)} style={{\n textDecoration: \"inherit\",\n color: \"inherit\",\n }}>{I18n.t('Download as file')}</a>\n </Button>\n <Button variant=\"contained\" onClick={event => this.onCopy(event)} color=\"secondary\" startIcon={<IconCopy/>}>{I18n.t('Copy to clipboard')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"primary\" startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n\n <Popper\n id=\"popper\"\n style={{ zIndex: 10000 }}\n open={!!this.state.popper}\n placement=\"top\"\n anchorEl={this.state.anchorEl} transition>\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper>\n <p className={classes.typography}>{this.state.popper}</p>\n </Paper>\n </Fade>\n )}\n </Popper>\n <textarea id=\"copy_input\" readOnly style={{ position: 'absolute', left: -9999 }} tabIndex={-1} aria-hidden value={this.props.text} />\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogExport.defaultProps = {\n open: true\n};\n\nDialogExport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n scriptId: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogExport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Dropzone from 'react-dropzone';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport {MdFileUpload as IconUpload} from 'react-icons/md';\nimport {MdCancel as IconNo} from 'react-icons/md';\nimport {MdPlusOne as IconPlus} from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n height: '80%',\n resize: 'none',\n fontFamily: 'monospace',\n fontSize: '1em',\n },\n dropzone: {\n marginTop: 20,\n width: '100%',\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#d0cccc',\n textAlign: 'center',\n boxSizing: 'border-box',\n paddingTop: 45,\n borderRadius: 10,\n height: 'calc(100% - 10px)',\n },\n dropzoneDiv: {\n width: '100%',\n height: '20%',\n position: 'relative',\n },\n dropzoneRejected: {\n borderColor: '#970000',\n },\n dropzoneAccepted: {\n borderColor: '#17cd02',\n },\n icon: {\n height: '30%',\n width: '30%',\n color: '#eeeeee',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n zIndex: 0,\n },\n iconError: {\n color: '#ffc3c6',\n },\n iconOk: {\n color: '#aaeebc',\n },\n text: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n color: '#868686',\n position: 'absolute',\n zIndex: 1,\n },\n dialog: {\n height: '95%',\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden',\n },\n});\n\nclass DialogImport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n text: '',\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n static readFileDataUrl(file, cb) {\n const reader = new FileReader();\n reader.onload = () => {\n cb(null, {data: reader.result, name: file.name});\n };\n reader.onabort = () => {\n console.error('file reading was aborted');\n cb(I18n.t('file reading was aborted'));\n };\n reader.onerror = (e) => {\n console.error('file reading has failed');\n cb(I18n.t('file reading has failed: %s', e));\n };\n\n reader.readAsText(file);\n }\n\n handleDropFile(files) {\n if (files && files.hasOwnProperty('target')) {\n files = files.target.files;\n }\n\n if (!files && !files.length) {\n return;\n }\n\n const file = files[files.length - 1];\n\n if (!file) {\n return;\n }\n\n DialogImport.readFileDataUrl(file, (err, result) => {\n if (err) {\n this.setState({ error: err });\n } else {\n this.setState({ text: result.data });\n }\n });\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n handleOk() {\n this.props.onClose(this.state.text);\n }\n\n onChange(e) {\n this.setState({ text: e.target.value });\n }\n\n render() {\n const classes = this.props.classes;\n const className = classes.dropzone + ' ' + (this.state.imageStatus === 'accepted' ? classes.dropzoneAccepted : (this.state.imageStatus === 'rejected' ? classes.dropzoneRejected : ''));\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth\n open={this.props.open}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import blocks')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <textarea\n autoFocus\n id=\"import-text-area\"\n className={classes.textArea}\n onChange={e => this.onChange(e)}\n value={this.state.text}\n />\n <Dropzone key='image-drop'\n maxSize={50000000}\n acceptClassName={classes.dropzoneAccepted}\n rejectClassName={classes.dropzoneRejected}\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='text/plain,text/xml,application/xml'\n className={className}>\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconError}/>\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({imageStatus: 'accepted'});\n }\n\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconOk}/>\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" className={this.props.classes.icon}/>\n </div>);\n }\n }\n }\n </Dropzone>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" disabled={!this.state.text} onClick={event => this.handleOk()} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Import')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImport.defaultProps = {\n open: true\n}\n\nDialogImport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogImport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogError from '../Dialogs/Error';\nimport DialogExport from '../Dialogs/Export';\nimport DialogImport from '../Dialogs/Import';\n\nlet languageBlocklyLoaded = false;\nlet languageOwnLoaded = false;\nlet toolboxText = null;\nlet toolboxXml;\nlet scriptsLoaded = [];\n\n// BF (2020-10-31) I have no Idea, why it does not work as static in BlocklyEditor, but outside of BlocklyEditor it works\nfunction searchXml(root, text, _id, _result) {\n _result = _result || [];\n if (root.tagName === 'BLOCK' || root.tagName === 'block') {\n _id = root.id;\n }\n if (root.tagName === 'FIELD' || root.tagName === 'field') {\n for (let a = 0; a < root.attributes.length; a++) {\n const val = (root.attributes[a].value || '').toLowerCase();\n if (root.attributes[a].nodeName === 'name' && (val === 'oid' || val === 'text' || val === 'var')) {\n if ((root.innerHTML || root.innerText || '').toLowerCase().includes(text)) {\n _result.push(_id);\n }\n }\n }\n }\n root.childNodes.forEach(node =>\n searchXml(node, text, _id, _result));\n\n return _result;\n}\n\nclass BlocklyEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.blockly = null;\n this.blocklyWorkspace = null;\n this.toolbox = null;\n this.Blockly = window.Blockly;\n\n this.state = {\n languageOwnLoaded,\n languageBlocklyLoaded,\n changed: false,\n message: '',\n error: '',\n themeType: this.props.themeType,\n exportText: '',\n importText: false,\n searchText: this.props.searchText || '',\n };\n this.originalCode = props.code || '';\n\n this.someSelected = null;\n this.changeTimer = null;\n\n this.onResizeBind = this.onResize.bind(this);\n\n this.lastCommand = '';\n this.lastSearch = this.props.searchText || '';\n this.blinkBlock = null;\n this.loadLanguages();\n }\n\n static loadJS(url, callback, location) {\n const scriptTag = document.createElement('script');\n try {\n scriptTag.src = url;\n\n scriptTag.onload = callback;\n scriptTag.onreadystatechange = callback;\n scriptTag.onerror = callback;\n\n (location || window.document.body).appendChild(scriptTag);\n } catch (e) {\n console.error(`Cannot load ${url}: ${e}`);\n callback && callback();\n }\n }\n\n static loadScripts(scripts, callback) {\n if (!scripts || !scripts.length) {\n return callback && callback();\n }\n const adapter = scripts.pop();\n if (!scriptsLoaded.includes(adapter)) {\n scriptsLoaded.push(adapter);\n BlocklyEditor.loadJS(`../../adapter/${adapter}/blockly.js`, (/*data, textStatus, jqxhr*/) =>\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0));\n } else {\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0);\n }\n }\n\n static loadCustomBlockly(adapters, callback) {\n // get all adapters, that can have blockly\n const toLoad = [];\n for (const id in adapters) {\n if (!adapters.hasOwnProperty(id) ||\n !adapters[id] ||\n !id.match(/^system\\.adapter\\./) ||\n adapters[id].type !== 'adapter'\n ) {\n continue;\n }\n\n if (adapters[id].common && adapters[id].common.blockly) {\n console.log(`Detected custom blockly: ${adapters[id].common.name}`);\n toLoad.push(adapters[id].common.name);\n }\n }\n\n BlocklyEditor.loadScripts(toLoad, callback);\n }\n\n static loadXMLDoc(text) {\n let parseXml;\n if (window.DOMParser) {\n parseXml = xmlStr => (new window.DOMParser()).parseFromString(xmlStr, 'text/xml');\n } else if (typeof window.ActiveXObject !== 'undefined' && new window.ActiveXObject('Microsoft.XMLDOM')) {\n parseXml = xmlStr => {\n const xmlDoc = new window.ActiveXObject('Microsoft.XMLDOM');\n xmlDoc.async = 'false';\n xmlDoc.loadXML(xmlStr);\n return xmlDoc;\n };\n } else {\n parseXml = () => null;\n }\n return parseXml(text);\n }\n\n searchBlocks(text) {\n if (this.blocklyWorkspace) {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const ids = searchXml(dom, text.toLowerCase());\n\n console.log(`Search \"${text}\" found blocks: ${ids.length ? JSON.stringify(ids) : 'none'}`);\n\n return ids;\n }\n\n return [];\n }\n\n searchId() {\n const ids = this.lastSearch && this.searchBlocks(this.lastSearch);\n if (ids && ids.length) {\n this.someSelected = ids;\n this.someSelected.forEach(id => this.blocklyWorkspace.highlightBlock(id, true));\n this.someSelectedTime = Date.now();\n } else if (this.someSelected) {\n // remove selection\n this.someSelected.forEach(id => this.blocklyWorkspace.highlightBlock(id, false));\n this.someSelected = null;\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.command && this.lastCommand !== nextProps.command) {\n this.lastCommand = nextProps.command;\n setTimeout(() => this.lastCommand = '', 300);\n if (this.lastCommand === 'check') {\n this.blocklyCheckBlocks((err, badBlock) => {\n if (!err) {\n this.setState({ message: I18n.t('Ok') });\n } else {\n badBlock && this.blocklyBlinkBlock(badBlock);\n this.setState({ error: { text: I18n.t(err), title: I18n.t('Error was found') } });\n this.blinkBlock = badBlock;\n }\n });\n } else if (this.lastCommand === 'export') {\n this.exportBlocks();\n } else if (this.lastCommand === 'import') {\n this.importBlocks();\n }\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.searchId();\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n this.setState({ themeType: nextProps.themeType }, () => this.updateBackground());\n }\n\n if (this.originalCode !== nextProps.code) {\n this.originalCode = nextProps.code || '';\n this.loadCode();\n this.searchId();\n }\n }\n\n loadLanguages() {\n // load blockly language\n if (!languageBlocklyLoaded) {\n const fileLang = window.document.createElement('script');\n fileLang.setAttribute('type', 'text/javascript');\n fileLang.setAttribute('src', `google-blockly/msg/js/${I18n.getLanguage()}.js`);\n\n // most browsers\n fileLang.onload = () => {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n };\n // IE 6 & 7\n fileLang.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageBlocklyLoaded = true;\n this.setState({ languageBlocklyLoaded });\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileLang);\n }\n if (!languageOwnLoaded) {\n const fileCustom = window.document.createElement('script');\n fileCustom.setAttribute('type', 'text/javascript');\n fileCustom.setAttribute('src', `google-blockly/own/msg/${I18n.getLanguage()}.js`);\n // most browsers\n fileCustom.onload = () => {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n };\n // IE 6 & 7\n fileCustom.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageOwnLoaded = true;\n this.setState({ languageOwnLoaded });\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileCustom);\n }\n }\n\n onResize() {\n this.Blockly.svgResize(this.blocklyWorkspace);\n }\n\n jsCode2Blockly(text) {\n text = text || '';\n const lines = text.split(/[\\r\\n]+|\\r|\\n/g);\n let xml = '';\n for (let l = lines.length - 1; l >= 0; l--) {\n if (lines[l].substring(0, 2) === '//') {\n xml = lines[l].substring(2);\n break;\n }\n }\n if (xml.substring(0, 4) === '<xml') {\n return xml;\n }\n\n let code;\n try {\n code = window.decodeURIComponent(window.atob(xml));\n } catch (e) {\n code = null;\n console.error(`cannot decode: ${xml}`);\n console.error(e);\n }\n return code;\n }\n\n blocklyBlinkBlock(block) {\n for (let i = 300; i < 3000; i += 300) {\n setTimeout(() => block.select(), i);\n setTimeout(() => block.unselect(), i + 150);\n }\n }\n\n blocklyRemoveOrphanedShadows() {\n if (this.blocklyWorkspace) {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.isShadow()) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.targetConnection) {\n // remove it\n block.dispose();\n break;\n }\n }\n }\n }\n }\n }\n\n blocklyCheckBlocks(cb) {\n let warningText;\n if (!this.blocklyWorkspace || this.blocklyWorkspace.getAllBlocks().length === 0) {\n cb && cb('no blocks found');\n return;\n }\n let badBlock = this.blocklyGetUnconnectedBlock();\n if (badBlock) {\n warningText = 'not properly connected';\n } else {\n badBlock = this.blocklyGetBlockWithWarning();\n if (badBlock) {\n warningText = 'warning on this block';\n }\n }\n\n if (badBlock) {\n if (cb) {\n cb(warningText, badBlock);\n } else {\n this.blocklyBlinkBlock(badBlock);\n }\n return false;\n }\n\n cb();\n\n return true;\n }\n\n // get unconnected block\n blocklyGetUnconnectedBlock() {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.sourceBlock_ || ((conn.type === this.Blockly.INPUT_VALUE || conn.type === this.Blockly.OUTPUT_VALUE) && !conn.targetConnection && !conn._optional)) {\n return block;\n }\n }\n }\n return null;\n }\n\n // get block with warning\n blocklyGetBlockWithWarning() {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.warning) {\n return block;\n }\n }\n return null;\n }\n\n blocklyCode2JSCode(oneWay) {\n let code = this.Blockly.JavaScript.workspaceToCode(this.blocklyWorkspace);\n if (!oneWay) {\n code += '\\n';\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const text = this.Blockly.Xml.domToText(dom);\n code += `//${btoa(encodeURIComponent(text))}`;\n }\n\n return code;\n }\n\n exportBlocks() {\n let exportText;\n const selectedBlocks = this.Blockly.getSelected();\n if (selectedBlocks) {\n const xmlBlock = this.Blockly.Xml.blockToDom(selectedBlocks);\n if (this.Blockly.dragMode_ !== this.Blockly.DRAG_FREE) {\n this.Blockly.Xml.deleteNext(xmlBlock);\n }\n // Encode start position in XML.\n const xy = selectedBlocks.getRelativeToSurfaceXY();\n xmlBlock.setAttribute('x', selectedBlocks.RTL ? -xy.x : xy.x);\n xmlBlock.setAttribute('y', xy.y);\n\n exportText = this.Blockly.Xml.domToPrettyText(xmlBlock);\n } else {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n exportText = this.Blockly.Xml.domToPrettyText(dom);\n }\n this.setState({ exportText });\n }\n\n importBlocks() {\n this.setState({ importText: true });\n }\n\n onImportBlocks(xml) {\n xml = (xml || '').trim();\n if (xml) {\n try {\n if (!xml.startsWith('<xml')) {\n xml = '<xml xmlns=\"https://developers.google.com/blockly/xml\">' + xml + '</xml>';\n }\n const variables = xml.replace(/[\\n\\r]/g, '').match(/<variables>(.*)<\\/variables>/);\n if (variables) {\n const vars = this.Blockly.utils.xml.textToDomDocument('<variables>' + variables[1] + '</variables>');\n if (vars) {\n const nodes = vars.childNodes && vars.childNodes[0] && vars.childNodes[0].childNodes;\n if (nodes) {\n for (let i = 0; i < nodes.length; i++) {\n nodes[i].id && this.blocklyWorkspace.createVariable(nodes[i].id);\n }\n }\n }\n }\n xml = xml.replace(/[\\n\\r]/g, '').replace(/<variables>.*<\\/variables>/g, '');\n window.scripts.loading = true;\n\n const xmlBlocks = this.Blockly.utils.xml.textToDom(xml);\n if (xmlBlocks.nodeName === 'xml') {\n for (let b = 0; b < xmlBlocks.children.length; b++) {\n this.blocklyWorkspace.paste(xmlBlocks.children[b]);\n }\n } else {\n this.blocklyWorkspace.paste(xmlBlocks);\n }\n\n window.scripts.loading = false;\n\n this.onBlocklyChanged();\n } catch (e) {\n this.setState({ error: { text: e, title: I18n.t('Import error') } });\n }\n }\n }\n\n loadCode() {\n if (!this.blocklyWorkspace) {\n return;\n }\n\n this.ignoreChanges = true;\n this.blocklyWorkspace.clear();\n\n try {\n const xml = this.jsCode2Blockly(this.originalCode) || '<xml xmlns=\"https://developers.google.com/blockly/xml\"></xml>';\n window.scripts.loading = true;\n const dom = this.Blockly.utils.xml.textToDom(xml);\n this.Blockly.Xml.domToWorkspace(dom, this.blocklyWorkspace);\n window.scripts.loading = false;\n } catch (e) {\n console.error(e);\n setTimeout(() => this.setState({ error: I18n.t('Cannot extract Blockly code!') }));\n }\n setTimeout(() => this.ignoreChanges = false, 100);\n }\n\n onBlocklyChanged() {\n this.blocklyRemoveOrphanedShadows();\n this.setState({ changed: true });\n this.onChange();\n }\n\n async componentDidUpdate() {\n if (!this.blockly) {\n return;\n }\n if (this.didUpdate) {\n clearTimeout(this.didUpdate);\n this.didUpdate = null;\n }\n\n if (this.blocklyWorkspace) {\n return;\n }\n\n window.addEventListener('resize', this.onResizeBind, false);\n toolboxText = toolboxText || (await this.getToolbox());\n toolboxXml = toolboxXml || this.Blockly.utils.xml.textToDom(toolboxText);\n\n this.blocklyWorkspace = this.Blockly.inject(\n this.blockly,\n {\n media: 'google-blockly/media/',\n toolbox: toolboxXml,\n zoom: {\n controls: true,\n wheel: false,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2,\n },\n move: {\n scrollbars: true,\n drag: true,\n wheel: true,\n },\n trashcan: true,\n grid: {\n spacing: 25,\n length: 3,\n colour: '#ccc',\n snap: true,\n },\n sounds: false, // disable sounds\n },\n );\n // for blockly itself\n window.scripts = {\n blocklyWorkspace: this.blocklyWorkspace,\n };\n\n // Workaround: Replace procedure category flyout\n this.blocklyWorkspace.registerToolboxCategoryCallback('PROCEDURE', this.Blockly.Procedures.flyoutCategoryNew);\n\n // Listen to events on master workspace.\n this.blocklyWorkspace.addChangeListener(masterEvent => {\n if (this.someSelected && Date.now() - this.someSelectedTime > 500) {\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n this.someSelected = null;\n allBlocks.forEach(b => b.removeSelect());\n }\n\n if ([this.Blockly.Events.UI, this.Blockly.Events.CREATE, this.Blockly.Events.VIEWPORT_CHANGE].includes(masterEvent.type)) {\n return; // Don't mirror UI events.\n }\n if (this.ignoreChanges) {\n return;\n }\n\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => {\n this.changeTimer = null;\n this.onBlocklyChanged();\n }, 200);\n });\n this.loadCode();\n this.onResize();\n // Move toolbar to the valid position\n const toolbar = document.getElementsByClassName('blocklyToolboxDiv')[0];\n this.blockly.appendChild(toolbar);\n\n this.updateBackground();\n setTimeout(() => this.searchId(), 200); // select found blocks\n }\n\n updateBackground() {\n const background = document.getElementsByClassName('blocklyMainBackground')[0];\n if (this.state.themeType === 'dark') {\n if (!background._originalStyle) {\n background._originalStyle = {\n stroke: background.style.stroke,\n fill: background.style.fill,\n };\n }\n // add class\n background.style.stroke = '#3a3a3a';\n background.style.fill = '#515151';\n } else if (background._originalStyle) {\n background.style.stroke = background._originalStyle.stroke;\n background.style.fill = background._originalStyle.fill;\n }\n }\n\n componentWillUnmount() {\n if (!this.blocklyWorkspace) {\n return;\n }\n this.blocklyWorkspace.dispose();\n this.blocklyWorkspace = null;\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = null;\n window.removeEventListener('resize', this.onResizeBind);\n }\n\n onChange() {\n this.originalCode = this.blocklyCode2JSCode();\n this.props.onChange && this.props.onChange(this.originalCode);\n }\n\n async getToolbox(retry) {\n // Interpolate translated messages into toolbox.\n const el = window.document.getElementById('toolbox');\n let toolboxText = el && el.outerHTML;\n if (!toolboxText) {\n if (!retry) {\n return new Promise(resolve => { setTimeout(() => resolve(this.getToolbox(true)), 500); });\n }\n\n console.error('Cannot load blocks!');\n return '';\n }\n toolboxText = toolboxText.replace(/{(\\w+)}/g, (m, p1) => window.MSG[p1]);\n\n if (this.Blockly.CustomBlocks) {\n let blocks = '';\n const lang = I18n.getLanguage();\n for (let cb = 0; cb < this.Blockly.CustomBlocks.length; cb++) {\n const name = this.Blockly.CustomBlocks[cb];\n // add blocks\n blocks += `<category name=\"${this.Blockly.Words[name][lang]}\" colour=\"${this.Blockly[name].HUE}\">`;\n for (const _b in this.Blockly[name].blocks) {\n if (Object.prototype.hasOwnProperty.call(this.Blockly[name].blocks, _b)) {\n blocks += this.Blockly[name].blocks[_b];\n }\n }\n blocks += '</category>';\n }\n toolboxText = toolboxText.replace('<category><block>%%CUSTOM_BLOCKS%%</block></category>', blocks);\n }\n\n return toolboxText;\n }\n\n renderMessageDialog() {\n return this.state.message ?\n <DialogMessage\n key=\"dialogMessage\"\n text={typeof this.state.message === 'object' ? this.state.message.text : this.state.message}\n title={typeof this.state.message === 'object' ? this.state.message.title : ''}\n onClose={() => this.setState({ message: '' })}\n /> :\n null;\n }\n\n renderErrorDialog() {\n return this.state.error ?\n <DialogError\n key=\"dialogError\"\n text={typeof this.state.error === 'object' ? this.state.error.text.toString() : this.state.error}\n title={typeof this.state.error === 'object' ? this.state.error.title : ''}\n onClose={() => {\n if (this.blinkBlock) {\n this.blocklyBlinkBlock(this.blinkBlock);\n this.blinkBlock = null;\n }\n this.setState({ error: '' });\n }}/> :\n null;\n }\n\n renderExportDialog() {\n return this.state.exportText ? <DialogExport key=\"dialogExport\" theme={this.state.themeType} onClose={() => this.setState({ exportText: '' })} text={this.state.exportText} scriptId={this.props.scriptId} /> : null;\n }\n\n renderImportDialog() {\n return this.state.importText ? <DialogImport\n key=\"dialogImport\"\n onClose={text => {\n this.setState({ importText: false });\n this.onImportBlocks(text);\n }}\n /> : null;\n }\n\n render() {\n if (this.state.languageBlocklyLoaded && this.state.languageOwnLoaded) {\n this.didUpdate = setTimeout(() => {\n this.didUpdate = null;\n this.componentDidUpdate();\n }, 100);\n\n return [\n <div\n key=\"blocklyDOM\"\n ref={el => this.blockly = el}\n style={{\n // marginLeft: 180,\n width: '100%', // 'calc(100% - 180px)',\n height: '100%',\n // overflow: 'hidden',\n position: 'relative',\n }}\n />,\n\n this.renderMessageDialog(),\n this.renderErrorDialog(),\n this.renderExportDialog(),\n this.renderImportDialog(),\n ];\n }\n\n return null;\n }\n}\n\nBlocklyEditor.propTypes = {\n command: PropTypes.string,\n onChange: PropTypes.func,\n searchText: PropTypes.string,\n scriptId: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default BlocklyEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconSave from '@mui/icons-material/Save';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n args: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n },\n argsTitle: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n fontWeight: 'bold'\n }\n});\n\nclass DialogScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n changed: false,\n source: this.props.source,\n };\n if (!this.state.source && this.props.isReturn) {\n this.state.source = '\\nreturn false';\n }\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('source-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose(false);\n }\n\n handleOk () {\n if (this.props.isReturn && !this.state.source.includes('return ')) {\n\n } else {\n this.props.onClose(this.state.source);\n }\n }\n\n onChange(value) {\n this.setState({changed: true, source: value});\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth\n open={!0}\n aria-labelledby=\"source-dialog-title\"\n >\n <DialogTitle id=\"source-dialog-title\">{I18n.t('Function editor')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n {this.props.args && (<div key=\"arguments\" className={classes.args}>\n <span className={classes.argsTitle}>{I18n.t('function (')}</span>\n {this.props.args}\n <span className={classes.argsTitle}>)</span>\n </div>)}\n <ScriptEditorComponent\n adapterName={this.props.adapterName}\n runningInstances={this.props.runningInstances}\n className={classes.textArea}\n style={{height: this.props.args ? 'calc(100% - 30px)' : '100%'}}\n key=\"scriptEditor\"\n name={'blockly'}\n socket={this.props.socket}\n readOnly={false}\n checkJs={false}\n changed={this.state.changed}\n code={this.state.source}\n isDark={this.props.themeType === 'dark'}\n onChange={newValue => this.onChange(newValue)}\n language={'javascript'}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" startIcon={<IconSave/>}>{I18n.t('Save')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogScriptEditor.propTypes = {\n classes: PropTypes.object.isRequired,\n adapterName: PropTypes.string.isRequired,\n runningInstances: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n source: PropTypes.string,\n args: PropTypes.string,\n isReturn: PropTypes.bool,\n themeType: PropTypes.string,\n socket: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogScriptEditor);\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapperRules\":\"style_wrapperRules__Js-Pp\",\"rootWrapper\":\"style_rootWrapper__0Dpqp\",\"addClass\":\"style_addClass__ry424\"};","// extracted by mini-css-extract-plugin\nexport default {\"switchesItem\":\"style_switchesItem__RBQz7\",\"switchesItemActive\":\"style_switchesItemActive__FU8S9\",\"iconTheme\":\"style_iconTheme__inJLE\"};","import { useState, useEffect } from 'react';\nimport * as Icons from '@mui/icons-material/';\n\nconst ICON_CACHE = {};\n\nconst MaterialDynamicIcon = ({ iconName, className, adapter, socket, onClick }) => {\n let [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n ICON_CACHE[adapter] = ICON_CACHE[adapter] || socket.getObject(`system.adapter.${adapter}`);\n ICON_CACHE[adapter].then(obj =>\n obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`));\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return <img onClick={e => onClick && onClick(e)} src={url || ''} className={className} alt=\"\" />;\n } else {\n const Element = Icons[iconName || 'Help'];\n return <Element\n className={className}\n onClick={e => onClick && onClick(e)}\n />;\n }\n}\n\nMaterialDynamicIcon.defaultProps = {\n className: null,\n iconName: 'Help'\n};\n\nexport default MaterialDynamicIcon;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\n\nconst CardMenu = ({ name, id, active, icon, adapter, socket, onDoubleClick, title, onTouchMove }) => <div\n onDoubleClick={onDoubleClick}\n onTouchMove={onTouchMove}\n key={id}\n title={I18n.t(title)}\n className={Utils.clsx(cls.switchesItem, active && cls.switchesItemActive, 'block-' + id)}\n>\n <MaterialDynamicIcon iconName={icon} className={cls.iconTheme} adapter={adapter} socket={socket} />\n <span>\n {name ? I18n.t(name) : ''}\n </span>\n</div>;\n\nCardMenu.defaultProps = {\n name: '',\n active: false,\n id: '',\n onDoubleClick: () => { }\n};\n\nCardMenu.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n active: PropTypes.bool\n};\n\nexport default CardMenu;","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__5c+lG\",\"cardStyleActive\":\"style_cardStyleActive__n6Nq8\",\"controlMenu\":\"style_controlMenu__J0sIm\",\"closeBtn\":\"style_closeBtn__TzVMw\",\"isDelete\":\"style_isDelete__0Sa6U\",\"drag_mobile\":\"style_drag_mobile__RVp7B\"};","export function deepCopy(name, userRules, additionalParameter) {\n let newItemsSwitches;\n switch (name) {\n case 'actions':\n newItemsSwitches = {\n ...userRules,\n [name]: {\n ...userRules[name],\n [additionalParameter]: [...userRules[name][additionalParameter]]\n }\n };\n return newItemsSwitches;\n\n default:\n newItemsSwitches = {\n ...userRules,\n [name]: [...userRules[name]]\n };\n return newItemsSwitches;\n }\n}","export function filterElement(name, userRules, additionalParameter, _id) {\n switch (name) {\n case 'actions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n case 'conditions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n default:\n userRules[name] = userRules[name].filter(el => el._id !== _id);\n return userRules;\n }\n}","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__A9pAJ\",\"nameCard\":\"style_nameCard__m2nJe\",\"cardStyleActive\":\"style_cardStyleActive__sMSgj\",\"iconThemCard\":\"style_iconThemCard__wx6Kq\",\"iconThemCardSelectable\":\"style_iconThemCardSelectable__H9okn\",\"iconHelp\":\"style_iconHelp__iIi1g\",\"inputCard\":\"style_inputCard__qf8Q+\",\"blockName\":\"style_blockName__CqwBy\",\"controlMenu\":\"style_controlMenu__8kQnd\",\"closeBtn\":\"style_closeBtn__LcbOd\",\"controlMenuTop\":\"style_controlMenuTop__AkzEp\",\"debugInfo\":\"style_debugInfo__wPdyv\",\"fadeIn\":\"style_fadeIn__zKsCh\",\"tagCard\":\"style_tagCard__CEY-X\",\"displayFlex\":\"style_displayFlex__5sr+i\",\"blockMarginTop\":\"style_blockMarginTop__Qn7Lh\",\"nameBlock\":\"style_nameBlock__MZ53S\",\"frontText\":\"style_frontText__3cVcg\",\"backText\":\"style_backText__sF8Y-\",\"iconTag\":\"style_iconTag__2cpM6\",\"displayItalic\":\"style_displayItalic__9KtQw\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__h6PjP\",\"square\":\"style_square__ahzCN\",\"icon\":\"style_icon__jwNl0\"};","import { Button } from '@mui/material';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Utils, Icon as CustomIcon } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst CustomButton = ({ fullWidth, size, onClick, style, className, value, square, icon }) => {\n return <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClick}\n fullWidth={fullWidth}\n style={style}\n className={Utils.clsx(cls.root, className, square ? cls.square : '')}\n margin=\"normal\"\n size={size}\n >{icon ? <CustomIcon className={cls.icon} src={icon} /> : value}</Button>;\n}\n\nCustomButton.defaultProps = {\n value: '',\n className: null,\n variant: 'standard',\n size: 'medium',\n fullWidth: false,\n square: false\n};\n\nCustomButton.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default CustomButton;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__8DT4l\"};","import { Checkbox } from '@mui/material';\nimport React, { memo, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst CustomCheckbox = ({ size, value, style, title, onChange, className, customValue, disabled }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n\n return <>\n <Checkbox\n disabled={disabled}\n checked={Boolean(customValue ? value : switchChecked)}\n // style={Object.assign(type ? color[type] : null, style)}\n className={Utils.clsx(cls.root, className)}\n onChange={e => {\n customValue && setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n {title || null}\n </>;\n}\n\nCustomCheckbox.defaultProps = {\n value: false,\n disabled: false,\n type: null,\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomCheckbox.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomCheckbox);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__WINKv\"};","import React, { useState } from 'react';\nimport { TextField } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport InputAdornment from '@mui/material/InputAdornment';\n\nimport { Utils, Icon as CustomIcon } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst CustomInput = ({ autoFocus, fullWidth, disabled, multiline, rows, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, icon }) => {\n const [inputText, setInputText] = useState('');\n return <TextField\n error={!!error}\n autoFocus={autoFocus}\n fullWidth={fullWidth}\n label={label}\n disabled={disabled}\n variant={variant}\n multiline={multiline}\n rows={rows}\n value={customValue ? value : inputText}\n type={type}\n helperText={error}\n style={style}\n className={Utils.clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n InputProps={{\n endAdornment: icon ?\n <InputAdornment position=\"end\"><CustomIcon className={cls.icon} src={icon} /></InputAdornment>\n : null\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomInput.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n autoFocus: false,\n rows: 1\n};\n\nCustomInput.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomInput;","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport withStyles from '@mui/styles/withStyles';\nimport React, { useEffect, useState } from 'react';\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport PropTypes from 'prop-types';\n\nconst SelectMod = withStyles({\n root: {\n margin: '10px 0',\n '& .MuiFormControl-marginNormal': {\n marginTop: 0,\n marginBottom: 0,\n },\n '& > *': {\n color: '#2d0440 !important'\n },\n '& .MuiSelect-icon': {\n color: '#81688c'\n },\n '& label.Mui-focused': {\n color: '#81688c',\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: '#510573',\n },\n '& .MuiInput-underline:before': {\n borderBottomColor: '#81688c',\n },\n '& .MuiInput-underline:hover:before': {\n borderBottomColor: '#81688c',\n },\n },\n})(FormControl);\n\nconst CustomInstance = ({ multiple, value, customValue, socket, title, attr, adapter, style, onChange, className, onInstanceHide }) => {\n const [inputText, setInputText] = useState(value || 'test1');\n const [options, setOptions] = useState([]);\n\n useEffect(() => {\n socket && socket.getAdapterInstances(adapter)\n .then(instances => {\n const _options = instances.map(obj => ({value: obj._id.replace('system.adapter.', ''), title: obj._id.replace('system.adapter.', '')}));\n if (_options.length === 1) {\n onInstanceHide(_options[0].value);\n } else {\n _options.unshift({value: adapter, title: I18n.t('All')});\n }\n setOptions(_options);\n });\n }, [socket, adapter, onInstanceHide]);\n\n return <SelectMod\n className={className}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={(customValue ? value : inputText) || '_'}\n fullWidth\n multiple={multiple}\n renderValue={(selected) => multiple && selected.join ? selected.join(', ') : selected}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {options.map(item =>\n <MenuItem style={{placeContent:'space-between'}} key={'key-' + item.value} value={item.value || '_'}>{I18n.t(item.title)}{item.title2 && <div>{item.title2}</div>}</MenuItem>)}\n </Select>\n <FormHelperText>{I18n.t(title)}</FormHelperText>\n </SelectMod>;\n}\n\nCustomInstance.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false\n};\n\nCustomInstance.propTypes = {\n title: PropTypes.string,\n socket: PropTypes.object,\n attr: PropTypes.string,\n adapter: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default CustomInstance;","// extracted by mini-css-extract-plugin\nexport default {\"modalContentWrapper\":\"style_modalContentWrapper__ewzzR\",\"modalButtonBlock\":\"style_modalButtonBlock__otBeq\",\"modalButtonBlockTwo\":\"style_modalButtonBlockTwo__bh8rw\",\"modalWrapper\":\"style_modalWrapper__VUeGq\",\"modalDialog\":\"style_modalDialog__MI8Ka\",\"close\":\"style_close__Z8qAY\"};","import React, {useState} from 'react';\nimport Button from '@mui/material/Button';\nimport { Dialog, DialogActions, DialogContent } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport i18n from '@iobroker/adapter-react-v5/i18n';\nimport CustomInput from \"../CustomInput\";\n\nconst CustomModal = ({ open, onClose, children, titleButtonApply, titleButtonClose, onApply, className, textInput, defaultValue}) => {\n let [value, setValue] = useState(defaultValue);\n\n return <Dialog\n open={open}\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n onClose={onClose}\n classes={{paper: cls.modalDialog, /*paper: classes.background*/}}\n className={cls.modalWrapper}\n >\n <DialogContent>\n {textInput && <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"medium\"\n rows={10}\n multiline\n value={value}\n onChange={setValue}\n customValue\n />}\n {!textInput && children}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onApply(textInput ? value : null)} variant=\"contained\" color=\"primary\">\n {i18n.t(titleButtonApply)}\n </Button>\n <Button color=\"grey\" onClick={onClose} variant=\"contained\">\n {i18n.t(titleButtonClose)}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nCustomModal.defaultProps = {\n open: false,\n onApply: () => { },\n onClose: () => { },\n titleButtonClose: 'Cancel',\n titleButtonApply: 'Ok'\n};\n\nCustomModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n children: PropTypes.any,\n titleButtonClose: PropTypes.string,\n titleButtonApply: PropTypes.string,\n onApply: PropTypes.func\n};\n\nexport default CustomModal;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__AZ3ER\"};","import React, { useState } from 'react';\nimport { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\nimport CustomCheckbox from '../CustomCheckbox';\n\nconst CustomSelect = ({ multiple, value, customValue, title, attr, options, style, onChange, className, doNotTranslate, doNotTranslate2 }) => {\n const [inputText, setInputText] = useState(value === undefined ? options[0].value : value);\n\n const v = customValue ? value : inputText;\n const text = v === '' || v === null || v === undefined ? '_' : v;\n\n return <FormControl\n variant=\"standard\"\n className={Utils.clsx(cls.root, className)}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={text}\n fullWidth\n multiple={multiple}\n renderValue={selected => {\n if (multiple && selected.join) {\n // sort\n selected.sort();\n let pos = selected.indexOf('0');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.push('0');\n }\n pos = selected.indexOf('_');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.unshift('_');\n }\n\n const onlyItem = options.find(el => el.only);\n if (selected.includes(onlyItem.value)) {\n return onlyItem.titleShort ? (doNotTranslate ? onlyItem.titleShort : I18n.t(onlyItem.titleShort)) : (doNotTranslate ? onlyItem.title : I18n.t(onlyItem.title))\n }\n\n const titles = selected\n .map(sel => options.find(item => item.value === sel || (sel === '_' && item.value === '')) || sel)\n .map(item => typeof item === 'object' ? (item.titleShort ? (doNotTranslate ? item.titleShort : I18n.t(item.titleShort)) : (doNotTranslate ? item.title : I18n.t(item.title))) : (doNotTranslate ? item : I18n.t(item)));\n\n return titles.join(', ');\n } else {\n const item = options ? options.find(item => item.value === selected || (selected === '_' && item.value === '')) : null;\n return item?.title ? (doNotTranslate ? item?.title : I18n.t(item?.title)) : selected;\n }\n }}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n if (multiple) {\n const onlyItem = options.find(el => el.only);\n if (onlyItem) {\n const valueOnly = onlyItem.value;\n if (e.target.value.length === options.length - 1 && e.target.value.includes(valueOnly)) {\n return onChange(e.target.value.filter(el => el !== valueOnly), attr);\n }\n if (e.target.value.includes(valueOnly)) {\n return onChange(options.map(el => el.value), attr);\n }\n }\n }\n onChange(e.target.value, attr);\n }}\n input={attr ? <Input name={attr} id={`${attr}-helper`} /> : <Input name={attr} />}\n >\n {!multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={`key-${item.value}`} value={item.value === '' || item.value === null || item.value === undefined ? '_' : item.value}>{doNotTranslate ? item.title : I18n.t(item.title)}{item.title2 && <div>{doNotTranslate2 ? item.title2 : I18n.t(item.title2)}</div>}</MenuItem>)}\n {multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={`key-${item.value}`} value={item.value || '_'}>{doNotTranslate ? item.title : I18n.t(item.title)} <CustomCheckbox customValue value={value.includes(item.value)} /></MenuItem>)}\n </Select>\n {title ? <FormHelperText>{I18n.t(title)}</FormHelperText> : null}\n </FormControl>;\n}\n\nCustomSelect.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false,\n multiple: false\n};\n\nCustomSelect.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n options: PropTypes.array.isRequired,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomSelect;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__BGOBc\",\"mark\":\"style_mark__MLqoT\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Slider } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst CustomSlider = ({ fullWidth, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, min, max, step, unit }) => {\n const [inputText, setInputText] = useState(0);\n min = min !== undefined ? min : 0;\n max = max !== undefined ? max : 0;\n step = step !== undefined ? step : (max - min) / 100;\n\n const marks = [\n {\n value: min,\n label: min + (unit || ''),\n },\n {\n value: max,\n label: max + (unit || ''),\n },\n ];\n\n return <Slider\n defaultValue={customValue ? value : inputText}\n // getAriaValueText={customValue ? value : inputText}\n aria-labelledby=\"discrete-slider\"\n valueLabelDisplay=\"auto\"\n classes={{mark: cls.mark}}\n marks={marks}\n step={step}\n min={min}\n max={max}\n error={error || ''}\n //fullWidth={fullWidth}\n label={label}\n variant={variant}\n value={customValue ? value : inputText}\n type={type}\n //helperText={error || ''}\n style={style}\n className={Utils.clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={(e, newValue) => {\n !customValue && setInputText(newValue);\n onChange(newValue);\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomSlider.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false\n};\n\nCustomSlider.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomSlider;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__anA9+\"};","import { FormControlLabel, Switch } from '@mui/material';\nimport React, { memo, useState } from 'react';\n// import { I18n } from '@iobroker/adapter-react-v5';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\n\nconst CustomSwitch = ({ label, size, value, style, onChange, className, customValue }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n return <FormControlLabel\n className={cls.root}\n control={<Switch\n checked={customValue ? value : switchChecked}\n style={style}\n className={className}\n onChange={e => {\n if (!customValue) setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n }\n label={label}\n />;\n}\n\nCustomSwitch.defaultProps = {\n value: false,\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomSwitch.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomSwitch);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__xyxno\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { TextField } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst CustomTime = ({ value, style, onChange, className }) => {\n return <TextField\n variant=\"standard\"\n id=\"time\"\n type=\"time\"\n onChange={(e) => onChange(e.currentTarget.value)}\n value={value}\n className={Utils.clsx(cls.root, className)}\n fullWidth\n style={style}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 300, // 5 min\n }}\n />;\n}\n\nCustomTime.defaultProps = {\n value: '',\n className: null,\n table: false\n};\n\nCustomTime.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomTime;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__FwemI\"};","import React from 'react';\nimport { FormControl, MenuItem, Select } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nconst CustomDate = ({ value, onChange, className, title, style }) => {\n let [month, date] = (value || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n\n let days = [];\n for (let i = 0; i < DAYS[month]; i++) {\n days.push(i + 1);\n }\n\n return <div>\n <FormControl\n variant=\"standard\"\n className={Utils.clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={Utils.clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Month')}\n onChange={e =>\n onChange(`${e.target.value.toString().padStart(2, '0')}.${date.toString().padStart(2, '0')}`)}\n value={month}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={0} value={0}>{I18n.t('Any month')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={1} value={1}>{I18n.t('January')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={2} value={2}>{I18n.t('February')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={3} value={3}>{I18n.t('March')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={4} value={4}>{I18n.t('April')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={5} value={5}>{I18n.t('May')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={6} value={6}>{I18n.t('June')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={7} value={7}>{I18n.t('July')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={8} value={8}>{I18n.t('August')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={9} value={9}>{I18n.t('September')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={10} value={10}>{I18n.t('October')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={11} value={11}>{I18n.t('November')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={12} value={12}>{I18n.t('December')}</MenuItem>\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n className={Utils.clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={Utils.clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Date')}\n onChange={e =>\n onChange(`${month.toString().padStart(2, '0')}.${e.target.value.toString().padStart(2, '0')}`)}\n value={date}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={'A'} value={0}>{I18n.t('Any')}</MenuItem>\n {days.map(i => <MenuItem style={{ placeContent: 'space-between' }} key={i} value={i}>{i}</MenuItem>)}\n </Select>\n </FormControl>\n </div>;\n}\n\nCustomDate.defaultProps = {\n value: '',\n className: null,\n};\n\nCustomDate.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomDate;","import { I18n } from '@iobroker/adapter-react-v5';\n\nlet lang;\nconst getName = obj => {\n lang = lang || I18n.getLanguage();\n if (typeof obj === 'object') {\n return obj[lang] || obj.en;\n } else {\n return obj;\n }\n};\n\nconst utils = {\n getName\n};\n\nexport default utils;","const STEPS = {\n selectTriggers: 0,\n addScheduleByDoubleClick: 1,\n openTagsMenu: 2,\n selectIntervalTag: 3,\n selectActions: 4,\n addActionPrintText: 5,\n showJavascript: 6,\n switchBackToRules: 7,\n saveTheScript: 8,\n};\n\nconst steps = [\n { // 0\n selector: '.blocks-triggers',\n content: 'Select triggers',\n },\n { // 1\n selector: '.block-TriggerScheduleBlock',\n content: 'Double click to add the block',\n },\n { // 2\n selector: '.tag-card',\n content: 'Open drop down menu',\n },\n { // 3\n selector: '.tag-card-interval',\n content: 'Select interval',\n },\n { // 4\n selector: '.blocks-actions',\n content: 'Select action blocks',\n },\n { // 5\n selector: '.block-ActionPrintText',\n content: 'Double click to add the block',\n },\n { // 6\n selector: '.button-js-code',\n content: 'Check the script',\n },\n { // 7\n selector: '.button-js-code',\n content: 'Switch back to rules',\n },\n { // 8\n selector: '.button-save',\n content: 'Save the script',\n }\n];\n\nexport {STEPS};\n\nexport default steps;","import React, { PureComponent, Fragment } from 'react';\nimport cls from './style.module.scss';\n\nimport { Menu, MenuItem } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\n\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\nimport DialogError from '@iobroker/adapter-react-v5/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\n\nimport CustomButton from '../CustomButton';\nimport CustomCheckbox from '../CustomCheckbox';\nimport CustomInput from '../CustomInput';\nimport CustomInstance from '../CustomInstance';\nimport CustomModal from '../CustomModal';\nimport CustomSelect from '../CustomSelect';\nimport CustomSlider from '../CustomSlider';\nimport CustomSwitch from '../CustomSwitch';\nimport CustomTime from '../CustomTime';\nimport CustomDate from '../CustomDate';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport utils from '../../helpers/utils';\nimport { STEPS } from '../../helpers/Tour';\n\nclass GenericBlock extends PureComponent {\n constructor(props, item) {\n super(props);\n item = item || {};\n let settings = props.settings || {\n tagCard: item.tagCardArray ? typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0] : '',\n };\n\n if (!settings.tagCard && item.tagCardArray) {\n settings.tagCard = typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0];\n }\n\n this.state = {\n inputs: item.inputs || props.inputs || [],\n name: item.name || props.name || '',\n icon: item.icon || props.icon || '',\n adapter: item.adapter || props.adapter || '',\n helpDialog: item.helpDialog || props.helpDialog || '',\n\n tagCardArray: item.tagCardArray || [],\n\n openTagMenu: false,\n openModal: false,\n iconTag: false,\n error: '',\n helpText: '',\n\n oid: {},\n instanceSelectionOptions: [],\n instanceSelectionDef: '',\n\n hideAttributes: [], // e.g. instance\n\n settings,\n debugMessage: null,\n enableSimulation: this.props.enableSimulation,\n };\n\n this.debugHideTimeout = null;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps || !nextProps.settings) {\n console.log(JSON.stringify(nextProps));\n return;\n }\n\n const settings = JSON.parse(JSON.stringify(nextProps.settings));\n if (!settings.tagCard && this.state.tagCardArray && this.state.tagCardArray.length) {\n settings.tagCard = typeof this.state.tagCardArray[0] !== 'string' ? this.state.tagCardArray[0].title : this.state.tagCardArray[0];\n }\n\n let newState = null;\n\n if (nextProps.onDebugMessage && nextProps.onDebugMessage.blockId === this.props._id) {\n newState = {};\n newState.debugMessage = JSON.parse(JSON.stringify(nextProps.onDebugMessage));\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = setTimeout(() =>\n this.setState({ debugMessage: null }),\n nextProps.onDebugMessage.hideTimeout || 5000);\n }\n\n if (JSON.stringify(settings) !== JSON.stringify(this.state.settings)) {\n newState = newState || {};\n newState.settings = settings;\n }\n\n if (this.state.enableSimulation !== nextProps.enableSimulation) {\n newState = newState || {};\n newState.enableSimulation = nextProps.enableSimulation;\n }\n\n newState && this.setState(newState);\n }\n\n componentWillUnmount() {\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = null;\n }\n\n // called every time, the tagCard changes or at start\n onTagChange(tagCard, cb) {\n // analyse inputs and fill the attributes with default values\n let changed = false;\n let settings = JSON.parse(JSON.stringify(this.state.settings));\n this.state.inputs.forEach(input => {\n if (input.attr && input.defaultValue !== undefined) {\n if (settings[input.attr] === undefined) {\n changed = true;\n settings[input.attr] = input.defaultValue;\n }\n }\n });\n if (changed) {\n this.setState({ settings }, () => cb && cb());\n this.props.onChange(settings);\n } else {\n cb && cb();\n }\n }\n\n // called if trigger added or removed\n onUpdate() {\n // do nothing, but blocks can overwrite it\n }\n\n // called every time if some attribute changes\n onValueChanged(value, attr) {\n // do nothing, but blocks can overwrite it\n }\n\n renderText = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, name, doNotTranslate, doNotTranslateBack } = input;\n return <Fragment key={attr}>\n <div className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n label={utils.getName(name)}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </Fragment>;\n }\n\n renderSwitch = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSwitch\n className={className}\n label=''\n customValue\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderNameText = ({ attr, signature, doNotTranslate, defaultValue }, value) => <div\n className={Utils.clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {value ? (doNotTranslate ? value : I18n.t(value)) : (doNotTranslate ? defaultValue : I18n.t(defaultValue))}\n </div>;\n\n renderNumber = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, openCheckbox, doNotTranslate, doNotTranslateBack } = input;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true;\n }\n return visibility ? <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={Utils.clsx(className, input.className)}\n fullWidth\n autoComplete=\"off\"\n label={input.noHelperText ? '' : 'number'}\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div> : null;\n }\n\n renderColor = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n type=\"color\"\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderCheckbox = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, defaultValue, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={cls.displayFlex}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomCheckbox\n className={className}\n size=\"small\"\n style={{ marginRight: 5 }}\n value={typeof settings[attr] === 'boolean' ? settings[attr] : defaultValue}\n customValue\n onChange={onChange}\n />\n {backText && <div onClick={() => onChange(typeof settings[attr] === 'boolean' ? !settings[attr] : !defaultValue)} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderSlider = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, min, max, step, unit, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={cls.displayFlex} style={{ marginRight: 20 }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSlider\n customValue\n min={min}\n max={max}\n step={step}\n unit={unit}\n className={className}\n autoComplete=\"off\"\n label=\"number\"\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={val => {\n console.log(val);\n onChange(val);\n }}\n />\n {backText && <div style={{ marginLeft: 20 }} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderButton = (input, value, onClick) => {\n const { className } = this.props;\n const { attr, frontText, backText, buttonText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomButton\n label={buttonText}\n fullWidth\n value={value}\n className={className}\n onClick={onClick}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n findIcon = obj => {\n if (!obj) {\n return Promise.resolve(null);\n } else\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n } else if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n return this.props.socket.getObject(newId)\n .then(obj => this.findIcon(obj))\n .catch(() => null);\n }\n }\n\n renderObjectID = (input, value, onChange) => {\n const { attr, openCheckbox, checkReadOnly } = input;\n const { settings } = this.state;\n const showSelectId = this.state[`showSelectId${attr}`];\n const { className, socket } = this.props;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true;\n }\n\n if (settings[attr] && !this.state[settings[attr]]) {\n setTimeout(() => {\n socket.getObject(value)\n .then(obj => {\n this.findIcon(obj)\n .then(icon => this.setState({\n [settings[attr]]: obj,\n [`${settings[attr]}___icon`]: icon,\n error: checkReadOnly && this.lastObjectIdChange && Date.now() - this.lastObjectIdChange < 1000 && obj?.common?.write === false ?\n I18n.t('Read only ID selected: %s', settings[attr]) : '',\n }))\n });\n }, 0);\n }\n\n // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\n {input.title ? <div>{I18n.t(input.title)}</div> : null}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n disabled\n variant=\"outlined\"\n size=\"small\"\n value={value}\n customValue\n />\n <CustomButton\n icon={this.state[`${this.state.settings[input.attr]}___icon`]}\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => {\n const settings = {};\n settings[`showSelectId${attr}`] = true;\n this.setState(settings);\n }}\n />\n </div>\n {this.state[this.state.settings[input.attr]] && <div className={Utils.clsx(cls.nameBlock, cls.displayItalic)}>{Utils.getObjectNameFromObj(this.state[settings[attr]], I18n.getLanguage())}</div>}\n {showSelectId ? <DialogSelectID\n imagePrefix=\"../..\"\n dialogName=\"javascript\"\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly\n selected={value}\n onClose={() => {\n const settings = {};\n settings[`showSelectId${attr}`] = false;\n this.setState(settings);\n }}\n onOk={(selected, name, common) => {\n const settings = {};\n settings[`showSelectId${attr}`] = false;\n this.setState(settings, () =>\n // read type of object\n socket.getObject(selected)\n .then(obj => {\n this.lastObjectIdChange = Date.now();\n onChange({\n [attr]: selected,\n [`${attr}Role`]: obj.common.role,\n [`${attr}Type`]: obj.common.type,\n [`${attr}Unit`]: obj.common.unit,\n [`${attr}States`]: obj.common.states,\n [`${attr}Min`]: obj.common.min,\n [`${attr}Max`]: obj.common.max,\n [`${attr}Step`]: obj.common.step,\n [`${attr}Def`]: obj.common.def,\n [`${attr}Write`]: obj.common.write,\n [`${attr}Read`]: obj.common.read,\n }, null, () =>\n this.props.setOnUpdate && this.props.setOnUpdate(true))\n }))}\n }\n /> : null}\n </div> : null;\n }\n\n renderIconTag = () => {\n return <div\n className={cls.iconTag}\n onClick={e => {\n if (this.state.settings.tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}>\n {this.state.settings.tagCard}\n </div>;\n }\n\n renderTime = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomTime\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderSelect = (input, value, onChange) => {\n const { className } = this.props;\n const { name, options, frontText, backText, attr, multiple, doNotTranslate, doNotTranslate2, doNotTranslateBack } = input;\n return <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{I18n.t(frontText)}</div>}\n <CustomSelect\n attr={attr}\n doNotTranslate={doNotTranslate}\n doNotTranslate2={doNotTranslate2}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n multiple={multiple}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderInstance = (input, value, onChange) => {\n const { className, socket } = this.props;\n const { name, options, frontText, backText, attr, adapter, doNotTranslate, doNotTranslateBack } = input;\n if (this.state.hideAttributes.includes(attr)) {\n return null;\n }\n return <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInstance\n attr={attr}\n socket={socket}\n adapter={adapter}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n customValue\n onInstanceHide={value => this.setState({ hideAttributes: [...this.state.hideAttributes, attr] }, () => onChange(value))} // hide instance if only exactly one exists\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderDialog = (input, value, onChange) => {\n const { onShowDialog, frontText, backText, attr, icon, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <MaterialDynamicIcon\n iconName={icon}\n className={Utils.clsx(cls.iconDialog)}\n onClick={e => onShowDialog && onShowDialog()}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderModalInput = (input, value, onChange) => {\n const { openModal } = this.state;\n const { className } = this.props;\n const { attr, nameBlock, frontText, backText, noTextEdit, doNotTranslate, doNotTranslateBack} = input;\n return <div key={attr}>\n <div className={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n disabled={!!noTextEdit}\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={onChange}\n customValue\n />\n <CustomButton\n square\n // fullWidth\n style={{ marginLeft: 5 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openModal: true })}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {openModal ? <CustomModal\n open\n onApply={val =>\n this.setState({ openModal: false }, () =>\n val !== null && val !== undefined && onChange(val))}\n onClose={() => this.setState({ openModal: false })}\n defaultValue={value}\n textInput\n /> : null}\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n };\n\n renderDate = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomDate\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n static getReplacesInText(context) {\n let value = '';\n if (context.trigger?.oidType) {\n value = '.replace(/%s/g, obj.state.val).replace(/%id/g, obj.id).replace(/%name/g, obj.common && obj.common.name).replace(/%old/g, obj.oldState.val)';\n } else if (context.conditionsStates.length) {\n value = `.replace(/%s/g, ${context.conditionsStates[0].name}).replace(/%id/g, \"${context.conditionsStates[0].id}\")`;\n }\n return value;\n }\n\n /////////////////////////////\n renderTags = () => {\n let { tagCardArray, openTagMenu } = this.state;\n let { tagCard } = this.state.settings;\n let result = tagCard !== '=' && tagCard !== '<>' && tagCard !== '>=' && tagCard !== '()' && tagCard !== '.' && tagCard !== '<=' && tagCard !== '<' && tagCard !== '>' ? I18n.t(tagCard) : tagCard;\n if (tagCardArray.length >= 3) {\n result = <div>\n <div aria-controls=\"simple-menu\" aria-haspopup=\"true\"\n onClick={e => {\n this.setState({ openTagMenu: e.currentTarget }, () => {\n this.props.isTourOpen &&\n this.props.tourStep === STEPS.openTagsMenu &&\n setTimeout(() => this.props.setTourStep(STEPS.selectIntervalTag), 300);\n });\n }}>{result}</div>\n <Menu\n id=\"simple-menu\"\n anchorEl={openTagMenu}\n keepMounted\n open={Boolean(openTagMenu)}\n onClose={() => this.setState({ openTagMenu: null })}\n >\n {tagCardArray.map(el => {\n let tag = el;\n if (typeof el !== 'string') {\n tag = el.title;\n }\n return (\n <MenuItem\n key={tag}\n selected={tag === tagCard}\n className={'tag-card-' + tag}\n style={{ placeContent: 'space-between' }}\n onClick={() => {\n const settings = { ...this.state.settings, tagCard: tag };\n this.setState({ openTagMenu: null, settings }, () => {\n this.props.onChange(settings);\n this.onTagChange(tag);\n });\n (this.props.isTourOpen &&\n (this.props.tourStep === STEPS.openTagsMenu ||\n this.props.tourStep === STEPS.selectIntervalTag) &&\n tag === 'interval' &&\n setTimeout(() => this.props.setTourStep(STEPS.selectActions), 500));\n\n }}>{tag.search(/>|<|<>|<=|>=|=/) !== -1 ? tag : I18n.t(tag)}{typeof el !== 'string' && el.title2 && <div style={{ marginLeft: 4 }}>{I18n.t(el.title2)}</div>}\n </MenuItem>\n );\n })}\n </Menu>\n </div>;\n }\n\n return result;\n };\n\n onChangeTag = () => {\n const { tagCardArray, settings, settings: { tagCard } } = this.state;\n let newTagCardArray = [...tagCardArray]\n if (typeof newTagCardArray[0] !== 'string') {\n newTagCardArray = newTagCardArray.map(el => el.title);\n }\n\n if (tagCard && newTagCardArray.length < 3) {\n const newSettings = { ...settings };\n const newTagCard = newTagCardArray[(newTagCardArray.indexOf(tagCard) + 1) % newTagCardArray.length]\n newSettings.tagCard = newTagCard;\n this.setState({ settings: newSettings }, () => {\n this.props.onChange(newSettings);\n this.onTagChange(newTagCard);\n });\n }\n };\n\n componentDidMount = () => {\n this.onTagChange();\n // detect changes\n };\n\n componentDidUpdate = prevProps => {\n if (this.props.acceptedBy !== 'triggers' && this.props.onUpdate) {\n setTimeout(() => this.onUpdate(), 0);\n }\n }\n\n onChangeInput = attribute => {\n return (value, attr, cb) => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n\n if (typeof value === 'object' && (!attr || typeof attr === 'function')) {\n Object.keys(value).forEach(_attr => settings[_attr] = value[_attr]);\n } else {\n settings[attr || attribute] = value;\n }\n settings.id = this.getData().id;\n settings._id = this.props._id;\n\n this.setState({ settings }, () => {\n this.onValueChanged(value, attr || attribute);\n this.props.onChange(settings);\n cb && cb();\n });\n }\n }\n\n renderSpecific() {\n return null; // it can be overloaded\n }\n\n renderDebugInfo() {\n if (this.state.debugMessage) {\n return <div className={cls.debugInfo} key={this.state.debugMessage.ts} style={{ opacity: 1, height: 22, bottom: -22 }}>\n {this.renderDebug ? this.renderDebug(this.state.debugMessage) : I18n.t('executed')}\n </div>;\n } else {\n return null;\n }\n }\n\n render = () => {\n const { inputs, name, icon, iconTag, settings, adapter, settings: { tagCard }, helpDialog } = this.state;\n const { socket, notFound } = this.props;\n\n return <Fragment>\n {iconTag ? this.renderIconTag() :\n <MaterialDynamicIcon\n iconName={icon}\n className={Utils.clsx(cls.iconThemCard, tagCard && this.state.tagCardArray.length && cls.iconThemCardSelectable)}\n adapter={adapter}\n socket={socket}\n onClick={e => {\n if (tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}\n />}\n <div className={cls.blockName}>\n <span className={cls.nameCard}>\n {I18n.t(name)}\n {!!notFound ? I18n.t(`%s not found`, settings.id) : ''}\n {helpDialog ? <IconButton className={cls.iconHelp} size=\"small\" onClick={() => this.setState({ helpText: I18n.t(helpDialog) })}><IconHelp /></IconButton> : null}\n </span>\n {inputs.filter(({ nameRender }) => this[nameRender])\n .map(input => {\n const { nameRender, defaultValue, attr, options } = input;\n return this[nameRender](\n input,\n settings[attr] !== undefined ? settings[attr] : defaultValue,\n this.onChangeInput(attr),\n options || []\n );\n })}\n </div>\n {tagCard && <div className={cls.controlMenuTop} style={{ opacity: 1, height: 22, top: -22 }}>\n <div onClick={() => this.onChangeTag()} className={Utils.clsx(cls.tagCard, 'tag-card')}>{this.renderTags()}</div>\n </div>}\n {this.renderDebugInfo()}\n {this.state.error ? <DialogError title={I18n.t('Warning')} text={this.state.error} onClose={() => this.setState({ error: '' })} /> : null}\n {this.state.helpText ? <DialogMessage title={I18n.t('Instructions')} text={this.state.helpText} onClose={() => this.setState({ helpText: '' })} /> : null}\n {this.renderSpecific()}\n </Fragment>;\n };\n}\n\nexport default GenericBlock;","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\n// copied from https://github.com/ioBroker/ioBroker.sayit/blob/master/admin/blockly.js#L37\nconst sayitEngines = {\n 'en': { name: 'Google - English', engine: 'google', params: [] },\n 'de': { name: 'Google - Deutsch', engine: 'google', params: [] },\n 'ru': { name: 'Google - Русский', engine: 'google', params: [] },\n 'it': { name: 'Google - Italiano', engine: 'google', params: [] },\n 'es': { name: 'Google - Espaniol', engine: 'google', params: [] },\n 'fr': { name: 'Google - Français', engine: 'google', params: [] },\n 'ru_YA': { name: 'Yandex - Русский', engine: 'yandex', params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed'] },\n 'ru_YA_CLOUD': { name: 'Yandex Cloud - Русский', engine: 'yandexCloud', params: ['key', 'folderID', 'voice', 'emotion'], voice: ['alyss', 'oksana', 'jane', 'zahar'], emotion: [ 'good', 'neutral', 'evil'] },\n\n 'en-US': { name: 'PicoTTS - Englisch US', engine: 'PicoTTS', params: [] },\n 'en-GB': { name: 'PicoTTS - Englisch GB', engine: 'PicoTTS', params: [] },\n 'de-DE': { name: 'PicoTTS - Deutsch', engine: 'PicoTTS', params: [] },\n 'it-IT': { name: 'PicoTTS - Italiano', engine: 'PicoTTS', params: [] },\n 'es-ES': { name: 'PicoTTS - Espaniol', engine: 'PicoTTS', params: [] },\n 'fr-FR': { name: 'PicoTTS - Français', engine: 'PicoTTS', params: [] },\n\n 'ru-RU_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'ru-RU', ename: 'Tatyana', ssml: true, name: 'Cloud - Русский - Татьяна' },\n 'ru-RU_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'ru-RU', ename: 'Maxim', ssml: true, name: 'Cloud - Русский - Максим' },\n 'de-DE_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'de-DE', ename: 'Marlene', ssml: true, name: 'Cloud - Deutsch - Marlene' },\n 'de-DE_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'de-DE', ename: 'Hans', ssml: true, name: 'Cloud - Deutsch - Hans' },\n 'en-US_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Salli', ssml: true, name: 'Cloud - en-US - Female - Salli' },\n 'en-US_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Joey', ssml: true, name: 'Cloud - en-US - Male - Joey' },\n 'da-DK_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'da-DK', ename: 'Naja', ssml: true, name: 'Cloud - da-DK - Female - Naja' },\n 'da-DK_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'da-DK', ename: 'Mads', ssml: true, name: 'Cloud - da-DK - Male - Mads' },\n 'en-AU_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-AU', ename: 'Nicole', ssml: true, name: 'Cloud - en-AU - Female - Nicole' },\n 'en-AU_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-AU', ename: 'Russell', ssml: true, name: 'Cloud - en-AU - Male - Russell' },\n 'en-GB_CLOUD_Female_Amy': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-GB', ename: 'Amy', ssml: true, name: 'Cloud - en-GB - Female - Amy' },\n 'en-GB_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-GB', ename: 'Brian', ssml: true, name: 'Cloud - en-GB - Male - Brian' },\n 'en-GB_CLOUD_Female_Emma': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-GB', ename: 'Emma', ssml: true, name: 'Cloud - en-GB - Female - Emma' },\n 'en-GB-WLS_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-GB-WLS', ename: 'Gwyneth', ssml: true, name: 'Cloud - en-GB-WLS - Female - Gwyneth' },\n 'en-GB-WLS_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-GB-WLS', ename: 'Geraint', ssml: true, name: 'Cloud - en-GB-WLS - Male - Geraint' },\n 'cy-GB_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'cy-GB', ename: 'Gwyneth', ssml: true, name: 'Cloud - cy-GB - Female - Gwyneth' },\n 'cy-GB_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'cy-GB', ename: 'Geraint', ssml: true, name: 'Cloud - cy-GB - Male - Geraint' },\n 'en-IN_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-IN', ename: 'Raveena', ssml: true, name: 'Cloud - en-IN - Female - Raveena' },\n 'en-US_CLOUD_Male_Chipmunk':{ gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Chipmunk', ssml: true, name: 'Cloud - en-US - Male - Chipmunk' },\n 'en-US_CLOUD_Male_Eric': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Eric', ssml: true, name: 'Cloud - en-US - Male - Eric' },\n 'en-US_CLOUD_Female_Ivy': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Ivy', ssml: true, name: 'Cloud - en-US - Female - Ivy' },\n 'en-US_CLOUD_Female_Jennifer': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Jennifer', ssml: true, name: 'Cloud - en-US - Female - Jennifer' },\n 'en-US_CLOUD_Male_Justin': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Justin', ssml: true, name: 'Cloud - en-US - Male - Justin' },\n 'en-US_CLOUD_Female_Kendra': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Kendra', ssml: true, name: 'Cloud - en-US - Female - Kendra' },\n 'en-US_CLOUD_Female_Kimberly': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'en-US', ename: 'Kimberly', ssml: true, name: 'Cloud - en-US - Female - Kimberly' },\n 'es-ES_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'es-ES', ename: 'Conchita', ssml: true, name: 'Cloud - es-ES - Female - Conchita' },\n 'es-ES_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'es-ES', ename: 'Enrique', ssml: true, name: 'Cloud - es-ES - Male - Enrique' },\n 'es-US_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'es-US', ename: 'Penelope', ssml: true, name: 'Cloud - es-US - Female - Penelope' },\n 'es-US_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'es-US', ename: 'Miguel', ssml: true, name: 'Cloud - es-US - Male - Miguel' },\n 'fr-CA_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'fr-CA', ename: 'Chantal', ssml: true, name: 'Cloud - fr-CA - Female - Chantal' },\n 'fr-FR_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'fr-FR', ename: 'Celine', ssml: true, name: 'Cloud - fr-FR - Female - Celine' },\n 'fr-FR_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'fr-FR', ename: 'Mathieu', ssml: true, name: 'Cloud - fr-FR - Male - Mathieu' },\n 'is-IS_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'is-IS', ename: 'Dora', ssml: true, name: 'Cloud - is-IS - Female - Dora' },\n 'is-IS_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'is-IS', ename: 'Karl', ssml: true, name: 'Cloud - is-IS - Male - Karl' },\n 'it-IT_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'it-IT', ename: 'Carla', ssml: true, name: 'Cloud - it-IT - Female - Carla' },\n 'it-IT_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'it-IT', ename: 'Giorgio', ssml: true, name: 'Cloud - it-IT - Male - Giorgio' },\n 'nb-NO_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'nb-NO', ename: 'Liv', ssml: true, name: 'Cloud - nb-NO - Female - Liv' },\n 'nl-NL_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'nl-NL', ename: 'Lotte', ssml: true, name: 'Cloud - nl-NL - Female - Lotte' },\n 'nl-NL_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'nl-NL', ename: 'Ruben', ssml: true, name: 'Cloud - nl-NL - Male - Ruben' },\n 'pl-PL_CLOUD_Female_Agnieszka': { gender: 'Female', engine: 'cloud',params: ['cloud'], language: 'pl-PL', ename: 'Agnieszka', ssml: true, name: 'Cloud - pl-PL - Female - Agnieszka' },\n 'pl-PL_CLOUD_Male_Jacek': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'pl-PL', ename: 'Jacek', ssml: true, name: 'Cloud - pl-PL - Male - Jacek' },\n 'pl-PL_CLOUD_Female_Ewa': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'pl-PL', ename: 'Ewa', ssml: true, name: 'Cloud - pl-PL - Female - Ewa' },\n 'pl-PL_CLOUD_Male_Jan': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'pl-PL', ename: 'Jan', ssml: true, name: 'Cloud - pl-PL - Male - Jan' },\n 'pl-PL_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'pl-PL', ename: 'Maja', ssml: true, name: 'Cloud - pl-PL - Female - Maja' },\n 'pt-BR_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'pt-BR', ename: 'Vitoria', ssml: true, name: 'Cloud - pt-BR - Female - Vitoria' },\n 'pt-BR_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'pt-BR', ename: 'Ricardo', ssml: true, name: 'Cloud - pt-BR - Male - Ricardo' },\n 'pt-PT_CLOUD_Male': { gender: 'Male', engine: 'cloud', params: ['cloud'], language: 'pt-PT', ename: 'Cristiano', ssml: true, name: 'Cloud - pt-PT - Male - Cristiano' },\n 'pt-PT_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'pt-PT', ename: 'Ines', ssml: true, name: 'Cloud - pt-PT - Female - Ines' },\n 'ro-RO_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'ro-RO', ename: 'Carmen', ssml: true, name: 'Cloud - ro-RO - Female - Carmen' },\n 'sv-SE_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'sv-SE', ename: 'Astrid', ssml: true, name: 'Cloud - sv-SE - Female - Astrid' },\n 'tr-TR_CLOUD_Female': { gender: 'Female', engine: 'cloud', params: ['cloud'], language: 'tr-TR', ename: 'Filiz', ssml: true, name: 'Cloud - tr-TR - Female - Filiz' },\n\n 'ru-RU_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'ru-RU', ename: 'Tatyana', ssml: true, name: 'AWS Polly - Русский - Татьяна' },\n 'ru-RU_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'ru-RU', ename: 'Maxim', ssml: true, name: 'AWS Polly - Русский - Максим' },\n 'de-DE_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'de-DE', ename: 'Marlene', ssml: true, name: 'AWS Polly - Deutsch - Marlene' },\n 'de-DE_AP_Female_Vicky': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'de-DE', ename: 'Vicky', ssml: true, name: 'AWS Polly - Deutsch - Vicky' },\n 'de-DE_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'de-DE', ename: 'Hans', ssml: true, name: 'AWS Polly - Deutsch - Hans' },\n 'en-US_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Salli', ssml: true, name: 'AWS Polly - en-US - Female - Salli' },\n 'en-US_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Joey', ssml: true, name: 'AWS Polly - en-US - Male - Joey' },\n 'da-DK_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'da-DK', ename: 'Naja', ssml: true, name: 'AWS Polly - da-DK - Female - Naja' },\n 'da-DK_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'da-DK', ename: 'Mads', ssml: true, name: 'AWS Polly - da-DK - Male - Mads' },\n 'en-AU_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-AU', ename: 'Nicole', ssml: true, name: 'AWS Polly - en-AU - Female - Nicole' },\n 'en-AU_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-AU', ename: 'Russell', ssml: true, name: 'AWS Polly - en-AU - Male - Russell' },\n 'en-GB_AP_Female_Amy': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-GB', ename: 'Amy', ssml: true, name: 'AWS Polly - en-GB - Female - Amy' },\n 'en-GB_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-GB', ename: 'Brian', ssml: true, name: 'AWS Polly - en-GB - Male - Brian' },\n 'en-GB_AP_Female_Emma': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-GB', ename: 'Emma', ssml: true, name: 'AWS Polly - en-GB - Female - Emma' },\n 'en-GB-WLS_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-GB-WLS', ename: 'Gwyneth', ssml: true, name: 'AWS Polly - en-GB-WLS - Female - Gwyneth' },\n 'en-GB-WLS_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-GB-WLS', ename: 'Geraint', ssml: true, name: 'AWS Polly - en-GB-WLS - Male - Geraint' },\n 'cy-GB_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'cy-GB', ename: 'Gwyneth', ssml: true, name: 'AWS Polly - cy-GB - Female - Gwyneth' },\n 'cy-GB_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'cy-GB', ename: 'Geraint', ssml: true, name: 'AWS Polly - cy-GB - Male - Geraint' },\n 'en-IN_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-IN', ename: 'Raveena', ssml: true, name: 'AWS Polly - en-IN - Female - Raveena' },\n 'en-US_AP_Male_Chipmunk': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Chipmunk', ssml: true, name: 'AWS Polly - en-US - Male - Chipmunk' },\n 'en-US_AP_Male_Eric': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Eric', ssml: true, name: 'AWS Polly - en-US - Male - Eric' },\n 'en-US_AP_Female_Ivy': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Ivy', ssml: true, name: 'AWS Polly - en-US - Female - Ivy' },\n 'en-US_AP_Female_Jennifer': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Jennifer', ssml: true, name: 'AWS Polly - en-US - Female - Jennifer' },\n 'en-US_AP_Male_Justin': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Justin', ssml: true, name: 'AWS Polly - en-US - Male - Justin' },\n 'en-US_AP_Female_Kendra': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Kendra', ssml: true, name: 'AWS Polly - en-US - Female - Kendra' },\n 'en-US_AP_Female_Kimberly': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'en-US', ename: 'Kimberly', ssml: true, name: 'AWS Polly - en-US - Female - Kimberly' },\n 'es-ES_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'es-ES', ename: 'Conchita', ssml: true, name: 'AWS Polly - es-ES - Female - Conchita' },\n 'es-ES_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'es-ES', ename: 'Enrique', ssml: true, name: 'AWS Polly - es-ES - Male - Enrique' },\n 'es-US_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'es-US', ename: 'Penelope', ssml: true, name: 'AWS Polly - es-US - Female - Penelope' },\n 'es-US_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'es-US', ename: 'Miguel', ssml: true, name: 'AWS Polly - es-US - Male - Miguel' },\n 'fr-CA_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'fr-CA', ename: 'Chantal', ssml: true, name: 'AWS Polly - fr-CA - Female - Chantal' },\n 'fr-FR_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'fr-FR', ename: 'Celine', ssml: true, name: 'AWS Polly - fr-FR - Female - Celine' },\n 'fr-FR_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'fr-FR', ename: 'Mathieu', ssml: true, name: 'AWS Polly - fr-FR - Male - Mathieu' },\n 'is-IS_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'is-IS', ename: 'Dora', ssml: true, name: 'AWS Polly - is-IS - Female - Dora' },\n 'is-IS_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'is-IS', ename: 'Karl', ssml: true, name: 'AWS Polly - is-IS - Male - Karl' },\n 'it-IT_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'it-IT', ename: 'Carla', ssml: true, name: 'AWS Polly - it-IT - Female - Carla' },\n 'it-IT_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'it-IT', ename: 'Giorgio', ssml: true, name: 'AWS Polly - it-IT - Male - Giorgio' },\n 'nb-NO_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'nb-NO', ename: 'Liv', ssml: true, name: 'AWS Polly - nb-NO - Female - Liv' },\n 'nl-NL_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'nl-NL', ename: 'Lotte', ssml: true, name: 'AWS Polly - nl-NL - Female - Lotte' },\n 'nl-NL_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'nl-NL', ename: 'Ruben', ssml: true, name: 'AWS Polly - nl-NL - Male - Ruben' },\n 'pl-PL_AP_Female_Agnieszka':{ gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pl-PL', ename: 'Agnieszka', ssml: true, name: 'AWS Polly - pl-PL - Female - Agnieszka' },\n 'pl-PL_AP_Male_Jacek': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pl-PL', ename: 'Jacek', ssml: true, name: 'AWS Polly - pl-PL - Male - Jacek' },\n 'pl-PL_AP_Female_Ewa': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pl-PL', ename: 'Ewa', ssml: true, name: 'AWS Polly - pl-PL - Female - Ewa' },\n 'pl-PL_AP_Male_Jan': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pl-PL', ename: 'Jan', ssml: true, name: 'AWS Polly - pl-PL - Male - Jan' },\n 'pl-PL_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pl-PL', ename: 'Maja', ssml: true, name: 'AWS Polly - pl-PL - Female - Maja' },\n 'pt-BR_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pt-BR', ename: 'Vitoria', ssml: true, name: 'AWS Polly - pt-BR - Female - Vitoria' },\n 'pt-BR_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pt-BR', ename: 'Ricardo', ssml: true, name: 'AWS Polly - pt-BR - Male - Ricardo' },\n 'pt-PT_AP_Male': { gender: 'Male', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pt-PT', ename: 'Cristiano', ssml: true, name: 'AWS Polly - pt-PT - Male - Cristiano' },\n 'pt-PT_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'pt-PT', ename: 'Ines', ssml: true, name: 'AWS Polly - pt-PT - Female - Ines' },\n 'ro-RO_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'ro-RO', ename: 'Carmen', ssml: true, name: 'AWS Polly - ro-RO - Female - Carmen' },\n 'sv-SE_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'sv-SE', ename: 'Astrid', ssml: true, name: 'AWS Polly - sv-SE - Female - Astrid' },\n 'tr-TR_AP_Female': { gender: 'Female', engine: 'polly', params: ['accessKey', 'secretKey', 'region'], language: 'tr-TR', ename: 'Filiz', ssml: true, name: 'AWS Polly - tr-TR - Female - Filiz' },\n};\n\nclass ActionSayText extends GenericBlock {\n constructor(props) {\n super(props, ActionSayText.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Sayit ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${config.language && config.language !== '_' ? `${config.language};` : ''}${config.volume ? `${config.volume};` : ''}${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tawait setStateAsync(\"${config.instance}.tts.text\", subActionVar${config._id});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Say:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n const lang = I18n.getLanguage();\n const languages = Object.keys(sayitEngines).filter(l => l.startsWith(lang));\n const options = languages.map(lang => ({title: sayitEngines[lang].name, value: lang}));\n options.unshift({title: 'Default', value: '_'});\n\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n adapter: 'sayit',\n defaultValue: 'sayit.0',\n frontText: 'Instance:',\n },\n {\n nameRender: 'renderSelect',\n frontText: 'Language:',\n options,\n defaultValue: '_',\n attr: 'language',\n },\n {\n nameRender: 'renderNameText',\n defaultValue: 'Volume',\n attr: 'textVol',\n },\n {\n nameRender: 'renderSlider',\n attr: 'volume',\n defaultValue: 100,\n min: 0,\n max: 100\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Say It',\n id: 'ActionSayText',\n adapter: 'sayit',\n title: 'Say some text via sayit adapter',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionSayText.getStaticData();\n }\n}\n\nexport default ActionSayText;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionSendEmail extends GenericBlock {\n constructor(props) {\n super(props, ActionSendEmail.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.recipients) {\n return `// no recipients defined'\n_sendToFrontEnd(${config._id}, {text: 'No recipients defined'});`;\n } else {\n return `// Send Email ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance || 'email.0'}\", {\n\\t\\t to: \"${config.recipients || ''}\",\n\\t\\t subject: \"${(config.subject || 'ioBroker').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t text: subActionVar${config._id}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n defaultValue: 'email.0',\n frontText: 'Instance:',\n adapter: 'email',\n },\n {\n attr: 'recipients',\n nameRender: 'renderText',\n defaultValue: 'user@mail.ru',\n frontText: 'To:',\n },\n {\n attr: 'subject',\n nameRender: 'renderText',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Subject:',\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Body:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Send email',\n id: 'ActionSendEmail',\n adapter: 'email',\n title: 'Sends an email',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionSendEmail.getStaticData();\n }\n}\n\nexport default ActionSendEmail;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionTelegram extends GenericBlock {\n constructor(props) {\n super(props, ActionTelegram.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Telegram ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", ${config.user && config.user !== '_' ? `{user: \"${(config.user || '').replace(/\"/g, '\\\\\"')}\", text: subActionVar${config._id}}` : `subActionVar${config._id}`});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'instance') {\n this._setUsers(value);\n }\n }\n\n _setUsers(instance) {\n instance = instance || this.state.settings.instance || 'telegram.0';\n this.cachePromises[instance] = this.cachePromises[instance] || this.props.socket.getState(`${instance}.communicate.users`);\n if (!this.state.settings._id) {\n return this.setState({\n inputs: [\n {\n nameRender: 'renderSelect',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: [{title: 'telegram.0', value: 'telegram.0'}],\n defaultValue: '',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n }\n\n this.cachePromises[instance]\n .then(users => {\n try {\n users = users?.val ? JSON.parse(users.val) : null;\n users = users && Object.keys(users).map(user => ({title: users[user].userName || users[user].firstName, value: user}));\n users = users || [];\n users.unshift({ title: 'all', value: '' });\n } catch (e) {\n users = [{ title: 'all', value: '' }];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: users,\n defaultValue: '_',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n },\n ]\n }, () => super.onTagChange());\n });\n }\n\n onTagChange(tagCard) {\n this._setUsers();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Telegram',\n id: 'ActionTelegram',\n adapter: 'telegram',\n title: 'Sends message via telegram',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionTelegram.getStaticData();\n }\n}\n\nexport default ActionTelegram;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushover extends GenericBlock {\n constructor(props) {\n super(props, ActionPushover.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushover ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}}); \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t sound: \"${config.sound}\",\n\\t\\t priority: ${config.priority}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `Sent: ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushover',\n frontText: 'Instance:',\n defaultValue: 'pushover.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n { value: 'pushover', title: 'pushover' },\n { value: 'bike', title: 'bike' },\n { value: 'bugle', title: 'bugle' },\n { value: 'cashregister', title: 'cashregister' },\n { value: 'classical', title: 'classical' },\n { value: 'cosmic', title: 'cosmic' },\n { value: 'falling', title: 'falling' },\n { value: 'gamelan', title: 'gamelan' },\n { value: 'incoming', title: 'incoming' },\n { value: 'intermission', title: 'intermission' },\n { value: 'magic', title: 'magic' },\n { value: 'mechanical', title: 'mechanical' },\n { value: 'pianobar', title: 'pianobar' },\n { value: 'siren', title: 'siren' },\n { value: 'spacealarm', title: 'spacealarm' },\n { value: 'tugboat', title: 'tugboat' },\n { value: 'alien', title: 'alien' },\n { value: 'climb', title: 'climb' },\n { value: 'persistent', title: 'persistent' },\n { value: 'echo', title: 'echo' },\n { value: 'updown', title: 'updown' },\n { value: 'none', title: 'none' },\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: -1,\n frontText: 'Priority:',\n options: [\n { value: -1, title: 'quiet' },\n { value: 0, title: 'normal' },\n { value: 1, title: 'high-priority' },\n { value: 2, title: 'acknowledgment' },\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushover',\n id: 'ActionPushover',\n adapter: 'pushover',\n title: 'Sends message via pushover',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionPushover.getStaticData();\n }\n}\n\nexport default ActionPushover;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionWhatsappcmb extends GenericBlock {\n constructor(props) {\n super(props, ActionWhatsappcmb.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// whatsapp ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", {text: subActionVar${config._id}${config.phone ? `, phone: \"${config.phone.replace(/\"/g, '\\\\\"')}\"` : ''}});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'whatsapp-cmb',\n frontText: 'Instance:',\n defaultValue: 'whatsapp-cmb.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'phone',\n defaultValue: '',\n frontText: 'Phone:',\n backText: '(optional)',\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Whatsapp-cmb',\n id: 'ActionWhatsappcmb',\n adapter: 'whatsapp-cmb',\n title: 'Sends message via whatsapp-cmb',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionWhatsappcmb.getStaticData();\n }\n}\n\nexport default ActionWhatsappcmb;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushsafer extends GenericBlock {\n constructor(props) {\n super(props, ActionPushsafer.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushsafer ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}}); \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t ${config.device ? `device: \"${config.device}\",` : ''}\n\\t\\t ${config.sound && config.sound !== '_' ? `sound: \"${config.sound}\",` : ''}\n\\t\\t priority: ${config.priority},\n\\t\\t ${config.vibration && config.vibration !== '_' ? `vibration: ${config.vibration},` : ''}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `Sent: ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushsafer',\n frontText: 'Instance:',\n defaultValue: 'pushsafer.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n { value: '_', title: 'Device Default' },\n { value: '0', title: 'Silent' },\n { value: '1', title: 'Ahem (IM)' },\n { value: '2', title: 'Applause (Mail)' },\n { value: '3', title: 'Arrow (Reminder)' },\n { value: '4', title: 'Baby (SMS)' },\n { value: '5', title: 'Bell (Alarm)' },\n { value: '6', title: 'Bicycle (Alarm2)' },\n { value: '7', title: 'Boing (Alarm3)' },\n { value: '8', title: 'Buzzer (Alarm4)' },\n { value: '9', title: 'Camera (Alarm5)' },\n { value: '10', title: 'Car Horn (Alarm6)' },\n { value: '11', title: 'Cash Register (Alarm7)' },\n { value: '12', title: 'Chime (Alarm8)' },\n { value: '13', title: 'Creaky Door (Alarm9)' },\n { value: '14', title: 'Cuckoo Clock (Alarm10)' },\n { value: '15', title: 'Disconnect (Call)' },\n { value: '16', title: 'Dog (Call2)' },\n { value: '17', title: 'Doorbell (Call3)' },\n { value: '18', title: 'Fanfare (Call4)' },\n { value: '19', title: 'Gun Shot (Call5)' },\n { value: '20', title: 'Honk (Call6)' },\n { value: '21', title: 'Jaw Harp (Call7)' },\n { value: '22', title: 'Morse (Call8)' },\n { value: '23', title: 'Electricity (Call9)' },\n { value: '24', title: 'Radio Tuner (Call10)' },\n { value: '25', title: 'Sirens' },\n { value: '26', title: 'Military Trumpets' },\n { value: '27', title: 'Ufo' },\n { value: '28', title: 'Whah Whah Whah' },\n { value: '29', title: 'Man Saying Goodbye' },\n { value: '30', title: 'Man Saying Hello' },\n { value: '31', title: 'Man Saying No' },\n { value: '32', title: 'Man Saying Ok' },\n { value: '33', title: 'Man Saying Ooohhhweee' },\n { value: '34', title: 'Man Saying Warning' },\n { value: '35', title: 'Man Saying Welcome' },\n { value: '36', title: 'Man Saying Yeah' },\n { value: '37', title: 'Man Saying Yes' },\n { value: '38', title: 'Beep short' },\n { value: '39', title: 'Weeeee short' },\n { value: '40', title: 'Cut in and out short' },\n { value: '41', title: 'Finger flicking glas short' },\n { value: '42', title: 'Wa Wa Waaaa short' },\n { value: '43', title: 'Laser short' },\n { value: '44', title: 'Wind Chime short' },\n { value: '45', title: 'Echo short' },\n { value: '46', title: 'Zipper short' },\n { value: '47', title: 'HiHat short' },\n { value: '48', title: 'Beep 2 short' },\n { value: '49', title: 'Beep 3 short' },\n { value: '50', title: 'Beep 4 short' },\n { value: '51', title: 'The Alarm is armed' },\n { value: '52', title: 'The Alarm is disarmed' },\n { value: '53', title: 'The Backup is ready' },\n { value: '54', title: 'The Door is closed' },\n { value: '55', title: 'The Door is opend' },\n { value: '56', title: 'The Window is closed' },\n { value: '57', title: 'The Window is open' },\n { value: '58', title: 'The Light is off' },\n { value: '59', title: 'The Light is on' },\n { value: '60', title: 'The Doorbell rings' },\n { value: '61', title: 'Pager short' },\n { value: '62', title: 'Pager long' },\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: 0,\n frontText: 'Priority:',\n options: [\n { value: -2, title: 'lowest priority' },\n { value: -1, title: 'lower priority' },\n { value: 0, title: 'normal priority' },\n { value: 1, title: 'high priority' },\n { value: 2, title: 'highest priority' },\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'vibration',\n defaultValue: 0,\n frontText: 'Vibration:',\n options: [\n { value: '_', title: 'default' },\n { value: 1, title: '1' },\n { value: 2, title: '2' },\n { value: 3, title: '3' },\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushsafer',\n id: 'ActionPushsafer',\n adapter: 'pushsafer',\n title: 'Sends message via Pushsafer',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionPushsafer.getStaticData();\n }\n}\n\nexport default ActionPushsafer;\n","// eslint-disable-next-line no-unused-vars\n\nconst STANDARD_FUNCTION_STATE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION_STATE_ONCHANGE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\n\nconst STANDARD_FUNCTION_ONCHANGE =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\n\nconst NO_FUNCTION = `\"__%%DEBUG_TRIGGER%%__\";\n__%%CONDITIONS_VARS%%__\nconst _cond = __%%CONDITION%%__;\n\n\"__%%DEBUG_CONDITIONS%%__\";\n\nif (_cond) {\n__%%THEN%%__\n} else {\n__%%ELSE%%__\n}`;\n\nconst DEFAULT_RULE = {\n triggers: [],\n conditions: [[]],\n justCheck: false,\n actions: {\n then: [],\n 'else': []\n }\n};\n\nfunction compileTriggers(json, context, blocks) {\n const triggers = [];\n let jsonTriggers = json.triggers;\n if (!jsonTriggers.length) {\n jsonTriggers = [{id: 'TriggerScriptSave'}];\n }\n\n const vars = [];\n let prelines = [];\n let hist = json.conditions.find(conds => conds.find(cond => cond.tagCard === '()'));\n\n jsonTriggers.forEach((trigger, i) => {\n const found = findBlock(trigger.id, blocks);\n if (found) {\n const _context = {\n trigger,\n condition: {},\n justCheck: hist ? false : (json.justCheck || (!json.conditions.length || !json.conditions[0].length)),\n conditionsDebug: [],\n conditionsVars: [],\n conditionsStates: [],\n };\n const text = found.compile(trigger, _context);\n const conditions = compileConditions(json.conditions, _context, blocks);\n const then = compileActions(json.actions.then, _context, blocks);\n const _else = compileActions(json.actions.else, _context, blocks);\n\n // find indent\n vars.push(`cond${i}`);\n\n if (_context.prelines && _context.prelines.length) {\n _context.prelines.forEach(line => prelines.push(line));\n }\n\n if (text.includes(' __%%CONDITIONS_VARS%%__')) {\n _context.conditionsVars = _context.conditionsVars.map((v, i) => i ? ` ${v}` : v);\n _context.conditionsDebug = _context.conditionsDebug.map((v, i) => i ? ` ${v}` : v);\n }\n\n triggers.push(\n text\n .replace('__%%CONDITIONS_VARS%%__', _context.conditionsVars.join('\\n'))\n .replace('\"__%%DEBUG_CONDITIONS%%__\";', _context.conditionsDebug.join('\\n'))\n .replace('__%%CONDITION%%__', conditions)\n .replace('__%%THEN%%__', then || '// ignore')\n .replace('__%%ELSE%%__', _else || '// ignore')\n .replace(/__%%STATE%%__/g, 'cond' + i)\n );\n }\n });\n\n let text = triggers.join('\\n\\n');\n\n if (!json.justCheck || hist) {\n text = `${vars.map(v => `let ${v} = false;`).join('\\n')}\\n\\n${text}`;\n }\n if (prelines) {\n text = `${prelines.join('\\n')}\\n\\n${text}`;\n }\n\n return text;\n}\n\nfunction findBlock(type, blocks) {\n return blocks.find(block => block.getStaticData && block.getStaticData().id === type);\n}\n\nfunction compileActions(actions, context, blocks) {\n let result = [];\n actions && actions.forEach(action => {\n const found = findBlock(action.id, blocks);\n if (found) {\n result.push(found.compile(action, context));\n }\n });\n return `\\t\\t${result.join('\\n\\n\\t\\t')}` || '';\n}\n\nfunction compileConditions(conditions, context, blocks) {\n let result = [];\n let i = 0;\n conditions && conditions.forEach(ors => {\n if (ors.hasOwnProperty('length') && ors.length) {\n const _ors = [];\n _ors && ors.forEach(block => {\n const found = findBlock(block.id, blocks);\n if (found) {\n context.condition.index = i++;\n _ors.push(found.compile(block, context));\n }\n });\n result.push(`(${_ors.join(') &&\\n (')})`);\n } else {\n const found = findBlock(ors.id, blocks);\n if (found) {\n context.condition.index = i++;\n result.push(found.compile(ors, context));\n }\n }\n });\n\n if (!result.length) {\n return 'true';\n } else\n if (result.length === 1) {\n return result[0] || 'true';\n } else {\n return `(${result.join(') || (')})`;\n }\n}\n\nfunction compile(json, blocks) {\n return compileTriggers(json, null, blocks);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction code2json(code) {\n if (!code) {\n return DEFAULT_RULE;\n } else {\n const lines = code.split('\\n');\n try {\n let json = lines.pop().replace(/^\\/\\//, '');\n json = JSON.parse(json);\n if (!json.triggers) {\n json = DEFAULT_RULE;\n }\n return json;\n } catch (e) {\n return DEFAULT_RULE;\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction json2code(json, blocks) {\n let code = '';\n\n const compiled = compile(json, blocks);\n code += compiled;\n\n code += `\\n/*\\nconst demo = ${JSON.stringify(json, null, 2)\n .replace(/\\*\\//g, '* /')};\\n*/\\n`;\n\n return `${code}\\n//${JSON.stringify(json)}`;\n}\n\nconst Compile = {\n code2json,\n json2code,\n compile,\n STANDARD_FUNCTION,\n STANDARD_FUNCTION_ONCHANGE,\n STANDARD_FUNCTION_STATE,\n STANDARD_FUNCTION_STATE_ONCHANGE,\n NO_FUNCTION,\n};\n\nexport default Compile;","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\nimport Compile from '../../helpers/Compile';\n\nclass TriggerScriptSave extends GenericBlock {\n constructor(props) {\n super(props, TriggerScriptSave.getStaticData());\n }\n\n static compile(config /* , context */) {\n return Compile.NO_FUNCTION.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n }\n\n renderDebug(/* debugMessage */) {\n return I18n.t('Triggered');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNameText',\n defaultValue: 'On script save or adapter start',\n attr: 'script',\n },\n ],\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Start script',\n id: 'TriggerScriptSave',\n icon: 'PlayArrow',\n title: 'Triggers the on script saving or the javascript instance restart',\n }\n }\n\n getData() {\n return TriggerScriptSave.getStaticData();\n }\n}\n\nexport default TriggerScriptSave;\n","import React from 'react';\nimport SunCalc from 'suncalc2';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport CustomInput from '../CustomInput';\nimport CustomButton from '../CustomButton';\nimport CustomModal from '../CustomModal';\n\nimport ComplexCron from '@iobroker/adapter-react-v5/Components/ComplexCron';\nimport Schedule from '@iobroker/adapter-react-v5/Components/Schedule';\nimport convertCronToText from '@iobroker/adapter-react-v5/Components/SimpleCron/cronText';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst DEFAULT_WIZARD = '{\"time\":{\"start\":\"00:00\",\"end\":\"24:00\",\"mode\":\"hours\",\"interval\":1},\"period\":{\"days\":1}}';\n\nclass TriggerScheduleBlock extends GenericBlock {\n constructor(props) {\n super(props, TriggerScheduleBlock.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n let text = '';\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n\n if (config.tagCard === 'interval') {\n text = `setInterval(${func}, ${config.interval || 1} * ${config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000)});`;\n } else if (config.tagCard === 'cron') {\n text = `schedule(\"${config.cron}\", ${func});`;\n } else if (config.tagCard === 'at') {\n const [hours, minutes] = (config.at || '').split(':');\n let dow = '*';\n if (config?.dow?.length && !config.dow.includes('_')) {\n const _dow = [...config.dow].map(item => parseInt(item, 10));\n _dow.sort();\n\n let intervals = [];\n let start = _dow[0];\n let i = 1\n for (; i < _dow.length; i++) {\n if (_dow[i] - _dow[i - 1] > 1) {\n if (start === _dow[i - 1]) {\n intervals.push(start);\n } else if (_dow[i - 1] - start === 1) {\n intervals.push(start + ',' + _dow[i - 1]);\n } else {\n intervals.push(start + '-' + _dow[i - 1]);\n }\n\n start = _dow[i];\n } else if (i === _dow.length - 1) {\n if (start === _dow[i - 1] || _dow[i] - start === 1) {\n intervals.push(start + ',' + _dow[i]);\n } else {\n intervals.push(start + '-' + _dow[i]);\n }\n }\n }\n\n dow = intervals.join(',')\n }\n text = `schedule(\"${minutes || '0'} ${hours || '0'} * * ${dow}\", ${func});`;\n } else if (config.tagCard === 'astro') {\n text = `schedule({astro: \"${config.astro}\", shift: ${config.offset ? config.offsetValue : 0}}, ${func});`;\n } else if (config.tagCard === 'wizard') {\n text = `schedule('${config.wizard}', ${func});`;\n }\n\n return text;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${TriggerScheduleBlock._time2String(sunValue[name])}]`,\n order: sunValue ? TriggerScheduleBlock._time2String(sunValue[name]) : '??:??',\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(at ${TriggerScheduleBlock._time2String(astroTime)})`; // translate\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n frontText: 'at',\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon',\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes', // translate\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n frontText: 'at', // translate\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon',\n },\n {\n backText: 'with offset', // translate\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n async _setInterval(interval) {\n interval = parseInt(interval || this.state.settings.interval, 10) || 30;\n let options;\n if (interval === 1) {\n options = [\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' },\n ];\n } else {\n options = [\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' },\n ];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n prefix: {\n en: 'every',\n },\n attr: 'interval',\n frontText: 'every',\n defaultValue: 30,\n className: 'block-input-interval',\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 's',\n options,\n }\n ]\n }, () => super.onTagChange());\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onValueChanged(value, attr) {\n if (this.state.settings.tagCard === 'astro') {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n } else if (this.state.settings.tagCard === 'interval') {\n if (attr === 'interval') {\n this._setInterval(value);\n }\n }\n }\n\n renderCron(input, value, onChange) {\n const { className } = this.props;\n let textCron = '';\n const { settings } = this.state;\n const { attr } = input;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'baseline' }}>\n <div style={{ width: '100%' }}>\n {this.renderText({\n attr: attr,\n defaultValue: value\n }, !!settings[attr] ? settings[attr] : value, onChange)}\n </div>\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={async () => {\n await onChange(textCron, attr);\n await onChange(convertCronToText(textCron, I18n.getLanguage()), 'addText');\n this.setState({ openDialog: false });\n }}\n onClose={() => this.setState({ openDialog: false })}>\n <ComplexCron\n cronExpression={!!settings[attr] ? settings[attr] : ''}\n onChange={el => textCron = el}\n language={I18n.getLanguage()}\n />\n </CustomModal>\n {this.renderNameText({\n defaultValue: I18n.t('every hour at 0 minutes'),\n attr: 'addText',\n signature: true,\n doNotTranslate: true,\n }, !!settings['addText'] ? settings['addText'] : I18n.t('every hour at 0 minutes'), onChange)}\n </div>;\n }\n\n renderWizard(input, value, onChange) {\n const { className } = this.props;\n const { attr } = input;\n let wizardText = '';\n let wizard = null;\n\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'center', marginTop: 7 }}>\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n // disabled\n variant=\"outlined\"\n size=\"small\"\n multiline\n rows={2}\n value={this.state.settings[`${attr}Text`]}\n onChange={(el) => onChange(el)}\n customValue\n />\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={() =>\n this.setState({ openDialog: false }, () =>\n onChange({\n [`${attr}Text`]: wizardText,\n [attr]: wizard,\n }))}\n onClose={() => this.setState({ openDialog: false })}>\n <Schedule onChange={(val, text) => {\n wizardText = text;\n wizard = typeof val === 'object' ? JSON.parse(JSON.stringify(val)) : JSON.parse(val);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n wizard = JSON.stringify(wizard);\n }} />\n </CustomModal>\n </div>;\n }\n\n onTagChange(tagCard) {\n tagCard = tagCard || this.state.settings.tagCard;\n switch (tagCard) {\n case 'interval':\n this._setInterval();\n break;\n\n case 'cron':\n this.setState({\n inputs: [\n {\n nameRender: 'renderCron',\n attr: 'cron',\n defaultValue: '0 * * * *',\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'wizard':\n const wizard = JSON.parse(DEFAULT_WIZARD);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderWizard',\n attr: 'wizard',\n defaultValue: JSON.stringify(wizard),\n },\n ],\n }, () => super.onTagChange(null, () => {\n const wizardText = Schedule.state2text(this.state.settings.wizard || wizard);\n if (this.state.settings.wizardText !== wizardText) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n settings.wizardText = wizardText;\n this.setState({ settings });\n this.props.onChange(settings);\n }\n }));\n break;\n\n case 'at':\n this.setState({\n inputs: [\n {\n nameRender: 'renderTime',\n prefix: 'at',\n attr: 'at',\n defaultValue: '07:30',\n },\n {\n nameRender: 'renderSelect',\n attr: 'dow',\n default: '',\n multiple: true,\n defaultValue: ['_', '1', '2', '3', '4', '5', '6', '0'],\n options: [\n { value: '_', title: 'Every day', only: true },\n { value: '1', title: 'Monday', titleShort: 'Mo' },\n { value: '2', title: 'Tuesday', titleShort: 'Tu' },\n { value: '3', title: 'Wednesday', titleShort: 'We' },\n { value: '4', title: 'Thursday', titleShort: 'Th' },\n { value: '5', title: 'Friday', titleShort: 'Fr' },\n { value: '6', title: 'Saturday', titleShort: 'Sa' },\n { value: '0', title: 'Sunday', titleShort: 'Su' },\n ]\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'astro':\n this._setAstro();\n break;\n\n default:\n break;\n }\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Schedule',\n id: 'TriggerScheduleBlock',\n icon: 'AccessTime',\n tagCardArray: ['cron', 'wizard', 'interval', 'at', 'astro'],\n title: 'Triggers the rule periodically or on some specific time',\n }\n }\n\n getData() {\n return TriggerScheduleBlock.getStaticData();\n }\n}\n\nexport default TriggerScheduleBlock;\n","import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport Button from '@mui/material/Button';\nimport Switch from '@mui/material/Switch';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Slide from '@mui/material/Slide';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdCheck as IconCheck } from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323',\n },\n valueNotAck: {\n color: '#12ac15',\n },\n});\n\nconst Transition = React.forwardRef((props, ref) =>\n <Slide direction=\"up\" ref={ref} {...props} />);\n\nclass TriggerState extends GenericBlock {\n constructor(props) {\n super(props, TriggerState.getStaticData());\n this.inputRef = React.createRef();\n }\n\n static compile(config, context) {\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {val: obj.state.val, ack: obj.state.ack, valOld: obj.oldState && obj.oldState.val, ackOld: obj.oldState && obj.oldState.ack})`);\n return `on({id: \"${config.oid || ''}\", change: \"${config.tagCard === 'on update' ? 'any' : 'ne'}\"}, ${func});`\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n if (debugMessage.data.valOld !== undefined) {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ackOld ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.valOld)}</span> → <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n } else {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n }\n }\n\n onWriteValue() {\n this.setState({openSimulate: false});\n let simulateValue = this.state.simulateValue;\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}_ack`, this.state.simulateAck);\n\n if (this.state.settings.oidType === 'boolean') {\n simulateValue = simulateValue === true || simulateValue === 'true' || simulateValue === '1';\n } else if (this.state.settings.oidType === 'number') {\n simulateValue = parseFloat(simulateValue) || 0;\n }\n\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}`, simulateValue);\n this.props.socket.setState(this.state.settings.oid, { val: simulateValue, ack: !!this.state.simulateAck });\n }\n\n renderWriteState() {\n return <>\n <Button\n disabled={!this.state.settings.oid || !this.state.enableSimulation}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n this.setState({\n openSimulate: true,\n simulateValue: this.state.settings.oidType === 'boolean' ?\n window.localStorage.getItem(`javascript.app.${this.state.settings.oid}`) === 'true' :\n (window.localStorage.getItem(`javascript.app.${this.state.settings.oid}`) || ''),\n simulateAck: window.localStorage.getItem(`javascript.app.${this.state.settings.oid}_ack`) === 'true'\n });\n setTimeout(() => this.inputRef.current?.focus(), 200);\n }}>{I18n.t('Simulate')}</Button>\n <Dialog\n open={!!this.state.openSimulate}\n TransitionComponent={Transition}\n keepMounted\n onClose={() => this.setState({ openSimulate: false })}\n aria-labelledby=\"simulate-dialog-slide-title\"\n aria-describedby=\"simulate-dialog-slide-description\"\n >\n <DialogTitle id=\"simulate-dialog-slide-title\">{I18n.t('Trigger with value')}</DialogTitle>\n <DialogContent>\n {this.state.settings.oidType === 'boolean' ?\n <FormControlLabel\n control={<Switch\n inputRef={this.inputRef}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={!!this.state.simulateValue}\n onChange={e => this.setState({ simulateValue: e.target.checked })}\n />}\n label={I18n.t('Value')}\n />\n : <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={I18n.t('Value')}\n fullWidth\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={this.state.simulateValue}\n onChange={e => this.setState({ simulateValue: e.target.value })}\n />\n }\n <br/>\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.simulateAck}\n onChange={e => this.setState({ simulateAck: e.target.checked })}\n color=\"primary\"\n />\n }\n label={I18n.t('Ack')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.onWriteValue()}\n color=\"primary\">\n <IconCheck />{I18n.t('Write')}\n </Button>\n <Button color=\"grey\"\n variant=\"contained\"\n onClick={() => this.setState({ openSimulate: false })}\n >\n <IconCancel />{I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n {\n nameRender: 'renderWriteState',\n },\n ]\n }, () => {\n super.onTagChange();\n });\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'State',\n id: 'TriggerState',\n icon: 'FlashOn',\n tagCardArray: ['on change', 'on update'],\n title: 'Triggers the rule on update or change of some state', // translate\n }\n }\n\n getData() {\n return TriggerState.getStaticData();\n }\n}\nexport default withStyles(styles)(TriggerState);\n","import React from 'react';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport GenericBlock from '../GenericBlock';\n\nimport HysteresisImage from '../../../assets/hysteresis.png';\n\nconst HYSTERESIS = `function __hysteresis(val, limit, state, hist, comp) {\n let cond1, cond2;\n if (comp === '>') {\n cond1 = val > limit + hist;\n cond2 = val <= limit - hist;\n } else if (comp === '<') {\n cond1 = val < limit - hist;\n cond2 = val >= limit + hist;\n } else if (comp === '>=') {\n cond1 = val >= limit + hist;\n cond2 = val < limit - hist;\n } else if (comp === '<=') {\n cond1 = val <= limit - hist;\n cond2 = val > limit + hist;\n } else if (comp === '=') {\n cond1 = val <= limit + hist && val > limit - hist;\n cond2 = val > limit + hist || val <= limit - hist;\n } else if (comp === '<>') {\n cond1 = val > limit + hist || val <= limit - hist;\n cond2 = val <= limit + hist && val > limit - hist;\n }\n \n if (!state && cond1) {\n return true;\n } else if (state && cond2) {\n return false;\n } else {\n return state;\n }\n}`;\n\nclass ConditionState extends GenericBlock {\n constructor(props) {\n super(props, ConditionState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (value === null || value === undefined) {\n value = false;\n }\n let debugValue = '';\n\n let result;\n if (config.tagCard === '()') {\n context.prelines = context.prelines || [];\n !context.prelines.find(item => item !== HYSTERESIS) && context.prelines.push(HYSTERESIS);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (value === '') {\n value = 0;\n }\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n }\n } else\n if (config.tagCard !== 'includes') {\n const compare = config.tagCard === '=' ? '==' : (config.tagCard === '<>' ? '!=' : config.tagCard);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n }\n } else {\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `obj.state.val.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id}.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n }\n }\n context.conditionsStates.push({ name: `subCondVar${config._id}`, id: config.oid });\n context.conditionsVars.push(`const subCondVar${config._id} = ${debugValue};`);\n context.conditionsVars.push(`const subCond${config._id} = ${result};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}, value: subCondVar${config._id}, compareWith: \"${value}\"});`);\n return `subCond${config._id}`;\n }\n\n renderDebug(debugMessage) {\n const condition = this.state.settings.tagCard;\n if (condition === '()') {\n // TODO\n } else {\n return `${debugMessage.data.result.toString().toUpperCase()} [${debugMessage.data.value} ${condition} ${debugMessage.data.compareWith}]`;\n }\n\n return I18n.t('Triggered');\n }\n\n onShowHelp = () => this.setState({showHysteresisHelp: true});\n\n _setInputs(useTrigger, tagCard, oidType, oidUnit, oidStates) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n tagCard = tagCard || this.state.settings.tagCard;\n oidType = oidType || this.state.settings.oidType;\n oidUnit = oidUnit || this.state.settings.oidUnit;\n oidStates = oidStates || this.state.settings.oidStates;\n\n if (isAllTriggersOnState && useTrigger && this.props.userRules?.triggers?.length === 1) {\n oidType = this.props.userRules.triggers[0].oidType;\n oidUnit = this.props.userRules.triggers[0].oidUnit;\n oidStates = this.props.userRules.triggers[0].oidStates;\n }\n\n const _tagCardArray = ConditionState.getStaticData().tagCardArray;\n const tag = _tagCardArray.find(item => item.title === tagCard);\n let tagCardArray;\n let options = null;\n\n if (oidType === 'number') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal',\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than',\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal',\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis',\n },\n ];\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val => ({ value: val, title: oidStates[val] }));\n }\n } else if (oidType === 'boolean') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n }\n ];\n options = [\n { title: 'false', value: false },\n { title: 'true', value: true },\n ];\n } else {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal',\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than',\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal',\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes',\n }\n ];\n if (oidStates) {\n options = Object.keys(oidStates).map(val => ({ value: val, title: oidStates[val] }));\n }\n }\n\n let settings = null;\n if (!tagCardArray.find(item => item.title === tagCard)) {\n tagCard = tagCardArray[0].title;\n settings = settings || { ...this.state.settings };\n settings.tagCard = tagCard;\n }\n\n let inputs;\n let renderText = {\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value',\n frontText: tagCard === '()' ? 'Limit' : (tag?.text || 'compare with'),\n doNotTranslateBack: true,\n backText: oidUnit,\n };\n\n if (options) {\n renderText = {\n nameRender: 'renderSelect',\n defaultValue: options[0].value,\n options,\n attr: 'value',\n frontText: tag?.text || 'compare with',\n doNotTranslateBack: true,\n backText: oidUnit,\n };\n if (!options.find(item => item.value === this.state.settings.value)) {\n settings = settings || { ...this.state.settings };\n settings.value = options[0].value;\n }\n if (options.length <= 2) {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n }\n ];\n }\n }\n\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n renderText,\n ];\n } else if (isAllTriggersOnState) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n },\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n }\n\n if (tagCard === '()') {\n inputs.splice(1, 0, {\n nameRender: 'renderDialog',\n icon: 'HelpOutline',\n frontText: 'Explanation',\n onShowDialog: this.onShowHelp,\n });\n inputs.splice(2, 0, {\n nameRender: 'renderSelect',\n attr: 'histComp',\n defaultValue: '>',\n frontText: 'Condition',\n doNotTranslate: true,\n options: [\n { title: '>', value: '>' },\n { title: '>=', value: '>=' },\n { title: '<', value: '<' },\n { title: '<=', value: '<=' },\n { title: '=', value: '=' },\n { title: '<>', value: '<>' },\n ]\n });\n inputs.push({\n frontText: 'Δ',\n doNotTranslate: true,\n nameRender: 'renderNumber',\n noHelperText: true,\n attr: 'hist',\n defaultValue: 1,\n doNotTranslateBack: true,\n backText: oidUnit,\n });\n }\n\n const state = {\n iconTag: true,\n tagCardArray,\n inputs,\n };\n\n this.setState(state,() =>\n super.onTagChange(null, () => {\n if (settings) {\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n if (typeof value === 'object') {\n this._setInputs(value.useTrigger, value.tagCard, value.oidType, value.states);\n } else {\n if (attr === 'useTrigger') {\n this._setInputs(value);\n } else if (attr === 'oidType') {\n this._setInputs(value, undefined, value);\n } else if (attr === 'oidUnit') {\n this._setInputs(value, undefined, undefined, value);\n } else if (attr === 'oidStates') {\n this._setInputs(value, undefined, undefined, undefined, value);\n }\n }\n }\n\n onUpdate() {\n this._setInputs(this.state.settings.useTrigger);\n }\n\n onTagChange(tagCard) {\n this._setInputs(this.state.settings.useTrigger, tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'State condition',\n id: 'ConditionState',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal',\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than',\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal',\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes',\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis',\n }\n ],\n title: 'Compares the state value with user defined value',\n }\n }\n\n getData() {\n return ConditionState.getStaticData();\n }\n\n renderSpecific() {\n if (this.state.showHysteresisHelp) {\n return <Dialog\n open={!0}\n maxWidth=\"md\"\n onClose={() => this.setState({ showHysteresisHelp: false })}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <img src={HysteresisImage} alt=\"Hysteresis\"/>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.setState({ showHysteresisHelp: false })} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n}\n\nexport default ConditionState;\n","import GenericBlock from '../GenericBlock';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31, // 12\n];\n\nclass ConditionTime extends GenericBlock {\n constructor(props) {\n super(props, ConditionTime.getStaticData());\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let cond;\n\n if (config.withDate) {\n let [month, date] = (config.date || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n if (date && month) {\n cond = `formatDate(Date.now(), 'MM.DD-hh:mm') ${compare} \"${config.date}-${config.time}\"`;\n } else if (date === 0 && month) {\n cond = `formatDate(Date.now(), 'MM-hh:mm') ${compare} \"${month.toString().padStart(2, '0')}-${config.time}\"`;\n } else if (month === 0 && date) {\n cond = `formatDate(Date.now(), 'DD-hh:mm') ${compare} \"${date.toString().padStart(2, '0')}-${config.time}\"`;\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}});`);\n return `subCond${config._id}`;\n }\n\n _setInputs(tagCard, withDate, ) {\n withDate = withDate === undefined ? this.state.settings.withDate : withDate;\n tagCard = tagCard || this.state.settings.tagCard;\n const tagCardArray = ConditionTime.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === tagCard);\n const inputs = [\n {\n nameRender: 'renderNameText',\n attr: 'interval',\n defaultValue: 'Actual time of day',\n },\n {\n frontText: tag?.text || tagCard,\n nameRender: 'renderTime',\n attr: 'time',\n defaultValue: '12:00',\n },\n {\n frontText: 'with date',\n nameRender: 'renderCheckbox',\n attr: 'withDate',\n defaultValue: false,\n }\n ];\n if (withDate) {\n inputs.push({\n nameRender: 'renderDate',\n attr: 'date',\n defaultValue: '01.01',\n });\n }\n this.setState({\n inputs,\n iconTag:true\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'withDate') {\n this._setInputs(undefined, value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs(tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Time condition',\n id: 'ConditionTime',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal',\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than',\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal',\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n }\n ],\n title: 'Compares current time with the user specific time',\n }\n }\n\n getData() {\n return ConditionTime.getStaticData();\n }\n}\n\nexport default ConditionTime;\n","import GenericBlock from '../GenericBlock';\nimport SunCalc from 'suncalc2';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ConditionAstronomical extends GenericBlock {\n constructor(props) {\n super(props, ConditionAstronomical.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let offset;\n if (config.offset) {\n offset = parseInt(config.offsetValue, 10) || 0;\n }\n const cond = `formatDate(Date.now(), 'hh:mm') ${compare} formatDate(getAstroDate(\"${config.astro}\"${offset ? `, undefined, ${offset}` : ''}), 'hh:mm')`;\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: ${cond}});`);\n return cond;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude,\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude,\n };\n }\n });\n }\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${ConditionAstronomical._time2String(sunValue[name])}]`,\n order: ConditionAstronomical._time2String(sunValue[name]),\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n const tagCardArray = ConditionAstronomical.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === this.state.settings.tagCard);\n\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(${I18n.t(tag.text)} ${ConditionAstronomical._time2String(astroTime)})`;\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text',\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon',\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes',\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n },\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text',\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon',\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n },\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n onTagChange(tagCard) {\n this._setAstro();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Astronomical',\n id: 'ConditionAstronomical',\n icon: 'Brightness3',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to',\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal to',\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than',\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal to',\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than',\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to',\n },\n ],\n title: 'Compares current time with astronomical event',\n }\n }\n\n getData() {\n return ConditionAstronomical.getStaticData();\n }\n}\n\nexport default ConditionAstronomical;\n","import GenericBlock from '../GenericBlock';\nimport withStyles from '@mui/styles/withStyles';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323',\n },\n valueNotAck: {\n color: '#12ac15',\n },\n});\n\nclass ActionSetState extends GenericBlock {\n constructor(props) {\n super(props, ActionSetState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n return `// set state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} \n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetState.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val => ({ value: val, title: oidStates[val] }));\n type = 'select';\n }\n }\n\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = { value: oidMax === undefined ? 0 : oidMax };\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = { value: oidMax };\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = { value: options[0].value };\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = { value: false };\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = { value: true };\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = { value: '#FFFFFF' };\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n return { inputs, newSettings: settings };\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const { inputs, newSettings } = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({ inputs }, () =>\n super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set state action',\n id: 'ActionSetState',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionSetState.getStaticData();\n }\n}\n\nexport default withStyles(styles)(ActionSetState);\n","import GenericBlock from '../GenericBlock';\n\nclass ActionExec extends GenericBlock {\n constructor(props) {\n super(props, ActionExec.getStaticData());\n }\n\n static compile(config, context) {\n return `// exec \"${config.exec}\"\n\\t\\tconst subActionVar${config._id} = \"${(config.exec || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {exec: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return `Exec: ${debugMessage.data.exec}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'exec',\n defaultValue: 'ls /opt/iobroker',\n nameBlock: 'Shell command',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Exec',\n id: 'ActionExec',\n icon: 'Apps',\n title: 'Executes some shell command',\n helpDialog: 'You can use %s in the command to use current trigger value or %id to use the triggered object ID',\n }\n }\n\n getData() {\n return ActionExec.getStaticData();\n }\n}\n\nexport default ActionExec;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionHTTPCall extends GenericBlock {\n constructor(props) {\n super(props, ActionHTTPCall.getStaticData());\n }\n\n static compile(config, context) {\n return `// HTTP request ${config.url}\n\\t\\tconst subActionVar${config._id} = \"${(config.url || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {url: subActionVar${config._id}});\n\\t\\trequest(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return `URL: ${debugMessage.data.url}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'url',\n defaultValue: 'http://mydevice.com?...',\n nameBlock: 'URL',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'HTTP Call',\n id: 'ActionHTTPCall',\n icon: 'Language',\n title: 'Make a HTTP get request',\n helpDialog: 'You can use %s in the URL to use current trigger value or %id to use the triggered object ID',\n }\n }\n\n getData() {\n return ActionHTTPCall.getStaticData();\n }\n}\n\nexport default ActionHTTPCall;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionPrintText extends GenericBlock {\n constructor(props) {\n super(props, ActionPrintText.getStaticData());\n }\n\n static compile(config, context) {\n return `// Log ${config.text}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Log: %s', debugMessage.data.text);\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'My device triggered',\n nameBlock: 'Log text',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Log text',\n id: 'ActionPrintText',\n icon: 'Subject',\n title: 'Print some text in log',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionPrintText.getStaticData();\n }\n}\n\nexport default ActionPrintText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nclass ActionPause extends GenericBlock {\n constructor(props) {\n super(props, ActionPause.getStaticData());\n }\n\n static compile(config, context) {\n const ms = config.unit === 'ms' ? 1 : (config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000))\n\n return `// pause for ${ms}ms\n\\t\\t_sendToFrontEnd(${config._id}, {paused: true});\\n\n\\t\\tawait wait(${config.pause} * ${ms});\\n\n\\t\\t_sendToFrontEnd(${config._id}, {paused: false});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Paused: %s', debugMessage.data.paused);\n }\n\n _getOptions(pause) {\n pause = pause === undefined ? this.state.settings.pause : pause;\n if (pause === 1 || pause === '1') {\n return [\n { value: 'ms', title: 'millisecond' },\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' },\n ];\n } else {\n return [\n { value: 'ms', title: 'milliseconds' },\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' },\n ];\n }\n }\n\n _setInputs(pause) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n attr: 'pause',\n defaultValue: 100,\n noHelperText: true,\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 'ms',\n options: this._getOptions(pause),\n },\n ]\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'pause') {\n this._setInputs(value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pause',\n id: 'ActionPause',\n icon: 'Pause',\n title: 'Make a pause between actions',\n }\n }\n\n getData() {\n return ActionPause.getStaticData();\n }\n}\n\nexport default ActionPause;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionFunction extends GenericBlock {\n constructor(props) {\n super(props, ActionFunction.getStaticData());\n }\n\n static compile(config, context) {\n const lines = (config.func || '')\n .split('\\n')\n .map((line, i) => ` ${line}`);\n\n lines.unshift(`\\t\\t_sendToFrontEnd(${config._id}, {func: 'executed'});`);\n lines.unshift(`// user function`);\n\n return lines.join('\\n');\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Function: executed');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'func',\n noTextEdit: true,\n defaultValue: 'console.log(\"Test\")',\n nameBlock: 'Function',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'User function',\n id: 'ActionFunction',\n icon: 'Functions',\n title: 'Write your own code',\n helpDialog: 'This is advances option. You can write your own code here and it will be executed on trigger',\n }\n }\n\n getData() {\n return ActionFunction.getStaticData();\n }\n}\n\nexport default ActionFunction;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionSetStateDelayed extends GenericBlock {\n constructor(props) {\n super(props, ActionSetStateDelayed.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n\n return `// set delayed state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} with delay of ${config.delay}ms\n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tsetStateDelayed(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'}, ${parseInt(config.delay, 10)}, ${config.clearRunning ? 'true' : 'false'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetStateDelayed.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const { oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep } = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val => ({ value: val, title: oidStates[val] }));\n type = 'select';\n }\n }\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value',\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = { value: oidMax === undefined ? 0 : oidMax };\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value',\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = { value: oidMax };\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value',\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = { value: options[0].value };\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value',\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = { value: false };\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value',\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = { value: true };\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value',\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = { value: '#FFFFFF' };\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value',\n }];\n break;\n }\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n inputs.push({\n backText: 'ms',\n frontText: 'Delay',\n nameRender: 'renderNumber',\n defaultValue: '1000',\n noHelperText: true,\n attr: 'delay',\n });\n inputs.push({\n backText: 'clear running',\n nameRender: 'renderCheckbox',\n defaultValue: true,\n attr: 'clearRunning',\n })\n\n return { inputs, newSettings: settings };\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () =>\n super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set with delay',\n id: 'ActionSetStateDelayed',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state with delay',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID',\n }\n }\n\n getData() {\n return ActionSetStateDelayed.getStaticData();\n }\n}\n\nexport default ActionSetStateDelayed;\n","import GenericBlock from '../GenericBlock';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass ActionOperateStates extends GenericBlock {\n constructor(props) {\n super(props, ActionOperateStates.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let oid1 = `const val2_${config._id} = (await getStateAsync(\"${config.oid1}\")).val;`;\n let oid2 = `const val1_${config._id} = (await getStateAsync(\"${config.oid2}\")).val;`;\n\n return `// ${config.oid1} ${config.operation} ${config.oid2} => ${config.oidResult}\n\\t\\t ${oid1}\n\\t\\t ${oid2}\n\\t\\t_sendToFrontEnd(${config._id}, {val: val1_${config._id} ${config.operation} val2_${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oidResult}\", val1_${config._id} ${config.operation} val2_${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionOperateStates.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n const inputs = [];\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID1',\n attr: 'oid1',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderSelect',\n //frontText: 'with',\n options: [\n {value: '+', title: '+'},\n {value: '-', title: '-'},\n {value: '*', title: '*'},\n {value: '/', title: '/'},\n ],\n doNotTranslate: true,\n defaultValue: '+',\n attr: 'operation'\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID2',\n attr: 'oid2',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderNameText',\n defaultValue: 'store in',\n attr: 'textEqual',\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n attr: 'oidResult',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n this.props.onChange(settings);\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Operate two states',\n id: 'ActionOperateStates',\n icon: 'AddBox',\n tagCardArray: ['control', 'update'],\n title: 'Operations with two states',\n }\n }\n\n getData() {\n return ActionOperateStates.getStaticData();\n }\n}\n\nexport default ActionOperateStates;\n","import TriggerScriptSave from '../Blocks/TriggerScriptSave';\nimport TriggerSchedule from '../Blocks/TriggerSchedule';\nimport TriggerState from '../Blocks/TriggerState';\nimport ConditionState from '../Blocks/ConditionState';\nimport ConditionTime from '../Blocks/ConditionTime';\nimport ConditionAstronomical from '../Blocks/ConditionAstronomical';\nimport ActionSetState from '../Blocks/ActionSetState';\nimport ActionExec from '../Blocks/ActionExec';\nimport ActionHTTPCall from '../Blocks/ActionHTTPCall';\nimport ActionPrintText from '../Blocks/ActionPrintText';\nimport ActionPause from '../Blocks/ActionPause';\nimport ActionFunction from '../Blocks/ActionFunction';\nimport ActionSetStateDelayed from '../Blocks/ActionSetStateDelayed';\nimport ActionOperateStates from '../Blocks/ActionOperateStates';\n\nconst StandardBlocks = [\n TriggerSchedule,\n TriggerScriptSave,\n TriggerState,\n ConditionState,\n ConditionTime,\n ConditionAstronomical,\n ActionSetState,\n ActionExec,\n ActionHTTPCall,\n ActionPrintText,\n ActionPause,\n ActionFunction,\n ActionSetStateDelayed,\n ActionOperateStates,\n];\n\nexport default StandardBlocks;","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport ActionSayText from '../Blocks/ActionSayText';\nimport ActionSendEmail from '../Blocks/ActionSendEmail';\nimport ActionTelegram from '../Blocks/ActionTelegram';\nimport ActionPushover from '../Blocks/ActionPushover';\nimport ActionWhatsappcmb from '../Blocks/ActionWhatsappcmb';\nimport ActionPushsafer from '../Blocks/ActionPushsafer';\nimport StandardBlocks from '../StandardBlocks';\n\nconst ADAPTERS = {\n telegram: ActionTelegram,\n email: ActionSendEmail,\n sayit: ActionSayText,\n pushover: ActionPushover,\n 'whatsapp-cmb': ActionWhatsappcmb,\n pushsafer: ActionPushsafer,\n};\n\nexport const ContextWrapperCreate = createContext();\n\nconst getOrLoadRemote = (remote, shareScope, remoteFallbackUrl = undefined) =>\n new Promise((resolve, reject) => {\n // check if remote exists on window\n if (!window[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote = document.querySelector(`[data-webpack=\"${remote}\"]`);\n // when remote is loaded...\n const onload = async () => {\n // check if it was initialized\n if (!window[remote]) {\n return reject(`Cannot load Remote \"${remote}\" to inject`);\n }\n if (!window[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use default share scope object passed in manually\n await window[remote].init(shareScope.default);\n } else {\n // otherwise, init share scope as usual\n // eslint-disable-next-line\n await window[remote].init(__webpack_share_scopes__[shareScope]);\n }\n // mark remote as initialized\n window[remote].__initialized = true;\n }\n // resolve promise so marking remote as loaded\n resolve();\n };\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(`Cannot Find Remote ${remote} to inject`);\n }\n } else {\n // remote already instantiated, resolve\n resolve();\n }\n });\n\nconst loadComponent = (remote, sharedScope, module, url) => async () => {\n await getOrLoadRemote(remote, sharedScope, url);\n const container = window[remote];\n const factory = await container.get(module);\n const Module = factory();\n return Module;\n};\n\nexport const ContextWrapper = ({ children, socket }) => {\n const [blocks, setBlocks] = useState(null);\n const [onUpdate, setOnUpdate] = useState(false);\n const [onDebugMessage, setOnDebugMessage] = useState(false);\n const [enableSimulation, setEnableSimulation] = useState(false);\n\n useEffect(() => {\n onUpdate && setOnUpdate(false);\n }, [onUpdate]);\n\n useEffect(() => {\n (async () => {\n const instances = await socket.getAdapterInstances();\n const adapters = Object.keys(ADAPTERS).filter(adapter =>\n instances.find(obj => obj?.common?.name === adapter));\n\n const adapterDynamicBlocksArray = [];\n\n // find all adapters, that have custom rule blocks\n const dynamicRules = instances.filter(obj => obj.common.javascriptRules);\n\n const alreadyCreated = [];\n for (let k in dynamicRules) {\n const obj = dynamicRules[k];\n if (alreadyCreated.includes(obj.common.name)) {\n continue;\n }\n\n let url;\n if (obj.common.javascriptRules.url.startsWith('http:') || obj.common.javascriptRules.url.startsWith('https:')) {\n url = obj.common.javascriptRules.url;\n } else if (obj.common.javascriptRules.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${obj.common.javascriptRules.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${obj.common.name}/${obj.common.javascriptRules.url}`;\n }\n\n if (obj.common.javascriptRules.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n await fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => {\n if (lang !== 'en') {\n // try to load english\n return fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => console.error(`Cannot load i18n \"${file}\": ${error}`))\n } else {\n console.log(`Cannot load i18n \"${file}\": ${error}`)\n }\n });\n } else if (obj.common.javascriptRules.i18n && typeof obj.common.javascriptRules.i18n === 'object') {\n try {\n I18n.extendTranslations(obj.common.javascriptRules.i18n);\n } catch (error) {\n console.error(`Cannot import i18n for \"${obj.common.javascriptRules.name}\": ${error}`);\n }\n }\n\n try {\n const Component = (await loadComponent(obj.common.javascriptRules.name, 'default', `./${obj.common.javascriptRules.name}`, url)()).default;\n\n if (Component) {\n adapterDynamicBlocksArray.push(Component);\n alreadyCreated.push(obj.common.name);\n ADAPTERS[obj.common.name] = null;\n }\n } catch (e) {\n console.error(`Cannot load component \"${obj.common.javascriptRules.name}\": ${e}`);\n }\n }\n\n const adapterBlocksArray = adapters.filter(adapter => ADAPTERS[adapter]).map(adapter => ADAPTERS[adapter]);\n\n setBlocks([...StandardBlocks, ...adapterBlocksArray, ...adapterDynamicBlocksArray]);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <ContextWrapperCreate.Provider value={{\n blocks,\n socket,\n onUpdate,\n setOnUpdate,\n onDebugMessage,\n setOnDebugMessage,\n enableSimulation,\n setEnableSimulation\n }}>\n {children}\n </ContextWrapperCreate.Provider>;\n};","import React, {memo, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport { findElement } from '../../helpers/findElement';\nimport GenericBlock from '../GenericBlock';\n\n// @iobroker/javascript-block\n\nconst CurrentItem = memo(props => {\n const { setUserRules, userRules, _id, id, blockValue, active, acceptedBy, isTourOpen, setTourStep, tourStep } = props;\n const [anchorEl, setAnchorEl] = useState(null);\n const { blocks, socket, onUpdate, setOnUpdate, onDebugMessage, enableSimulation } = useContext(ContextWrapperCreate);\n\n useEffect(() => {\n console.log('New message !!' + JSON.stringify(onDebugMessage));\n }, [onDebugMessage]);\n\n\n const findElementBlocks = useCallback(id => blocks.find(el => {\n const staticData = el.getStaticData();\n return staticData.id === id;\n }), [blocks]);\n\n const onChange = useCallback(settings => {\n let newUserRules = findElement(settings, userRules, blockValue);\n newUserRules && setUserRules(newUserRules);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules]);\n\n const handlePopoverOpen = event =>\n event.currentTarget !== anchorEl && setAnchorEl(event.currentTarget);\n\n const handlePopoverClose = () =>\n setAnchorEl(null);\n\n const blockInput = useMemo(() => {\n const CustomBlock = findElementBlocks(id) || GenericBlock;\n return <CustomBlock\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n notFound={!findElementBlocks(id)}\n {...props}\n onUpdate={onUpdate}\n setOnUpdate={setOnUpdate}\n enableSimulation={enableSimulation}\n onDebugMessage={onDebugMessage}\n onChange={onChange}\n className={null}\n socket={socket}\n />;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules, onUpdate, onDebugMessage, enableSimulation]);\n\n const [isDelete, setIsDelete] = useState(false);\n\n return <div\n onMouseMove={handlePopoverOpen}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n onMouseDown={el => {\n if (el.ctrlKey) {\n let newItem;\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n if (blockValue !== \"triggers\") {\n newItem = newUserRules[acceptedBy][blockValue].find(el => el._id === _id);\n } else {\n newItem = newUserRules[acceptedBy].find(el => el._id === _id);\n }\n if (blockValue !== \"triggers\") {\n newUserRules[acceptedBy][blockValue].splice(newUserRules[acceptedBy][blockValue].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n } else {\n newUserRules[acceptedBy].splice(newUserRules[acceptedBy].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n }\n setUserRules(newUserRules);\n }\n }}\n id=\"height\"\n style={active ? { width: document.getElementById('width').clientWidth - 70 } : null}\n className={`${cls.cardStyle} ${active ? cls.cardStyleActive : null} ${isDelete ? cls.isDelete : null}`}>\n <div className={cls.drag_mobile} />\n {blockInput}\n {setUserRules && <div className={cls.controlMenu} style={Boolean(anchorEl) ? { opacity: 1 } : { opacity: 0 }}>\n <div onClick={e => {\n let newItemsSwitches = deepCopy(acceptedBy, userRules, blockValue);\n newItemsSwitches = filterElement(acceptedBy, newItemsSwitches, blockValue, _id);\n setIsDelete(true);\n setTimeout(() => {\n if (acceptedBy === 'triggers') {\n setOnUpdate(true);\n }\n setUserRules(newItemsSwitches);\n }, 300);\n }} className={cls.closeBtn} />\n </div>}\n </div>;\n});\n\nCurrentItem.defaultProps = {\n active: false\n};\n\nCurrentItem.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\n\nexport default CurrentItem;","export function findElement(settings, userRules, additionalParameter) {\n const { _id, acceptedBy } = settings;\n let block;\n\n if (!acceptedBy || !userRules[acceptedBy]) {\n console.warn('Cannot find ' + acceptedBy);\n return userRules;\n }\n\n switch (acceptedBy) {\n case 'actions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n case 'conditions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n default:\n block = userRules[acceptedBy].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][userRules[acceptedBy].indexOf(block)] = settings;\n }\n return userRules;\n }\n}","import React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport CardMenu from '../CardMenu';\nimport CurrentItem from '../CurrentItem';\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\nconst snapToGrid = (x, y) => {\n const snappedX = Math.round(x / 32) * 32\n const snappedY = Math.round(y / 32) * 32\n return [snappedX, snappedY]\n}\n\nconst getItemStyles = (initialOffset, currentOffset, isSnapToGrid) => {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none'\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform\n };\n}\n\nexport const CustomDragLayer = props => {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n targetIds: monitor.getTargetIds()\n }));\n\n const renderItem = () => {\n switch (itemType) {\n case 'box':\n return targetIds.length ? <CurrentItem active {...item} allBlocks={props.allBlocks}/> :\n <CardMenu active {...item} socket={props.socket}/>;\n default:\n return null;\n }\n }\n\n if (!isDragging) {\n return null;\n }\n\n return <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>\n {renderItem()}\n </div>\n </div>;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"border\":\"style_border__Zz9Km\",\"emptyBlockStyle\":\"style_emptyBlockStyle__sE5FO\",\"emptyBlock\":\"style_emptyBlock__dMBHS\",\"marginTop\":\"style_marginTop__uK9O+\",\"selectOnChange\":\"style_selectOnChange__6r-uo\",\"selectOnChangeHelp\":\"style_selectOnChangeHelp__nP0g8\",\"selectOnChangeHelpIcon\":\"style_selectOnChangeHelpIcon__r7G9x\",\"emptyBlockNone\":\"style_emptyBlockNone__DS6GG\",\"mainBlockItemRules\":\"style_mainBlockItemRules__JYCaQ\",\"nameBlockItems\":\"style_nameBlockItems__sNeEH\",\"contentBlockItem\":\"style_contentBlockItem__SQejW\",\"wrapperMargin\":\"style_wrapperMargin__v8PwE\",\"contentHeightOn\":\"style_contentHeightOn__T3ZZ-\",\"heightBlock\":\"style_heightBlock__B96p1\",\"contentHeightOff\":\"style_contentHeightOff__eaSlV\",\"cardAdd\":\"style_cardAdd__SNY3P\",\"blockCardAdd\":\"style_blockCardAdd__xHdXK\",\"addClassOverflow\":\"style_addClassOverflow__bcVva\",\"addClassHeight\":\"style_addClassHeight__GJALi\"};","import * as React from 'react';\n\nexport function useStateLocal(events, nameEvents) {\n const [state, setState] = React.useState(\n localStorage.getItem(nameEvents) ? JSON.parse(localStorage.getItem(nameEvents)) : events\n );\n\n const eventsToInstall = (newHeadCells) => {\n localStorage.setItem(nameEvents, JSON.stringify(newHeadCells));\n setState(newHeadCells);\n };\n return [state, eventsToInstall, localStorage.getItem(nameEvents) ? true : false];\n}\n","import _ from \"lodash\";\n\nconst funcSet = _.throttle(\n (setCards, userRules) => setCards(userRules)\n , 0);\n\nconst moveCard = (\n id,\n atIndex,\n cards,\n setCards,\n userRules,\n acceptedBy,\n additionally,\n hoverClientY,\n hoverMiddleY) => {\n\n const { card, index } = findCard(id, cards);\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = _.clone(cards);\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n const newTriggers = _.clone(userRules);\n switch (acceptedBy) {\n case 'actions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n case 'conditions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n default:\n newTriggers[acceptedBy] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n }\n }\n};\nconst findCard = (id, cards) => {\n const card = cards.find((c) => c._id === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nexport { moveCard, findCard };","// extracted by mini-css-extract-plugin\nexport default {\"drag\":\"style_drag__Gq61w\",\"root\":\"style_root__nSnEB\"};","import React, { useContext, useEffect, useRef } from 'react';\n// import { I18n } from '@iobroker/adapter-react-v5';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { findCard, moveCard } from '../../helpers/cardSort';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport cls from './style.module.scss';\n\nconst DragWrapper = ({ typeBlocks, allProperties, id, isActive, setUserRules, userRules, children, _id, blockValue }) => {\n const { setOnUpdate } = useContext(ContextWrapperCreate);\n const [{ opacity }, drag, preview] = useDrag({\n type: 'box',\n item: () => ({ ...allProperties, id, isActive, _id }),\n end: (item, monitor) => {\n let { acceptedBy } = item;\n let dropResult = monitor.getDropResult();\n let newUserRules;\n if (!dropResult) {\n if (typeof _id === 'number' && !monitor.getTargetIds().length) {\n newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n setUserRules(newUserRules);\n }\n return null;\n }\n if (dropResult.blockValue !== blockValue) {\n let idNumber = typeof _id === 'number' ? _id : Date.now();\n newUserRules = deepCopy(acceptedBy, userRules, dropResult.blockValue);\n const newItem = { id: item.id, acceptedBy: item.acceptedBy }\n switch (acceptedBy) {\n case 'actions':\n if (blockValue) {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n case 'conditions':\n if (typeof blockValue === 'number') {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n default:\n setOnUpdate(true);\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n }\n }\n },\n collect: monitor => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n isDragging: monitor.isDragging(),\n }),\n });\n const ref = useRef(null)\n const [, drop] = useDrop({\n accept: 'box',\n canDrop: () => false,\n hover({ _id: draggedId, acceptedBy }, monitor) {\n if (!ref.current) {\n return;\n }\n if (typeBlocks !== acceptedBy) {\n return\n }\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n if (!!_id && draggedId !== _id) {\n switch (acceptedBy) {\n case 'actions':\n if (blockValue === 'then' || blockValue === 'else') {\n const { index: overIndexActions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexActions !== draggedId) {\n moveCard(draggedId,\n overIndexActions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n case 'conditions':\n if (typeof blockValue === 'number') {\n const { index: overIndexConditions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexConditions !== draggedId) {\n moveCard(draggedId,\n overIndexConditions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n default:\n const { index: overIndex } = findCard(_id, userRules[acceptedBy]);\n if (overIndex !== draggedId) {\n moveCard(draggedId,\n overIndex,\n userRules[acceptedBy],\n setUserRules,\n userRules,\n acceptedBy,\n null,\n hoverClientY,\n hoverMiddleY\n );\n }\n return;\n }\n }\n }\n });\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n drag(drop(ref));\n const isMobile = window.innerWidth < 600;\n return <div ref={isMobile && _id ? null : ref} className={cls.root} style={{ opacity }}><div className={_id ? cls.drag : null} ref={_id && isMobile ? ref : null} />{children}</div>;\n}\n\nDragWrapper.defaultProps = {\n name: '',\n active: false,\n id: '',\n _id: null\n};\n\nDragWrapper.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default DragWrapper;","import React from 'react';\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';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst DialogHelp = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <div style={{\n fontSize: '1rem',\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: '0.00938em'\n }} >\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus startIcon={<IconOk/>}>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog >;\n\nDialogHelp.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogHelp.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogHelp;","import React from 'react';\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 DialogContentText from '@mui/material/DialogContentText';\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport PropTypes from 'prop-types';\n\nconst DialogCondition = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog>;\n\nDialogCondition.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogCondition.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogCondition;","import React, { Fragment, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrop } from 'react-dnd';\n\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport CurrentItem from '../CurrentItem';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport DragWrapper from '../DragWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport DialogHelp from './DialogHelp';\nimport DialogCondition from './DialogCondition';\n\nconst AdditionallyContentBlockItems = ({ size, itemsSwitchesRender, blockValue, boolean, typeBlock, userRules, setUserRules, animation, setTourStep, tourStep, isTourOpen }) => {\n const [checkItem, setCheckItem] = useState(false);\n const [canDropCheck, setCanDropCheck] = useState(false);\n const [checkId, setCheckId] = useState(false);\n const [hoverBlock, setHoverBlock] = useState('');\n\n const options = useDrop({\n accept: 'box',\n drop: () => ({ blockValue }),\n hover: ({ acceptedBy, _id }, monitor) => {\n setCheckItem(acceptedBy === typeBlock);\n setCheckId(!!_id);\n setHoverBlock(monitor.getHandlerId());\n },\n canDrop: ({ acceptedBy }, monitor) => {\n setCanDropCheck(acceptedBy === typeBlock);\n return acceptedBy === typeBlock;\n },\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.getItem()?.acceptedBy === typeBlock,\n offset: monitor.getClientOffset(),\n targetId: monitor.targetId\n }),\n });\n\n const [{ canDrop, isOver, offset, targetId }, drop] = options;\n\n useEffect(() => { setHoverBlock('') }, [offset]);\n\n const isActive = canDrop && isOver;\n let backgroundColor = '';\n if (isActive) {\n backgroundColor = checkItem ? '#00fb003d' : '#fb00002e';\n } else if (canDrop) {\n backgroundColor = canDropCheck ? '#00fb003d' : '#fb00002e';\n } else if (offset) {\n backgroundColor = targetId === hoverBlock ? '#fb00002e' : '';\n }\n\n return <div ref={drop} style={{ backgroundColor }} className={`${Utils.clsx(cls.contentBlockItem,size && cls.addClassHeight)} ${boolean ? animation ? cls.contentHeightOn : null : cls.contentHeightOff}`}>\n <div className={cls.wrapperMargin}>{itemsSwitchesRender[blockValue]?.map(el => (\n <DragWrapper\n typeBlocks={typeBlock}\n key={el._id}\n {...el}\n blockValue={blockValue}\n allProperties={el}\n userRules={userRules}\n setUserRules={setUserRules}\n >\n <CurrentItem\n {...el}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n settings={el}\n blockValue={blockValue}\n userRules={userRules}\n setUserRules={setUserRules}\n />\n </DragWrapper>))}\n <div\n style={isActive && checkItem && !checkId ? { height: document.getElementById('height') ? document.getElementById('height').clientHeight : 200 } : null}\n className={`${cls.emptyBlockStyle} ${isActive && checkItem && !checkId ? cls.emptyBlock : cls.emptyBlockNone}`}\n />\n </div>\n </div>;\n}\n\nAdditionallyContentBlockItems.defaultProps = {\n children: null,\n boolean: true,\n animation: false\n};\n\nconst ContentBlockItems = ({ size, typeBlock, name, nameAdditionally, additionally, border, userRules, setUserRules, iconName, adapter, socket, setTourStep, tourStep, isTourOpen }) => {\n const [additionallyClickItems, setAdditionallyClickItems, checkLocal] = useStateLocal(typeBlock === 'actions' ? false : [], `additionallyClickItems_${typeBlock}`);\n const [showHelp, setShowHelp] = useState(false);\n const [showConditionDialog, setShowConditionDialog] = useState(false);\n\n useEffect(() => {\n if (typeBlock === 'conditions' && additionallyClickItems.length !== userRules['conditions'].length - 1) {\n let newArray = [];\n userRules['conditions'].forEach((el, idx) => {\n if (idx > 0) {\n newArray.push({\n _id: Date.now(),\n open: true,\n });\n }\n });\n setAdditionallyClickItems([...additionallyClickItems, ...newArray]);\n }\n if (typeBlock === 'actions' && !checkLocal && userRules['actions']['else'].length) {\n setAdditionallyClickItems(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [animation, setAnimation] = useState(false);\n\n return <div className={`${Utils.clsx(cls.mainBlockItemRules, size && cls.addClassOverflow)} ${border && !size ? cls.border : null}`}>\n <span id='width' className={cls.nameBlockItems}>\n <MaterialDynamicIcon iconName={iconName} className={cls.iconThemCard} adapter={adapter} socket={socket} />{name}\n </span>\n {typeBlock === 'conditions' ?\n <div style={{ width: '100%' }}>\n <Select\n variant=\"standard\"\n className={cls.selectOnChange}\n value={userRules.justCheck || false}\n onChange={e => {\n const _userRules = deepCopy('conditions', userRules);\n _userRules.justCheck = e.target.value;\n setUserRules(_userRules);\n }}\n >\n <MenuItem value={false}>{I18n.t('on condition change')}</MenuItem>\n <MenuItem value={true}>{I18n.t('just check')}</MenuItem>\n </Select>\n <IconButton size=\"small\" title={I18n.t('Explanation')} className={cls.selectOnChangeHelp} onClick={() => setShowHelp(true)}>\n <IconHelp className={cls.selectOnChangeHelpIcon} />\n </IconButton>\n </div>\n : null}\n <AdditionallyContentBlockItems\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n blockValue={typeBlock === 'actions' ? 'then' : typeBlock === 'conditions' ? 0 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n userRules={userRules}\n size={size}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n />\n {additionally && [...Array(typeBlock === 'actions' ? 1 : userRules.conditions.length - 1)].map((e, index) => {\n const booleanAdditionally = (value = index) => Boolean(typeBlock === 'actions' ? additionallyClickItems : additionallyClickItems.find((el, idx) => idx === value && el.open));\n return <Fragment key={`${index}_block_${typeBlock}`}>\n <div\n onClick={() => {\n if (typeBlock === 'actions') {\n setAdditionallyClickItems(!additionallyClickItems);\n return null;\n }\n let newAdditionally = JSON.parse(JSON.stringify(additionallyClickItems));\n if (userRules['conditions'][index + 1].length) {\n newAdditionally[index].open = !newAdditionally[index].open\n setAdditionallyClickItems(newAdditionally);\n return null;\n }\n newAdditionally = newAdditionally.filter((el, idx) => idx !== index);\n setAdditionallyClickItems(newAdditionally);\n setAnimation(typeBlock === 'actions' ? true : index);\n setTimeout(() => {\n setAnimation(false);\n setUserRules({ ...userRules, conditions: [...userRules.conditions.filter((el, idx) => idx !== index + 1)] });\n }, 250);\n\n }}\n key={index} className={cls.blockCardAdd}>\n {booleanAdditionally() ? '-' : '+'}<div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>\n <AdditionallyContentBlockItems\n blockValue={typeBlock === 'actions' ? 'else' : typeBlock === 'conditions' ? index + 1 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n userRules={userRules}\n boolean={booleanAdditionally()}\n animation={Boolean(animation === index)}\n size={size}\n />\n </Fragment>\n })}\n {additionally && typeBlock === 'conditions' && <div\n onClick={() => {\n setAdditionallyClickItems([...additionallyClickItems, {\n _id: Date.now(),\n open: true\n }]);\n setUserRules({ ...userRules, conditions: [...userRules.conditions, []] });\n setAnimation(typeBlock === 'actions' ? true : userRules.conditions.length - 1);\n setTimeout(() => setAnimation(false), 1000);\n }}\n className={cls.blockCardAdd}\n >\n {'+'}\n <div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>}\n <DialogHelp open={showHelp} onClose={() => setShowHelp(false)} />\n <DialogCondition open={showConditionDialog} onClose={() => setShowConditionDialog(false)} />\n </div>;\n}\n\nContentBlockItems.defaultProps = {\n children: null,\n name: '',\n nameAdditionally: '',\n additionally: false,\n border: false,\n typeBlock: '',\n};\n\nContentBlockItems.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n nameAdditionally: PropTypes.string,\n border: PropTypes.bool,\n additionally: PropTypes.bool,\n children: PropTypes.object,\n typeBlock: PropTypes.string,\n blockValue: PropTypes.string,\n userRules: PropTypes.object,\n setUserRules: PropTypes.func,\n};\n\nexport default ContentBlockItems;","// extracted by mini-css-extract-plugin\nexport default {\"menuRules\":\"style_menuRules__NRFrw\",\"switchesRenderWrapper\":\"style_switchesRenderWrapper__MHBpo\",\"menuOff\":\"style_menuOff__GV8BN\",\"menuTitle\":\"style_menuTitle__bnI7K\",\"marginAuto\":\"style_marginAuto__h3I6J\",\"inputWidth\":\"style_inputWidth__Hkd3w\",\"menuWrapper\":\"style_menuWrapper__16zE-\",\"hamburgerWrapper\":\"style_hamburgerWrapper__+AsNg\",\"hamburgerOff\":\"style_hamburgerOff__Tmmok\",\"nothingFound\":\"style_nothingFound__hm0xN\",\"resetSearch\":\"style_resetSearch__oA8LS\",\"controlPanel\":\"style_controlPanel__ojI7Z\",\"controlPanelAppBar\":\"style_controlPanelAppBar__fjB3Y\",\"addClassMenu\":\"style_addClassMenu__3n58b\",\"addClassBackground\":\"style_addClassBackground__j1FHK\",\"addClassPosition\":\"style_addClassPosition__YL+W4\"};","import React from 'react';\nimport CardMenu from '.';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport DragWrapper from '../DragWrapper';\nimport { STEPS } from '../../helpers/Tour';\n\nconst CustomDragItem = props => {\n const { allProperties, allProperties: { acceptedBy, id }, setUserRules, userRules, setTourStep, tourStep, isTourOpen, onTouchMove } = props;\n return <DragWrapper {...props} {...allProperties}>\n <CardMenu\n onTouchMove={onTouchMove}\n onDoubleClick={() => {\n (isTourOpen &&\n tourStep === STEPS.addScheduleByDoubleClick &&\n id === 'TriggerScheduleBlock' &&\n setTourStep(STEPS.openTagsMenu)\n );\n (isTourOpen &&\n tourStep === STEPS.addActionPrintText &&\n id === 'ActionPrintText' &&\n setTourStep(STEPS.showJavascript)\n );\n let _id = Date.now();\n let blockValue;\n switch (acceptedBy) {\n case 'actions':\n blockValue = 'then';\n break;\n\n case 'conditions':\n blockValue = userRules[acceptedBy].length - 1;\n break;\n\n default:\n break;\n }\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n const newItem = { id, _id, acceptedBy };\n if (blockValue !== undefined) {\n newUserRules[acceptedBy][blockValue].push({ ...newItem });\n } else {\n newUserRules[acceptedBy].push({ ...newItem });\n }\n setUserRules(newUserRules);\n }} onDoubl {...props} {...allProperties} />\n </DragWrapper>;\n}\n\nexport default CustomDragItem;","// extracted by mini-css-extract-plugin\nexport default {\"menu_wrapper\":\"hamburgerMenu_menu_wrapper__H+bSr\",\"hamburgerMenu\":\"hamburgerMenu_hamburgerMenu__zKaBW\",\"animate\":\"hamburgerMenu_animate__CjZxq\",\"menu_conatiner_wrapper\":\"hamburgerMenu_menu_conatiner_wrapper__9BkY3\"};","import React from 'react';\nimport cls from './hamburgerMenu.module.scss';\nimport PropTypes from 'prop-types';\n\nconst HamburgerMenu = ({boolean}) => {\n return <div className={`${cls.hamburgerMenu} ${boolean ? cls.animate : ''}`}/>\n}\n\nHamburgerMenu.defaultProps = {\n boolean: false\n};\n\nHamburgerMenu.propTypes = {\n boolean: PropTypes.bool\n};\n\nexport default HamburgerMenu;","import React, { Fragment, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { AppBar, ClickAwayListener, Tab, Tabs } from '@mui/material';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nimport CustomInput from '../CustomInput';\nimport CustomDragItem from '../CardMenu/CustomDragItem';\nimport HamburgerMenu from '../HamburgerMenu';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport { STEPS } from '../../helpers/Tour';\n\nconst Menu = ({ addClass, setAllBlocks, allBlocks, userRules, onChangeBlocks, setTourStep, tourStep, isTourOpen }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket } = useContext(ContextWrapperCreate);\n const [hamburgerOnOff, setHamburgerOnOff] = useStateLocal(false, 'hamburgerOnOff');\n const [filter, setFilter] = useStateLocal({\n text: '',\n type: 'triggers',\n index: 0\n }, 'filterControlPanel');\n\n const handleChange = (event, newValue) => {\n isTourOpen && (newValue === 0 && tourStep === STEPS.selectTriggers) && setTourStep(STEPS.addScheduleByDoubleClick);\n isTourOpen && (newValue === 2 && tourStep === STEPS.selectActions) && setTourStep(STEPS.addActionPrintText);\n setFilter({\n ...filter,\n index: newValue,\n type: ['triggers', 'conditions', 'actions'][newValue]\n });\n setBlocksFunc(filter.text, ['triggers', 'conditions', 'actions'][newValue]);\n };\n\n const setBlocksFunc = (text = filter.text, typeFunc = filter.type) => {\n if (!blocks) {\n return;\n }\n let newAllBlocks = [...blocks];\n newAllBlocks = newAllBlocks.filter(el => {\n if (!text) {\n return true;\n }\n const { name } = el.getStaticData();\n return name && I18n.t(name).toLowerCase().includes(text.toLowerCase());\n });\n newAllBlocks = newAllBlocks.filter(el => typeFunc === el.getStaticData().acceptedBy);\n setAllBlocks(newAllBlocks);\n };\n\n const a11yProps = index => ({\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`\n });\n\n useEffect(() => {\n setBlocksFunc();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blocks]);\n return <ClickAwayListener\n mouseEvent={false}\n touchEvent=\"onTouchStart\"\n onClickAway={() => setHamburgerOnOff(true)}\n >\n <div className={Utils.clsx(cls.menuWrapper, addClass[1035] && cls.addClassMenu)}>\n <div className={`${cls.hamburgerWrapper} ${hamburgerOnOff ? cls.hamburgerOff : null}`}\n onClick={() => setHamburgerOnOff(!hamburgerOnOff)}><HamburgerMenu boolean={!hamburgerOnOff} />\n </div>\n <div className={`${Utils.clsx(cls.menuRules, addClass[1035] && cls.addClassBackground, addClass[835] && cls.addClassPosition)} ${hamburgerOnOff ? cls.menuOff : null}`}>\n <div className={cls.controlPanel}>\n <AppBar className={cls.controlPanelAppBar} position=\"static\">\n <Tabs\n value={filter.index}\n onChange={handleChange}\n >\n <Tab className=\"blocks-triggers\"\n title={I18n.t('Triggers')}\n icon={<MaterialDynamicIcon iconName='FlashOn' />}\n {...a11yProps(0)} />\n <Tab title={I18n.t('Conditions')} className=\"blocks-conditions\" icon={<MaterialDynamicIcon iconName='Help' />}\n {...a11yProps(1)} />\n <Tab title={I18n.t('Actions')} className=\"blocks-actions\" icon={<MaterialDynamicIcon iconName='PlayForWork' />}\n {...a11yProps(2)} />\n </Tabs>\n </AppBar>\n </div>\n <div className={cls.switchesRenderWrapper}>\n <span>\n {allBlocks.map(el => {\n const { name, id, icon, adapter } = el.getStaticData();\n return <Fragment key={id}>\n <CustomDragItem\n onTouchMove={() => setHamburgerOnOff(true)}\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n allProperties={el.getStaticData()}\n name={name}\n icon={icon}\n adapter={adapter}\n socket={socket}\n userRules={userRules}\n setUserRules={onChangeBlocks}\n isActive={false}\n id={id}\n />\n </Fragment>;\n })}\n {allBlocks.length === 0 && <div className={cls.nothingFound}>\n {I18n.t('Nothing found')}...\n <div className={cls.resetSearch} onClick={() => {\n setFilter({\n ...filter,\n text: ''\n });\n setBlocksFunc('');\n }}>{I18n.t('reset search')}</div>\n </div>}\n </span>\n </div>\n <div className={Utils.clsx(cls.menuTitle, cls.marginAuto)} />\n <CustomInput\n className={cls.inputWidth}\n fullWidth\n customValue\n value={filter.text}\n size=\"small\"\n autoComplete=\"off\"\n label={I18n.t('search')}\n variant=\"outlined\"\n onChange={(value) => {\n setFilter({ ...filter, text: value });\n setBlocksFunc(value);\n }}\n />\n </div>\n </div>\n </ClickAwayListener>;\n}\n\nMenu.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string\n};\n\nexport default Menu;\n","import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\n\nimport { CustomDragLayer } from './components/CustomDragLayer';\nimport ContentBlockItems from './components/ContentBlockItems';\nimport { ContextWrapperCreate } from './components/ContextWrapper';\nimport Compile from './helpers/Compile';\nimport Menu from './components/Menu';\nimport './helpers/stylesVariables.scss';\n\nimport DialogExport from '../../Dialogs/Export';\nimport DialogImport from '../../Dialogs/Import';\n\nconst RulesEditor = ({ code, onChange, themeName, setTourStep, tourStep, isTourOpen, command, scriptId, changed, running }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket, setOnUpdate, setOnDebugMessage, setEnableSimulation } = useContext(ContextWrapperCreate);\n const [allBlocks, setAllBlocks] = useState([]);\n const [userRules, setUserRules] = useState(Compile.code2json(code));\n const [importExport, setImportExport] = useState('');\n const [modal, setModal] = useState(false);\n //const [jsAlive, setJsAlive] = useState(false);\n //const [jsInstance, setJsInstance] = useState(false);\n\n useEffect(() => {\n let _jsInstance;\n let _jsAlive;\n const handler = (id, obj) => {\n if (id === _jsInstance + '.alive') {\n if (_jsAlive !== obj?.val) {\n _jsAlive = obj?.val;\n //setJsAlive(_jsAlive);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n }\n } else {\n if (_jsInstance !== obj?.common?.engine) {\n _jsInstance && socket.unsubscribeState(`${_jsInstance}.alive`, handler);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n }\n }\n };\n\n const handlerStatus = (id, state) => {\n if (state) {\n try {\n let msg = JSON.parse(state.val);\n // if not from previous session\n if (msg.ruleId === scriptId && Date.now() - msg.ts < 1000) {\n setOnDebugMessage({blockId: msg.blockId, data: msg.data, ts: msg.ts});\n }\n } catch (e) {\n console.error('Cannot parse: ' + state.val);\n }\n }\n };\n\n socket.getObject(scriptId)\n .then(obj => {\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n socket.subscribeObject(scriptId, handler);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n _jsInstance && socket.subscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n });\n\n return function cleanup() {\n _jsInstance && socket.unsubscribeObject(`${_jsInstance}.alive`, handler);\n socket.unsubscribeState(scriptId, handler);\n _jsAlive && _jsInstance && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOff', scriptId);\n _jsInstance && socket.unsubscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setEnableSimulation(!changed && running);\n }, [changed, running, setEnableSimulation]);\n\n useEffect(() => {\n if (!!command) {\n setImportExport(command);\n if (!modal) {\n setModal(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [command]);\n\n useEffect(() => {\n const newUserRules = Compile.code2json(code);\n if (JSON.stringify(newUserRules) !== JSON.stringify(userRules)) {\n setUserRules(newUserRules);\n setOnUpdate(true);\n }\n // eslint-disable-next-line\n }, [code]);\n\n useEffect(() => {\n document.getElementsByTagName('HTML')[0].className = themeName || 'blue';\n }, [themeName]);\n\n const onChangeBlocks = useCallback(json => {\n setUserRules(json);\n onChange(Compile.json2code(json, blocks));\n }, [blocks, onChange]);\n\n const ref = useRef({ clientWidth: 0 });\n const [addClass, setAddClass] = useState({ 835: false, 1035: false });\n useEffect(() => {\n if (ref.current) {\n if (ref.current.clientWidth <= 1035) {\n setAddClass({ 835: false, 1035: true });\n }\n if (ref.current.clientWidth <= 835) {\n setAddClass({ 1035: true, 835: true });\n }\n if (ref.current.clientWidth > 1035) {\n setAddClass({ 835: false, 1035: false });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current.clientWidth])\n\n if (!blocks) {\n return null;\n }\n\n return <div key=\"rulesEditor\" className={cls.wrapperRules} ref={ref}>\n {<CustomDragLayer allBlocks={allBlocks} socket={socket} />}\n {importExport === \"export\" ?\n <DialogExport\n key=\"dialogExport\"\n onClose={() => setModal(false)}\n open={modal}\n text={JSON.stringify(userRules, null, 2)} /> :\n <DialogImport\n open={modal}\n key=\"dialogImport\"\n onClose={text => {\n setModal(false);\n if (text) {\n onChangeBlocks(JSON.parse(text));\n }\n }} />}\n {<div className={Utils.clsx(cls.rootWrapper, addClass[835] && cls.addClass)}>\n <Menu\n setAllBlocks={setAllBlocks}\n allBlocks={allBlocks}\n userRules={userRules}\n onChangeBlocks={onChangeBlocks}\n setTourStep={setTourStep}\n tourStep={tourStep}\n addClass={addClass}\n isTourOpen={isTourOpen}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n userRules={userRules}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n name={`${I18n.t('when')}...`}\n typeBlock=\"triggers\"\n iconName=\"FlashOn\"\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('and')}...`}\n typeBlock=\"conditions\"\n iconName=\"Help\"\n nameAdditionally={I18n.t('or')}\n additionally\n border\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('then')}`}\n typeBlock=\"actions\"\n iconName=\"PlayForWork\"\n nameAdditionally={I18n.t('else')}\n additionally\n size={addClass[835]}\n />\n </div>}\n </div>;\n}\n\nRulesEditor.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string,\n scriptId: PropTypes.string,\n setTourStep: PropTypes.func,\n tourStep: PropTypes.number,\n command: PropTypes.string,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n searchText: PropTypes.string,\n resizing: PropTypes.bool,\n\n};\n\nexport default RulesEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport ScriptEditorComponent from '../ScriptEditorVanilaMonaco';\n\nconst styles = theme => ({\n editorDiv: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n editor: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n line: {\n width: '100%',\n whiteSpace: 'nowrap',\n },\n lineNumber: {\n width: 40,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n textAlign: 'right',\n fontSize: 14,\n marginRight: 1,\n borderRight: '1px solid #555',\n cursor: 'pointer'\n },\n lineBreakpoint: {\n background: '#330000',\n color: 'white',\n },\n lineCode: {\n //whiteSpace: 'nowrap',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n fontSize: 14,\n margin: 0,\n whiteSpace: 'pre',\n },\n lineCurrentCode: {\n background: 'red',\n color: 'white',\n },\n lineCurrent: {\n background: '#880000',\n color: 'white',\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lines: (this.props.script || '').split(/\\r\\n|\\n/)\n };\n }\n\n editorDidMount(editor, monaco) {\n this.monaco = monaco;\n this.editor = editor;\n editor.focus();\n }\n\n render() {\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv2\">\n <ScriptEditorComponent\n key=\"scriptEditor2\"\n name={this.props.scriptName}\n adapterName={this.props.adapterName}\n readOnly\n code={this.props.script || ''}\n isDark={this.props.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.props.runningInstances}\n language={'javascript'}\n\n breakpoints={this.props.breakpoints}\n location={this.props.paused ? this.props.location : null}\n onToggleBreakpoint={i => this.props.onToggleBreakpoint(i)}\n />\n </div>;\n }\n}\n\nEditor.propTypes = {\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n sourceId: PropTypes.string,\n script: PropTypes.string,\n scriptName: PropTypes.string,\n adapterName: PropTypes.string,\n paused: PropTypes.bool,\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport IconButton from '@mui/material/IconButton';\n\nimport {\n MdContentCopy as IconCopy,\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n} from 'react-icons/md';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n consoleLine: {\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n },\n console_log: {\n\n },\n console_warn: {\n backgroundColor: theme.palette.mode === 'dark' ? '#885900' : '#ffa500',\n },\n console_error: {\n backgroundColor: theme.palette.mode === 'dark' ? '#7a0000' : '#FF0000',\n },\n console_debug: {\n opacity: 0.6,\n },\n consoleSeverity: {\n verticalAlign: 'top',\n width: 50,\n textTransform: 'uppercase',\n },\n consoleTime: {\n whiteSpace: 'nowrap',\n verticalAlign: 'top',\n width: 170,\n },\n consoleText: {\n fontFamily: 'Lucida Console, Courier, monospace',\n paddingTop: 4,\n '&>pre': {\n margin: 0,\n },\n },\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black',\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n },\n toolbox: {\n //position: 'absolute',\n //top: 0,\n //left: 0,\n //marginLeft: 2,\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90,\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold',\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4,\n },\n});\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) {\n i = '0' + i.toString();\n }\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) {\n i = '0' + i.toString();\n }\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) {\n i = '0' + i.toString();\n }\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\n\nclass Console extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n };\n this.messagesEnd = React.createRef();\n }\n generateLine(message) {\n return <tr key={`tr_${message.ts}_${message.text.substr(-10)}`} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.text}</td>\n </tr>;\n }\n renderLogList(lines) {\n if (lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>\n {lines.map((line, i) => this.generateLine(line))}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n onCopy() {\n Utils.copyToClipboard(this.props.console.join('\\n'));\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n render() {\n const lines = this.props.console;\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onClearAllLogs()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n theme: PropTypes.object,\n onClearAllLogs: PropTypes.func,\n console: PropTypes.array,\n};\n\nexport default withStyles(styles)(Console);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\n\nimport { MdCheck as CheckIcon } from 'react-icons/md';\nimport { MdAdd as IconAdd } from 'react-icons/md';\nimport { MdDelete as IconDelete } from 'react-icons/md';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n frameRoot: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n frameTextRoot: {\n margin: 0,\n },\n frameTextPrimary: {\n color: theme.palette.mode === 'dark' ? '#CCC' : '#333',\n },\n frameTextSecondary: {\n fontStyle: 'italic',\n fontSize: 12,\n opacity: 0.6,\n paddingLeft: theme.spacing(1),\n },\n\n listRoot: {\n padding: 0,\n },\n\n scopeType: {\n verticalAlign: 'top',\n textTransform: 'uppercase',\n width: 50,\n },\n scopeType_local: {\n color: '#53a944'\n },\n scopeType_closure: {\n color: '#365b80'\n },\n scopeType_user: {\n color: '#a48a15'\n },\n scopeName: {\n color: '#bc5b5b',\n width: 'calc(100% - 82px)',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n scopeButton: {\n width: 32\n },\n scopeValueEditable: {\n cursor: 'pointer'\n },\n selectedFrame: {\n backgroundColor: '#777',\n color: 'white'\n },\n splitter: {\n width: '100%',\n height: 'calc(100% - 36px)',\n overflow: 'hidden',\n fontSize: 12\n },\n\n toolbarScopes: {\n width: 24,\n display: 'inline-block',\n height: '100%',\n background: theme.palette.mode === 'dark' ? '#222' : '#EEE',\n verticalAlign: 'top',\n },\n scopesAfterToolbar: {\n width: 'calc(100% - 24px)',\n display: 'inline-block',\n height: '100%',\n verticalAlign: 'top',\n },\n\n scopeNameName: {\n fontWeight: 'bold',\n display: 'inline-block',\n verticalAlign: 'top',\n },\n scopeNameEqual: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n verticalAlign: 'top',\n },\n scopeNameValue: {\n verticalAlign: 'top',\n display: 'inline-block',\n color: '#3b709f',\n whiteSpace: 'nowrap',\n },\n scopeButtonDel: {\n padding: 0,\n float: 'right',\n },\n\n valueNull: {\n color: '#a44a24'\n },\n valueUndefined: {\n color: '#a44a24'\n },\n valueString: {\n color: '#1e8816'\n },\n valueNumber: {\n color: '#163c88'\n },\n valueBoolean: {\n color: '#a44a24'\n },\n valueObject: {\n color: '#721b70'\n },\n valueNone: {\n color: '#8a8a8a'\n },\n valueFunc: {\n color: '#ac4343'\n }\n});\n\nclass Stack extends React.Component {\n constructor(props) {\n super(props);\n\n this.framesSize = parseFloat(window.localStorage.getItem('App.framesSize')) || 300;\n\n this.state = {\n editValue: null,\n callFrames: this.props.callFrames,\n };\n\n this.editRef = React.createRef();\n }\n\n onExpressionNameUpdate() {\n this.props.onExpressionNameUpdate(this.state.editValue.index, this.scopeValue, () => {\n this.setState({editValue: null});\n this.scopeValue = null;\n });\n }\n\n renderExpression(item, i) {\n const name = this.state.editValue && this.state.editValue.type === 'expression' && this.state.editValue.index === i ?\n <Input\n inputRef={this.editRef}\n fullWidth\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={item.name}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onExpressionNameUpdate();\n } else if (e.keyCode === 27) {\n this.setState({editValue: null});\n }\n }}\n\n onChange={e =>\n this.scopeValue = e.target.value}\n\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onExpressionNameUpdate()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to edit expression')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)}</div>\n ];\n\n return <tr key={`user_${i}${item.name}`}>\n <td className={Utils.clsx(this.props.classes.scopeType, this.props.classes['scopeType_user'])}>user</td>\n <td className={this.props.classes.scopeName}\n onDoubleClick={() => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n }}\n >{name}</td>\n <IconButton\n className={this.props.classes.scopeButtonDel}\n size=\"small\"\n disabled={!!this.state.editValue}\n onClick={() => this.props.onExpressionDelete(i)}\n >\n <IconDelete/>\n </IconButton>\n </tr>\n }\n\n renderExpressions() {\n return this.props.expressions.map((item, i) => this.renderExpression(item, i));\n }\n\n renderOneFrameTitle(frame, i) {\n if (this.props.mainScriptId === this.props.currentScriptId && frame.location.scriptId !== this.props.mainScriptId) {\n return null;\n }\n const fileName = frame.url.split('/').pop().replace(/^script\\.js\\./, '');\n return <ListItemButton\n key={frame.id}\n onClick={() => this.props.onChangeCurrentFrame(i)}\n dense\n selected={this.props.currentFrame === i}\n classes={{ root: this.props.classes.frameRoot }}\n >\n <ListItemText\n classes={{root: this.props.classes.frameTextRoot, primary: this.props.classes.frameTextPrimary, secondary: this.props.classes.frameTextSecondary}}\n title={frame.url}\n primary={frame.functionName || 'anonymous'}\n secondary={`${fileName} (${frame.location.lineNumber}:${frame.location.columnNumber})`}\n />\n </ListItemButton>;\n }\n\n formatValue(value, forEdit) {\n if (!value) {\n if (forEdit) {\n return 'none';\n } else {\n return <span className={this.props.classes.valueNone}>none</span>;\n }\n } else if (value.type === 'function') {\n const text = value.description ? (value.description.length > 100 ? value.description.substring(0, 100) + '...' : value.description) : 'function';\n if (forEdit) {\n return text;\n } else {\n return <span className={this.props.classes.valueFunc} title={value.description}>{text}</span>;\n }\n } else if (value.value === undefined) {\n if (forEdit) {\n return 'undefined';\n } else {\n return <span className={this.props.classes.valueUndefined}>undefined</span>;\n }\n } else if (value.value === null) {\n if (forEdit) {\n return 'null';\n } else {\n return <span className={this.props.classes.valueNull}>null</span>;\n }\n } else if (value.type === 'string') {\n if (forEdit) {\n return value.value;\n } else {\n const text = value.value ? (value.value.length > 100 ? value.value.substring(0, 100) + '...' : value.value) : '';\n return <span className={this.props.classes.valueString} title={text}>\"{text}\"</span>;\n }\n } else if (value.type === 'boolean') {\n if (forEdit) {\n return value.value.toString();\n } else {\n return <span className={this.props.classes.valueBoolean}>{value.value.toString()}</span>;\n }\n } else if (value.type === 'object') {\n if (forEdit) {\n return JSON.stringify(value.value);\n } else {\n return <ReactJson\n enableClipboard={false}\n style={{backgroundColor: 'inherit', marginTop: 3}}\n src={value.value}\n collapsed\n theme={this.props.themeType === 'dark' ? 'brewer' : 'rjv-default'}\n displayDataTypes={false}\n />;\n }\n } else {\n return value.value.toString();\n }\n }\n\n onWriteScopeValue() {\n if (this.scopeValue === 'true') {\n this.scopeValue = true;\n } else if (this.scopeValue === 'false') {\n this.scopeValue = false;\n } else if (this.scopeValue === 'null') {\n this.scopeValue = null;\n } else if (this.scopeValue === 'undefined') {\n this.scopeValue = undefined;\n } else\n if (parseFloat(this.scopeValue).toString() === this.scopeValue) {\n this.scopeValue = parseFloat(this.scopeValue);\n }\n\n this.props.onWriteScopeValue({\n variableName: this.state.editValue.name,\n scopeNumber: 0,\n newValue: {\n value: this.scopeValue,\n valueType: typeof this.scopeValue,\n },\n callFrameId: this.props.callFrames[this.props.currentFrame].callFrameId\n });\n\n this.setState({editValue: null});\n this.scopeValue = null;\n }\n\n componentDidUpdate() {\n //this.editRef.current?.select();\n this.editRef.current?.focus();\n }\n\n renderScope(scopeId, item, type) {\n const editable = !this.props.currentFrame && item.value && (item.value.type === 'undefined' || item.value.type === 'string' || item.value.type === 'number' || item.value.type === 'boolean' || item.value?.value === null || item.value?.value === undefined);\n\n const el = this.state.editValue && this.state.editValue.type === type && this.state.editValue.name === item.name ?\n [\n <div key=\"name\" className={this.props.classes.scopeNameName}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <Input\n inputRef={this.editRef}\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={this.formatValue(item.value, true)}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onWriteScopeValue()\n } else if (e.keyCode === 27) {\n this.setState({editValue: null})\n }\n }}\n onChange={e =>\n this.scopeValue = e.target.value}\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onWriteScopeValue()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n ]\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to write value')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)} ({item.value.type})</div>\n ];\n\n\n return <tr key={`${type}_${scopeId}_${item.name}`}>\n <td className={Utils.clsx(this.props.classes.scopeType, this.props.classes['scopeType_' + type])}>{type}</td>\n <td\n className={Utils.clsx(this.props.classes.scopeName, !this.props.currentFrame && editable && this.props.classes.scopeValueEditable)}\n onDoubleClick={() => {\n if (editable) {\n this.scopeValue = item.value.value;\n this.setState({\n editValue: {\n scopeId,\n type,\n valueType: item.value.type,\n name: item.name,\n value: item.value.value\n }\n });\n }\n }}\n >{el}</td>\n </tr>;\n }\n\n renderScopes(frame) {\n if (!frame) {\n return null;\n } else {\n // first local\n let result = this.renderExpressions();\n\n let items = this.props.scopes?.local?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'local'));\n items && items.forEach(item => result.push(item));\n\n items = this.props.scopes?.closure?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'closure'));\n items && items.forEach(item => result.push(item));\n\n return <table style={{width: '100%'}}>\n <tbody>\n {result}\n </tbody>\n </table>;\n }\n }\n\n render() {\n return <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryIndex={1}\n secondaryMinSize={200}\n primaryMinSize={200}\n vertical={false}\n secondaryInitialSize={this.framesSize}\n onSecondaryPaneSizeChange={size => this.framesSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.framesSize', this.framesSize.toString())}\n >\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <List classes={{root: this.props.classes.listRoot}}>\n {this.props.callFrames ? this.props.callFrames.map((frame, i) =>\n this.renderOneFrameTitle(frame, i)) : null}\n </List>\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <div className={this.props.classes.toolbarScopes}>\n <IconButton size=\"small\" onClick={() => this.props.onExpressionAdd((i, item) => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n })}><IconAdd/></IconButton>\n </div>\n <div className={this.props.classes.scopesAfterToolbar}>\n {this.props.callFrames && this.props.callFrames.length && this.renderScopes(this.props.callFrames[this.props.currentFrame])}\n </div>\n </div>\n </SplitterLayout>;\n }\n}\n\nStack.propTypes = {\n currentScriptId: PropTypes.string,\n mainScriptId: PropTypes.string,\n scopes: PropTypes.object,\n expressions: PropTypes.array,\n callFrames: PropTypes.array,\n currentFrame: PropTypes.number,\n onChangeCurrentFrame: PropTypes.func,\n onWriteScopeValue: PropTypes.func,\n onExpressionDelete: PropTypes.func,\n onExpressionAdd: PropTypes.func,\n onExpressionNameUpdate: PropTypes.func,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(Stack);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Toolbar from '@mui/material/Toolbar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport Badge from '@mui/material/Badge';\n\nimport { MdClose as IconClose, MdPlayArrow as IconRun } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdArrowForward as IconNext } from 'react-icons/md';\nimport { MdArrowDownward as IconStep } from 'react-icons/md';\nimport { MdArrowUpward as IconOut } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdWarning as IconException } from 'react-icons/md';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport DialogError from '../../Dialogs/Error';\nimport Editor from './Editor';\nimport Console from './Console';\nimport Stack from './Stack';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n overflow: 'hidden',\n position: 'relative'\n },\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n buttonRun: {\n color: 'green'\n },\n buttonPause: {\n color: 'orange'\n },\n buttonRestart: {\n color: 'darkgreen'\n },\n buttonStop: {\n color: 'red'\n },\n buttonNext: {\n color: 'blue'\n },\n buttonStep: {\n color: 'blue'\n },\n buttonOut: {\n color: 'blue'\n },\n buttonException: {\n\n },\n\n tabFile: {\n textTransform: 'inherit',\n color: theme.palette.mode === 'dark' ? '#DDD' : 'inherit'\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n closeButton: {\n position: 'absolute',\n top: 8,\n right: 0,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n\n tabsRoot: {\n minHeight: 24,\n background: theme.palette.mode === 'dark' ? '#333' : '#e6e6e6',\n color: theme.palette.mode === 'dark' ? 'white' : 'inherit'\n },\n tabRoot: {\n minHeight: 24,\n },\n\n bpListItem: {\n borderTop: '1px dashed #bfbfbf44',\n },\n monospace: {\n fontFamily: 'Courier New, monospace',\n whiteSpace: 'pre',\n fontSize: 12,\n },\n arrow: {\n color: '#fffa4f',\n },\n splitter: {\n height: 'calc(100% - 52px)',\n '& .layout-pane': {\n overflow: 'hidden',\n height: '100%'\n }\n }\n});\n\nclass Debugger extends React.Component {\n constructor(props) {\n super(props);\n let breakpoints = window.localStorage.getItem('javascript.tools.bp.' + this.props.src);\n try {\n breakpoints = breakpoints ? JSON.parse(breakpoints) : [];\n } catch (e) {\n breakpoints = [];\n }\n\n let expressions = window.localStorage.getItem('javascript.tools.exps.' + this.props.src);\n try {\n expressions = expressions ? JSON.parse(expressions) : [];\n expressions = expressions.map(name => ({name}));\n } catch (e) {\n expressions = [];\n }\n\n this.toolSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.toolSize')) || 150 : 150;\n\n this.state = {\n starting: true,\n selected: null,\n tabs: {},\n script: '',\n breakpoints,\n expressions,\n running: false,\n error: '',\n started: false,\n paused: true,\n location: null,\n toolsTab: window.localStorage.getItem('javascript.tools.tab') || 'console',\n stopOnException: window.localStorage.getItem('javascript.tools.stopOnException') === 'true',\n console: [],\n finished: false,\n currentFrame: 0,\n scopes: {},\n queryBreakpoints: null,\n logErrors: 0,\n logWarnings: 0,\n logs: 0,\n };\n\n this.scripts = {};\n this.mainScriptId = null;\n }\n\n componentDidMount() {\n new Promise(resolve => {\n if (this.props.debugInstance) {\n resolve(this.props.debugInstance.instance);\n } else {\n this.props.socket.getObject(this.props.src)\n .then(obj => resolve(obj?.common?.engine?.replace('system.adapter.', '')));\n }\n })\n .then(instance =>\n this.setState({ instance }, () => {\n if (this.state.instance) {\n this.props.socket.setState(`${this.state.instance}.debug.from`, { val: '{\"cmd\": \"subscribed\"}', ack: true });\n //.then(() => );\n setTimeout(() =>\n this.props.socket.subscribeState(`${this.state.instance}.debug.from`, this.fromInstance), 200);\n } else {\n this.setState({ error: 'Unknown instance' });\n }\n }));\n }\n\n componentWillUnmount() {\n if (this.state.instance) {\n this.props.socket.unsubscribeState(`${this.state.instance}.debug.from`, this.fromInstance);\n this.props.socket.sendTo(this.state.instance, 'debugStop');\n }\n }\n\n sendToInstance(cmd) {\n this.props.socket.setState(`${this.state.instance}.debug.to`, { val: JSON.stringify(cmd), ack: false });\n }\n\n reinitBreakpoints(cb) {\n if (this.state.breakpoints.length) {\n let breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n breakpoints = breakpoints.map(item => item.location);\n this.setState({breakpoints: []}, () => {\n this.sendToInstance({breakpoints, cmd: 'sb'});\n if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n }\n\n cb && cb();\n });\n } else if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n cb && cb();\n } else {\n cb && cb();\n }\n }\n\n getLocation(context) {\n if (context.callFrames) {\n const frame = context.callFrames[0];\n return frame.location;\n }\n }\n\n readCurrentScope() {\n const frame = this.state.context?.callFrames && this.state.context.callFrames[this.state.currentFrame];\n if (frame) {\n const scopes = frame.scopeChain.filter(scope => scope.type !== 'global');\n if (scopes.length) {\n this.sendToInstance({cmd: 'scope', scopes});\n } else if (this.state.scopes.global || this.state.scopes.local || this.state.scopes.closure) {\n this.setState({scopes: {}});\n }\n }\n }\n\n readExpressions(i) {\n if (this.state.expressions.length && this.state.context?.callFrames && this.state.context.callFrames[this.state.currentFrame]) {\n if (i !== undefined) {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: [this.state.expressions[i]],\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n } else {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: this.state.expressions,\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n }\n }\n }\n\n fromInstance = (id, state) => {\n try {\n const data = JSON.parse(state.val);\n if (data.cmd === 'subscribed') {\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src});\n } else\n if (data.cmd === 'readyToDebug') {\n this.mainScriptId = data.scriptId;\n this.scripts[data.scriptId] = data.script;\n if (data.script.startsWith('(async () => {debugger;\\n')) {\n this.scripts[data.scriptId] = `(async () => {\\n${data.script.substring('(async () => {debugger;\\n'.length)}`;\n } else if (data.script.startsWith('debugger;')) {\n this.scripts[data.scriptId] = data.script.substring('debugger;'.length);\n }\n\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n tabs[data.scriptId] = this.props.debugInstance ? data.url: this.props.src.replace('script.js.', '');\n\n const ts = `${Date.now()}.${Math.random() * 10000}`;\n data.context?.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n\n this.setState({\n starting: false,\n finished: false,\n selected: this.mainScriptId,\n script: this.scripts[data.scriptId],\n tabs,\n currentFrame: 0,\n started: true,\n paused: true,\n location: this.getLocation(data.context),\n context: data.context,\n }, () =>\n this.reinitBreakpoints(() => {\n this.readCurrentScope();\n this.readExpressions();\n }));\n } else if (data.cmd === 'paused') {\n const ts = `${Date.now()}.${Math.random() * 10000}`;\n data.context?.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n const location = this.getLocation(data.context);\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n const parts = data.context.callFrames[0].url.split('iobroker.javascript');\n tabs[location.scriptId] = (parts[1] || parts[0]).replace('script.js.', '');\n\n const newState = {\n tabs,\n paused: true,\n location,\n currentFrame: 0,\n context: data.context,\n scope: {id: (data.context?.callFrames && data.context.callFrames[0] && data.context.callFrames[0].id) || 0}\n };\n\n newState.script = this.scripts[location.scriptId] === undefined ? I18n.t('loading...') : this.scripts[location.scriptId];\n newState.selected = location.scriptId;\n\n this.setState(newState, () => {\n this.readCurrentScope();\n this.readExpressions();\n if (!this.scripts[location.scriptId]) {\n this.sendToInstance({cmd: 'source', scriptId: location.scriptId});\n }\n });\n } else if (data.cmd === 'script') {\n this.scripts[data.scriptId] = data.text;\n if (this.state.selected === data.scriptId) {\n this.setState({script: this.scripts[data.scriptId]});\n }\n } else if (data.cmd === 'resumed') {\n this.setState({paused: false});\n } else if (data.cmd === 'log') {\n if (this.state.toolsTab === 'console') {\n this.console = null;\n const console = [...this.state.console];\n console.push({text: data.text, severity: data.severity, ts: data.ts});\n this.setState({console});\n } else {\n if (data.severity === 'error') {\n this.setState({logErrors: this.state.logErrors + 1});\n } else if (data.severity === 'warn') {\n this.setState({logWarnings: this.state.logWarnings + 1});\n } else {\n this.setState({logs: this.state.logs + 1});\n }\n this.console = this.console || [...this.state.console];\n this.console.push({text: data.text, severity: data.severity, ts: data.ts});\n }\n } else if (data.cmd === 'error') {\n this.setState({error: data.error});\n } else if (data.cmd === 'finished' || data.cmd === 'debugStopped') {\n this.setState({\n finished: true,\n starting: false,\n started: true,\n });\n } else if (data.cmd === 'sb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n data.breakpoints.filter(bp => bp).forEach(bp => {\n const found = breakpoints.find(item =>\n item.location.scriptId === bp.location.scriptId && item.location.lineNumber === bp.location.lineNumber);\n if (!found) {\n changed = true;\n breakpoints.push(bp);\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'cb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n\n data.breakpoints.filter(id => id !== undefined && id !== null).forEach(id => {\n const found = breakpoints.find(item => item.id === id);\n if (found) {\n const pos = breakpoints.indexOf(found);\n breakpoints.splice(pos, 1);\n changed = true;\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'scope') {\n //const global = data.scopes.find(scope => scope.type === 'global') || null;\n const local = data.scopes.find(scope => scope.type === 'local') || null;\n const closure = data.scopes.find(scope => scope.type === 'closure') || null;\n\n console.log(JSON.stringify(closure));\n\n this.setState({scopes: {local, closure, id: `${this.state.scope.id}_${this.state.currentFrame}`}});\n } else if (data.cmd === 'setValue') {\n const scopes = JSON.parse(JSON.stringify(this.state.scopes));\n let item;\n if (data.scopeNumber === 0) {\n item = scopes.local && scopes.local.properties && scopes.local.properties.result && scopes.local.properties.result.find(item => item.name === data.variableName);\n } else {\n item = scopes.closure && scopes.closure.properties && scopes.closure.properties.result && scopes.closure.properties.result && scopes.closure.properties.result.find(item => item.name === data.variableName);\n }\n if (item) {\n item.value.value = data.newValue.value;\n this.setState({scopes});\n }\n } else if (data.cmd === 'expressions') {\n // update values\n let expressions = JSON.parse(JSON.stringify(this.state.expressions));\n let changed = false;\n data.expressions.forEach(item => {\n const expression = expressions.find(it => it.name === item.name);\n if (expression) {\n changed = true;\n expression.value = item.result;\n }\n });\n changed && this.setState({expressions});\n\n console.log('expressions: ' + JSON.stringify(data));\n } else if (data.cmd === 'getPossibleBreakpoints') {\n if (data.breakpoints?.locations?.length === 1) {\n this.sendToInstance({breakpoints: data.breakpoints.locations, cmd: 'sb'});\n } else if (!data.breakpoints?.locations?.length) {\n window.alert('cannot set');\n } else {\n this.setState({queryBreakpoints: data.breakpoints.locations});\n }\n } else {\n console.error(`Unknown command: ${JSON.stringify(data)}`);\n }\n } catch (e) {\n\n }\n }\n\n getTextAtLocation(location) {\n let line = this.state.script.split(/\\r\\n|\\n/)[location.lineNumber];\n let arrow = '';\n if (location.columnNumber >= 10) {\n line = line.substring(location.columnNumber - 10, location.columnNumber + 20);\n arrow = ''.padStart(10, ' ') + '↑';\n } else {\n line = line.substring(0, 30 - location.columnNumber);\n arrow = ''.padStart(location.columnNumber, ' ') + '↑';\n }\n return [\n <div key=\"line\" className={this.props.classes.monospace}>{line}</div>,\n <div key=\"arrow\" className={Utils.clsx(this.props.classes.monospace, this.props.classes.arrow)}>{arrow}</div>\n ];\n }\n\n renderQueryBreakpoints() {\n if (this.state.queryBreakpoints) {\n return <Dialog onClose={() => this.setState({ queryBreakpoints: null })} aria-labelledby=\"bp-dialog-title\" open={!0}>\n <DialogTitle id=\"bp-dialog-title\">{I18n.t('Select breakpoint')}</DialogTitle>\n <List>\n {this.state.queryBreakpoints.map((bp, i) => (\n <ListItemButton\n classes={{root: this.props.classes.bpListItem}}\n dense\n onClick={() => {\n this.sendToInstance({breakpoints: [bp], cmd: 'sb'});\n this.setState({queryBreakpoints: null})\n }}\n key={i}>\n <ListItemText\n classes={{primary: this.props.classes.bpListPrimary, secondary: this.props.classes.bpListSecondary}}\n primary={this.getTextAtLocation(bp)}\n />\n </ListItemButton>\n ))}\n </List>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n renderError() {\n if (this.state.error) {\n return <DialogError key=\"dialogError\" onClose={() => this.setState({ error: '' })} text={this.state.error} />;\n } else {\n return null;\n }\n }\n\n closeTab(id, e) {\n e && e.stopPropagation();\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n delete tabs[id];\n const newState = {tabs, script: this.scripts[this.mainScriptId], selected: this.mainScriptId};\n if (this.state.location && this.state.location.scriptId !== this.mainScriptId) {\n newState.location = null;\n }\n this.setState(newState);\n }\n\n renderTabs() {\n const disabled = !this.state.tabs || !this.state.started;\n return <Tabs\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: 'calc(100% - 300px)', display: 'inline-block' }}\n value={this.state.selected}\n onChange={(event, value) => {\n if (this.scripts[value]) {\n this.setState({selected: value, script: this.scripts[value]});\n } else {\n this.setState({selected: value, script: 'loading...'}, () =>\n this.sendToInstance({cmd: 'source', scriptId: value}));\n }\n }}\n scrollButtons=\"auto\"\n >\n {Object.keys(this.state.tabs || [])\n .map(id => {\n let label = id;\n let title = this.state.tabs[id] || '';\n if (this.state.tabs[id]) {\n label = this.state.tabs[id].split('/').pop();\n }\n label = [\n <div key=\"text\" className={Utils.clsx(this.props.classes.tabText)}>{label}</div>,\n id !== this.mainScriptId && <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose key=\"close\" onClick={e => this.closeTab(id, e)} fontSize=\"small\" /></span>];\n\n return <Tab disabled={disabled} classes={{root: this.props.classes.tabFile}} label={label} title={title} key={id} value={id}/>;\n })}\n </Tabs>;\n }\n\n onResume() {\n this.sendToInstance({cmd: 'cont'});\n }\n\n onPause() {\n this.sendToInstance({cmd: 'pause'});\n }\n\n onNext() {\n this.sendToInstance({cmd: 'next'});\n }\n\n onStepIn() {\n this.sendToInstance({cmd: 'step'});\n }\n\n onStepOut() {\n this.sendToInstance({cmd: 'out'});\n }\n\n onRestart() {\n this.setState({started: false, starting: true}, () =>\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src}));\n }\n\n onToggleException() {\n const stopOnException = !this.state.stopOnException;\n window.localStorage.setItem('javascript.tools.stopOnException', stopOnException ? 'true' : 'false');\n this.setState({stopOnException}, () =>\n this.sendToInstance({cmd: 'stopOnException', state: stopOnException}));\n }\n\n renderToolbar() {\n const disabled = !this.state.started;\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n <IconButton\n className={this.props.classes.buttonRestart}\n disabled={disabled}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"><IconRestart/></IconButton>\n {\n !this.state.finished && this.state.paused ?\n <IconButton\n className={this.props.classes.buttonRun}\n disabled={disabled}\n onClick={() => this.onResume()}\n title={I18n.t('Resume execution')}\n size=\"medium\"><IconRun/></IconButton>\n :\n !this.state.finished && <IconButton\n disabled={disabled}\n className={this.props.classes.buttonPause}\n onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}\n size=\"medium\"><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonNext}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onNext()}\n title={I18n.t('Go to next line')}\n size=\"medium\"><IconNext/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonStep}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepIn()}\n title={I18n.t('Step into function')}\n size=\"medium\"><IconStep/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonOut}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepOut()}\n title={I18n.t('Step out from function')}\n size=\"medium\"><IconOut/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonException}\n color={this.state.stopOnException ? 'primary' : 'default'}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onToggleException()}\n title={I18n.t('Stop on exception')}\n size=\"medium\"><IconException/></IconButton>}\n {this.renderTabs()}\n </Toolbar>\n );\n }\n\n getPossibleBreakpoints(bp) {\n const end = {...bp, columnNumber: 1000};\n this.sendToInstance({cmd: 'getPossibleBreakpoints', start: bp, end});\n }\n\n toggleBreakpoint(lineNumber) {\n let bp = this.state.breakpoints.find(item => item.location.scriptId === this.state.selected && item.location.lineNumber === lineNumber);\n if (bp) {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n this.setState({breakpoints}, () =>\n this.sendToInstance({breakpoints: [bp.id], cmd: 'cb'}));\n } else {\n bp = {scriptId: this.state.selected, lineNumber, columnNumber: 0};\n this.getPossibleBreakpoints(bp);\n }\n }\n\n renderCode() {\n if (this.state.script && this.state.started) {\n const breakpoints = this.state.breakpoints.filter(bp => bp.location.scriptId === this.state.selected);\n\n return <Editor\n runningInstances={this.props.runningInstances}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n scriptName={this.state.tabs[this.state.selected]}\n sourceId={this.state.selected}\n script={this.state.script}\n paused={this.state.paused}\n breakpoints={breakpoints}\n location={this.state.location}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n onToggleBreakpoint={i => this.toggleBreakpoint(i)}\n />\n }\n }\n\n renderFrames() {\n if (!this.state.paused) {\n return null;\n }\n\n return <Stack\n currentScriptId={this.state.selected}\n scopes={this.state.scopes}\n expressions={this.state.expressions}\n themeType={this.props.themeType}\n callFrames={this.state.context?.callFrames}\n currentFrame={this.state.currentFrame}\n onChangeCurrentFrame={i => {\n this.setState({currentFrame: i, scopes: {}}, () => {\n this.readCurrentScope();\n this.readExpressions();\n })\n }}\n onWriteScopeValue={obj => {\n this.sendToInstance({\n cmd: 'setValue',\n variableName: obj.variableName,\n scopeNumber: obj.scopeNumber,\n newValue: obj.newValue,\n callFrameId: obj.callFrameId\n });\n }}\n onExpressionDelete={i => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.splice(i, 1);\n this.setState({expressions});\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n onExpressionAdd={cb => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.push({name: '', value: {value: ''}});\n this.setState({expressions}, () => cb && cb(expressions.length - 1, this.state.expressions[expressions.length - 1]));\n }}\n onExpressionNameUpdate={(i, name, cb) => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n if (!name) {\n expressions.splice(i, 1);\n } else if (expressions.find(item => item.name === name)) {\n return cb && cb(false);\n } else {\n expressions[i].name = name;\n }\n\n this.setState({expressions}, () => {\n name && this.readExpressions(i);\n cb && cb();\n });\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n />;\n }\n\n renderConsole() {\n return <Console\n theme={this.props.theme}\n console={this.state.console}\n onClearAllLogs={() => this.setState({console: [], logErrors: 0, logWarning: 0, logs: 0})}\n />;\n }\n\n renderTools() {\n const disabled = !this.state.tabs || !this.state.started;\n\n let _console;\n if (this.state.logErrors) {\n _console = <Badge badgeContent={this.state.logErrors} color=\"error\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logWarnings) {\n _console = <Badge badgeContent={this.state.logWarnings} color=\"secondary\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logs) {\n _console = <Badge badgeContent={this.state.logs} color=\"default\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else {\n _console = I18n.t('Console');\n }\n\n return <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n <Tabs\n classes={{root: this.props.classes.tabsRoot}}\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: '100%' }}\n value={this.state.toolsTab}\n onChange={(event, value) => {\n const newState = {toolsTab: value};\n\n // load logs from buffer\n if (this.console && value === 'console') {\n newState.console = this.console;\n this.console = null;\n newState.logs = 0;\n newState.logWarnings = 0;\n newState.logErrors = 0;\n }\n\n window.localStorage.setItem('javascript.tools.tab', value);\n\n this.setState(newState);\n }}\n scrollButtons=\"auto\"\n >\n <Tab classes={{root: this.props.classes.tabRoot}} disabled={disabled} label={I18n.t('Stack')} value=\"stack\"/>\n <Tab\n classes={{root: this.props.classes.tabRoot}}\n disabled={disabled}\n label={_console}\n value=\"console\"\n />\n </Tabs>\n <div style={{width: '100%', height: 'calc(100% - 36px)', overflow: 'hidden'}}>\n {this.state.toolsTab === 'stack' && !disabled ? this.renderFrames() : null}\n {this.state.toolsTab === 'console' && !disabled ? this.renderConsole() : null}\n </div>\n </div>;\n }\n\n render() {\n return <div key=\"debugger\" style={this.props.style} className={Utils.clsx(this.props.classes.root, this.props.className)}>\n {this.state.starting ? <LinearProgress/> : null}\n {this.renderToolbar()}\n <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryMinSize={100}\n vertical\n secondaryInitialSize={this.toolSize}\n onSecondaryPaneSizeChange={size => this.toolSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.toolSize', this.toolSize.toString())}\n //style={{width: '100%', height: 'calc(100% - 73px)', overflow: 'hidden'}}\n >\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderCode()}\n {this.renderQueryBreakpoints()}\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderTools()}\n </div>\n </SplitterLayout>\n {this.renderError()}\n </div>;\n }\n}\n\nDebugger.propTypes = {\n runningInstances: PropTypes.object,\n adapterName: PropTypes.string,\n src: PropTypes.string,\n socket: PropTypes.object.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n themeType: PropTypes.string,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n debugInstance: PropTypes.object,\n};\n\nexport default withStyles(styles)(Debugger);\n","import ChannelDetector from '@iobroker/type-detector';\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport docs from './docs.md';\n\nlet allObjectsCache = null;\n\nconst allObjects = async socket => {\n if (allObjectsCache) {\n return allObjectsCache;\n }\n const states = await socket.getObjectView('', '\\u9999', 'state');\n const channels = await socket.getObjectView('', '\\u9999', 'channel');\n const devices = await socket.getObjectView('', '\\u9999', 'device');\n const folders = await socket.getObjectView('', '\\u9999', 'folder');\n const enums = await socket.getObjectView('', '\\u9999', 'enum');\n\n allObjectsCache = Object.values(states)\n .concat(Object.values(channels))\n .concat(Object.values(devices))\n .concat(Object.values(folders))\n .concat(Object.values(enums))\n // eslint-disable-next-line\n .reduce((obj, item) => (obj[item._id] = item, obj), {});\n\n return allObjectsCache;\n};\n\nconst getText = (text, lang) => {\n if (text && typeof text === 'object') {\n return text[lang] || text.en;\n }\n return text || '';\n};\n\nconst detectDevices = async socket => {\n const lang = I18n.getLanguage();\n const devicesObject = await allObjects(socket);\n const keys = Object.keys(devicesObject).sort();\n const detector = new ChannelDetector();\n\n const usedIds = [];\n const ignoreIndicators = ['UNREACH_STICKY']; // Ignore indicators by name\n const excludedTypes = ['info'];\n const enums = [];\n const rooms = [];\n const funcs = [];\n const list = [];\n\n keys.forEach(id => {\n if (devicesObject[id]?.type === 'enum') {\n enums.push(id);\n } else if (devicesObject[id]?.common?.smartName) {\n list.push(id);\n }\n });\n\n enums.forEach(id => {\n if (id.startsWith('enum.rooms.')) {\n rooms.push(id);\n } else if (id.startsWith('enum.functions.')) {\n funcs.push(id);\n }\n const members = devicesObject[id].common.members;\n\n if (members && members.length) {\n members.forEach(member => {\n // if an object really exists\n if (devicesObject[member]) {\n if (!list.includes(member)) {\n list.push(member);\n }\n }\n });\n }\n });\n\n const options = {\n objects: devicesObject,\n _keysOptional: keys,\n _usedIdsOptional: usedIds,\n ignoreIndicators,\n excludedTypes,\n };\n\n const result = [];\n\n // we are creating a list of devices, where each device has a following structure:\n // {\n // id: 'hm-rpc.0.KEQ0123456.1',\n // name: 'HM-RC-4-2',\n // role: 'light',\n // room: 'Living room',\n // 'function': 'light'\n // }\n\n list.forEach(id => {\n options.id = id;\n\n const controls = detector.detect(options);\n\n if (controls) {\n controls.forEach(control => {\n const stateId = control.states.find(state => state.id).id;\n // if not yet added\n if (result.find(st => st.id === stateId)) {\n return;\n }\n const deviceObject = {\n id: stateId,\n name: getText(devicesObject[stateId].common.name, lang),\n role: devicesObject[stateId].type,\n deviceType: control.type,\n states: control.states\n .filter(state => state.id)\n .map(state => ({\n id: state.id,\n name: state.name,\n role: state.defaultRole,\n type: devicesObject[state.id].common.type,\n unit: devicesObject[state.id].common.unit,\n read: devicesObject[state.id].common.read === undefined ? true : devicesObject[state.id].common.read,\n write: devicesObject[state.id].common.write === undefined ? true : devicesObject[state.id].common.write,\n })),\n };\n\n const parts = stateId.split('.');\n let channelId;\n let deviceId;\n if (devicesObject[stateId].type === 'channel' || devicesObject[stateId].type === 'state') {\n parts.pop();\n channelId = parts.join('.');\n if (devicesObject[channelId] && (devicesObject[channelId].type === 'channel' || devicesObject[stateId].type === 'folder')) {\n parts.pop();\n deviceId = parts.join('.');\n if (!devicesObject[deviceId] || (devicesObject[deviceId].type !== 'device' && devicesObject[stateId].type !== 'folder')) {\n deviceId = null;\n }\n } else {\n channelId = null;\n }\n }\n // try to detect room\n const room = rooms.find(roomId => {\n if (devicesObject[roomId].common.members.includes(stateId)) {\n return true;\n }\n if (channelId && devicesObject[roomId].common.members.includes(channelId)) {\n return true;\n }\n return deviceId && devicesObject[roomId].common.members.includes(deviceId);\n });\n if (room) {\n deviceObject.room = getText(devicesObject[room].common.name, lang);\n }\n\n // try to detect function\n const func = funcs.find(funcId => {\n if (devicesObject[funcId].common.members.includes(stateId)) {\n return true;\n }\n if (channelId && devicesObject[funcId].common.members.includes(channelId)) {\n return true;\n }\n return deviceId && devicesObject[funcId].common.members.includes(deviceId);\n });\n if (func) {\n deviceObject.function = getText(devicesObject[func].common.name, lang);\n }\n result.push(deviceObject);\n });\n }\n });\n\n // find names and icons for devices\n for (const k in result) {\n const deviceObj = result[k];\n if (deviceObj.type === 'state' || deviceObj.type === 'channel') {\n const idArray = deviceObj._id.split('.');\n idArray.pop();\n\n // read channel\n const parentObject = devicesObject[idArray.join('.')];\n if (parentObject && (parentObject.type === 'channel' || parentObject.type === 'device' || parentObject.type === 'folder')) {\n deviceObj.common.name = getText(parentObject.common?.name || deviceObj.common.name, lang);\n idArray.pop();\n // read device\n const grandParentObject = devicesObject[idArray.join('.')];\n if (grandParentObject?.type === 'device' && grandParentObject.common?.icon) {\n deviceObj.common.name = getText(grandParentObject.common?.name || deviceObj.common.name, lang);\n }\n } else {\n deviceObj.common.name = getText(parentObject?.common?.name || deviceObj.common.name, lang);\n }\n }\n }\n\n return result;\n};\n\nconst systemPrompt = async () => (await fetch(docs)).text();\nexport { systemPrompt, detectDevices };\n","import React, { useCallback, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport OpenAI from 'openai';\n\nimport {\n Button, CircularProgress, Dialog,\n DialogActions, DialogContent, DialogTitle,\n IconButton, TextField,\n} from '@mui/material';\n\nimport {\n Check, Close,\n QuestionMark as Question,\n FileCopy as Copy,\n} from '@mui/icons-material';\n\nimport { Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport { detectDevices, systemPrompt } from './OpenAiPrompt';\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\n\nconst LANGUAGES = {\n ru: 'Russian',\n en: 'English',\n de: 'German',\n es: 'Spanish',\n fr: 'French',\n it: 'Italian',\n pl: 'Polish',\n nl: 'Dutch',\n pt: 'Portuguese',\n uk: 'Ukrainian',\n 'zh-cn': 'Chinese',\n};\n\nconst ChatIcon = () => <svg width=\"24\" height=\"24\" viewBox=\"0 0 2406 2406\">\n <path\n d=\"M1 578.4C1 259.5 259.5 1 578.4 1h1249.1c319 0 577.5 258.5 577.5 577.4V2406H578.4C259.5 2406 1 2147.5 1 1828.6V578.4z\"\n fill=\"#74aa9c\"\n />\n <path\n d=\"M1107.3 299.1c-198 0-373.9 127.3-435.2 315.3C544.8 640.6 434.9 720.2 370.5 833c-99.3 171.4-76.6 386.9 56.4 533.8-41.1 123.1-27 257.7 38.6 369.2 98.7 172 297.3 260.2 491.6 219.2 86.1 97 209.8 152.3 339.6 151.8 198 0 373.9-127.3 435.3-315.3 127.5-26.3 237.2-105.9 301-218.5 99.9-171.4 77.2-386.9-55.8-533.9v-.6c41.1-123.1 27-257.8-38.6-369.8-98.7-171.4-297.3-259.6-491-218.6-86.6-96.8-210.5-151.8-340.3-151.2zm0 117.5-.6.6c79.7 0 156.3 27.5 217.6 78.4-2.5 1.2-7.4 4.3-11 6.1L952.8 709.3c-18.4 10.4-29.4 30-29.4 51.4V1248l-155.1-89.4V755.8c-.1-187.1 151.6-338.9 339-339.2zm434.2 141.9c121.6-.2 234 64.5 294.7 169.8 39.2 68.6 53.9 148.8 40.4 226.5-2.5-1.8-7.3-4.3-10.4-6.1l-360.4-208.2c-18.4-10.4-41-10.4-59.4 0L1024 984.2V805.4L1372.7 604c51.3-29.7 109.5-45.4 168.8-45.5zM650 743.5v427.9c0 21.4 11 40.4 29.4 51.4l421.7 243-155.7 90L597.2 1355c-162-93.8-217.4-300.9-123.8-462.8C513.1 823.6 575.5 771 650 743.5zm807.9 106 348.8 200.8c162.5 93.7 217.6 300.6 123.8 462.8l.6.6c-39.8 68.6-102.4 121.2-176.5 148.2v-428c0-21.4-11-41-29.4-51.4l-422.3-243.7 155-89.3zM1201.7 997l177.8 102.8v205.1l-177.8 102.8-177.8-102.8v-205.1L1201.7 997zm279.5 161.6 155.1 89.4v402.2c0 187.3-152 339.2-339 339.2v-.6c-79.1 0-156.3-27.6-217-78.4 2.5-1.2 8-4.3 11-6.1l360.4-207.5c18.4-10.4 30-30 29.4-51.4l.1-486.8zM1380 1421.9v178.8l-348.8 200.8c-162.5 93.1-369.6 38-463.4-123.7h.6c-39.8-68-54-148.8-40.5-226.5 2.5 1.8 7.4 4.3 10.4 6.1l360.4 208.2c18.4 10.4 41 10.4 59.4 0l421.9-243.7z\"\n fill=\"white\"\n />\n</svg>;\n\nconst OpenAiDialog = props => {\n const [question, setQuestion] = useState(window.localStorage.getItem('openai-question') || '');\n const [answer, setAnswer] = useState('');\n const [open, setOpen] = useState(false);\n const [working, setWorking] = useState(false);\n const [error, setError] = useState(false);\n const [showKeyWarning, setShowKeyWarning] = useState(false);\n const devicesCache = useRef(null);\n const gptKeyCache = useRef(null);\n const docsCache = useRef(null);\n\n const ask = useCallback(async () => {\n let devices;\n if (!devicesCache.current) {\n devices = await detectDevices(props.socket);\n devicesCache.current = devices;\n console.log(`devices: ${JSON.stringify(devices, 2, null)}`);\n } else {\n devices = devicesCache.current;\n }\n let apiKey;\n if (!gptKeyCache.current) {\n const ids = Object.keys(props.runningInstances);\n for (let i = 0; i < ids.length; i++) {\n const config = await props.socket.getObject(ids[i]);\n apiKey = config.native.gptKey;\n if (apiKey) {\n break;\n }\n }\n gptKeyCache.current = apiKey;\n } else {\n apiKey = gptKeyCache.current;\n }\n\n let docs;\n if (!docsCache.current) {\n docs = await systemPrompt();\n docsCache.current = docs;\n } else {\n docs = docsCache.current;\n }\n if (!apiKey) {\n setShowKeyWarning(true);\n return;\n }\n\n setWorking(true);\n setError(false);\n\n try {\n const openai = new OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\n const chatCompletionPhase1 = await openai.chat.completions.create({\n model: 'gpt-3.5-turbo-16k',\n messages: [\n {\n role: 'system',\n content: `You are programmer. Here is a documentation:\\n\\n${docs}`,\n },\n { role: 'system', content: `Here is list of devices:\\n\\n${JSON.stringify(devices, null, 2)}` },\n {\n role: 'user',\n content: `Write code that do:\\n\\n${question}\nReturn only code.\nWrite comments in ${LANGUAGES[I18n.getLanguage()] || 'English'}.\nYou can call async function directly in the code without encapsulate them in async function as this code will be already executed in async function.\nDo not import any libraries as all functions are already imported.`,\n }],\n });\n const message = chatCompletionPhase1.choices[0].message;\n const m = message.content.match(/```(javascript|js|typescript)\\n?(.*)```(.*)/ms);\n let code;\n if (!m) {\n code = message.content;\n if (code.startsWith('`')) {\n code = code.substring(1);\n }\n if (code.endsWith('`')) {\n code = code.substring(0, code.length - 1);\n }\n } else {\n code = m[2];\n if (m[3]) {\n const comments = m[3].split('\\n').map(line => line.trim());\n // skip empty lines on start and end\n while (comments[0] === '') {\n comments.shift();\n }\n code = `${comments.map(line => `// ${line}`).join('\\n')}\\n${code}`;\n }\n }\n console.log(message);\n setAnswer(code);\n } catch (err) {\n if (err.response) {\n setError(err.response.data?.error?.message);\n }\n console.error(`Cannot request: ${err}, ${JSON.stringify(err?.response?.data || err, null, 2)}`);\n }\n\n setWorking(false);\n }, [question]);\n\n return <>\n <IconButton\n key=\"ai\"\n aria-label=\"AI\"\n title={I18n.t('AI code generator')}\n className={props.classes.toolbarButtons}\n size=\"medium\"\n onClick={() => setOpen(true)}\n >\n <ChatIcon />\n </IconButton>\n {showKeyWarning && <Dialog\n maxWidth=\"lg\"\n open={!0}\n onClose={() => setShowKeyWarning(false)}\n fullWidth\n >\n <DialogTitle>{I18n.t('No Chat GPT Key found')}</DialogTitle>\n <DialogContent\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n }}\n >\n <div>\n {I18n.t('You have to enter OpenAI API key in the configuration of javascript adapter.')}\n </div>\n <Button\n variant=\"contained\"\n onClick={() => {\n const ids = Object.keys(props.runningInstances);\n\n window.open(`../../#tab-instances/config/${ids[0] || 'system.adapter.javascript.0'}`, '_blank');\n setShowKeyWarning(false);\n }}\n >\n {I18n.t('Open configuration')}\n </Button>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n startIcon={<Close />}\n onClick={() => setShowKeyWarning(false)}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>}\n {open && <Dialog\n maxWidth=\"lg\"\n classes={{ paper: props.classes.fullHeightDialog }}\n open={!0}\n onClose={() => setOpen(false)}\n fullWidth\n >\n <DialogTitle>{I18n.t('AI code generator')}</DialogTitle>\n <DialogContent\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n height: '100%',\n }}\n >\n <div>\n <TextField\n variant=\"standard\"\n multiline\n autoFocus\n disabled={working}\n fullWidth\n onKeyUp={e => {\n if (e.key === 'Enter' && e.ctrlKey) {\n ask();\n }\n }}\n label={I18n.t('Enter your question')}\n helperText={I18n.t('Press Ctrl+Enter to get the answer')}\n value={question}\n onChange={e => {\n window.localStorage.setItem('openai-question', e.target.value);\n setQuestion(e.target.value);\n }}\n />\n </div>\n <div>\n <Button\n variant=\"contained\"\n disabled={working || !question}\n startIcon={<Question />}\n onClick={async () => ask()}\n >\n {working ? <CircularProgress size={24} /> : I18n.t('Ask')}\n </Button>\n </div>\n <div>\n {I18n.t('Result')}\n </div>\n <div style={{ height: 'calc(100% - 155px)' }}>\n {error ?\n <div style={{ color: '#bb0000' }}>{error}</div>\n :\n <ScriptEditorComponent\n adapterName={props.adapterName}\n runningInstances={props.runningInstances}\n style={{\n height: '100%',\n width: '100%',\n resize: 'none',\n }}\n name=\"ai\"\n socket={props.socket}\n readOnly\n checkJs\n code={answer}\n isDark={props.themeType === 'dark'}\n language={props.language}\n />}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\"\n variant=\"outlined\"\n disabled={!answer}\n startIcon={<Copy />}\n onClick={() => {\n Utils.copyToClipboard(answer);\n window.alert(I18n.t('Copied'));\n }}\n >\n {I18n.t('Copy to clipboard')}\n </Button>\n <Button\n color=\"primary\"\n variant=\"contained\"\n disabled={!answer || error}\n startIcon={<Check />}\n onClick={() => {\n props.onAddCode(answer);\n setOpen(false);\n }}\n >\n {I18n.t('Use generated code')}\n </Button>\n <Button\n color=\"grey\"\n variant=\"contained\"\n startIcon={<Close />}\n onClick={() => setOpen(false)}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>}\n </>;\n};\n\nOpenAiDialog.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n themeType: PropTypes.string,\n language: PropTypes.string,\n onAddCode: PropTypes.func.isRequired,\n};\n\nexport default OpenAiDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tour from 'reactour';\n\nimport Toolbar from '@mui/material/Toolbar';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Badge from '@mui/material/Badge';\nimport Snackbar from '@mui/material/Snackbar';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport Tooltip from '@mui/material/Tooltip';\nimport Paper from '@mui/material/Paper';\n\nimport { red, green } from '@mui/material/colors';\n\nimport { MdSave as IconSave } from 'react-icons/md';\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdClose as IconClose } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { FaClock as IconCron } from 'react-icons/fa';\nimport { FaClipboardList as IconSelectId } from 'react-icons/fa';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { FaFlagCheckered as IconCheck } from 'react-icons/fa';\nimport { MdGpsFixed as IconLocate } from 'react-icons/md';\nimport { MdClearAll as IconCloseAll } from 'react-icons/md';\nimport { MdBuild as IconDebugMenu } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\nimport { MdPlaylistAddCheck as IconVerbose } from 'react-icons/md';\nimport { MdBugReport as IconDebugMode } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdAutoAwesome as IconAstro } from 'react-icons/md';\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgBlockly2Js from './assets/blockly2js.png';\nimport ImgRules2Js from './assets/rules2js.png';\nimport ImgRules from './assets/rules.png';\n\nimport {\n I18n, Utils, Cron as DialogCron, Confirm as DialogConfirm, SelectID as DialogSelectID,\n} from '@iobroker/adapter-react-v5';\n\nimport ScriptEditorComponent from './Components/ScriptEditorVanilaMonaco';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport DialogScriptEditor from './Dialogs/ScriptEditor';\nimport RulesEditor from './Components/RulesEditor';\nimport Debugger from './Components/Debugger';\nimport steps, { STEPS } from './Components/RulesEditor/helpers/Tour';\nimport OpenAiDialog from './OpenAi/OpenAiDialog';\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n 'Rules': ImgRules,\n def: ImgJS,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_DEBUG = '#02a102';\nconst COLOR_VERBOSE = '#70aae9';\nconst COLOR_RUN = green[400];\nconst COLOR_PAUSE = red[400];\n\nconst styles = theme => ({\n\n toolbar: {\n minHeight: 38, // Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)',\n },\n toolbarButtons: {\n padding: 4,\n marginLeft: 4,\n },\n toolbarButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n editorDiv: {\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 10}px)`,\n width: '100%',\n overflow: 'hidden',\n position: 'relative',\n },\n textButton: {\n marginRight: 10,\n minHeight: 24,\n padding: '6px 16px',\n },\n saveButton: {\n background: '#ff9900',\n },\n textIcon: {\n marginLeft: theme.spacing(1),\n },\n tabIcon: {\n width: 24,\n height: 24,\n verticalAlign: 'middle',\n marginBottom: 2,\n marginRight: 2,\n borderRadius: 3,\n },\n hintIcon: {\n // fontSize: 32,\n padding: '0 8px 0 8px',\n },\n hintText: {\n // fontSize: 18\n },\n hintButton: {\n marginTop: 8,\n marginLeft: 20,\n },\n tabMenuButton: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n tabChanged: {\n color: theme.palette.secondary.main,\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tabChangedIcon: {\n color: '#FF0000',\n fontSize: 16,\n marginLeft: 5,\n },\n closeButton: {\n marginLeft: 5,\n },\n notRunning: {\n color: '#ffbc00',\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n tabButton: {\n minHeight: 48,\n },\n tabButtonWrapper: {\n display: 'inline-block',\n },\n menuIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5,\n },\n fullHeightDialog: {\n height: 'calc(100% - 100px)',\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n const selected = window.localStorage.getItem('Editor.selected') || '';\n let editing = window.localStorage.getItem('Editor.editing') || '[]';\n try {\n editing = JSON.parse(editing);\n } catch (e) {\n editing = [];\n }\n if (selected && !editing.includes(selected)) {\n editing.push(selected);\n }\n\n this.tabsRef = React.createRef();\n\n this.state = {\n selected,\n editing, // array of opened scripts\n changed: {}, // for every script\n blockly: null,\n rules: null,\n debugEnabled: false,\n verboseEnabled: false,\n showCompiledCode: false,\n showSelectId: false,\n showCron: false,\n showScript: false,\n showAstro: false,\n astroEvents: null,\n insert: '',\n searchText: '',\n themeType: this.props.themeType,\n visible: props.visible,\n cmdToBlockly: '',\n cmdToRules: '',\n menuOpened: !!this.props.menuOpened,\n menuTabsOpened: false,\n menuTabsAnchorEl: null,\n runningInstances: this.props.runningInstances || {},\n showDebugMenu: false,\n toast: '',\n instancesLoaded: false,\n isTourOpen: window.localStorage.getItem('tour') !== 'true',\n tourStep: STEPS.selectTriggers,\n showAdapterDebug: false,\n };\n\n this.setChangedInAdmin();\n\n /* ----------------------- */\n // required by selectIdDialog in Blockly\n this.selectId = {\n initValue: null,\n callback: null,\n };\n this.cron = {\n initValue: null,\n callback: null,\n };\n this.scriptDialog = {\n initValue: null,\n callback: null,\n args: null,\n isReturn: false,\n };\n\n window.systemLang = I18n.getLanguage();\n window.main = {\n objects: {},\n getObject: (id, cb) => this.props.socket.getObject(id).then(obj => cb && cb(null, obj)).catch(err => cb && cb(err)),\n instances: [],\n selectIdDialog: (initValue, type, cb) => {\n if (typeof type === 'function') {\n cb = type;\n type = null;\n }\n this.selectId.callback = cb;\n this.selectId.initValue = initValue;\n this.selectId.type = type;\n this.setState({ showSelectId: true });\n },\n cronDialog: (initValue, cb) => {\n this.cron.callback = cb;\n this.cron.initValue = initValue;\n this.setState({ showCron: true });\n },\n showScriptDialog: (value, args, isReturn, cb) => {\n this.scriptDialog.callback = cb;\n this.scriptDialog.initValue = value;\n this.scriptDialog.args = args;\n this.scriptDialog.isReturn = isReturn || false;\n this.setState({ showScript: true });\n }\n };\n\n this.objects = props.objects;\n /* ----------------------- */\n\n this.scripts = {};\n\n if (!this.state.selected && this.state.editing.length) {\n this.state.selected = this.state.editing[0];\n }\n\n this.getAllAdapterInstances()\n .then(() => {\n // to enable logging\n if (this.props.onSelectedChange && this.state.selected) {\n setTimeout(() => this.props.onSelectedChange(this.state.selected, this.state.editing), 100);\n }\n });\n }\n\n getAllAdapterInstances() {\n return this.props.socket.getAdapterInstances(true)\n .then(instanceObjects => {\n const objects = {};\n const instances = instanceObjects.map(obj => {\n objects[obj._id] = obj;\n return obj._id;\n });\n window.main.objects = objects;\n window.main.instances = instances;\n this.setState({ instancesLoaded: true });\n });\n }\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n\n if (!obj && window.main.instances.includes[id]) {\n delete window.main.objects[id];\n const pos = window.main.instances.indexOf(id);\n window.main.instances.splice(pos, 1);\n } else\n if (obj && obj.type === 'instance') {\n // update instances\n if (!window.main.instances.includes(id)) {\n window.main.instances.push(id);\n window.main.instances.sort();\n }\n window.main.objects[id] = obj;\n }\n };\n\n setChangedInAdmin() {\n const isChanged = Object.keys(this.state.changed).find(id => this.state.changed[id]);\n\n if (typeof window.parent !== 'undefined' && window.parent) {\n window.parent.configNotSaved = !!isChanged;\n }\n }\n\n componentDidMount() {\n window.addEventListener('beforeunload', this.onBrowserClose, false);\n this.props.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.onBrowserClose);\n this.props.socket.unsubscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n onBrowserClose = e => {\n const isChanged = Object.keys(this.scripts).find(id =>\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common));\n\n if (!!isChanged) {\n console.log('Script ' + JSON.stringify(this.scripts[isChanged]));\n const message = I18n.t('Configuration not saved.');\n e = e || window.event;\n // For IE and Firefox\n if (e) {\n e.returnValue = message;\n }\n\n // For Safari\n return message;\n }\n };\n\n removeNonExistingScripts(nextProps, newState) {\n nextProps = nextProps || this.props;\n newState = newState || {};\n\n let _changed = false;\n if (this.state.editing) {\n const isAnyNonExists = this.state.editing.find(id => !nextProps.objects[id]);\n\n if (isAnyNonExists) {\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n }\n }\n if (_changed) {\n newState.editing = editing;\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n _changed = true;\n newState.selected = editing[0] || '';\n if (this.scripts[newState.selected]) {\n if (this.state.blockly !== (this.scripts[newState.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[newState.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[newState.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[newState.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[newState.selected].verbose) {\n newState.verboseEnabled = this.scripts[newState.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[newState.selected].debug) {\n newState.debugEnabled = this.scripts[newState.selected].debug;\n _changed = true;\n }\n }\n }\n }\n }\n return _changed;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const newState = {};\n let _changed = false;\n\n if (JSON.stringify(nextProps.runningInstances) !== JSON.stringify(this.state.runningInstances)) {\n _changed = true;\n newState.runningInstances = nextProps.runningInstances;\n }\n\n if (this.state.menuOpened !== nextProps.menuOpened) {\n newState.menuOpened = nextProps.menuOpened;\n _changed = true;\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n newState.themeType = nextProps.themeType;\n _changed = true;\n }\n\n // check if all opened files still exists\n if (this.removeNonExistingScripts(nextProps, newState)) {\n _changed = true;\n }\n\n // update search text\n if (this.state.searchText !== nextProps.searchText) {\n newState.searchText = nextProps.searchText;\n _changed = true;\n }\n\n // if objects read\n if (this.objects !== nextProps.objects) {\n this.objects = nextProps.objects;\n window.main.objects = nextProps.objects;\n\n // update all scripts\n Object.keys(this.scripts).forEach(id => {\n const source = this.scripts[id].source;\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = source;\n });\n\n // if a script is blockly\n if (this.state.selected && this.objects[this.state.selected]) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.objects[this.state.selected].common));\n if (this.state.blockly !== (this.scripts[this.state.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[this.state.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[this.state.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[this.state.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[this.state.selected].verbose) {\n newState.verboseEnabled = this.scripts[this.state.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[this.state.selected].debug) {\n newState.debugEnabled = this.scripts[this.state.selected].debug;\n _changed = true;\n }\n }\n\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n if (this.state.changed[editing[i]] !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n delete newState.changed[editing[i]];\n }\n }\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n newState.selected = editing[0] || '';\n }\n if (_changed) {\n newState.editing = editing;\n }\n } else {\n // update all scripts\n for (const id in this.scripts) {\n if (!this.scripts.hasOwnProperty(id)) continue;\n if (this.objects[id] && this.objects[id].common) {\n const oldSource = this.scripts[id].source;\n const commonLocal = JSON.parse(JSON.stringify(this.scripts[id]));\n commonLocal.source = this.objects[id].common.source;\n // if anything except source was changed\n if (JSON.stringify(commonLocal) !== JSON.stringify(this.objects[id].common)) {\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = oldSource;\n }\n\n if (oldSource !== this.objects[id].common.source) {\n // take new script if it not yet changed\n if (!this.state.changed[id]) {\n // just use new value\n this.scripts[id].source = this.objects[id].common.source;\n } else {\n if (this.objects[id].from && this.objects[id].from.startsWith('system.adapter.javascript.')) {\n this.objects[id].from = 'system.adapter.admin.0';\n // show that script was changed from outside\n this.setState({ toast: I18n.t('Script %s was modified on disk.', id.split('.').pop()) });\n }\n }\n } else {\n if (this.state.changed[id]) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[id] = false;\n _changed = true;\n }\n }\n } else {\n delete this.scripts[id];\n if (this.state.selected === id) {\n if (this.state.editing.indexOf(id) !== -1) {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n const pos = editing.indexOf(id);\n if (pos !== -1) {\n editing.splice(pos, 1);\n newState.editing = editing;\n _changed = true;\n }\n }\n newState.selected = this.state.editing[0] || '';\n _changed = true;\n }\n }\n }\n }\n\n if (this.state.selected !== nextProps.selected && nextProps.selected) {\n if (nextProps.selected) {\n this.scripts[nextProps.selected] = this.scripts[nextProps.selected] || JSON.parse(JSON.stringify(this.props.objects[nextProps.selected].common));\n }\n\n const nextCommon = this.props.objects[nextProps.selected] && this.props.objects[nextProps.selected].common;\n\n const changed = nextCommon && JSON.stringify(this.scripts[nextProps.selected]) !== JSON.stringify(nextCommon);\n\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n if (nextProps.selected && editing.indexOf(nextProps.selected) === -1) {\n editing.push(nextProps.selected);\n this.props.onSelectedChange(nextProps.selected, editing);\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n }\n\n _changed = true;\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[nextProps.selected] = changed;\n newState.editing = editing;\n newState.selected = nextProps.selected;\n newState.blockly = this.scripts[nextProps.selected].engineType === 'Blockly';\n newState.rules = this.scripts[nextProps.selected].engineType === 'Rules';\n newState.verboseEnabled = this.scripts[nextProps.selected].verbose;\n newState.debugEnabled = this.scripts[nextProps.selected].debug;\n newState.showCompiledCode = false;\n } else {\n\n }\n\n if (this.state.visible !== nextProps.visible) {\n _changed = true;\n newState.visible = nextProps.visible;\n }\n\n _changed && this.setState(newState, () => this.setChangedInAdmin());\n }\n\n onRestart() {\n this.props.onRestart && this.props.onRestart(this.state.selected);\n }\n\n onStartStop() {\n const common = JSON.parse(JSON.stringify(this.scripts[this.state.selected]));\n common.enabled = !common.enabled;\n this.props.onChange && this.props.onChange(this.state.selected, common);\n }\n\n onSave() {\n if (this.state.isTourOpen && this.state.tourStep === STEPS.saveTheScript) {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n }\n\n if (this.state.changed[this.state.selected]) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n this.setState({ changed }, () => {\n this.setChangedInAdmin();\n this.props.onChange && this.props.onChange(this.state.selected, this.scripts[this.state.selected]);\n });\n }\n }\n\n onSaveAll() {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n Object.keys(changed)\n .forEach(id => {\n if (changed[id]) {\n changed[id] = false;\n this.props.onChange && this.props.onChange(id, this.scripts[id]);\n }\n });\n\n this.setState({ changed }, () =>\n this.setChangedInAdmin());\n }\n\n onCancel() {\n this.scripts[this.state.selected] = JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n\n this.setState({ changed }, () => this.setChangedInAdmin());\n }\n\n onRegisterSelect(func) {\n this.getSelect = func;\n }\n\n onConvertBlockly2JS() {\n this.showConfirmDialog(I18n.t('It will not be possible to revert this operation.'), result => {\n if (result) {\n this.scripts[this.state.selected].engineType = 'Javascript/js';\n let source = this.scripts[this.state.selected].source;\n const lines = source.split('\\n');\n lines.pop();\n this.scripts[this.state.selected].source = lines.join('\\n');\n const nowSelected = this.state.selected;\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = true;\n\n this.setState({ changed, blockly: false, selected: '' }, () => {\n this.setChangedInAdmin();\n // force update of the editor\n setTimeout(() => this.setState({ selected: nowSelected }), 100);\n });\n }\n });\n }\n\n onChange(options) {\n options = options || {};\n if (options.script !== undefined) {\n this.scripts[this.state.selected].source = options.script;\n }\n if (options.debug !== undefined) {\n this.scripts[this.state.selected].debug = options.debug;\n }\n if (options.verbose !== undefined) {\n this.scripts[this.state.selected].verbose = options.verbose;\n }\n const _changed = JSON.stringify(this.scripts[this.state.selected]) !== JSON.stringify(this.props.objects[this.state.selected].common);\n if (_changed !== (this.state.changed[this.state.selected] || false)) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = _changed;\n this.objects[this.state.selected].from = 'system.adapter.admin.0';\n this.setState({ changed }, () => this.setChangedInAdmin());\n }\n }\n\n onTabChange(event, selected) {\n if (this.props.debugMode) {\n return;\n }\n window.localStorage && window.localStorage.setItem('Editor.selected', selected);\n const common = this.scripts[selected] || (this.props.objects[selected] && this.props.objects[selected].common);\n this.setState({\n selected,\n rules: common.engineType === 'Rules',\n blockly: common.engineType === 'Blockly',\n showCompiledCode: false,\n verboseEnabled: common.verbose,\n debugEnabled: common.debug\n });\n this.props.onSelectedChange && this.props.onSelectedChange(selected, this.state.editing);\n }\n\n isScriptChanged(id) {\n return this.scripts[id] && this.props.objects[id] && JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common);\n }\n\n onTabClose(id, e) {\n e && e.stopPropagation();\n\n const pos = this.state.editing.indexOf(id);\n if (this.state.editing.includes(id)) {\n if (this.isScriptChanged(id)) {\n this.showConfirmDialog(I18n.t('Discard changes for %s', this.props.objects[id].common.name), ok => {\n if (ok) {\n delete this.scripts[id];\n this.onTabClose(id);\n }\n });\n } else {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n editing.splice(pos, 1);\n const newState = { editing };\n if (id === this.state.selected) {\n if (editing.length) {\n if (pos === 0 || editing.length === 1) {\n newState.selected = editing[0];\n } else {\n newState.selected = editing[pos - 1];\n }\n } else {\n newState.selected = '';\n }\n } else if (this.state.selected && !editing.length) {\n newState.selected = '';\n }\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n if (newState.selected !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[newState.selected] = this.isScriptChanged(newState.selected);\n const common = newState.selected && (this.scripts[newState.selected] || (this.props.objects[newState.selected] && this.props.objects[newState.selected].common));\n newState.blockly = common ? common.engineType === 'Blockly' : false;\n newState.rules = common ? common.engineType === 'Rules' : false;\n newState.verboseEnabled = common ? common.verbose : false;\n newState.debugEnabled = common ? common.debug : false;\n newState.showCompiledCode = false;\n }\n\n this.setState(newState, () => {\n this.setChangedInAdmin();\n\n if (newState.selected !== undefined) {\n this.props.onSelectedChange && this.props.onSelectedChange(newState.selected, this.state.editing);\n window.localStorage && window.localStorage.setItem('Editor.selected', newState.selected);\n } else {\n this.props.onSelectedChange && this.props.onSelectedChange(this.state.selected, this.state.editing);\n }\n });\n }\n }\n }\n\n showConfirmDialog(question, cb) {\n this.confirmCallback = cb;\n this.setState({ confirm: question });\n }\n\n sendCommandToBlockly(cmd) {\n this.setState({ cmdToBlockly: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToBlockly: '' }), 200));\n }\n\n sendCommandToRules(cmd) {\n this.setState({ cmdToRules: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToRules: '' }), 200));\n }\n\n static getText(text) {\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en;\n }\n return text;\n }\n\n getScriptFullName(id) {\n const parts = id.split('.');\n parts.shift(); // remove \"script.\"\n parts.shift(); // remove \"js.\"\n const result = [];\n let _id = 'script.js';\n for (let i = 0; i < parts.length; i++) {\n _id += `.${parts[i]}`;\n if (this.props.objects[_id] && this.props.objects[_id].common) {\n result.push(Editor.getText(this.props.objects[_id].common.name));\n } else {\n result.push(parts[i]);\n }\n }\n return `/ ${result.join(' / ')}`;\n }\n\n getTabs() {\n if (this.state.editing.length) {\n return [<Tabs\n component={'div'}\n key=\"tabs1\"\n value={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n onChange={(event, value) => this.onTabChange(event, value)}\n indicatorColor=\"primary\"\n style={{ position: 'relative', marginLeft: 10, width: this.state.editing.length > 1 ? 'calc(100% - 50px)' : '100%', display: 'inline-block' }}\n textColor=\"primary\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {this.state.editing.map(id => {\n if (!this.props.objects[id]) {\n const label = [\n <div key=\"text\" className={Utils.clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{id.split('.').pop()}</div>,\n <IconButton onClick={e => this.onTabClose(id, e)} className={this.props.classes.closeButton} key=\"icon\" size=\"small\" component=\"span\">\n <IconClose />\n </IconButton>];\n return <Tab\n wrapped\n component={'div'}\n href={'#' + id}\n key={id}\n label={label}\n value={id}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n } else {\n let text = Editor.getText(this.props.objects[id].common.name) || '';\n let title = this.getScriptFullName(id);\n if (text.length > 18) {\n text = `${text.substring(0, 15)}...`;\n }\n const changed = this.props.objects[id].common && this.scripts[id] && this.props.objects[id].common.source !== this.scripts[id].source;\n const label = [\n <div key=\"text\" className={Utils.clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{text}</div>,\n changed ? <span key=\"changedSign\" className={this.props.classes.tabChangedIcon}>▣</span> : null,\n (!this.props.debugInstance && (!this.props.debugMode || this.state.selected !== id)) &&\n <IconButton onClick={e => this.onTabClose(id, e)} className={this.props.classes.closeButton} key=\"icon\" size=\"small\" component=\"span\">\n <IconClose />\n </IconButton>,\n ];\n\n return <Tab\n disabled={this.props.debugInstance || (this.state.selected !== id && this.props.debugMode)}\n wrapped\n component=\"div\"\n iconPosition=\"start\"\n icon={<img key=\"icon\" alt=\"\" src={images[this.props.objects[id].common.engineType] || images.def} className={this.props.classes.tabIcon} />}\n href={`#${id}`}\n key={id}\n label={label}\n className={this.props.classes.tabButton}\n value={id}\n title={title}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n }\n })}\n {this.props.debugInstance ? <Tab\n disabled={false}\n wrapped\n component=\"div\"\n href={`#${this.props.debugInstance.adapter}`}\n key={this.props.debugInstance.adapter}\n label={this.props.debugInstance.adapter}\n className={this.props.classes.tabButton}\n value={this.props.debugInstance.adapter}\n title={this.props.debugInstance.adapter}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n /> : ''}\n </Tabs>,\n this.state.editing.length > 1 ? <IconButton\n key=\"menuButton\"\n href=\"#\"\n aria-label=\"Close all but current\"\n className={this.props.classes.tabMenuButton}\n title={I18n.t('Close all but current')}\n aria-haspopup=\"false\"\n onClick={_event => {\n const editing = [this.state.selected];\n // Do not close not saved tabs\n Object.keys(this.scripts).forEach(id =>\n id !== this.state.selected &&\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common) &&\n editing.push(id)\n );\n\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n this.setState({ menuTabsOpened: false, menuTabsAnchorEl: null, editing: editing });\n }}\n size=\"medium\">\n <IconCloseAll />\n </IconButton> : null\n ];\n } else {\n return <div key=\"tabs2\" className={this.props.classes.toolbar}>\n <Button color=\"grey\" key=\"select1\" disabled className={this.props.classes.hintButton} href=\"\">\n <span key=\"select2\">{I18n.t('Click on this icon')}</span>\n <IconDoEdit key=\"select3\" className={this.props.classes.hintIcon} />\n <span key=\"select4\">{I18n.t('for edit or create script')}</span>\n </Button>\n </div>;\n }\n }\n\n getDebugMenu() {\n if (!this.state.showDebugMenu) {\n return null;\n }\n\n return <Menu\n key=\"menuDebug\"\n id=\"menu-debug\"\n anchorEl={this.state.menuDebugAnchorEl}\n open={this.state.showDebugMenu}\n onClose={() => this.setState({ showDebugMenu: false, menuDebugAnchorEl: null })}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n },\n }}\n >\n <MenuItem key=\"debugEnabled\"\n title={I18n.t('debug_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, debugEnabled: !this.state.debugEnabled }, () => this.onChange({ debug: this.state.debugEnabled }));\n }}>\n <Checkbox checked={this.state.debugEnabled} />\n <IconDebug className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />\n {I18n.t('debug_label')}\n </MenuItem>\n <MenuItem key=\"verboseEnabled\"\n title={I18n.t('verbose_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, verboseEnabled: !this.state.verboseEnabled }, () => this.onChange({ verbose: this.state.verboseEnabled }));\n }}>\n <Checkbox checked={this.state.verboseEnabled} />\n <IconVerbose className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />\n {I18n.t('verbose_label')}\n </MenuItem>\n </Menu>;\n }\n\n getDebugBadge() {\n return [\n this.state.debugEnabled && this.state.verboseEnabled && <IconDebug key=\"DebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n this.state.debugEnabled && !this.state.verboseEnabled && <IconDebug key=\"DebugNoVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />,\n !this.state.debugEnabled && this.state.verboseEnabled && <IconVerbose key=\"noDebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n ]\n }\n\n getAskAboutDebug() {\n if (this.state.askAboutDebug) {\n return <DialogConfirm\n onClose={() => {\n this.setState({ askAboutDebug: false }, () =>\n this.props.onDebugModeChange(true));\n }}\n ok={I18n.t('Yes')}\n cancel={I18n.t('Cancel')}\n text={I18n.t('The script will be stopped and must be activated manually after debugging. Continue?')}\n />;\n } else {\n return null;\n }\n }\n\n getToolbar() {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n if (this.state.selected) {\n const changedAll = Object.keys(this.state.changed).filter(id => this.state.changed[id]).length;\n const changed = this.state.changed[this.state.selected];\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n {!this.props.debugInstance && this.state.menuOpened && this.props.onLocate && <IconButton\n className={this.props.classes.toolbarButtons}\n key=\"locate\"\n title={I18n.t('Locate file')}\n onClick={() => this.props.onLocate(this.state.selected)}\n size=\"medium\"\n >\n <IconLocate />\n </IconButton>}\n {!this.props.debugInstance && !changed && isInstanceRunning && <IconButton\n key=\"restart\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"\n >\n <IconRestart />\n </IconButton>}\n {!this.props.debugInstance && !changed && <IconButton\n key=\"start-stop\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onStartStop()}\n title={isScriptRunning ? I18n.t('Pause script') : I18n.t('Run script')}\n size=\"medium\"\n style={{ color: isScriptRunning ? COLOR_RUN : COLOR_PAUSE }}\n >\n {isScriptRunning ? <IconPause /> : <IconPlay />}\n </IconButton>}\n {!this.props.debugInstance && !changed && !isScriptRunning && <span className={this.props.classes.notRunning}>{I18n.t('Script is not running')}</span>}\n {!changed && isScriptRunning && !isInstanceRunning && <span className={this.props.classes.notRunning}>{I18n.t('Instance is disabled')}</span>}\n {changed && <Button color=\"grey\" key=\"save\" variant=\"contained\" className={Utils.clsx(this.props.classes.textButton, this.props.classes.saveButton, 'button-save')} onClick={() => this.onSave()}>{I18n.t('Save')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {(changedAll > 1 || (changedAll === 1 && !changed)) && <Button color=\"grey\" key=\"saveall\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onSaveAll()}>{I18n.t('Save all')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {changed && <Button color=\"grey\" key=\"cancel\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onCancel()}>{I18n.t('Cancel')}<IconCancel className={this.props.classes.textIcon} /></Button>}\n <div style={{ flex: 2 }} />\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"check\"\n aria-label=\"Check code\"\n title={I18n.t('Check blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('check')}\n size=\"medium\"\n >\n <IconCheck />\n </IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-cron\"\n aria-label=\"create CRON\"\n title={I18n.t('Create or edit CRON or time wizard')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showCron: true })}\n size=\"medium\"\n >\n <IconCron />\n </IconButton>}\n {\n this.scripts[this.state.selected] &&\n this.scripts[this.state.selected].engineType !== 'Blockly' &&\n this.scripts[this.state.selected].engineType !== 'Rules' ?\n <OpenAiDialog\n adapterName={this.props.adapterName}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n classes={this.props.classes}\n themeType={this.state.themeType}\n language={this.scripts[this.state.selected].engineType === 'TypeScript/ts' ? 'typescript' : 'javascript'}\n onAddCode={code => this.setState({ insert: code })}\n /> : null}\n <IconButton\n key=\"show-astro\"\n aria-label=\"Show astronomical events\"\n title={I18n.t('Show astronomical events')}\n className={this.props.classes.toolbarButtons}\n disabled={!isInstanceRunning}\n onClick={() => {\n this.setState({ showAstro: true, astroEvents: null });\n\n this.props.socket.sendTo(this.scripts[this.state.selected].engine.replace('system.adapter.', ''), 'calcAstroAll', {})\n .then(astroEvents => this.setState({ astroEvents }));\n }}\n size=\"medium\"\n >\n <IconAstro />\n </IconButton>\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-id\"\n aria-label=\"select ID\"\n title={I18n.t('Insert object ID')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showSelectId: true })}\n size=\"medium\"\n >\n <IconSelectId />\n </IconButton>}\n\n {this.state.blockly && !this.state.rules && this.state.showCompiledCode && <Button color=\"grey\" key=\"convert2js\" aria-label=\"convert to javascript\"\n title={I18n.t('Convert blockly to javascript for ever.')}\n onClick={() => this.onConvertBlockly2JS()}\n >Blockly=>JS</Button>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.props.expertMode && !changed && (this.props.debugMode || (!this.state.blockly && !this.state.rules) || ((this.state.blockly || this.state.rules) && this.state.showCompiledCode)) && <IconButton\n className={this.props.classes.toolbarButtons}\n color={this.props.debugMode ? 'primary' : 'default'}\n disabled={!this.props.debugMode && !isInstanceRunning}\n onClick={() => {\n if (!this.props.debugMode && isScriptRunning) {\n this.setState({ askAboutDebug: true })\n } else {\n this.props.onDebugModeChange(!this.props.debugMode);\n }\n }}\n size=\"medium\"\n >\n <IconDebugMode style={{ fontSize: 32 }} />\n </IconButton>}\n\n {(this.state.blockly || this.state.rules) && <Button\n key=\"blockly-code\"\n aria-label=\"blockly\"\n title={I18n.t('Show javascript code')}\n className={Utils.clsx(this.props.classes.toolbarButtons, 'button-js-code', this.props.debugMode && this.props.classes.toolbarButtonsDisabled)}\n color={this.state.showCompiledCode ? 'secondary' : 'inherit'}\n disabled={this.props.debugMode}\n style={{ padding: '0 5px' }}\n onClick={() => {\n if (this.props.debugMode) {\n return;\n }\n this.setState({ showCompiledCode: !this.state.showCompiledCode });\n this.state.isTourOpen && this.state.tourStep === STEPS.showJavascript && this.setState({ tourStep: STEPS.switchBackToRules });\n this.state.isTourOpen && this.state.tourStep === STEPS.switchBackToRules && this.setState({ tourStep: STEPS.saveTheScript });\n }}\n >\n <img alt={this.state.blockly ? \"blockly2js\" : \"rules2js\"} src={this.state.blockly ? ImgBlockly2Js : ImgRules2Js} />\n </Button>}\n <IconButton\n key=\"debug\"\n disabled={this.props.debugMode}\n aria-label=\"Debug menu\"\n title={I18n.t('Debug options')}\n className={this.props.classes.toolbarButtons}\n onClick={e => this.setState({ showDebugMenu: true, menuDebugAnchorEl: e.currentTarget })}\n size=\"medium\"\n >\n <Badge className={this.props.classes.badgeMargin} badgeContent={this.getDebugBadge()}>\n <IconDebugMenu />\n </Badge>\n </IconButton>\n </Toolbar>\n );\n } else {\n return null;\n }\n }\n\n getScriptEditor() {\n if (!this.props.debugMode &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly !== null &&\n (!this.state.blockly || this.state.showCompiledCode) &&\n (!this.state.rules || this.state.showCompiledCode)\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv\">\n <ScriptEditorComponent\n key=\"scriptEditor1\"\n name={this.state.selected}\n adapterName={this.props.adapterName}\n insert={this.state.insert}\n onInserted={() => this.setState({ insert: '' })}\n onForceSave={() => this.onSave()}\n searchText={this.state.searchText}\n onRegisterSelect={func => this.onRegisterSelect(func)}\n readOnly={this.state.showCompiledCode}\n changed={this.state.changed[this.state.selected]}\n code={this.scripts[this.state.selected].source || ''}\n isDark={this.state.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n onChange={newValue => this.onChange({ script: newValue })}\n language={this.scripts[this.state.selected].engineType === 'TypeScript/ts' ? 'typescript' : 'javascript'}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getBlocklyEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"blocklyEditorDiv\">\n <BlocklyEditor\n command={this.state.cmdToBlockly}\n key=\"BlocklyEditor\"\n themeType={this.state.themeType}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n scriptId={this.state.selected}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getRulesEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n return <div className={Utils.clsx(this.props.classes.editorDiv)} key=\"flowEditorDiv\">\n <RulesEditor\n scriptId={this.state.selected}\n setTourStep={this.setTourStep}\n tourStep={this.state.tourStep}\n isTourOpen={this.state.isTourOpen}\n changed={this.state.changed[this.state.selected]}\n running={isInstanceRunning && isScriptRunning}\n command={this.state.cmdToRules}\n key=\"flowEditor\"\n themeType={this.state.themeType}\n themeName={this.props.themeName}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getConfirmDialog() {\n if (this.state.confirm) {\n return <DialogConfirm\n key=\"dialogConfirm1\"\n text={this.state.confirm}\n onClose={result => {\n if (this.confirmCallback) {\n const cb = this.confirmCallback;\n this.confirmCallback = null;\n cb(result);\n }\n this.setState({ confirm: '' });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getSelectIdDialog() {\n if (this.state.showSelectId) {\n const allObjektTypes = [\n 'state',\n 'channel',\n 'device',\n 'adapter',\n 'instance',\n 'enum',\n 'host',\n //'meta',\n 'config',\n 'script',\n 'user',\n 'group',\n //'chart',\n //'folder',\n //'schedule',\n //'design',\n ];\n\n let selectedId = this.selectId.callback ? this.selectId.initValue || '' : this.getSelect ? this.getSelect() : '';\n // it could be:\n // - 'id.xx'/* aksjdhsdf*/\n // - \"id.xx\"/* aksjdhsdf*/\n // - \"id.xx\"//\n let pos = selectedId.indexOf('/*');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n pos = selectedId.indexOf('//');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n let m = selectedId.match(/\"([^\"]+)\"/);\n if (m) {\n selectedId = m[1];\n }\n m = selectedId.match(/'([^']+)'/);\n if (m) {\n selectedId = m[1];\n }\n\n return <DialogSelectID\n key=\"dialogSelectID1\"\n imagePrefix=\"../..\"\n themeName={this.props.themeName}\n themeType={this.state.themeType}\n socket={this.props.socket}\n selected={selectedId}\n expertMode={this.selectId.type === 'script' ? true : undefined}\n // statesOnly={!this.selectId.type || this.selectId.type === 'state'}\n types={this.selectId?.type === 'all' ? allObjektTypes : [this.selectId.type || 'state']}\n onClose={() => {\n this.setState({ showSelectId: false });\n if (this.selectId.callback) {\n this.selectId.callback = null;\n }\n }}\n onOk={(selected, name) => {\n this.selectId.initValue = null;\n if (this.selectId.callback) {\n this.selectId.callback(selected);\n this.selectId.callback = null;\n } else {\n this.setState({ insert: `'${selected}'/*${name}*/` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCronDialog() {\n if (this.state.showCron) {\n return <DialogCron\n key=\"dialogCron1\"\n cron={this.cron.callback ? this.cron.initValue || '' : this.getSelect ? this.getSelect() : '* * * * *'}\n onClose={() => this.setState({ showCron: false })}\n onOk={cron => {\n this.cron.initValue = null;\n if (this.cron.callback) {\n this.cron.callback(cron);\n this.cron.callback = null;\n } else {\n this.setState({ insert: `'${cron}'` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getAstroDialog() {\n if (this.state.showAstro) {\n return <Dialog\n open={!0}\n onClose={() => this.setState({ showAstro: false })}\n key=\"dialogAstro\"\n >\n <DialogTitle>{I18n.t('Astronomical events today')}</DialogTitle>\n <DialogContent>\n {!this.state.astroEvents ? <LinearProgress /> : <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{I18n.t('Name')}</TableCell>\n <TableCell>{I18n.t('Server time')}</TableCell>\n <TableCell>{I18n.t('Description')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {Object.keys(this.state.astroEvents).map(id =>\n <TableRow key={id}>\n <TableCell component=\"th\" scope=\"row\">{id.startsWith('next') ? '' : id}</TableCell>\n <Tooltip title={I18n.t('Local time') + ': ' + new Date(this.state.astroEvents[id].date).toLocaleTimeString()}><TableCell align=\"right\">{this.state.astroEvents[id].serverTime}</TableCell></Tooltip>\n <TableCell>{I18n.t(id)}</TableCell>\n </TableRow>)}\n </TableBody>\n </Table>\n </TableContainer>}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showAstro: false })}\n color=\"primary\"\n startIcon={<IconClose />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n getEditorDialog() {\n if (this.state.showScript) {\n return <DialogScriptEditor\n key=\"scriptEditorDialog\"\n adapterName={this.props.adapterName}\n source={this.scriptDialog.initValue}\n args={this.scriptDialog.args ? this.scriptDialog.args.join(', ') : ''}\n isReturn={this.scriptDialog.isReturn}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n themeType={this.state.themeType}\n onClose={result => {\n this.scriptDialog.initValue = null;\n if (this.scriptDialog.callback) {\n result !== false && this.scriptDialog.callback(result || '');\n this.scriptDialog.callback = null;\n }\n this.setState({ showScript: false });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getToast() {\n return <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!!this.state.toast}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id' }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"close\"\n color=\"inherit\"\n className={this.props.classes.closeToast}\n onClick={() => this.setState({ toast: '' })}\n size=\"medium\"\n >\n <IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n setTourStep = tourStep => this.setState({ tourStep });\n\n getTour() {\n if (this.state.instancesLoaded &&\n this.state.selected &&\n this.props.isAnyRulesExists === 1 &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n this.state.visible) {\n return <Tour\n key=\"tour\"\n steps={steps}\n isOpen={this.state.isTourOpen}\n onRequestClose={() => {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n this.props.socket.setState('javascript.0.variables.rulesTour', { val: true, ack: true });\n }}\n //getCurrentStep={tourStep => this.setTourStep(tourStep)}\n goToStep={this.state.tourStep}\n />;\n }\n }\n\n getDebug() {\n if (this.props.debugMode) {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n if (isInstanceRunning) {\n return <Debugger\n key=\"debugger\"\n runningInstances={this.state.runningInstances}\n adapterName={this.props.adapterName}\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n src={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n debugInstance={this.props.debugInstance}\n />;\n } else {\n setTimeout(() => this.props.onDebugModeChange(false));\n return null;\n }\n } else {\n return null;\n }\n }\n\n render() {\n if (this.state.selected && this.props.objects[this.state.selected] && this.state.blockly === null && this.state.rules === null) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n setTimeout(() => {\n const newState = {\n blockly: this.scripts[this.state.selected].engineType === 'Blockly',\n rules: this.scripts[this.state.selected].engineType === 'Rules',\n showCompiledCode: false,\n debugEnabled: this.scripts[this.state.selected].debug,\n verboseEnabled: this.scripts[this.state.selected].verbose,\n };\n\n // check if all opened files still exists\n this.removeNonExistingScripts(null, newState);\n this.setState(newState);\n }, 100);\n }\n\n return [\n this.getTabs(),\n this.getToolbar(),\n this.getScriptEditor(),\n this.getAskAboutDebug(),\n this.getBlocklyEditor(),\n this.getRulesEditor(),\n this.getDebug(),\n this.getConfirmDialog(),\n this.getSelectIdDialog(),\n this.getCronDialog(),\n this.getEditorDialog(),\n this.getAstroDialog(),\n this.getDebugMenu(),\n this.getToast(),\n this.getTour(),\n ];\n }\n}\n\nEditor.propTypes = {\n objects: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n adapterName: PropTypes.string.isRequired,\n selected: PropTypes.string.isRequired,\n onSelectedChange: PropTypes.func.isRequired,\n onRestart: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n visible: PropTypes.bool,\n menuOpened: PropTypes.bool,\n onLocate: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n searchText: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onDebugModeChange: PropTypes.func,\n debugMode: PropTypes.bool,\n debugInstance: PropTypes.object,\n expertMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Dropzone from 'react-dropzone';\nimport DialogError from './Error';\nimport {MdFileUpload as IconUpload} from 'react-icons/md';\nimport {MdCancel as IconNo} from 'react-icons/md';\nimport {MdPlusOne as IconPlus} from 'react-icons/md';\n\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n dialog: {\n height: '95%',\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden',\n },\n dropzone: {\n marginTop: 20,\n width: '100%',\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#d0cccc',\n textAlign: 'center',\n boxSizing: 'border-box',\n paddingTop: 45,\n borderRadius: 10,\n height: 'calc(100% - 10px)',\n },\n dropzoneDiv: {\n width: '100%',\n height: '100%',\n },\n dropzoneRejected: {\n borderColor: '#970000',\n },\n dropzoneAccepted: {\n borderColor: '#17cd02',\n },\n icon: {\n height: '30%',\n width: '30%',\n color: '#eeeeee',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n zIndex: 0,\n },\n iconError: {\n color: '#ffc3c6',\n },\n iconOk: {\n color: '#aaeebc',\n },\n text: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n color: '#868686',\n position: 'absolute',\n zIndex: 1,\n },\n});\n\nclass DialogImportFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n error: '',\n imageStatus: ''\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose();\n }\n\n onChange(e) {\n this.setState({text: e.target.value});\n }\n\n static readFileDataUrl(file, cb) {\n const reader = new FileReader();\n reader.onload = () => {\n cb(null, {data: reader.result, name: file.name});\n };\n reader.onabort = () => {\n console.error('file reading was aborted');\n cb(I18n.t('file reading was aborted'));\n };\n reader.onerror = (e) => {\n console.error('file reading has failed');\n cb(I18n.t('file reading has failed: %s', e));\n };\n\n reader.readAsDataURL(file);\n }\n\n handleDropFile(files) {\n if (files && files.hasOwnProperty('target')) {\n files = files.target.files;\n }\n\n if (!files && !files.length) {\n return;\n }\n\n const file = files[files.length - 1];\n\n if (!file) {\n return;\n }\n DialogImportFile.readFileDataUrl(file, (err, result) => {\n if (err) {\n this.setState({error: err});\n } else {\n this.props.onClose(result && result.data);\n }\n });\n }\n\n render() {\n const classes = this.props.classes;\n const className = classes.dropzone + ' ' + (this.state.imageStatus === 'accepted' ? classes.dropzoneAccepted : (this.state.imageStatus === 'rejected' ? classes.dropzoneRejected : ''));\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth\n open={!0}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import scripts')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <Dropzone key='image-drop'\n maxSize={50000000}\n acceptClassName={classes.dropzoneAccepted}\n rejectClassName={classes.dropzoneRejected}\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='application/zip,application/x-zip-compressed'\n className={className}>\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconError}/>\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({imageStatus: 'accepted'});\n }\n\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconOk}/>\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" className={this.props.classes.icon}/>\n </div>);\n }\n }\n }\n </Dropzone>\n {this.state.error ? (<DialogError text={this.state.error} onClose={() => this.setState({error: ''})}/>) : null}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImportFile.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nexport default withStyles(styles)(DialogImportFile);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport 'react-splitter-layout/lib/index.css';\n\nimport GenericApp from '@iobroker/adapter-react-v5/GenericApp';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport { I18n, Utils, AdminConnection, Loader } from '@iobroker/adapter-react-v5';\n\nimport { MdMenu as IconMenuClosed } from 'react-icons/md';\nimport { MdArrowBack as IconMenuOpened } from 'react-icons/md';\nimport { MdVisibility as IconShowLog } from 'react-icons/md';\n\nimport SideMenu from './SideMenu';\nimport Log from './Log';\nimport Editor from './Editor';\nimport DialogError from './Dialogs/Error';\nimport DialogImportFile from './Dialogs/ImportFile';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport { ContextWrapper } from './Components/RulesEditor/components/ContextWrapper';\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n menuDiv: {\n overflow: 'hidden',\n },\n splitterDivs: {\n '&>div': {\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n },\n '& .layout-splitter': {\n background: theme.palette.mode === 'dark' ? '#595858' : '#ccc;',\n },\n },\n mainDiv: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n /*\n appBarWithMenu: {\n width: `calc(100% - ${Theme.menu.width}px)`,\n marginLeft: Theme.menu.width,\n },\n appBarWithoutMenu: {\n width: `100%`,\n marginLeft: 0,\n },\n */\n content: {\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.background && theme.palette.background.default,\n position: 'relative',\n },\n splitterDivWithMenu: {\n width: `calc(100% - 300px)`,\n height: '100%',\n },\n menuDivWithoutMenu: {\n '&>div:first-child': {\n display: 'none',\n },\n '&>.layout-splitter': {\n display: 'none',\n },\n },\n progress: {\n margin: 100,\n },\n menuOpenCloseButton: {\n position: 'absolute',\n left: 0,\n borderRadius: '0 5px 5px 0',\n top: 6,\n paddingTop: 8,\n cursor: 'pointer',\n zIndex: 1,\n height: 25,\n width: 20,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 3,\n '&:hover': {\n color: 'white',\n },\n },\n showLogButton: {\n position: 'absolute',\n right: 3,\n borderRadius: '5px 5px 0 0',\n bottom: 0,\n paddingTop: 3,\n cursor: 'pointer',\n zIndex: 10,\n height: 20,\n width: 25,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 8,\n '&:hover': {\n color: 'white',\n },\n },\n});\n\nclass App extends GenericApp {\n constructor(props) {\n super(props, {\n Connection: AdminConnection,\n translations: {\n en: require('./i18n/en'),\n de: require('./i18n/de'),\n es: require('./i18n/es'),\n fr: require('./i18n/fr'),\n it: require('./i18n/it'),\n nl: require('./i18n/nl'),\n pl: require('./i18n/pl'),\n pt: require('./i18n/pt'),\n ru: require('./i18n/ru'),\n uk: require('./i18n/uk'),\n 'zh-cn': require('./i18n/zh-cn'),\n },\n bottomButtons: false,\n socket: {\n autoSubscribeLog: true,\n },\n sentryDSN: window.sentryDSN,\n });\n\n // this.logIndex = 0;\n this.logSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.logSize')) || 150 : 150;\n this.menuSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.menuSize')) || 500 : 500;\n this.hosts = [];\n this.importFile = null;\n this.scripts = {};\n\n window.alert = message => {\n console.error(message);\n this.showError(message.toString());\n };\n }\n\n onScriptsChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n if (id.startsWith('script.js.')) {\n if (obj) {\n if (JSON.stringify(this.scripts[id]) !== JSON.stringify(obj)) {\n this.scripts[id] = obj;\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n } else if (this.scripts[id]) {\n delete this.scripts[id];\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.match(/^system\\.adapter\\.[-_\\w\\d]+\\$/)) {\n // update instances\n if (id.startsWith(`system.adapter.${this.adapterName}.`)) {\n if (obj && obj.type === 'instance') {\n if (!this.state.instances.includes(id)) {\n newState.instances = [...this.state.instances];\n newState.instances.push(id);\n newState.instances.sort();\n changed = true;\n // request alive\n this.socket.subscribeState(`${obj._id}.alive`, this.onInstanceAliveChange);\n }\n } else if (!obj && this.state.instances.includes(id)) {\n this.socket.unsubscribeState(`${id}.alive`, this.onInstanceAliveChange);\n newState.instances = [...this.state.instances];\n const pos = newState.instances.indexOf(id);\n newState.instances.splice(pos, 1);\n changed = true;\n }\n }\n\n if (obj && obj[id].common && obj[id].common.blockly) {\n this.confirmCallback = result => result && window.location.reload();\n newState.confirm = I18n.t('Some blocks were updated. Reload admin?');\n changed = true;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onHostChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.startsWith('system.host.')) {\n if (obj && obj.type === 'host') {\n if (!this.hosts.includes(id)) {\n this.hosts.push(id);\n this.hosts.sort();\n }\n } else if (!obj && this.hosts.includes(id)) {\n const pos = this.hosts.indexOf(id);\n this.hosts.splice(pos, 1);\n }\n }\n\n changed && this.setState(newState);\n };\n\n onConnectionReady() {\n window.systemLang = this.socket.systemLang;\n this.setState({\n ready: false,\n updateScripts: 0,\n scriptsHash: 0,\n instances: [],\n updating: false,\n resizing: false,\n selected: null,\n logMessage: {},\n editing: [],\n menuOpened: window.localStorage.getItem('App.menuOpened') !== 'false',\n menuSelectId: '',\n expertMode: window.localStorage.getItem('App.expertMode') === 'true',\n logHorzLayout: window.localStorage.getItem('App.logHorzLayout') === 'true',\n runningInstances: {},\n confirm: '',\n importFile: false,\n message: '',\n searchText: '',\n hideLog: window.localStorage.getItem('App.hideLog') === 'true',\n debugMode: false,\n debugInstance: null,\n });\n\n const newState = {};\n\n // load instances & scripts\n // Read all instances\n this.subscribeOnInstances()\n .then(result => {\n newState.instances = result.instances;\n newState.runningInstances = result.runningInstances;\n\n return this.readAdaptersWithBlockly();\n })\n .then(() => this.socket.getHosts())\n .then(hosts => {\n this.hosts = hosts.map(obj => obj._id);\n // load all scripts\n return this.readAllScripts();\n })\n .then(scripts => {\n if (window.localStorage && window.localStorage.getItem('App.expertMode') !== 'true' && window.localStorage.getItem('App.expertMode') !== 'false') {\n // detect if some global scripts exists\n if (Object.keys(scripts).find(id => id.startsWith('script.js.global.') && scripts.type === 'script')) {\n newState.expertMode = true;\n }\n }\n this.scripts = scripts;\n\n let scriptsHash = this.state.scriptsHash;\n if (this.compareScripts(scripts)) {\n scriptsHash++;\n }\n newState.scriptsHash = scriptsHash;\n newState.ready = true;\n this.socket.subscribeObject('script.*', this.onScriptsChanged);\n this.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n this.socket.subscribeObject('system.host.*', this.onHostChanged);\n\n this.setState(newState);\n });\n }\n\n subscribeOnInstances() {\n return this.socket.getAdapterInstances(this.adapterName)\n .then(instancesArray => {\n const instances = instancesArray.map(obj => parseInt(obj._id.split('.').pop())).sort();\n const runningInstances = {};\n instances.forEach(id => runningInstances[`system.adapter.${this.adapterName}.${id}`] = false);\n\n const promises = [];\n\n // subscribe on instances\n instances.forEach(instance => {\n const instanceId = `system.adapter.${this.adapterName}.${instance}`;\n const id = `${instanceId}.alive`;\n promises.push(this.socket.getState(id)\n .then(state => {\n runningInstances[instanceId] = state ? state.val : false;\n this.socket.subscribeState(id, this.onInstanceAliveChange);\n }));\n });\n\n return Promise.all(promises)\n .then(() => ({ instances, runningInstances }));\n })\n }\n\n readAllScripts() {\n return this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'channel')\n .then(folders =>\n this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'script')\n .then(scripts => {\n Object.keys(scripts).forEach(id => folders[id] = scripts[id]);\n return folders;\n }));\n }\n\n readAdaptersWithBlockly() {\n return this.socket.getObjectView('system.adapter.', 'system.adapter.\\u9999', 'adapter')\n .then(adapters =>\n new Promise(resolve =>\n BlocklyEditor.loadCustomBlockly(adapters, () => resolve())));\n }\n\n onInstanceAliveChange = (id, state) => {\n if (id) {\n id = id && id.substring(0, id.length - 6); // - .alive\n\n if (this.state.runningInstances[id] !== (state ? state.val : false)) {\n const runningInstances = JSON.parse(JSON.stringify(this.state.runningInstances));\n runningInstances[id] = state ? state.val : false;\n this.setState({ runningInstances });\n }\n }\n };\n\n onToggleExpertMode(expertMode) {\n this.onExpertModeChange(expertMode);\n }\n\n compareScripts(newScripts) {\n const oldIds = Object.keys(this.scripts);\n const newIds = Object.keys(newScripts);\n if (oldIds.length !== newIds.length) {\n this.scripts = this.newScripts;\n return true;\n }\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n this.scripts = this.newScripts;\n return true;\n }\n for (let i = 0; i < oldIds.length; i++) {\n let oldScript = this.scripts[oldIds[i]].common;\n let newScript = newScripts[oldIds[i]].common;\n if (oldScript.name !== newScript.name) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engine !== newScript.engine) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engineType !== newScript.engineType) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.enabled !== newScript.enabled) {\n this.scripts = this.newScripts;\n return true;\n }\n }\n }\n\n onRename(oldId, newId, newName, newInstance) {\n if (newId.trim().endsWith('.')) {\n newId = newId.replace(/\\.\\s*$/, '_');\n }\n console.log(`Rename ${oldId} => ${newId}`);\n let promise;\n this.setState({ updating: true });\n\n // Rename script.js.common.Skript_1 => script.js.common.New folder.Skript_1\n\n if (this.scripts[oldId] && this.scripts[oldId].type === 'script') {\n const common = JSON.parse(JSON.stringify(this.scripts[oldId].common));\n common.name = newName || common.name;\n if (newInstance !== undefined) {\n common.engine = `system.adapter.javascript.${newInstance}`;\n }\n // Check if the script is not a children of other script\n const parts = newId.split('.');\n parts.pop();\n const parentID = parts.join('.');\n\n if (this.scripts[parentID] && this.scripts[parentID].type === 'script') {\n parts.pop();\n newId = `${parts.join('.')}.${newId.split('.').pop()}`;\n }\n\n promise = this.updateScript(oldId, newId, common);\n } else {\n promise = this.renameGroup(oldId, newId, newName);\n }\n\n promise\n .then(() => this.setState({ updating: false }))\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n\n renameGroup(id, newId, newName, _list) {\n if (!_list) {\n _list = [];\n\n // collect all elements to rename\n // find all elements\n _list = Object.keys(this.scripts).filter(_id => _id.startsWith(`${id}.`));\n\n return this.socket.getObject(id)\n .then(obj => {\n obj = obj || { common: {} };\n obj.common.name = newName || obj.common.name || id.split('.').pop();\n obj._id = newId;\n\n this.socket.delObject(id)\n .catch(() => { })\n .then(() => this.socket.setObject(newId, obj))\n .then(() => this.renameGroup(id, newId, newName, _list))\n .catch(e => console.log(e));\n })\n .catch(e => {\n console.log(e);\n const obj = {\n _id: newId,\n type: 'channel',\n common: {\n name: newName || id.split('.').pop(),\n expert: true,\n },\n native: {},\n };\n // may be it is virtual folder\n return this.socket.setObject(newId, obj)\n .then(() => this.renameGroup(id, newId, newName, _list));\n });\n } else if (_list.length) {\n let nId = _list.pop();\n\n return this.socket.getObject(nId)\n .then(obj =>\n this.socket.delObject(nId)\n .catch(() => { })\n .then(() => {\n nId = newId + nId.substring(id.length);\n obj._id = nId;\n obj.common = obj.common || {};\n obj.common.expert = true;\n return this.socket.setObject(nId, obj);\n })\n .then(() => this.renameGroup(id, newId, newName, _list))\n );\n } else {\n return Promise.resolve();\n }\n }\n\n onUpdateScript(id, common) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n this.updateScript(id, id, common)\n .then(() => { })\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n onSelect(selected) {\n if (this.scripts[selected] && this.scripts[selected].common && this.scripts[selected].type === 'script') {\n this.setState({ selected, menuSelectId: selected }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300);\n }\n }\n\n onExpertModeChange(expertMode) {\n if (this.state.expertMode !== expertMode) {\n window.localStorage && window.localStorage.setItem('App.expertMode', expertMode ? 'true' : 'false');\n this.setState({ expertMode });\n }\n }\n\n showError(err) {\n this.setState({ errorText: err ? err.toString() : '' });\n }\n\n showMessage(message) {\n this.setState({ message: message ? message.toString() : '' });\n }\n\n onDelete(id) {\n this.socket.delObject(id)\n .then(() => { })\n .catch(err =>\n this.showError(err));\n }\n\n onEdit(id) {\n if (this.state.selected !== id) {\n this.setState({ selected: id });\n }\n }\n\n onAddNew(id, name, isFolder, instance, type, source) {\n const reg = new RegExp(`^${id}\\\\.`);\n\n if (Object.keys(this.scripts).find(_id => id === _id || reg.test(id))) {\n return this.showError(I18n.t('Yet exists!'));\n }\n\n if (isFolder) {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true,\n },\n type: 'channel',\n })\n .then(() =>\n setTimeout(() => this.setState({ menuSelectId: id }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300), 1000))\n .catch(err => this.showError(err));\n } else {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true,\n engineType: type,\n engine: `system.adapter.javascript.${instance || 0}`,\n source: source || '',\n debug: false,\n verbose: false,\n },\n type: 'script',\n })\n .then(() => setTimeout(() => this.onSelect(id), 1000))\n .catch(err => this.showError(err));\n }\n }\n\n updateScript(oldId, newId, newCommon) {\n return this.socket.getObject(oldId)\n .then(_obj => {\n const obj = { common: {} };\n\n if (newCommon.engine !== undefined) obj.common.engine = newCommon.engine;\n if (newCommon.enabled !== undefined) obj.common.enabled = newCommon.enabled;\n if (newCommon.source !== undefined) obj.common.source = newCommon.source;\n if (newCommon.debug !== undefined) obj.common.debug = newCommon.debug;\n if (newCommon.verbose !== undefined) obj.common.verbose = newCommon.verbose;\n\n obj.from = 'system.adapter.admin.0'; // we must distinguish between GUI(admin.0) and disk(javascript.0)\n\n if (oldId === newId && _obj && _obj.common && newCommon.name === _obj.common.name) {\n if (!newCommon.engineType || newCommon.engineType !== _obj.common.engineType) {\n if (newCommon.engineType !== undefined) {\n obj.common.engineType = newCommon.engineType || 'Javascript/js';\n }\n }\n obj.type = 'script';\n return this.socket.extendObject(oldId, obj);\n } else {\n // let prefix;\n\n // let parts = _obj.common.engineType.split('/');\n\n // prefix = 'script.' + (parts[1] || parts[0]) + '.';\n\n if (_obj && _obj.common) {\n _obj.common.engineType = newCommon.engineType || _obj.common.engineType || 'Javascript/js';\n return this.socket.delObject(oldId)\n .then(() => {\n if (obj.common.engine !== undefined) _obj.common.engine = obj.common.engine;\n if (obj.common.enabled !== undefined) _obj.common.enabled = obj.common.enabled;\n if (obj.common.source !== undefined) _obj.common.source = obj.common.source;\n if (obj.common.name !== undefined) _obj.common.name = obj.common.name;\n if (obj.common.debug !== undefined) _obj.common.debug = obj.common.debug;\n if (obj.common.verbose !== undefined) _obj.common.verbose = obj.common.verbose;\n\n delete _obj._rev;\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n this.socket.setObject(newId, _obj);\n });\n } else {\n _obj = obj;\n }\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n return this.socket.setObject(newId, _obj);\n }\n });\n }\n\n onEnableDisable(id, enabled) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n const common = this.scripts[id].common;\n common.enabled = enabled;\n common.expert = true;\n this.updateScript(id, id, common)\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n getLiveHost(cb, _list) {\n if (!_list) {\n _list = this.hosts ? [...this.hosts] : [];\n }\n\n if (_list.length) {\n const id = _list.shift();\n this.socket.getState(`${id}.alive`)\n .then(state => {\n if (state && state.val) {\n cb(id);\n } else {\n setTimeout(() => this.getLiveHost(cb, _list));\n }\n });\n } else {\n cb();\n }\n }\n\n onExport() {\n this.getLiveHost(host => {\n if (!host) {\n return this.showError(I18n.t('No active host found'));\n }\n\n const d = new Date();\n let date = d.getFullYear();\n let m = d.getMonth() + 1;\n if (m < 10) {\n m = `0${m}`;\n }\n date += `-${m}`;\n m = d.getDate();\n if (m < 10) {\n m = `0${m}`;\n }\n date += `-${m}-`;\n\n this.socket.getRawSocket().emit('sendToHost', host, 'readObjectsAsZip', {\n adapter: 'javascript',\n id: 'script.js',\n link: `${date}scripts.zip`, // request link to file and not the data itself\n fileStorageNamespace: `admin.${this.instance}`, // new controller 5.x understands this and saves ZIP in the file store\n }, data => {\n if (typeof data === 'string') {\n // it is a link to the created file\n const a = document.createElement('a');\n if (data.startsWith('admin.')) {\n // new controller\n // actual position is http://IP:8081/adapter/javascript/index.html\n // we need http://IP:8081/files/admin.0/zip/2023-06-20-scripts.zip\n a.href = `../../files/${data}`;\n } else {\n // the data is \"system.host.HOST.zip.2020-01-26-scripts.zip\"\n const parts = data.split('.zip.');\n a.href = `./zip/${parts[0]}/${parts[1]}`;\n }\n document.body.appendChild(a);\n a.click();\n a.remove();\n } else {\n data.error && this.showError(data.error);\n if (data.data) {\n const a = document.createElement('a');\n a.href = `data: application/zip;base64,${data.data}`;\n a.download = `${date}scripts.zip`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n }\n });\n });\n }\n\n onImport(data) {\n this.importFile = data;\n if (data) {\n this.confirmCallback = this.onImportConfirmed.bind(this);\n this.setState({ importFile: false, confirm: I18n.t('Existing scripts will be overwritten.') });\n } else {\n this.setState({ importFile: false });\n }\n }\n\n onImportConfirmed(ok) {\n let data = this.importFile;\n this.importFile = null;\n if (ok && data) {\n data = data.split(',')[1];\n this.getLiveHost(host => {\n if (!host) {\n this.showError(I18n.t('No active host found'));\n return;\n }\n this.socket.getRawSocket().emit('sendToHost', host, 'writeObjectsAsZip', {\n data: data,\n adapter: 'javascript',\n id: 'script.js'\n }, data => {\n if (data === 'permissionError') {\n this.showError(I18n.t(data));\n } else if (!data || data.error) {\n this.showError(data ? I18n.t(data.error) : I18n.t('Unknown error'));\n } else {\n this.showMessage(I18n.t('Done'));\n }\n });\n });\n }\n }\n\n toggleLogLayout() {\n window.localStorage && window.localStorage.setItem('App.logHorzLayout', this.state.logHorzLayout ? 'false' : 'true');\n this.setState({ logHorzLayout: !this.state.logHorzLayout });\n }\n\n renderEditor() {\n const isAnyRulesExists = Object.keys(this.scripts).reduce((sum, id) =>\n sum + (this.scripts[id].common.engineType === 'Rules' ? 1 : 0), 0);\n\n return <Editor\n key=\"editor\"\n debugMode={this.state.debugMode}\n onDebugModeChange={value => {\n if (!value) {\n this.setState({debugMode: false, debugInstance: null});\n } else {\n this.setState({debugMode: true});\n }\n }}\n visible={!this.state.resizing}\n socket={this.socket}\n adapterName={this.adapterName}\n onLocate={menuSelectId => this.setState({ menuSelectId })}\n runningInstances={this.state.runningInstances}\n menuOpened={this.state.menuOpened}\n searchText={this.state.searchText}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n onChange={(id, common) => this.onUpdateScript(id, common)}\n isAnyRulesExists={isAnyRulesExists}\n debugInstance={this.state.debugInstance}\n onSelectedChange={(id, editing) => {\n const newState = {};\n let changed = false;\n if (id !== this.state.selected) {\n changed = true;\n newState.selected = id;\n }\n if (JSON.stringify(editing) !== JSON.stringify(this.state.editing)) {\n changed = true;\n newState.editing = JSON.parse(JSON.stringify(editing));\n }\n changed && this.setState(newState);\n }}\n onRestart={id => this.socket.extendObject(id, { common: { enabled: true } })}\n selected={this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].type === 'script' ? this.state.selected : ''}\n objects={this.scripts}\n instances={this.state.instances}\n />;\n }\n\n showLogButton() {\n return <div\n key=\"showLog\"\n title={I18n.t('Show logs')}\n className={this.props.classes.showLogButton}\n onClick={() => {\n window.localStorage.setItem('App.hideLog', 'false');\n this.setState({ hideLog: false, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n >\n <IconShowLog />\n </div>;\n }\n\n renderErrorDialog() {\n return this.state.errorText ?\n <DialogError\n key=\"dialogError\"\n onClose={() => this.setState({ errorText: '' })}\n text={this.state.errorText}\n /> :\n null;\n }\n\n renderMain() {\n const { classes } = this.props;\n return [\n this.state.message ? <DialogMessage key=\"dialogMessage\" onClose={() => this.setState({ message: '' })} text={this.state.message} /> : null,\n this.renderErrorDialog(),\n this.state.importFile ? <DialogImportFile key=\"dialogImportFile\" onClose={data => this.onImport(data)} /> : null,\n this.state.confirm ? <DialogConfirm\n key=\"dialogConfirm\"\n onClose={result => {\n this.state.confirm && this.setState({ confirm: '' });\n this.confirmCallback && this.confirmCallback(result);\n this.confirmCallback = null;\n }}\n text={this.state.confirm} /> : null,\n <div className={classes.content + ' iobVerticalSplitter'} key=\"main\">\n <div key=\"closeMenu\" className={classes.menuOpenCloseButton} onClick={() => {\n window.localStorage.setItem('App.menuOpened', this.state.menuOpened ? 'false' : 'true');\n this.setState({ menuOpened: !this.state.menuOpened, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}>\n {this.state.menuOpened ? <IconMenuOpened /> : <IconMenuClosed />}\n </div>\n <SplitterLayout\n key=\"splitterLayout\"\n vertical={!this.state.logHorzLayout}\n primaryMinSize={100}\n secondaryInitialSize={this.state.hideLog ? 0 : this.logSize}\n // customClassName={classes.menuDiv + ' ' + classes.splitterDivWithoutMenu}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.state.hideLog ? 0 : this.logSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.logSize', this.logSize.toString());\n }}\n >\n <>\n {this.renderEditor()}\n {!this.state.debugMode && this.state.hideLog && this.showLogButton()}\n </>\n {!this.state.debugMode && !this.state.hideLog && <Log\n key=\"log\"\n verticalLayout={!this.state.logHorzLayout}\n onLayoutChange={() => this.toggleLogLayout()}\n editing={this.state.editing}\n socket={this.socket}\n selected={this.state.selected}\n onHideLog={() => {\n window.localStorage.setItem('App.hideLog', 'true');\n this.setState({ hideLog: true, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n />}\n </SplitterLayout>\n </div>,\n ];\n }\n\n render() {\n const { classes } = this.props;\n\n if (!this.state.ready) {\n // return (<CircularProgress className={classes.progress} size={50} />);\n return <Loader theme={this.state.themeType} />;\n }\n\n return <div className={classes.root}>\n <ContextWrapper socket={this.socket}>\n <SplitterLayout\n key=\"menuSplitter\"\n vertical={false}\n primaryMinSize={300}\n primaryIndex={1}\n secondaryMinSize={300}\n secondaryInitialSize={this.menuSize}\n customClassName={`${classes.splitterDivs} ${!this.state.menuOpened ? classes.menuDivWithoutMenu : ''}`}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.menuSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.menuSize', this.menuSize.toString());\n }}\n >\n <div className={classes.mainDiv} key=\"menu\">\n <SideMenu\n debugMode={this.state.debugMode}\n onDebugInstance={data => {\n this.setState({ debugInstance: data, debugMode: !!data });\n }}\n key=\"sidemenu\"\n scripts={this.scripts}\n scriptsHash={this.state.scriptsHash}\n instances={this.state.instances}\n update={this.state.updateScripts}\n onRename={this.onRename.bind(this)}\n onSelect={this.onSelect.bind(this)}\n socket={this.socket}\n selectId={this.state.menuSelectId}\n onEdit={this.onEdit.bind(this)}\n expertMode={this.state.expertMode}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n onThemeChange={themeName => {\n Utils.setThemeName(themeName);\n const themeType = Utils.getThemeType(themeName);\n this.setState({ themeName, themeType }, () => this.props.onThemeChange(themeName));\n }}\n runningInstances={this.state.runningInstances}\n onExpertModeChange={this.onExpertModeChange.bind(this)}\n onDelete={this.onDelete.bind(this)}\n onAddNew={this.onAddNew.bind(this)}\n onEnableDisable={this.onEnableDisable.bind(this)}\n onExport={this.onExport.bind(this)}\n width={this.menuSize}\n onImport={() => this.setState({ importFile: true })}\n onSearch={searchText => this.setState({ searchText })}\n version={this.props.version}\n />\n </div>\n {this.renderMain()}\n </SplitterLayout>\n </ContextWrapper>\n </div>;\n }\n}\n\nApp.propTypes = {\n version: PropTypes.string,\n onThemeChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { StylesProvider, createGenerateClassName } from '@mui/styles';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport pgk from '../package.json';\nimport theme from '@iobroker/adapter-react-v5/Theme';\n// import Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport { Utils } from '@iobroker/adapter-react-v5';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nimport GenericBlock from './Components/RulesEditor/components/GenericBlock/index.jsx'\n\nwindow.GenericBlock = GenericBlock;\n\nwindow.adapterName = 'javascript';\nwindow.sentryDSN = 'https://504499a725eb4898930d3b9e9da95740@sentry.iobroker.net/56';\n\nlet themeName = Utils.getThemeName();\n\nconsole.log(`iobroker.${window.adapterName}@${pgk.version} using theme \"${themeName}\"`);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'iob',\n});\n\nfunction build() {\n const isMobile = window.innerWidth < 600;\n const container = document.getElementById('root');\n const root = createRoot(container);\n return root.render(<StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme(themeName)}>\n <DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App\n version={pgk.version}\n onThemeChange={_theme => {\n themeName = _theme;\n build();\n }}\n />\n </DndProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>);\n}\n\nbuild();\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n\n/*\n improved VSCode editor. This has to be down here, or we get conflicts\n between loader.js and require calls in jQuery and other loaded modules\n*/\n// loader must be after socket.io, elsewise there is no window.io\nconst loadDynamicScript = window.loadDynamicScript;\nloadDynamicScript && loadDynamicScript(window.location.port === '3000' ? window.location.protocol + '//' + window.location.hostname + ':8081/lib/js/socket.io.js' : './../../lib/js/socket.io.js', function () {\n loadDynamicScript('vs/loader.js', function () {\n loadDynamicScript('vs/configure.js', function () {\n typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler();\n });\n });\n});"],"names":["DialogRename","React","constructor","props","super","handleCancel","this","onClose","handleOk","onRename","oldId","state","id","name","instance","handleChange","setState","getId","isShowInstance","folder","instances","length","prefix","getPrefix","parts","split","pop","join","replace","componentWillReceiveProps","nextProps","render","_jsxs","Dialog","event","reason","maxWidth","fullWidth","open","children","_jsx","DialogTitle","I18n","t","DialogContent","noValidate","autoComplete","TextField","variant","style","width","autoFocus","label","value","onKeyPress","ev","key","preventDefault","setTimeout","onChange","e","target","margin","disabled","FormControl","InputLabel","htmlFor","Select","parseInt","inputProps","map","MenuItem","DialogActions","Button","onClick","color","startIcon","IconOk","IconCancel","DialogDelete","onDelete","IconDelete","fontSize","fontWeight","withStyles","theme","DialogAddNew","arguments","type","openHtml","html","lang","getLanguage","includes","window","focus","getJSCard","Card","className","classes","card","CardActionArea","CardMedia","media","image","ImgJS","title","CardContent","complexity","text","CardActions","size","getTSCard","ImgTS","getBlocklyCard","ImgBlockly","getRulesCard","ImgRules","textAlign","minWidth","display","height","minHeight","fontStyle","marginBottom","spacing","DialogNew","onAdd","existingItems","indexOf","error","parent","trim","helperText","parents","splice","names","forEach","n","i","el","find","item","push","DialogError","console","log","titleBackground","root","titleColor","DialogContentText","background","palette","main","contrastText","DialogAdapterDebug","adapterToDebug","enabled","socket","getObject","then","obj","common","setObject","_id","onDebug","jsInstance","filter","localStorage","getItem","showAskForStop","jsInstanceHost","componentDidMount","getAdapterInstances","_i$common","onlyWWW","_item$common","_item$common2","_item$common3","adapter","host","icon","concat","sort","a","b","jsInstanceObj","startsWith","renderJavascriptList","js","Grid","List","component","ListItem","button","selected","ListItemIcon","src","alt","ListItemText","primary","renderInstances","toLowerCase","onDoubleClick","container","direction","Input","filterWithButton","placeholder","setItem","endAdornment","InputAdornment","position","IconButton","IconClose","buttonIcon","marginRight","marginTop","COLOR_RUN","green","COLOR_PROBLEM","yellow","COLOR_PAUSE","red","ROOT_ID","COMMON_ID","GLOBAL_ID","NARROW_WIDTH","SELECTED_STYLE","images","def","ImgTypeScript","getObjectName","en","toString","prepareList","data","result","depth","index","ids","Object","keys","engineType","engine","modified","it","idA","idB","parentIndex","Droppable","onDrop","isOver","isOverAny","drop","useDrop","accept","undefined","collect","monitor","shallow","ref","Utils","clsx","Draggable","opacity","drag","useDrag","isDragging","transform","SideDrawer","expanded","JSON","parse","inputRef","listItems","scripts","problems","reorder","themeName","creatingScript","creatingFolder","copingScript","renaming","deleting","choosingType","errorText","menuOpened","menuAnchorEl","searchMode","expertMode","searchText","typeFilter","statusFilter","runningInstances","scriptsHash","showAdapterDebug","newExp","ensureSelectedIsVisible","filterTimer","isAllZeroInstances","getIsAllZeroInstances","problemsTimer","onProblemUpdatedBound","onProblemUpdated","bind","readProblems","cb","tasks","shift","match","that","substring","getState","err","subscribeState","componentWillUnmount","unsubscribeState","stringify","changed","val","pos","filterListStatic","isSearchEnabled","objects","newState","filteredPartly","found","source","lastIndexOf","filtered","filterList","ensureSelectedIsVisibleStatic","getDerivedStateFromProps","nState","assign","getIsAllZeroInstancesStatic","selectId","saveExpanded","showError","onToggle","stopPropagation","renderItemButtonsOnEnd","iconButtons","debugMode","iconButtonsDisabled","onEnableDisable","IconPause","IconPlay","onEdit","IconDoEdit","Promise","resolve","getTextStyle","whiteSpace","padding","overflow","flex","onDblClick","isFilteredOut","renderListItem","childrenFiltered","depthPx","marginLeft","cursor","isExpanded","iconClass","iconStyle","folderIcon","folderIconReorder","folderIconNoReorder","scriptIcon","scriptIconReorder","scriptIconNoReorder","childrenCount","script","scriptReorder","folderReorder","listItemIcon","IconFolderOpened","IconFolder","ListItemSecondaryAction","onDragFinish","newId","renderOneItem","items","element","reactChildren","renderAllItems","dense","disablePadding","mainList","onAddNew","onCopy","onAddNewFolder","getUniqueName","copyId","word","m","getUniqueFolderName","onCloseMenu","menuAnchorFilterEl","getFilterBadge","filterIcon","getMainMenu","selectedItem","Menu","anchorEl","PaperProps","maxHeight","MENU_ITEM_HEIGHT","iconDropdownMenu","onExpertModeChange","IconExpert","onExport","IconExport","onImport","IconImport","onThemeChange","newThemeName","IconDark","IconCopy","IconDebug","getToolbarButtons","toolbarSearch","clearTimeout","onSearch","toolbarButtons","float","mini","IconClear","currentTarget","IconMore","IconAdd","IconAddFolder","IconFind","IconReorder","IconEdit","version","getFolders","folders","onCollapseAll","onExpandAll","getBottomButtons","footerButtons","Blockly","IconExpandAll","footerButtonsRight","IconCollapseAll","getAdapterDebugDialog","onDebugInstance","renamingItem","copingItem","Drawer","menu","paper","drawerPaper","anchor","toolbar","Divider","DragDropContext","backend","HTML5Backend","innerMenu","footer","newName","newInstance","DialogAddNewScript","mode","lineHeight","paddingRight","iconOnTheRight","right","top","overflowX","overflowY","borderRadius","userSelect","transitionDuration","transitionProperty","paddingTop","paddingBottom","paddingLeft","expandButton","backgroundColor","getTimeString","d","getHours","getMinutes","getSeconds","getMilliseconds","gText","Log","logHandler","message","allLines","lines","editing","generateLine","severity","date","Date","ts","ms","toLocaleString","goBottom","lastIndex","messagesEnd","trTime","trSeverity","substr","scrollToBottom","current","scrollIntoView","behavior","registerLogHandler","unregisterLogHandler","componentDidUpdate","hasOwnProperty","copyToClipboard","clearLog","renderLogList","logBoxInner","table","clear","logBox","toolbox","IconBottom","onLayoutChange","layoutIcon","verticalLayout","onHideLog","IconHide","verticalAlign","info","warn","debug","silly","fontFamily","boxShadow","ScriptEditor","isDark","language","readOnly","alive","check","typingsLoaded","runningInstancesStr","monacoDiv","editor","monaco","insert","originalCode","code","typings","lastSearch","waitForMonaco","_this$monaco","_this$monaco$language","_this$monaco$language2","_this$monaco$language3","monacoLoaded","languages","typescript","typescriptDefaults","getCompilerOptions","_this$monaco2","_this$monaco2$languag","_this$monaco2$languag2","_this$monaco2$languag3","monacoCounter","loadTypings","scriptAdapterInstance","sendTo","setTypeCheck","setEditorTypings","_this$monaco3","_this$monaco3$languag","_this$monaco3$languag2","_this$monaco3$languag3","onRegisterSelect","getModel","getValueInRange","getSelection","compilerOptions","ScriptTarget","ES2015","allowJs","checkJs","noLib","lib","useUnknownInCatchVariables","moduleResolution","ModuleResolutionKind","NodeJs","setCompilerOptions","create","lineNumbers","scrollBeyondLastLine","automaticLayout","glyphMargin","breakpoints","onDidChangeModelContent","getValue","addCommand","KeyMod","CtrlCmd","KeyCode","KEY_S","onForceSave","highlightText","location","showDecorators","options","selectOnLineNumbers","setEditorOptions","setValue","onToggleBreakpoint","onMouseDown","detail","glyphMarginLeft","lineNumber","setEditorLanguage","updateOptions","lineWrap","wordWrap","typeCheck","setTheme","dispose","model","uri","path","filenameWithoutExtension","extension","newLanguage","newModel","createModel","Uri","from","setModel","noSemanticValidation","noSyntaxValidation","setDiagnosticsOptions","_this$monaco4","_this$monaco4$languag","_this$monaco4$languag2","_this$monaco4$languag3","_this$monaco5","_this$monaco5$languag","_this$monaco5$languag2","_this$monaco5$languag3","currentScriptName","isGlobalScript","test","partialDeclarationsPath","wantedTypings","filePath","content","setExtraLibs","addExtraLib","existingLibs","getExtraLibs","insertTextIntoEditor","selection","range","Range","startLineNumber","startColumn","endLineNumber","endColumn","executeEdits","forceMoveMarkers","findMatches","r","setSelection","revealLine","row","getPosition","col","column","decorations","columnNumber","isWholeLine","bp","glyphMarginClassName","deltaDecorations","initNewScript","scrollToLineIfNeeded","ranges","getVisibleRanges","revealLineInCenter","UNSAFE_componentWillReceiveProps","onInserted","newValue","_this$monaco6","_this$monaco6$languag","_this$monaco6$languag2","Fab","bottom","zIndex","IconNoCheck","forceUpdate","DialogExport","popper","file","Blob","fileName","scriptId","dialog","textArea","themeType","textAreaLight","download","rel","href","URL","createObjectURL","textDecoration","Popper","placement","transition","_ref","TransitionProps","Fade","timeout","Paper","typography","left","tabIndex","defaultProps","DialogImport","document","getElementById","readFileDataUrl","reader","FileReader","onload","onabort","onerror","readAsText","handleDropFile","files","dropzone","imageStatus","dropzoneAccepted","dropzoneRejected","fullHeight","Dropzone","maxSize","acceptClassName","rejectClassName","multiple","getRootProps","getInputProps","isDragActive","isDragReject","dropzoneDiv","IconNo","iconError","IconPlus","iconOk","IconUpload","resize","borderWidth","borderStyle","borderColor","boxSizing","toolboxXml","languageBlocklyLoaded","languageOwnLoaded","toolboxText","scriptsLoaded","searchXml","_result","tagName","attributes","nodeName","innerHTML","innerText","childNodes","node","BlocklyEditor","blockly","blocklyWorkspace","exportText","importText","someSelected","changeTimer","onResizeBind","onResize","lastCommand","blinkBlock","loadLanguages","loadJS","url","callback","scriptTag","createElement","onreadystatechange","body","appendChild","loadScripts","loadCustomBlockly","adapters","toLoad","loadXMLDoc","parseXml","DOMParser","xmlStr","parseFromString","ActiveXObject","xmlDoc","async","loadXML","searchBlocks","Xml","workspaceToDom","searchId","highlightBlock","someSelectedTime","now","command","blocklyCheckBlocks","badBlock","blocklyBlinkBlock","exportBlocks","importBlocks","updateBackground","loadCode","fileLang","setAttribute","readyState","getElementsByTagName","fileCustom","svgResize","jsCode2Blockly","xml","l","decodeURIComponent","atob","block","select","unselect","blocklyRemoveOrphanedShadows","blocks","getAllBlocks","isShadow","connections","getConnections_","conn","j","targetConnection","warningText","blocklyGetUnconnectedBlock","blocklyGetBlockWithWarning","sourceBlock_","INPUT_VALUE","OUTPUT_VALUE","_optional","warning","blocklyCode2JSCode","oneWay","JavaScript","workspaceToCode","dom","domToText","btoa","encodeURIComponent","selectedBlocks","getSelected","xmlBlock","blockToDom","dragMode_","DRAG_FREE","deleteNext","xy","getRelativeToSurfaceXY","RTL","x","y","domToPrettyText","onImportBlocks","variables","vars","utils","textToDomDocument","nodes","createVariable","loading","xmlBlocks","textToDom","paste","onBlocklyChanged","ignoreChanges","domToWorkspace","didUpdate","addEventListener","getToolbox","inject","zoom","controls","wheel","startScale","maxScale","minScale","scaleSpeed","move","scrollbars","trashcan","grid","colour","snap","sounds","registerToolboxCategoryCallback","Procedures","flyoutCategoryNew","addChangeListener","masterEvent","allBlocks","removeSelect","Events","UI","CREATE","VIEWPORT_CHANGE","getElementsByClassName","_originalStyle","stroke","fill","removeEventListener","retry","outerHTML","p1","MSG","CustomBlocks","Words","HUE","_b","prototype","call","renderMessageDialog","DialogMessage","renderErrorDialog","renderExportDialog","renderImportDialog","DialogScriptEditor","isReturn","args","argsTitle","ScriptEditorComponent","adapterName","IconSave","ICON_CACHE","MaterialDynamicIcon","iconName","setUrl","useState","useEffect","_obj$common","Element","Icons","CardMenu","active","onTouchMove","cls","deepCopy","userRules","additionalParameter","newItemsSwitches","filterElement","CustomButton","square","CustomIcon","CustomCheckbox","customValue","switchChecked","setSwitchChecked","_Fragment","Checkbox","checked","Boolean","native","styleComponentBlock","memo","CustomInput","multiline","rows","inputText","setInputText","InputProps","SelectMod","borderBottomColor","CustomInstance","attr","onInstanceHide","setOptions","_options","unshift","renderValue","input","placeContent","title2","FormHelperText","CustomModal","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableEscapeKeyDown","i18n","CustomSelect","doNotTranslate","doNotTranslate2","v","onlyItem","only","titleShort","sel","valueOnly","CustomSlider","min","max","step","unit","marks","Slider","valueLabelDisplay","mark","CustomSwitch","FormControlLabel","control","Switch","CustomTime","InputLabelProps","shrink","DAYS","CustomDate","month","days","padStart","getName","STEPS","selector","GenericBlock","PureComponent","renderText","frontText","backText","nameBlock","doNotTranslateBack","Fragment","displayFlex","blockMarginTop","renderSwitch","renderNameText","signature","displayItalic","renderNumber","settings","openCheckbox","visibility","noHelperText","renderColor","renderCheckbox","renderSlider","renderButton","buttonText","findIcon","getSelectIdIcon","catch","renderObjectID","checkReadOnly","showSelectId","_obj$common2","lastObjectIdChange","write","getObjectNameFromObj","DialogSelectID","imagePrefix","dialogName","getThemeName","statesOnly","onOk","role","states","read","setOnUpdate","renderIconTag","iconTag","tagCard","tagCardArray","onChangeTag","openTagMenu","renderTime","renderSelect","renderInstance","hideAttributes","renderDialog","onShowDialog","iconDialog","renderModalInput","openModal","noTextEdit","renderDate","renderTags","isTourOpen","tourStep","setTourStep","keepMounted","tag","onTagChange","search","newTagCardArray","newSettings","newTagCard","prevProps","acceptedBy","onUpdate","onChangeInput","attribute","_attr","getData","onValueChanged","inputs","helpDialog","notFound","iconThemCard","iconThemCardSelectable","blockName","nameCard","iconHelp","helpText","IconHelp","_ref2","nameRender","controlMenuTop","renderDebugInfo","renderSpecific","oid","instanceSelectionOptions","instanceSelectionDef","debugMessage","enableSimulation","debugHideTimeout","onDebugMessage","blockId","hideTimeout","getReplacesInText","context","_context$trigger","trigger","oidType","conditionsStates","debugInfo","renderDebug","sayitEngines","params","voice","emotion","gender","ename","ssml","ActionSayText","getStaticData","compile","config","volume","ActionSendEmail","recipients","subject","ActionTelegram","cachePromises","user","_setUsers","users","_users","userName","firstName","ActionPushover","sound","priority","ActionWhatsappcmb","phone","ActionPushsafer","device","vibration","DEFAULT_RULE","triggers","conditions","justCheck","actions","compileTriggers","json","jsonTriggers","prelines","hist","conds","cond","findBlock","_context","condition","conditionsDebug","conditionsVars","ors","_ors","compileConditions","compileActions","_else","else","line","action","code2json","json2code","STANDARD_FUNCTION","STANDARD_FUNCTION_ONCHANGE","STANDARD_FUNCTION_STATE","STANDARD_FUNCTION_STATE_ONCHANGE","NO_FUNCTION","TriggerScriptSave","Compile","TriggerScheduleBlock","coordinates","func","interval","cron","_config$dow","hours","minutes","at","dow","_dow","intervals","start","astro","offset","offsetValue","wizard","_time2String","time","_setAstro","latitude","longitude","sunValue","SunCalc","order","astroTime","setMinutes","_setInterval","renderCron","textCron","alignItems","openDialog","convertCronToText","ComplexCron","cronExpression","renderWizard","wizardText","Schedule","valid","default","Transition","Slide","TriggerState","Array","isArray","valOld","ackOld","valueAck","valueNotAck","ack","onWriteValue","openSimulate","simulateValue","simulateAck","parseFloat","renderWriteState","_this$inputRef$curren","TransitionComponent","onKeyUp","keyCode","IconCheck","HYSTERESIS","ConditionState","onShowHelp","showHysteresisHelp","isAllTriggersOnState","_this$props$userRules","_this$props$userRules2","_this$props$userRules3","_this$props$userRules4","debugValue","useTrigger","histComp","compare","_context$trigger2","toUpperCase","compareWith","_setInputs","oidUnit","oidStates","_this$props$userRules5","_this$props$userRules6","HysteresisImage","ConditionTime","withDate","ConditionAstronomical","ActionSetState","toggle","oidMax","oidMin","oidRole","oidWrite","oidStep","isNaN","f","ignore","ActionExec","exec","ActionHTTPCall","ActionPrintText","ActionPause","pause","paused","_getOptions","ActionFunction","ActionSetStateDelayed","delay","clearRunning","ActionOperateStates","oid1","oid2","operation","oidResult","TriggerSchedule","ADAPTERS","telegram","email","sayit","pushover","pushsafer","ContextWrapperCreate","createContext","loadComponent","remote","sharedScope","module","shareScope","remoteFallbackUrl","reject","existingRemote","querySelector","__initialized","init","__webpack_share_scopes__","getOrLoadRemote","get","ContextWrapper","setBlocks","setOnDebugMessage","setEnableSimulation","adapterDynamicBlocksArray","dynamicRules","javascriptRules","alreadyCreated","k","protocol","i18nURL","fetch","extendTranslations","Component","adapterBlocksArray","StandardBlocks","Provider","CurrentItem","setUserRules","blockValue","setAnchorEl","useContext","findElementBlocks","useCallback","newUserRules","findElement","handlePopoverOpen","blockInput","useMemo","CustomBlock","isDelete","setIsDelete","onMouseMove","onMouseEnter","onMouseLeave","handlePopoverClose","ctrlKey","newItem","clientWidth","layerStyles","pointerEvents","getItemStyles","initialOffset","currentOffset","isSnapToGrid","snapToGrid","Math","round","WebkitTransform","CustomDragLayer","itemType","targetIds","useDragLayer","getItemType","getInitialSourceClientOffset","getSourceClientOffset","getTargetIds","useStateLocal","events","nameEvents","newHeadCells","funcSet","_","setCards","moveCard","atIndex","cards","additionally","hoverClientY","hoverMiddleY","findCard","copyCard","newTriggers","c","DragWrapper","typeBlocks","allProperties","isActive","preview","end","dropResult","getDropResult","idNumber","useRef","canDrop","hover","_ref$current","draggedId","hoverBoundingRect","getBoundingClientRect","getClientOffset","overIndexActions","overIndexConditions","overIndex","getEmptyImage","captureDraggingState","isMobile","innerWidth","DialogHelp","letterSpacing","DialogCondition","AdditionallyContentBlockItems","_itemsSwitchesRender$","itemsSwitchesRender","boolean","typeBlock","animation","checkItem","setCheckItem","canDropCheck","setCanDropCheck","checkId","setCheckId","hoverBlock","setHoverBlock","getHandlerId","_ref3","_monitor$getItem","targetId","contentBlockItem","addClassHeight","contentHeightOn","contentHeightOff","wrapperMargin","clientHeight","emptyBlockStyle","emptyBlock","emptyBlockNone","ContentBlockItems","_ref4","nameAdditionally","border","additionallyClickItems","setAdditionallyClickItems","checkLocal","showHelp","setShowHelp","showConditionDialog","setShowConditionDialog","newArray","idx","setAnimation","mainBlockItemRules","addClassOverflow","nameBlockItems","selectOnChange","_userRules","selectOnChangeHelp","selectOnChangeHelpIcon","booleanAdditionally","newAdditionally","blockCardAdd","cardAdd","onDoubl","HamburgerMenu","addClass","setAllBlocks","onChangeBlocks","hamburgerOnOff","setHamburgerOnOff","setFilter","setBlocksFunc","typeFunc","newAllBlocks","a11yProps","ClickAwayListener","mouseEvent","touchEvent","onClickAway","AppBar","Tabs","Tab","CustomDragItem","running","importExport","setImportExport","modal","setModal","_jsInstance","_jsAlive","handler","handlerStatus","msg","ruleId","_obj$common3","subscribeObject","unsubscribeObject","setAddClass","Editor","editorDidMount","editorDiv","scriptName","borderRight","lineBreakpoint","lineCode","lineCurrentCode","lineCurrent","Console","onClearAllLogs","consoleLine","console_log","console_warn","console_error","console_debug","consoleSeverity","textTransform","consoleTime","consoleText","Stack","framesSize","editValue","callFrames","editRef","onExpressionNameUpdate","scopeValue","renderExpression","onBlur","CheckIcon","scopeNameName","scopeNameEqual","scopeNameValue","formatValue","scopeType","scopeName","valueType","scopeButtonDel","onExpressionDelete","renderExpressions","expressions","renderOneFrameTitle","frame","mainScriptId","currentScriptId","ListItemButton","onChangeCurrentFrame","currentFrame","frameRoot","frameTextRoot","frameTextPrimary","secondary","frameTextSecondary","functionName","forEdit","description","valueFunc","valueUndefined","valueNull","valueString","valueBoolean","ReactJson","enableClipboard","collapsed","displayDataTypes","valueNone","onWriteScopeValue","variableName","scopeNumber","callFrameId","_this$editRef$current","renderScope","scopeId","_item$value","_item$value2","editable","scopeValueEditable","renderScopes","_this$props$scopes","_this$props$scopes$lo","_this$props$scopes$lo2","_this$props$scopes2","_this$props$scopes2$c","_this$props$scopes2$c2","scopes","local","properties","closure","SplitterLayout","customClassName","splitter","primaryIndex","secondaryMinSize","primaryMinSize","vertical","secondaryInitialSize","onSecondaryPaneSizeChange","onDragEnd","listRoot","toolbarScopes","onExpressionAdd","scopesAfterToolbar","scopeType_local","scopeType_closure","scopeType_user","textOverflow","scopeButton","selectedFrame","valueNumber","valueObject","Debugger","fromInstance","cmd","debugInstance","_data$context","tabs","random","starting","finished","started","getLocation","reinitBreakpoints","readCurrentScope","readExpressions","_data$context2","_data$context3","scope","sendToInstance","toolsTab","logErrors","logWarnings","logs","expression","_data$breakpoints","_data$breakpoints$loc","_data$breakpoints2","_data$breakpoints2$lo","locations","queryBreakpoints","alert","toolSize","stopOnException","_obj$common$engine","_this$state$context","scopeChain","global","_this$state$context2","getTextAtLocation","arrow","monospace","renderQueryBreakpoints","bpListItem","bpListPrimary","bpListSecondary","renderError","closeTab","renderTabs","indicatorColor","scrollButtons","tabText","closeButton","tabFile","onResume","onPause","onNext","onStepIn","onStepOut","onRestart","onToggleException","renderToolbar","Toolbar","buttonRestart","IconRestart","buttonRun","IconRun","buttonPause","buttonNext","IconNext","buttonStep","IconStep","buttonOut","IconOut","buttonException","IconException","getPossibleBreakpoints","toggleBreakpoint","renderCode","sourceId","renderFrames","_this$state$context3","renderConsole","logWarning","renderTools","_console","Badge","badgeContent","tabsRoot","tabRoot","LinearProgress","buttonStop","borderTop","allObjectsCache","getText","detectDevices","devicesObject","getObjectView","channels","devices","enums","values","reduce","allObjects","detector","ChannelDetector","rooms","funcs","list","_devicesObject$id","_devicesObject$id2","_devicesObject$id2$co","smartName","members","member","_keysOptional","_usedIdsOptional","ignoreIndicators","excludedTypes","detect","stateId","st","deviceObject","deviceType","defaultRole","channelId","deviceId","room","roomId","funcId","function","deviceObj","idArray","parentObject","_parentObject$common2","_parentObject$common","_grandParentObject$co","grandParentObject","_grandParentObject$co2","LANGUAGES","ru","de","es","fr","pl","nl","pt","uk","ChatIcon","viewBox","question","setQuestion","answer","setAnswer","setOpen","working","setWorking","setError","showKeyWarning","setShowKeyWarning","devicesCache","gptKeyCache","docsCache","ask","apiKey","docs","gptKey","systemPrompt","openai","OpenAI","dangerouslyAllowBrowser","chat","completions","messages","choices","comments","endsWith","_err$response","_err$response$data","_err$response$data$er","response","flexDirection","gap","Close","fullHeightDialog","Question","CircularProgress","Copy","Check","onAddCode","COLOR_DEBUG","COLOR_VERBOSE","onInstanceChanged","onBrowserClose","isChanged","returnValue","tabsRef","rules","debugEnabled","verboseEnabled","showCompiledCode","showCron","showScript","showAstro","astroEvents","visible","cmdToBlockly","cmdToRules","menuTabsOpened","menuTabsAnchorEl","showDebugMenu","toast","instancesLoaded","setChangedInAdmin","initValue","scriptDialog","systemLang","selectIdDialog","cronDialog","showScriptDialog","getAllAdapterInstances","onSelectedChange","instanceObjects","configNotSaved","removeNonExistingScripts","_changed","verbose","oldSource","commonLocal","nextCommon","onStartStop","onSave","onSaveAll","onCancel","getSelect","onConvertBlockly2JS","showConfirmDialog","nowSelected","onTabChange","isScriptChanged","onTabClose","ok","confirmCallback","confirm","sendCommandToBlockly","sendCommandToRules","getScriptFullName","getTabs","textColor","tabChanged","tabChangedIcon","wrapped","iconPosition","tabIcon","tabButton","wrapper","tabButtonWrapper","tabMenuButton","_event","IconCloseAll","hintButton","hintIcon","getDebugMenu","menuDebugAnchorEl","menuIcon","IconVerbose","getDebugBadge","getAskAboutDebug","askAboutDebug","DialogConfirm","onDebugModeChange","cancel","getToolbar","isInstanceRunning","isScriptRunning","changedAll","onLocate","IconLocate","notRunning","textButton","saveButton","textIcon","IconCron","OpenAiDialog","IconAstro","IconSelectId","IconDebugMode","toolbarButtonsDisabled","badgeMargin","IconDebugMenu","getScriptEditor","getBlocklyEditor","resizing","getRulesEditor","RulesEditor","getConfirmDialog","getSelectIdDialog","_this$selectId","allObjektTypes","selectedId","types","getCronDialog","DialogCron","getAstroDialog","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","Tooltip","toLocaleTimeString","align","serverTime","getEditorDialog","getToast","Snackbar","anchorOrigin","horizontal","autoHideDuration","ContentProps","closeToast","getTour","isAnyRulesExists","Tour","steps","isOpen","onRequestClose","goToStep","getDebug","hintText","DialogImportFile","readAsDataURL","App","GenericApp","Connection","AdminConnection","translations","require","bottomButtons","autoSubscribeLog","sentryDSN","onScriptsChanged","onInstanceAliveChange","reload","onHostChanged","hosts","logSize","menuSize","importFile","onConnectionReady","ready","updateScripts","updating","logMessage","menuSelectId","logHorzLayout","hideLog","subscribeOnInstances","readAdaptersWithBlockly","getHosts","readAllScripts","compareScripts","instancesArray","promises","instanceId","all","onToggleExpertMode","newScripts","oldIds","newIds","oldScript","newScript","promise","parentID","updateScript","renameGroup","_list","nId","delObject","expert","onUpdateScript","onSelect","showMessage","isFolder","reg","RegExp","newCommon","_obj","extendObject","_rev","getLiveHost","getFullYear","getMonth","getDate","getRawSocket","emit","link","fileStorageNamespace","click","remove","onImportConfirmed","toggleLogLayout","renderEditor","sum","showLogButton","IconShowLog","renderMain","menuOpenCloseButton","IconMenuOpened","IconMenuClosed","onDragStart","splitterDivs","menuDivWithoutMenu","mainDiv","SideMenu","update","setThemeName","getThemeType","Loader","propTypes","PropTypes","flexGrow","menuDiv","splitterDivWithMenu","progress","hostname","pgk","generateClassName","createGenerateClassName","productionPrefix","build","createRoot","StylesProvider","StyledEngineProvider","injectFirst","ThemeProvider","DndProvider","TouchBackend","_theme","navigator","serviceWorker","registration","unregister","loadDynamicScript","port","socketLoadedHandler"],"sourceRoot":""}
|