iobroker.javascript 8.7.1 → 8.7.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/253.be85a342.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","assets/blockly2js.svg","assets/rules2js.svg","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 {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n TextField,\n FormControl,\n Select,\n InputLabel,\n MenuItem,\n} from '@mui/material';\n\nimport {\n Cancel as IconCancel,\n Check as IconOk,\n} from '@mui/icons-material';\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';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n} from '@mui/material';\n\nimport {\n Check as IconOk,\n Cancel as IconCancel,\n Delete as IconDelete,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\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 DialogDelete;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n Card,\n CardActionArea,\n CardActions,\n CardContent,\n CardMedia,\n} from '@mui/material';\n\nimport { Cancel as IconCancel } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\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';\n\nconst styles = {\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: 8,\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 style={styles.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>\n <CardMedia\n style={styles.media}\n image={ImgJS}\n title=\"JavaScript\"\n />\n <CardContent>\n <h2>JavaScript</h2>\n <div style={styles.complexity}>{I18n.t('for programmers')}</div>\n <div style={styles.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 style={styles.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>\n <CardMedia\n style={styles.media}\n image={ImgTS}\n title=\"TypeScript\"\n />\n <CardContent>\n <h2>TypeScript</h2>\n <div style={styles.complexity}>{I18n.t('for professionals')}</div>\n <div style={styles.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 style={styles.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Blockly')}>\n <CardMedia\n style={styles.media}\n image={ImgBlockly}\n title=\"Blockly\"\n />\n <CardContent>\n <h2>Blockly</h2>\n <div style={styles.complexity}>{I18n.t('normal')}</div>\n <div style={styles.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 style={styles.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Rules')}>\n <CardMedia\n style={styles.media}\n image={ImgRules}\n title=\"Rules\"\n />\n <CardContent>\n <h2>Rules</h2>\n <div style={styles.complexity}>{I18n.t('easy')}</div>\n <div style={styles.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 DialogAddNew;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n TextField,\n FormControl,\n Select,\n InputLabel,\n MenuItem,\n} from '@mui/material';\n\nimport {\n Check as IconOk,\n Cancel as IconCancel,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\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 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 {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 source: PropTypes.string,\n};\n\nexport default DialogNew;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from '@mui/material';\n\nimport { Check as IconOk } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = {\n title: theme => ({\n background: theme.palette.error.main,\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\n sx={styles.title}\n id=\"alert-dialog-title\">\n {this.props.title || I18n.t('Error')}\n </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 DialogError;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n ListItemIcon,\n List,\n ListItem,\n Grid,\n ListItemText,\n Input,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport {\n Check as IconOk,\n Cancel as IconCancel,\n Close as IconClose,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = {\n buttonIcon: {\n marginRight: 8,\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: 16,\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 }\n return <Grid item>\n <div style={styles.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>\n <img src={item.icon} alt={item.id} style={styles.icon} />\n </ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n\n renderInstances() {\n if (!this.state.jsInstance) {\n return <Grid item/>;\n }\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\n return <Grid item>\n <div style={styles.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>\n <img src={item.icon} alt={item.id} style={styles.icon} />\n </ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\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 style={styles.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={<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 </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 DialogAdapterDebug;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport {\n Drawer,\n Divider,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n IconButton,\n Menu,\n MenuItem,\n Input,\n ListItemSecondaryAction, Box,\n} from '@mui/material';\n\nimport {\n MdMoreVert as IconMore,\n MdContentCopy as IconCopy,\n MdDelete as IconDelete,\n MdInput as IconDoEdit,\n MdClose as IconClear,\n MdFormatClear as IconClose,\n MdPlayArrow as IconPlay,\n MdAdd as IconAdd,\n MdCreateNewFolder as IconAddFolder,\n MdPause as IconPause,\n MdSwapVert as IconReorder,\n MdEdit as IconEdit,\n MdSearch as IconFind,\n MdPersonPin as IconExpert,\n MdPalette as IconDark,\n MdUnfoldMore as IconExpandAll,\n MdUnfoldLess as IconCollapseAll,\n MdBugReport as IconDebug,\n} from 'react-icons/md';\n\nimport {\n FaFolder as IconFolder,\n FaFolderOpen as IconFolderOpened,\n FaFileExport as IconExport,\n FaFileImport as IconImport,\n} from 'react-icons/fa';\n\nimport { red, green, yellow } from '@mui/material/colors';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\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 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 = {\n drawerPaper: {\n position: 'relative',\n width: '100%', //Theme.menu.width,\n height: '100%',\n overflow: 'hidden',\n },\n toolbar: theme => ({\n height: theme.toolbar.height,\n }),\n toolbarButtons: theme => ({\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 fontSize: 10,\n opacity: 0.4,\n },\n footer: {\n height: 24,\n display: 'flex',\n },\n footerButtons: theme => ({\n '& img': {\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n mt: '1px',\n mr: '2px',\n height: 22,\n width: 22,\n '&:hover': {\n backgroundColor: '#dbdbdb',\n },\n },\n '& svg': {\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n mt: '1px',\n mr: '2px',\n height: 22,\n width: 22,\n '&:hover': {\n backgroundColor: '#dbdbdb',\n },\n }\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 }\n\n return obj.common.name.toString();\n }\n\n return id.replace(/^script\\.js./, '');\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 exist\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,\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.includes(el.id)) {\n expanded.push(el.id);\n changed = true;\n }\n }\n } while(el);\n\n return changed && expanded;\n }\n\n ensureSelectedIsVisible(selected, expanded) {\n return 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 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={{\n ...styles.iconButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n color,\n }}\n size=\"medium\"\n >\n {item.enabled ? <IconPause /> : <IconPlay />}\n </IconButton>,\n this.state.width > NARROW_WIDTH ? <IconButton\n key=\"delete\"\n style={this.props.debugMode ? styles.iconButtonsDisabled : undefined}\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 style={this.props.debugMode ? styles.iconButtonsDisabled : undefined}\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 style={this.props.debugMode ? styles.iconButtonsDisabled : undefined}\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 }, () => resolve());\n } else {\n this.setState({ deleting: item.id }, () => resolve());\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')} style={styles.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 : undefined);\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.type === 'folder') {\n iconStyle = {\n ...styles.folderIcon,\n ...(reorder ? styles.folderIconReorder : styles.folderIconNoReorder),\n };\n } else {\n iconStyle = {\n ...styles.scriptIcon,\n // ...(reorder ? styles.scriptIconReorder : styles.scriptIconNoReorder),\n };\n }\n if (item.id === GLOBAL_ID) {\n iconStyle.color = '#356956';\n } else if (item.id === COMMON_ID) {\n iconStyle.color = '#4899e1';\n }\n\n let childrenCount = null;\n if ((childrenFiltered && childrenFiltered.length) || (children && children.length)) {\n childrenCount = <span style={styles.childrenCount}>{childrenFiltered && childrenFiltered.length !== children.length ? `${childrenFiltered.length}(${children.length})` : children.length}</span>;\n }\n\n const combinedStyle = {\n ...(item.type === 'folder' ? styles.folder : styles.script),\n ...(reorder ? styles.reorder : undefined),\n ...(reorder && item.type !== 'folder' ? styles.scriptReorder : undefined),\n ...(reorder && item.type === 'folder' ? styles.folderReorder: undefined),\n ...style,\n };\n\n return <ListItem\n key={item.id}\n style={combinedStyle}\n className={Utils.clsx(\n reorder && item.type === 'folder' && 'folder-reorder',\n reorder && item.type !== 'folder' && 'script-reorder',\n )}\n onClick={e => this.onClick(item, e)}\n onDoubleClick={e => this.onDblClick(item, e)}\n >\n <ListItemIcon\n style={styles.listItemIcon}\n >{\n item.type === 'folder' ? (\n reorder || isExpanded ?\n <IconFolderOpened style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)} /> :\n <IconFolder style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)} />\n )\n :\n <img\n style={iconStyle}\n alt={item.type}\n src={images[item.type] || images.def}\n />\n }</ListItemIcon>\n <ListItemText\n sx={{ '& .MuiListItemText-primary': item.id === this.state.selected && !reorder ? styles.selected : undefined }}\n style={this.getTextStyle(item)}\n primary={<span style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>{title}{childrenCount}</span>}\n />\n <ListItemSecondaryAction>\n {this.renderItemButtonsOnEnd(item, children)}\n </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 sx={styles.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 const 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\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 style={{ ...styles.filterIcon, color: COLOR_RUN }} />,\n this.state.statusFilter === false && <IconPause style={{ ...styles.filterIcon, 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 }}\n >\n <IconDelete style={{ ...styles.iconDropdownMenu, color: 'red' }} />\n {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 style={{ ...styles.iconDropdownMenu, 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 >\n <IconExport style={styles.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 style={styles.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 style={styles.iconDropdownMenu} />\n {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 style={styles.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 style={styles.iconDropdownMenu} />\n {I18n.t('Debug instance')}\n </MenuItem>}\n </Menu>;\n }\n\n // render menu and toolbar\n getToolbarButtons() {\n const result = [];\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 style={styles.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 sx={styles.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 sx={styles.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 style={styles.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 sx={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n }}\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 sx={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n }}\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 sx={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n }}\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 sx={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n }}\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 sx={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.iconButtonsDisabled : undefined),\n }}\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 sx={styles.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 <Box\n key=\"filterByRunning\"\n sx={styles.footerButtons}\n >\n <IconPause\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 </Box>,\n <Box\n key=\"filterByPaused\"\n sx={styles.footerButtons}\n >\n <IconPlay\n title={I18n.t('Show only paused scripts')}\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 </Box>,\n <Box\n sx={styles.footerButtons}\n style={{ marginRight: 16 }}\n key=\"filterByProblem\"\n >\n <IconPause\n title={I18n.t('Show only scripts with problems')}\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 </Box>,\n <Box\n sx={styles.footerButtons}\n key=\"filterBlockly\"\n >\n <img\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 </Box>,\n <Box\n key=\"filterJS\"\n sx={styles.footerButtons}\n >\n <img\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 </Box>,\n <Box\n key=\"filterTS\"\n sx={styles.footerButtons}\n >\n <img\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 </Box>,\n <Box\n key=\"filterRules\"\n sx={styles.footerButtons}\n >\n <img\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={() => {\n const typeFilter = this.state.typeFilter === 'Rules' ? '' : 'Rules';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({ typeFilter });\n }}\n />\n </Box>,\n <div key=\"padding\" style={{ flexGrow: 1 }} />,\n <Box\n key=\"expandAll\"\n sx={styles.footerButtons}\n >\n <IconExpandAll\n style={styles.footerButtonsRight}\n title={I18n.t('Expand all')}\n onClick={() => this.onExpandAll()}\n />\n </Box>,\n this.state.expanded.length ? <Box\n key=\"collapseAll\"\n sx={styles.footerButtons}\n >\n <IconCollapseAll\n style={styles.footerButtonsRight}\n title={I18n.t('Collapse all')}\n onClick={() => this.onCollapseAll()}\n />\n </Box> : <div style={{ height: 22, width: 24 }} />,\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 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 style={styles.menu}\n sx={{ '& .MuiDrawer-paper': styles.drawerPaper }}\n anchor='left'\n onClick={() => this.onClick({id: ''})}\n >\n <Box sx={styles.toolbar}>\n {this.getToolbarButtons()}\n </Box>\n\n <Divider/>\n\n <DragDropContext backend={HTML5Backend}>\n <div style={styles.innerMenu}>\n {this.renderAllItems(this.state.listItems)}\n </div>\n </DragDropContext>\n\n <Divider />\n\n <div style={styles.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 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 SideDrawer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Box,\n IconButton,\n} from '@mui/material';\n\nimport {\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n MdContentCopy as IconCopy,\n MdVisibilityOff as IconHide,\n} 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 = {\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n },\n logBoxInner: theme => ({\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: theme => ({\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black',\n }),\n error: theme => ({\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n warn: theme => ({\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n debug: theme => ({\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n silly: theme => ({\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 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 trFrom: {\n width: 90,\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: theme => ({\n '& img': {\n width: 24,\n height: 24,\n background: theme.palette.mode === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.mode === 'dark' ? '30px' : undefined,\n },\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(row) {\n let message = row.message || '';\n\n if (typeof message !== 'object') {\n const regExp = new RegExp(`${row.from.replace('.', '\\\\.').replace(')', '\\\\)').replace('(', '\\\\(')} \\\\(\\\\d+\\\\) `, 'g');\n const matches = message.match(regExp);\n\n if (matches) {\n message = message.replace(matches[0], '');\n } else {\n message = message.replace(`${row.from} `, '');\n }\n }\n\n return <Box\n component=\"tr\"\n key={`tr_${row.ts}_${row.message.substr(-10)}`}\n sx={styles[row.severity]}\n >\n <td style={styles.trFrom}>{row.from}</td>\n <td style={styles.trTime}>{getTimeString(new Date(row.ts))}</td>\n <td style={styles.trSeverity}>{row.severity}</td>\n <td>{message}</td>\n </Box>;\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 <Box sx={styles.logBoxInner} key=\"logList\">\n <table key=\"logTable\" style={styles.table}><tbody>{lines}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{ float: 'left', clear: 'both' }}/>\n </Box>;\n }\n\n return <Box key=\"logList\" sx={styles.logBoxInner} style={{ paddingLeft: 10 }}>{I18n.t('Log outputs')}</Box>;\n }\n\n render() {\n const lines = this.state.selected && this.state.lines[this.state.selected];\n return <div style={styles.logBox}>\n <div style={styles.toolbox} key=\"toolbox\">\n <IconButton\n style={styles.iconButtons}\n onClick={() => this.setState({ goBottom: !this.state.goBottom })}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"\n >\n <IconBottom />\n </IconButton>\n {lines && lines.length ? <IconButton\n style={styles.iconButtons}\n onClick={() => this.clearLog()}\n size=\"medium\">\n <IconDelete />\n </IconButton> : null}\n {lines && lines.length ? <IconButton\n style={styles.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\">\n <IconCopy />\n </IconButton> : null}\n {this.props.onLayoutChange ? <IconButton\n style={styles.iconButtons}\n onClick={() => this.props.onLayoutChange()}\n title={I18n.t('Change layout')}\n size=\"medium\"\n sx={styles.layoutIcon}\n >\n <img alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} />\n </IconButton> : null}\n <IconButton\n style={styles.iconButtons}\n onClick={() => this.props.onHideLog()}\n title={I18n.t('Hide logs')}\n size=\"medium\">\n <IconHide />\n </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 Log;\n","var _defs, _title, _title2, _title3, _title4, _title5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgBlockly2Js(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 1536 512\",\n width: \"96px\",\n height: \"32px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-2\",\n d: \"M 82.97724,29.300104 C 82.790583,28.201973 82.006921,27.299698 80.945743,26.961124 79.884564,26.62255 78.723152,26.904241 77.935,27.691354 L 62.465677,43.197917 50.303229,20.042344 C 49.78815,19.063276 48.772957,18.45025 47.666667,18.45025 c -1.106291,0 -2.121484,0.613026 -2.636563,1.592094 L 38.379115,32.703802 21.695781,1.5864062 C 21.090714,0.45617231 19.83044,-0.16023716 18.566804,0.05600004 17.303168,0.27223724 16.319565,1.2726256 16.12474,2.5397396 L 0,105.76042 43.123438,129.93635 c 2.707936,1.51195 6.006125,1.51195 8.714062,0 l 43.495833,-24.17593 z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-4\",\n d: \"m 106.68711,35.274174 c -0.186,-1.097652 -0.96693,-1.999535 -2.02439,-2.337961 -1.05747,-0.338426 -2.21482,-0.05686 -3.00022,0.729912 L 86.247266,49.165925 74.127344,26.020451 C 73.614066,25.04181 72.602423,24.429052 71.5,24.429052 c -1.102423,0 -2.114066,0.612758 -2.627344,1.591399 L 62.244922,38.676387 45.619922,7.5725628 C 45.01697,6.4428218 43.761103,5.8266812 42.501885,6.0428241 41.242667,6.258967 40.262504,7.2589191 40.068359,8.5254804 L 24,111.70114 66.972656,135.86653 c 2.698469,1.51129 5.985125,1.51129 8.683594,0 L 119,111.70114 Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-1\",\n d: \"M 82.97724,29.300104 C 82.790583,28.201973 82.006921,27.299698 80.945743,26.961124 79.884564,26.62255 78.723152,26.904241 77.935,27.691354 L 62.465677,43.197917 50.303229,20.042344 C 49.78815,19.063276 48.772957,18.45025 47.666667,18.45025 c -1.106291,0 -2.121484,0.613026 -2.636563,1.592094 L 38.379115,32.703802 21.695781,1.5864062 C 21.090714,0.45617231 19.83044,-0.16023716 18.566804,0.05600004 17.303168,0.27223724 16.319565,1.2726256 16.12474,2.5397396 L 0,105.76042 43.123438,129.93635 c 2.707936,1.51195 6.006125,1.51195 8.714062,0 l 43.495833,-24.17593 z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-3\",\n d: \"m 106.68711,35.274174 c -0.186,-1.097652 -0.96693,-1.999535 -2.02439,-2.337961 -1.05747,-0.338426 -2.21482,-0.05686 -3.00022,0.729912 L 86.247266,49.165925 74.127344,26.020451 C 73.614066,25.04181 72.602423,24.429052 71.5,24.429052 c -1.102423,0 -2.114066,0.612758 -2.627344,1.591399 L 62.244922,38.676387 45.619922,7.5725628 C 45.01697,6.4428218 43.761103,5.8266812 42.501885,6.0428241 41.242667,6.258967 40.262504,7.2589191 40.068359,8.5254804 L 24,111.70114 66.972656,135.86653 c 2.698469,1.51129 5.985125,1.51129 8.683594,0 L 119,111.70114 Z\"\n }))), /*#__PURE__*/React.createElement(\"path\", {\n className: \"blocklyPath\",\n fill: \"#5b80a5\",\n d: \"M 125.927 91.541 L 1148.095 91.541 L 1148.095 420.459 L 125.927 420.459 L 125.927 344.559 C 125.927 218.048 24.719 445.762 24.719 249.678 C 24.719 53.584 125.927 281.303 125.927 154.797 L 125.927 91.541 Z\",\n style: {\n strokeWidth: 5\n }\n }, _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Brick\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 1494.567 91.523 C 1495.672 91.523 1496.567 92.418 1496.567 93.523 L 1496.567 418.433 C 1496.567 419.538 1495.672 420.433 1494.567 420.433 L 1089.542 420.433 C 1088.437 420.433 1087.542 419.538 1087.542 418.433 L 1087.542 392.145 L 1168.093 91.523 Z\",\n fill: \"#f7df1e\",\n style: {\n strokeWidth: 5\n }\n }, _title2 || (_title2 = /*#__PURE__*/React.createElement(\"title\", null, \"JS-Rect\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 1355.681 296.404 C 1364.385 310.617 1375.71 321.064 1395.739 321.064 C 1412.565 321.064 1423.314 312.654 1423.314 301.034 C 1423.314 287.11 1412.27 282.178 1393.75 274.077 L 1383.598 269.721 C 1354.295 257.237 1334.828 241.598 1334.828 208.536 C 1334.828 178.08 1358.033 154.896 1394.299 154.896 C 1420.117 154.896 1438.679 163.881 1452.054 187.409 L 1420.433 207.713 C 1413.471 195.229 1405.96 190.311 1394.299 190.311 C 1382.405 190.311 1374.866 197.856 1374.866 207.713 C 1374.866 219.895 1382.411 224.827 1399.834 232.372 L 1409.986 236.721 C 1444.489 251.517 1463.969 266.6 1463.969 300.513 C 1463.969 337.073 1435.249 357.103 1396.679 357.103 C 1358.966 357.103 1334.602 339.131 1322.68 315.576 L 1355.681 296.404 Z M 1212.231 299.923 C 1218.61 311.241 1224.413 320.81 1238.365 320.81 C 1251.706 320.81 1260.123 315.59 1260.123 295.293 L 1260.123 157.214 L 1300.73 157.214 L 1300.73 295.842 C 1300.73 337.89 1276.078 357.027 1240.094 357.027 C 1207.58 357.027 1188.751 340.201 1179.176 319.935 L 1212.231 299.923 Z\",\n style: {}\n }, _title3 || (_title3 = /*#__PURE__*/React.createElement(\"title\", null, \"JS\"))), /*#__PURE__*/React.createElement(\"path\", {\n className: \"blocklyPath\",\n d: \"M 1168.088 91.541 L 1168.093 91.523 L 1184.595 91.523 L 1096.457 420.459 L 1051.626 420.459 L 1139.759 91.541 Z\",\n style: {\n strokeWidth: 5\n }\n }, _title4 || (_title4 = /*#__PURE__*/React.createElement(\"title\", null, \"Slash\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 301.727 331.831 L 229.969 331.831 L 229.969 173.491 L 306.883 173.491 C 326.29 173.778 340.04 179.399 348.133 190.356 C 353.003 197.088 355.438 205.145 355.438 214.526 C 355.438 224.194 353.003 231.964 348.133 237.837 C 345.411 241.131 341.401 244.139 336.102 246.86 C 344.194 249.797 350.299 254.452 354.417 260.825 C 358.535 267.199 360.594 274.933 360.594 284.028 C 360.594 293.41 358.23 301.825 353.504 309.272 C 350.496 314.214 346.736 318.368 342.225 321.733 C 337.14 325.6 331.142 328.25 324.232 329.683 C 317.32 331.115 309.819 331.831 301.727 331.831 Z M 300.975 262.114 L 261.551 262.114 L 261.551 304.331 L 300.438 304.331 C 307.384 304.331 312.791 303.4 316.658 301.538 C 323.676 298.101 327.186 291.512 327.186 281.772 C 327.186 273.537 323.784 267.879 316.981 264.8 C 313.185 263.081 307.849 262.186 300.975 262.114 Z M 317.41 231.929 C 321.707 229.35 323.856 224.731 323.856 218.071 C 323.856 210.695 320.991 205.825 315.262 203.462 C 310.32 201.815 304.018 200.991 296.356 200.991 L 261.551 200.991 L 261.551 235.903 L 300.438 235.903 C 307.384 235.903 313.042 234.578 317.41 231.929 Z M 386.477 173.491 L 417.092 173.491 L 417.092 331.831 L 386.477 331.831 L 386.477 173.491 Z M 544.605 229.565 C 554.487 241.954 559.429 256.6 559.429 273.501 C 559.429 290.688 554.487 305.387 544.605 317.598 C 534.722 329.808 519.719 335.913 499.595 335.913 C 479.471 335.913 464.468 329.808 454.585 317.598 C 444.702 305.387 439.761 290.688 439.761 273.501 C 439.761 256.6 444.702 241.954 454.585 229.565 C 464.468 217.176 479.471 210.981 499.595 210.981 C 519.719 210.981 534.722 217.176 544.605 229.565 Z M 499.488 236.87 C 490.536 236.87 483.643 240.039 478.809 246.377 C 473.975 252.715 471.558 261.756 471.558 273.501 C 471.558 285.246 473.975 294.305 478.809 300.679 C 483.643 307.052 490.536 310.239 499.488 310.239 C 508.439 310.239 515.314 307.052 520.113 300.679 C 524.911 294.305 527.31 285.246 527.31 273.501 C 527.31 261.756 524.911 252.715 520.113 246.377 C 515.314 240.039 508.439 236.87 499.488 236.87 Z M 682.638 256.743 L 651.271 256.743 C 650.697 252.374 649.229 248.436 646.867 244.927 C 643.429 240.2 638.093 237.837 630.861 237.837 C 620.548 237.837 613.494 242.957 609.699 253.198 C 607.693 258.641 606.691 265.874 606.691 274.897 C 606.691 283.491 607.693 290.402 609.699 295.63 C 613.351 305.369 620.226 310.239 630.324 310.239 C 637.485 310.239 642.569 308.305 645.577 304.438 C 648.585 300.571 650.411 295.558 651.056 289.399 L 682.316 289.399 C 681.6 298.709 678.234 307.518 672.218 315.825 C 662.622 329.217 648.406 335.913 629.572 335.913 C 610.737 335.913 596.879 330.327 587.999 319.155 C 579.119 307.983 574.679 293.481 574.679 275.649 C 574.679 255.526 579.584 239.878 589.396 228.706 C 599.207 217.534 612.742 211.948 630.001 211.948 C 644.682 211.948 656.695 215.242 666.041 221.831 C 675.387 228.42 680.919 240.057 682.638 256.743 Z M 811.113 331.831 L 774.16 331.831 L 746.123 281.772 L 733.447 294.985 L 733.447 331.831 L 703.369 331.831 L 703.369 174.028 L 733.447 174.028 L 733.447 259.321 L 771.582 215.278 L 809.502 215.278 L 768.574 260.073 L 811.113 331.831 Z M 826.688 173.491 L 857.303 173.491 L 857.303 331.831 L 826.688 331.831 L 826.688 173.491 Z M 934.748 301.108 L 958.918 214.741 L 991.467 214.741 L 951.291 329.897 C 943.557 352.098 937.434 365.866 932.922 371.201 C 928.41 376.536 919.387 379.204 905.852 379.204 C 903.13 379.204 900.946 379.186 899.299 379.15 C 897.651 379.115 895.181 378.989 891.887 378.774 L 891.887 354.282 L 895.754 354.497 C 898.762 354.64 901.626 354.533 904.348 354.175 C 907.069 353.817 909.361 352.993 911.223 351.704 C 913.013 350.487 914.678 347.944 916.218 344.077 C 917.758 340.21 918.384 337.846 918.098 336.987 L 875.129 214.741 L 909.182 214.741 L 934.748 301.108 Z\",\n style: {\n fill: \"rgb(255, 255, 255)\"\n }\n }, _title5 || (_title5 = /*#__PURE__*/React.createElement(\"title\", null, \"Blockly\"))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgBlockly2Js);\nexport default __webpack_public_path__ + \"static/media/blockly2js.8fb8f9319a060341c081277b7b760c74.svg\";\nexport { ForwardRef as ReactComponent };","var _defs, _title, _title2, _title3, _title4, _title5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgRules2Js(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 1536 512\",\n width: \"96px\",\n height: \"32px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-2\",\n d: \"M 82.97724,29.300104 C 82.790583,28.201973 82.006921,27.299698 80.945743,26.961124 79.884564,26.62255 78.723152,26.904241 77.935,27.691354 L 62.465677,43.197917 50.303229,20.042344 C 49.78815,19.063276 48.772957,18.45025 47.666667,18.45025 c -1.106291,0 -2.121484,0.613026 -2.636563,1.592094 L 38.379115,32.703802 21.695781,1.5864062 C 21.090714,0.45617231 19.83044,-0.16023716 18.566804,0.05600004 17.303168,0.27223724 16.319565,1.2726256 16.12474,2.5397396 L 0,105.76042 43.123438,129.93635 c 2.707936,1.51195 6.006125,1.51195 8.714062,0 l 43.495833,-24.17593 z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-4\",\n d: \"m 106.68711,35.274174 c -0.186,-1.097652 -0.96693,-1.999535 -2.02439,-2.337961 -1.05747,-0.338426 -2.21482,-0.05686 -3.00022,0.729912 L 86.247266,49.165925 74.127344,26.020451 C 73.614066,25.04181 72.602423,24.429052 71.5,24.429052 c -1.102423,0 -2.114066,0.612758 -2.627344,1.591399 L 62.244922,38.676387 45.619922,7.5725628 C 45.01697,6.4428218 43.761103,5.8266812 42.501885,6.0428241 41.242667,6.258967 40.262504,7.2589191 40.068359,8.5254804 L 24,111.70114 66.972656,135.86653 c 2.698469,1.51129 5.985125,1.51129 8.683594,0 L 119,111.70114 Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-1\",\n d: \"M 82.97724,29.300104 C 82.790583,28.201973 82.006921,27.299698 80.945743,26.961124 79.884564,26.62255 78.723152,26.904241 77.935,27.691354 L 62.465677,43.197917 50.303229,20.042344 C 49.78815,19.063276 48.772957,18.45025 47.666667,18.45025 c -1.106291,0 -2.121484,0.613026 -2.636563,1.592094 L 38.379115,32.703802 21.695781,1.5864062 C 21.090714,0.45617231 19.83044,-0.16023716 18.566804,0.05600004 17.303168,0.27223724 16.319565,1.2726256 16.12474,2.5397396 L 0,105.76042 43.123438,129.93635 c 2.707936,1.51195 6.006125,1.51195 8.714062,0 l 43.495833,-24.17593 z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"path-3\",\n d: \"m 106.68711,35.274174 c -0.186,-1.097652 -0.96693,-1.999535 -2.02439,-2.337961 -1.05747,-0.338426 -2.21482,-0.05686 -3.00022,0.729912 L 86.247266,49.165925 74.127344,26.020451 C 73.614066,25.04181 72.602423,24.429052 71.5,24.429052 c -1.102423,0 -2.114066,0.612758 -2.627344,1.591399 L 62.244922,38.676387 45.619922,7.5725628 C 45.01697,6.4428218 43.761103,5.8266812 42.501885,6.0428241 41.242667,6.258967 40.262504,7.2589191 40.068359,8.5254804 L 24,111.70114 66.972656,135.86653 c 2.698469,1.51129 5.985125,1.51129 8.683594,0 L 119,111.70114 Z\"\n }))), /*#__PURE__*/React.createElement(\"path\", {\n className: \"blocklyPath\",\n d: \"M 125.927 91.541 L 1148.095 91.541 L 1148.095 420.459 L 125.927 420.459 L 125.927 344.559 C 125.927 218.048 24.719 445.762 24.719 249.678 C 24.719 53.584 125.927 281.303 125.927 154.797 L 125.927 91.541 Z\",\n style: {\n strokeWidth: 5,\n fill: \"rgb(1, 35, 92)\"\n }\n }, _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Brick\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 1494.567 91.523 C 1495.672 91.523 1496.567 92.418 1496.567 93.523 L 1496.567 418.433 C 1496.567 419.538 1495.672 420.433 1494.567 420.433 L 1089.542 420.433 C 1088.437 420.433 1087.542 419.538 1087.542 418.433 L 1087.542 392.145 L 1168.093 91.523 Z\",\n fill: \"#f7df1e\",\n style: {\n strokeWidth: 5\n }\n }, _title2 || (_title2 = /*#__PURE__*/React.createElement(\"title\", null, \"JS-Rect\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 1355.681 296.404 C 1364.385 310.617 1375.71 321.064 1395.739 321.064 C 1412.565 321.064 1423.314 312.654 1423.314 301.034 C 1423.314 287.11 1412.27 282.178 1393.75 274.077 L 1383.598 269.721 C 1354.295 257.237 1334.828 241.598 1334.828 208.536 C 1334.828 178.08 1358.033 154.896 1394.299 154.896 C 1420.117 154.896 1438.679 163.881 1452.054 187.409 L 1420.433 207.713 C 1413.471 195.229 1405.96 190.311 1394.299 190.311 C 1382.405 190.311 1374.866 197.856 1374.866 207.713 C 1374.866 219.895 1382.411 224.827 1399.834 232.372 L 1409.986 236.721 C 1444.489 251.517 1463.969 266.6 1463.969 300.513 C 1463.969 337.073 1435.249 357.103 1396.679 357.103 C 1358.966 357.103 1334.602 339.131 1322.68 315.576 L 1355.681 296.404 Z M 1212.231 299.923 C 1218.61 311.241 1224.413 320.81 1238.365 320.81 C 1251.706 320.81 1260.123 315.59 1260.123 295.293 L 1260.123 157.214 L 1300.73 157.214 L 1300.73 295.842 C 1300.73 337.89 1276.078 357.027 1240.094 357.027 C 1207.58 357.027 1188.751 340.201 1179.176 319.935 L 1212.231 299.923 Z\",\n style: {}\n }, _title3 || (_title3 = /*#__PURE__*/React.createElement(\"title\", null, \"JS\"))), /*#__PURE__*/React.createElement(\"path\", {\n className: \"blocklyPath\",\n d: \"M 1168.088 91.541 L 1168.093 91.523 L 1184.595 91.523 L 1096.457 420.459 L 1051.626 420.459 L 1139.759 91.541 Z\",\n style: {\n strokeWidth: 5\n }\n }, _title4 || (_title4 = /*#__PURE__*/React.createElement(\"title\", null, \"Slash\"))), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 296.678 269.741 L 262.518 269.741 L 262.518 331.831 L 230.184 331.831 L 230.184 173.491 L 307.85 173.491 Q 324.5 173.813 333.47 177.573 Q 342.44 181.333 348.67 188.638 Q 353.826 194.653 356.834 201.958 Q 359.842 209.263 359.842 218.608 Q 359.842 229.888 354.149 240.791 Q 348.455 251.694 335.35 256.206 Q 346.307 260.61 350.872 268.721 Q 355.438 276.831 355.438 293.481 L 355.438 304.116 Q 355.438 314.966 356.297 318.833 Q 357.586 324.956 362.313 327.856 L 362.313 331.831 L 325.897 331.831 Q 324.393 326.567 323.748 323.345 Q 322.459 316.685 322.352 309.702 L 322.137 294.985 Q 321.922 279.839 316.605 274.79 Q 311.287 269.741 296.678 269.741 Z M 316.766 240.952 Q 326.649 236.44 326.649 223.12 Q 326.649 208.726 317.088 203.784 Q 311.717 200.991 300.975 200.991 L 262.518 200.991 L 262.518 243.53 L 300.008 243.53 Q 311.18 243.53 316.766 240.952 Z M 481.977 270.815 L 481.977 173.491 L 515.6 173.491 L 515.6 270.815 Q 515.6 296.06 507.758 310.132 Q 493.148 335.913 452.006 335.913 Q 410.863 335.913 396.147 310.132 Q 388.305 296.06 388.305 270.815 L 388.305 173.491 L 421.928 173.491 L 421.928 270.815 Q 421.928 287.143 425.795 294.663 Q 431.811 307.983 452.006 307.983 Q 472.094 307.983 478.109 294.663 Q 481.977 287.143 481.977 270.815 Z M 547.184 173.491 L 580.27 173.491 L 580.27 303.364 L 658.688 303.364 L 658.688 331.831 L 547.184 331.831 Z M 791.781 262.651 L 714.867 262.651 L 714.867 303.364 L 802.524 303.364 L 802.524 331.831 L 682.533 331.831 L 682.533 173.491 L 798.656 173.491 L 798.656 201.528 L 714.867 201.528 L 714.867 235.151 L 791.781 235.151 Z M 885.775 308.95 Q 897.484 308.95 904.789 306.372 Q 918.647 301.431 918.647 288.003 Q 918.647 280.161 911.772 275.864 Q 904.897 271.675 890.18 268.452 L 873.422 264.692 Q 848.715 259.106 839.262 252.554 Q 823.256 241.597 823.256 218.286 Q 823.256 197.017 838.725 182.944 Q 854.193 168.872 884.164 168.872 Q 909.193 168.872 926.864 182.139 Q 944.535 195.405 945.395 220.649 L 913.598 220.649 Q 912.738 206.362 901.137 200.347 Q 893.402 196.372 881.908 196.372 Q 869.125 196.372 861.498 201.528 Q 853.871 206.685 853.871 215.923 Q 853.871 224.409 861.391 228.599 Q 866.225 231.392 882.016 235.151 L 909.301 241.704 Q 927.24 246.001 936.371 253.198 Q 950.551 264.37 950.551 285.532 Q 950.551 307.231 933.954 321.572 Q 917.357 335.913 887.065 335.913 Q 856.127 335.913 838.402 321.787 Q 820.678 307.661 820.678 282.954 L 852.26 282.954 Q 853.764 293.804 858.168 299.175 Q 866.225 308.95 885.775 308.95 Z\",\n style: {\n fill: \"rgb(255, 255, 255)\"\n }\n }, _title5 || (_title5 = /*#__PURE__*/React.createElement(\"title\", null, \"RULES\"))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgRules2Js);\nexport default __webpack_public_path__ + \"static/media/rules2js.a3f8ea14eb2673da17e7611b2299af6f.svg\";\nexport { ForwardRef as ReactComponent };","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';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n Popper,\n Fade,\n Paper,\n} from '@mui/material';\n\nimport {\n FileCopy as IconCopy,\n Cancel as IconCancel,\n} from '@mui/icons-material';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = {\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: 16,\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 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={() => false}\n maxWidth=\"lg\"\n sx={{ '& .MuiDialog-paper': styles.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 style={styles.overflowY}>\n <pre\n id=\"export-text\"\n style={{\n ...styles.textArea,\n ...(this.props.themeType === 'dark' ? undefined : styles.textAreaLight),\n }}\n >\n {this.props.text}\n </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 style={styles.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 onClose: PropTypes.func,\n text: PropTypes.string,\n scriptId: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default DialogExport;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n} from '@mui/material';\n\nimport {\n Check as IconOk,\n Cancel as IconCancel,\n} from '@mui/icons-material';\nimport {\n MdFileUpload as IconUpload,\n MdCancel as IconNo,\n MdAdd as IconPlus,\n} from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = {\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 style = {\n ...styles.dropzone,\n ...(this.state.imageStatus === 'accepted' ? styles.dropzoneAccepted :\n (this.state.imageStatus === 'rejected' ? styles.dropzoneRejected : undefined)),\n };\n\n return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n sx={{ '& .MuiDialog-paper': styles.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 style={styles.fullHeight}>\n <style>\n {`\n.dropzoneRejected {\n borderColor: #970000;\n}\n.dropzoneAccepted: {\n borderColor: #17cd02;\n}\n`}\n </style>\n <textarea\n autoFocus\n id=\"import-text-area\"\n style={styles.textArea}\n onChange={e => this.onChange(e)}\n value={this.state.text}\n />\n <Dropzone\n key='image-drop'\n maxSize={50000000}\n acceptClassName=\"dropzoneAccepted\"\n rejectClassName=\"dropzoneRejected\"\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='text/plain,text/xml,application/xml'\n style={style}\n >\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return <div style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" style={{ ...styles.icon, ...styles.iconError }} />\n </div>;\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({ imageStatus: 'accepted' });\n }\n\n return (\n <div style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" style={{ ...styles.icon, ...styles.iconOk }} />\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" style={styles.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 onClose: PropTypes.func,\n text: PropTypes.string,\n};\n\nexport default DialogImport;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Message as DialogMessage } from '@iobroker/adapter-react-v5';\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 /*\n // TODO: WHY?!\n const variables = xml.replace(/[\\n\\r]/g, '').match(/<variables>(.*)<\\/variables>/);\n if (variables) {\n const parser = new DOMParser();\n const vars = parser.parseFromString(`<variables>${variables[1]}</variables>`, 'text/xml').firstChild;\n for (const child of vars.children) {\n if (child.tagName === 'variable') {\n // e.g. timeout or interval\n const varType = child.getAttribute('type');\n if (varType) {\n this.blocklyWorkspace.createVariable(child.getAttribute('id'), varType);\n }\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.darkTheme = this.Blockly.Theme.defineTheme('dark', {\n base: this.Blockly.Themes.Classic,\n componentStyles: {\n workspaceBackgroundColour: '#1e1e1e',\n toolboxBackgroundColour: 'blackBackground',\n toolboxForegroundColour: '#fff',\n flyoutBackgroundColour: '#252526',\n flyoutForegroundColour: '#ccc',\n flyoutOpacity: 1,\n scrollbarColour: '#797979',\n insertionMarkerColour: '#fff',\n insertionMarkerOpacity: 0.3,\n scrollbarOpacity: 0.4,\n cursorColour: '#d0d0d0',\n blackBackground: '#333',\n },\n });\n\n // https://developers.google.com/blockly/reference/js/blockly.blocklyoptions_interface.md\n this.blocklyWorkspace = this.Blockly.inject(\n this.blockly,\n {\n renderer: 'thrasos',\n theme: 'classic',\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 pinch: true,\n },\n move: {\n scrollbars: {\n horizontal: true,\n vertical: true,\n },\n drag: true,\n wheel: true,\n },\n trashcan: true,\n grid: {\n spacing: 25,\n length: 1,\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 if (this.state.themeType === 'dark' || this.state.themeType === 'blue') {\n this.blocklyWorkspace.setTheme(this.darkTheme);\n } else {\n this.blocklyWorkspace.getThemeManager();\n this.blocklyWorkspace.setTheme(this.Blockly.Themes.Classic);\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';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog, Box,\n} from '@mui/material';\n\nimport {\n Save as IconSave,\n Cancel as IconCancel,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\n\nconst styles = {\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: theme => ({\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n }),\n argsTitle: theme => ({\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 return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n sx={{ '& .MuiDialog-paper': styles.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 style={styles.fullHeight}>\n {this.props.args && <Box key=\"arguments\" sx={styles.args}>\n <Box component=\"span\" sx={styles.argsTitle}>{I18n.t('function (')}</Box>\n {this.props.args}\n <Box component=\"span\" sx={styles.argsTitle}>)</Box>\n </Box>}\n <ScriptEditorComponent\n adapterName={this.props.adapterName}\n runningInstances={this.props.runningInstances}\n style={{ ...styles.textArea, 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 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 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, style, adapter, socket, onClick, className }) => {\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\n onClick={e => onClick && onClick(e)}\n src={url || ''}\n style={style}\n className={className}\n alt=\"\"\n />;\n }\n\n const Element = Icons[iconName || 'Help'];\n return <Element\n style={style}\n onClick={e => onClick && onClick(e)}\n />;\n}\n\nMaterialDynamicIcon.defaultProps = {\n style: null,\n iconName: 'Help'\n};\n\nexport default MaterialDynamicIcon;\n","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 = ({\n name, id, active, icon, adapter,\n socket, onDoubleClick, title,\n onTouchMove, style,\n}) => <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\n iconName={icon}\n className={cls.iconTheme}\n adapter={adapter}\n socket={socket}\n style={style}\n />\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;\n","// 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 React, { memo, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Checkbox } from '@mui/material';\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);\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__WINKv\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n TextField,\n InputAdornment,\n} from '@mui/material';\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;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n FormControl, FormHelperText,\n Input, MenuItem, Select,\n} from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = {\n formControl: {\n m: '10px 0',\n '& .MuiFormControl-marginNormal': {\n mt: 0,\n mb: 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};\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 <FormControl\n sx={styles.formControl}\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 </FormControl>;\n}\n\nCustomInstance.defaultProps = {\n value: '',\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;\n","// 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 PropTypes from 'prop-types';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n} from '@mui/material';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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;\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__AZ3ER\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n FormControl, FormHelperText,\n Input, MenuItem, Select,\n} from '@mui/material';\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;\n","// 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 PropTypes from 'prop-types';\nimport React, { memo, useState } from 'react';\n\nimport { FormControlLabel, Switch } from '@mui/material';\n\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);\n","// 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 PropTypes from 'prop-types';\n\nimport { FormControl, MenuItem, Select } from '@mui/material';\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;\n","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 }\n return obj;\n};\n\nconst utils = {\n getName,\n};\n\nexport default utils;\n","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 {\n Menu,\n MenuItem,\n IconButton,\n} from '@mui/material';\nimport { HelpOutline as IconHelp } from '@mui/icons-material';\n\nimport { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\nimport {\n I18n, Utils,\n SelectID as DialogSelectID,\n Error as DialogError,\n Message as DialogMessage,\n} from '@iobroker/adapter-react-v5';\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 }\n\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n }\n\n if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n\n return this.props.socket.getObject(newId)\n .then(o => this.findIcon(o))\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, style } = 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 style={style}\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={{ ...(style || undefined), 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 theme={this.props.theme}\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, style } = 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 style={style}\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={() => 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;\n","import { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 }\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 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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 {\n ComplexCron,\n Schedule,\n I18n,\n} from '@iobroker/adapter-react-v5';\nimport convertCronToText from '@iobroker/adapter-react-v5/Components/SimpleCron/cronText';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport CustomInput from '../CustomInput';\nimport CustomButton from '../CustomButton';\nimport CustomModal from '../CustomModal';\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';\n\nimport {\n Button,\n Switch,\n Dialog,\n DialogActions,\n DialogContent,\n TextField,\n DialogTitle,\n Slide,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\nimport {\n MdCancel as IconCancel,\n MdCheck as IconCheck,\n} from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\n\nconst styles = {\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 style={debugMessage.data.ackOld ? styles.valueAck : styles.valueNotAck}>{TriggerState.renderValue(debugMessage.data.valOld)}</span> → <span style={debugMessage.data.ack ? styles.valueAck : styles.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n }\n return <span>{I18n.t('Triggered')} <span style={debugMessage.data.ack ? styles.valueAck : styles.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\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}\n\nexport default TriggerState;\n","import React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n} from '@mui/material';\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 SunCalc from 'suncalc2';\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\n\nconst styles = {\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 style={debugMessage.data.ack ? styles.valueAck : styles.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 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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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 { I18n } from '@iobroker/adapter-react-v5';\nimport GenericBlock from '../GenericBlock';\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, {\n memo, useCallback, useContext,\n useEffect, useMemo, useState,\n} from 'react';\nimport PropTypes from 'prop-types';\n\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;\n","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';\n\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';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\n\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;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n} from '@mui/material';\n\nimport { Check as IconOk } from '@mui/icons-material';\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;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n} from '@mui/material';\nimport { I18n } from '@iobroker/adapter-react-v5';\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;\n","import React, { Fragment, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrop } from 'react-dnd';\n\nimport {\n Select,\n MenuItem,\n IconButton,\n} from '@mui/material';\nimport { HelpOutline as IconHelp } from '@mui/icons-material';\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\n ref={drop}\n style={{ backgroundColor }}\n className={`${Utils.clsx(cls.contentBlockItem,size && cls.addClassHeight)} ${boolean ? animation ? cls.contentHeightOn : null : cls.contentHeightOff}`}\n >\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\n iconName={iconName}\n className={cls.iconThemCard}\n adapter={adapter}\n socket={socket}\n />\n {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;\n","// 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 }}\n onDoubl\n {...props}\n {...allProperties}\n />\n </DragWrapper>;\n}\n\nexport default CustomDragItem;\n","// 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 PropTypes from 'prop-types';\n\nimport cls from './hamburgerMenu.module.scss';\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;\n","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 ScriptEditorComponent from '../ScriptEditorVanilaMonaco';\n\nconst styles = {\n editorDiv: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\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 style={styles.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 Editor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {Box, IconButton} from '@mui/material';\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 = {\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n },\n logBoxInner: theme => ({\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: theme => ({\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black',\n }),\n error: theme => ({\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n warn: theme => ({\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n debug: theme => ({\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n silly: theme => ({\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 <Box\n component=\"tr\"\n key={`tr_${message.ts}_${message.text.substr(-10)}`}\n sx={styles[message.severity]}\n >\n <td style={styles.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td style={styles.trSeverity}>{message.severity}</td>\n <td>{message.text}</td>\n </Box>;\n }\n renderLogList(lines) {\n if (lines && lines.length) {\n return <Box sx={styles.logBoxInner} key=\"logList\">\n <table key=\"logTable\" style={styles.table}>\n <tbody>\n {lines.map(line => this.generateLine(line))}\n </tbody>\n </table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{ float: 'left', clear: 'both' }}/>\n </Box>;\n }\n return <Box key=\"logList\" sx={styles.logBoxInner} style={{ paddingLeft: 10 }}>{I18n.t('Log outputs')}</Box>;\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 <div style={styles.logBox}>\n <div style={styles.toolbox} key=\"toolbox\">\n <IconButton\n style={styles.iconButtons}\n onClick={() => this.setState({ goBottom: !this.state.goBottom })}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\">\n <IconBottom />\n </IconButton>\n {lines && lines.length ? <IconButton\n style={styles.iconButtons}\n onClick={() => this.props.onClearAllLogs()}\n size=\"medium\">\n <IconDelete />\n </IconButton> : null}\n {lines && lines.length ? <IconButton\n style={styles.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\">\n <IconCopy />\n </IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>;\n }\n}\n\nConsole.propTypes = {\n theme: PropTypes.object,\n onClearAllLogs: PropTypes.func,\n console: PropTypes.array,\n};\n\nexport default Console;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ReactSplit, { SplitDirection } from '@devbookhq/splitter';\nimport ReactJson from 'react-json-view';\n\nimport {\n ListItemButton,\n ListItemText,\n Input,\n InputAdornment,\n IconButton,\n List, Box,\n} from '@mui/material';\n\nimport {\n MdCheck as CheckIcon,\n MdAdd as IconAdd,\n MdDelete as IconDelete,\n} from 'react-icons/md';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles = {\n frameRoot: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n frameTextRoot: {\n m: 0,\n },\n frameTextPrimary: theme => ({\n color: theme.palette.mode === 'dark' ? '#CCC' : '#333',\n }),\n frameTextSecondary: {\n fontStyle: 'italic',\n fontSize: 12,\n opacity: 0.6,\n pl: 1,\n },\n\n listRoot: {\n padding: 0,\n fontSize: 'small',\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: theme => ({\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: theme => ({\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 const framesSizesStr = window.localStorage.getItem('JS.framesSizes');\n let framesSizes = [30, 70];\n if (framesSizesStr) {\n try {\n framesSizes = JSON.parse(framesSizesStr);\n } catch (e) {\n // ignore\n }\n }\n\n this.state = {\n editValue: null,\n callFrames: this.props.callFrames,\n framesSizes,\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\" style={styles.scopeNameName} title={I18n.t('Double click to edit expression')}>{item.name}</div>,\n <Box key=\"=\" sx={styles.scopeNameEqual}> = </Box>,\n <div key=\"val\" style={styles.scopeNameValue}>{this.formatValue(item.value)}</div>\n ];\n\n return <tr key={`user_${i}${item.name}`}>\n <td style={{ ...styles.scopeType, ...styles.scopeType_user }}>user</td>\n <td style={styles.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 style={styles.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 style={styles.frameRoot}\n >\n <ListItemText\n sx={{\n ...styles.frameTextRoot,\n '& .MuiListItemText-primary': styles.frameTextPrimary,\n '& .MuiListItemText-secondary': styles.frameTextSecondary,\n }}\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 }\n return <span style={styles.valueNone}>none</span>;\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 }\n return <span style={styles.valueFunc} title={value.description}>{text}</span>;\n } else if (value.value === undefined) {\n if (forEdit) {\n return 'undefined';\n }\n return <span style={styles.valueUndefined}>undefined</span>;\n } else if (value.value === null) {\n if (forEdit) {\n return 'null';\n }\n return <span style={styles.valueNull}>null</span>;\n } else if (value.type === 'string') {\n if (forEdit) {\n return value.value;\n }\n const text = value.value ? (value.value.length > 100 ? value.value.substring(0, 100) + '...' : value.value) : '';\n return <span style={styles.valueString} title={text}>\"{text}\"</span>;\n } else if (value.type === 'boolean') {\n if (forEdit) {\n return value.value.toString();\n }\n return <span style={styles.valueBoolean}>{value.value.toString()}</span>;\n } else if (value.type === 'object') {\n if (forEdit) {\n return JSON.stringify(value.value);\n }\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\n return value.value.toString();\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 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\" style={styles.scopeNameName}>{item.name}</div>,\n <Box key=\"=\" sx={styles.scopeNameEqual}> = </Box>,\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\" style={styles.scopeNameName} title={I18n.t('Double click to write value')}>{item.name}</div>,\n <Box key=\"=\" sx={styles.scopeNameEqual}> = </Box>,\n <div key=\"val\" style={styles.scopeNameValue}>{this.formatValue(item.value)} ({item.value.type})</div>\n ];\n\n\n return <tr key={`${type}_${scopeId}_${item.name}`}>\n <td style={{ ...styles.scopeType, ...styles[`scopeType_${type}`] }}>{type}</td>\n <td\n style={{\n ...styles.scopeName,\n ...(!this.props.currentFrame && editable ? styles.scopeValueEditable : undefined),\n }}\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 }\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%', fontSize: 'small' }}>\n <tbody>\n {result}\n </tbody>\n </table>;\n }\n\n render() {\n return <ReactSplit\n direction={SplitDirection.Horizontal}\n initialSizes={this.state.framesSizes}\n minWidths={[100, 200]}\n onResizeFinished={(_gutterIdx, framesSizes) => {\n this.setState({ framesSizes });\n window.localStorage.setItem('JS.framesSizes', JSON.stringify(framesSizes));\n }}\n gutterClassName={this.props.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\n >\n <div style={{ width: '100%', height: '100%', overflow: 'auto' }}>\n <List style={styles.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 <Box sx={styles.toolbarScopes}>\n <IconButton\n size=\"small\"\n 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 })}\n >\n <IconAdd />\n </IconButton>\n </Box>\n <div style={styles.scopesAfterToolbar}>\n {this.props.callFrames && this.props.callFrames.length && this.renderScopes(this.props.callFrames[this.props.currentFrame])}\n </div>\n </div>\n </ReactSplit>;\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 Stack;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactSplit, { SplitDirection } from '@devbookhq/splitter';\n\nimport {\n Tabs,\n Tab,\n Toolbar,\n LinearProgress,\n IconButton,\n List,\n ListItemButton,\n ListItemText,\n DialogTitle,\n Dialog,\n Badge, Box,\n} from '@mui/material';\n\nimport {\n MdClose as IconClose,\n MdPlayArrow as IconRun,\n MdPause as IconPause,\n MdArrowForward as IconNext,\n MdArrowDownward as IconStep,\n MdArrowUpward as IconOut,\n MdRefresh as IconRestart,\n MdWarning as IconException,\n} 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 = {\n root: theme => ({\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: theme => ({\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: theme => ({\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 const toolSizesStr = window.localStorage.getItem('JS.toolSizes');\n let toolSizes = [80, 20];\n if (toolSizesStr) {\n try {\n toolSizes = JSON.parse(toolSizesStr);\n } catch (e) {\n // ignore\n }\n }\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 toolSizes,\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\" style={styles.monospace}>{line}</div>,\n <div key=\"arrow\" style={{ ...styles.monospace, ...styles.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) => <ListItemButton\n style={styles.bpListItem}\n dense\n onClick={() => {\n this.sendToInstance({ breakpoints: [bp], cmd: 'sb' });\n this.setState({ queryBreakpoints: null });\n }}\n key={i}>\n <ListItemText\n primary={this.getTextAtLocation(bp)}\n />\n </ListItemButton>)}\n </List>\n </Dialog>;\n }\n\n return null;\n }\n\n renderError() {\n if (this.state.error) {\n return <DialogError key=\"dialogError\" onClose={() => this.setState({ error: '' })} text={this.state.error} />;\n }\n return null;\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\" style={styles.tabText}>{label}</div>,\n id !== this.mainScriptId && <span key=\"icon\" style={styles.closeButton}>\n <IconClose key=\"close\" onClick={e => this.closeTab(id, e)} fontSize=\"small\" /></span>];\n\n return <Tab\n disabled={disabled}\n sx={styles.tabFile}\n label={label}\n title={title}\n key={id}\n value={id}\n />;\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 <Toolbar variant=\"dense\" style={styles.toolbar} key=\"toolbar1\">\n <IconButton\n style={styles.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 style={styles.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 style={styles.buttonPause}\n onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}\n size=\"medium\"><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton\n style={styles.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 style={styles.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 style={styles.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 style={styles.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 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({\n console: [],\n logErrors: 0,\n logWarning: 0,\n logs: 0,\n })}\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 sx={styles.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\n style={styles.tabRoot}\n disabled={disabled}\n label={I18n.t('Stack')}\n value=\"stack\"\n />\n <Tab\n style={styles.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 <Box\n key=\"debugger\"\n style={this.props.style}\n sx={styles.root}\n >\n {this.state.starting ? <LinearProgress /> : null}\n {this.renderToolbar()}\n <ReactSplit\n direction={SplitDirection.Vertical}\n initialSizes={this.state.toolSizes}\n minHeights={[100, 100]}\n onResizeFinished={(_gutterIdx, toolSizes) => {\n this.setState({ toolSizes });\n window.localStorage.setItem('JS.toolSizes', JSON.stringify(toolSizes));\n }}\n gutterClassName={this.props.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\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 </ReactSplit>\n {this.renderError()}\n </Box>;\n }\n}\n\nDebugger.propTypes = {\n runningInstances: PropTypes.object,\n adapterName: PropTypes.string,\n src: PropTypes.string,\n socket: PropTypes.object.isRequired,\n style: PropTypes.object,\n themeType: PropTypes.string,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n debugInstance: PropTypes.object,\n};\n\nexport default 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, MenuItem, Select,\n FormControl, InputLabel,\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 styles = {\n toolbarButtons: {\n padding: 4,\n marginLeft: 4,\n },\n fullHeightDialog: {\n height: 'calc(100% - 100px)',\n },\n};\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 [model, setModel] = useState(window.localStorage.getItem('openai-model') || 'gpt-4o');\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 || '').trim();\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,\n messages: [\n {\n role: 'system',\n content: `You are programmer. Here is a documentation:\\n\\n${docs}`,\n },\n {\n role: 'system',\n content: `Here is list of devices:\\n\\n${JSON.stringify(devices, null, 2)}`,\n },\n {\n role: 'user',\n content: `Write JavaScript code that does:\\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 console.log(JSON.stringify(err));\n if (err.error) {\n setError(err.error.message);\n }\n console.error(`Cannot request: ${err}, ${JSON.stringify(err.error || err, null, 2)}`);\n }\n\n setWorking(false);\n }, [question, model]);\n\n return <>\n <IconButton\n key=\"ai\"\n aria-label=\"AI\"\n title={I18n.t('AI code generator')}\n style={styles.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 sx={{ '& .MuiDialog-paper': styles.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 style={{ display: 'flex', alignItems: 'baseline' }}>\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 <FormControl style={{ width: 150, marginLeft: 20 }} variant=\"standard\">\n <InputLabel>{I18n.t('Model')}</InputLabel>\n <Select\n value={model}\n onChange={e => {\n window.localStorage.setItem('openai-model', e.target.value);\n error && setError(false);\n setModel(e.target.value);\n }}\n >\n <MenuItem value=\"gpt-4o\">GPT-4o</MenuItem>\n <MenuItem value=\"gpt-4-turbo\">GPT-4 Turbo</MenuItem>\n <MenuItem value=\"gpt-4-32k\">GPT-4 32k</MenuItem>\n <MenuItem value=\"gpt-4\">GPT-4</MenuItem>\n <MenuItem value=\"gpt-3.5-turbo-16k\">GPT-3.5 Turbo</MenuItem>\n </Select>\n </FormControl>\n </div>\n <div>\n {I18n.t('Result')}\n </div>\n <div style={{ height: 'calc(100% - 155px)' }}>\n {error ?\n <div style={{ color: props.themeType === 'dark' ? '#984242' : '#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 {\n Toolbar,\n Button,\n IconButton,\n Tabs,\n Tab,\n Badge,\n Snackbar,\n Menu,\n MenuItem,\n Checkbox,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n LinearProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Tooltip,\n Paper, Box,\n} from '@mui/material';\n\nimport { red, green } from '@mui/material/colors';\n\nimport {\n MdSave as IconSave,\n MdCancel as IconCancel,\n MdClose as IconClose,\n MdRefresh as IconRestart,\n MdInput as IconDoEdit,\n MdGpsFixed as IconLocate,\n MdClearAll as IconCloseAll,\n MdBuild as IconDebugMenu,\n MdBugReport as IconDebug,\n MdPlaylistAddCheck as IconVerbose,\n MdBugReport as IconDebugMode,\n MdPlayArrow as IconPlay,\n MdPause as IconPause,\n MdAutoAwesome as IconAstro,\n} from 'react-icons/md';\n\nimport {\n FaClock as IconCron,\n FaClipboardList as IconSelectId,\n FaFileExport as IconExport,\n FaFileImport as IconImport,\n FaFlagCheckered as IconCheck,\n} from 'react-icons/fa';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgBlockly2Js from './assets/blockly2js.svg';\nimport ImgRules2Js from './assets/rules2js.svg';\nimport ImgRules from './assets/rules.png';\n\nimport {\n I18n, Cron as DialogCron,\n Confirm as DialogConfirm,\n 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 = {\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: theme => ({\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: 8,\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: theme => ({\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: 8,\n marginLeft: 8,\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};\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={{\n position: 'relative',\n marginLeft: 10,\n width: this.state.editing.length > 1 ? 'calc(100% - 50px)' : '100%',\n display: 'inline-block'\n }}\n textColor=\"primary\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n allowScrollButtonsMobile\n >\n {this.state.editing.map(id => {\n if (!this.props.objects[id]) {\n const label = [\n <Box\n key=\"text\"\n sx={this.isScriptChanged(id) ? styles.tabChanged : undefined}\n style={styles.tabText}\n >\n {id.split('.').pop()}\n </Box>,\n <IconButton onClick={e => this.onTabClose(id, e)} style={styles.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 sx={{ '& .MuiTab-wrapper': styles.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 <Box\n key=\"text\"\n sx={this.isScriptChanged(id) ? styles.tabChanged : undefined}\n style={styles.tabText}\n >\n {text}\n </Box>,\n changed ? <span key=\"changedSign\" style={styles.tabChangedIcon}>▣</span> : null,\n (!this.props.debugInstance && (!this.props.debugMode || this.state.selected !== id)) &&\n <IconButton onClick={e => this.onTabClose(id, e)} style={styles.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} style={styles.tabIcon} />}\n href={`#${id}`}\n key={id}\n label={label}\n style={styles.tabButton}\n value={id}\n title={title}\n sx={{ '& .MuiTab-wrapper': styles.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 style={styles.tabButton}\n value={this.props.debugInstance.adapter}\n title={this.props.debugInstance.adapter}\n sx={{ '& .MuiTab-wrapper': styles.tabButtonWrapper }}\n /> : ''}\n </Tabs>,\n this.state.editing.length > 1 ? <IconButton\n key=\"menuButton\"\n href=\"#\"\n aria-label=\"Close all but current\"\n style={styles.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\" style={styles.toolbar}>\n <Button color=\"grey\" key=\"select1\" disabled style={styles.hintButton} href=\"\">\n <span key=\"select2\">{I18n.t('Click on this icon')}</span>\n <IconDoEdit key=\"select3\" style={styles.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 style={{ ...styles.menuIcon, 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 style={{ ...styles.menuIcon, 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\" style={{ ...styles.menuIcon, color: COLOR_VERBOSE }} />,\n this.state.debugEnabled && !this.state.verboseEnabled && <IconDebug key=\"DebugNoVerbose\" style={{ ...styles.menuIcon, color: COLOR_DEBUG }} />,\n !this.state.debugEnabled && this.state.verboseEnabled && <IconVerbose key=\"noDebugVerbose\" style={{ ...styles.menuIcon, 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\" style={styles.toolbar} key=\"toolbar1\">\n {!this.props.debugInstance && this.state.menuOpened && this.props.onLocate && <IconButton\n style={styles.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 style={styles.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 onClick={() => this.onStartStop()}\n title={isScriptRunning ? I18n.t('Pause script') : I18n.t('Run script')}\n size=\"medium\"\n style={{\n ...styles.toolbarButtons,\n color: isScriptRunning ? COLOR_RUN : COLOR_PAUSE,\n }}\n >\n {isScriptRunning ? <IconPause /> : <IconPlay />}\n </IconButton>}\n {!this.props.debugInstance && !changed && !isScriptRunning && <span style={styles.notRunning}>{I18n.t('Script is not running')}</span>}\n {!changed && isScriptRunning && !isInstanceRunning && <span style={styles.notRunning}>{I18n.t('Instance is disabled')}</span>}\n {changed && <Button\n color=\"grey\"\n key=\"save\"\n variant=\"contained\"\n style={{ ...styles.textButton, ...styles.saveButton }}\n className=\"button-save\"\n onClick={() => this.onSave()}\n endIcon={<IconSave />}\n >\n {I18n.t('Save')}\n </Button>}\n {(changedAll > 1 || (changedAll === 1 && !changed)) && <Button\n color=\"grey\"\n key=\"saveall\"\n variant=\"contained\"\n style={styles.textButton}\n onClick={() => this.onSaveAll()}\n endIcon={<IconSave />}\n >\n {I18n.t('Save all')}\n </Button>}\n {changed && <Button\n color=\"grey\"\n key=\"cancel\"\n variant=\"contained\"\n style={styles.textButton}\n onClick={() => this.onCancel()}\n endIcon={<IconCancel />}\n >\n {I18n.t('Cancel')}\n </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 style={styles.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 style={styles.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 style={styles.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 style={styles.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 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 style={styles.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 style={styles.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 style={styles.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 style={styles.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 style={styles.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=\"button-js-code\"\n color={this.state.showCompiledCode ? 'secondary' : 'inherit'}\n disabled={this.props.debugMode}\n style={{\n ...styles.toolbarButtons,\n ...(this.props.debugMode ? styles.toolbarButtonsDisabled : undefined),\n padding: '0 5px',\n }}\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 style={styles.toolbarButtons}\n onClick={e => this.setState({ showDebugMenu: true, menuDebugAnchorEl: e.currentTarget })}\n size=\"medium\"\n >\n <Badge style={styles.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 <Box sx={styles.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 </Box>;\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 <Box sx={styles.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 </Box>;\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 <Box sx={styles.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 </Box>;\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 allObjectTypes = [\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 const expertModeTypes = [\n 'adapter',\n 'instance',\n 'enum',\n 'host',\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 theme={this.props.theme}\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={expertModeTypes.includes(this.selectId.type) ? true : undefined}\n // statesOnly={!this.selectId.type || this.selectId.type === 'state'}\n types={this.selectId?.type === 'all' ? allObjectTypes : [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 theme={this.props.theme}\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 }\n\n return null;\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') + ': ' + (this.state.astroEvents[id].isValidDate ? new Date(this.state.astroEvents[id].date).toLocaleTimeString() : 'n/a')}><TableCell align=\"right\">{this.state.astroEvents[id].isValidDate ? this.state.astroEvents[id].serverTime : 'n/a'}</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 style={styles.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 theme: PropTypes.object,\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 Editor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Button,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n} from '@mui/material';\nimport {\n MdFileUpload as IconUpload,\n MdCancel as IconNo,\n MdAdd as IconPlus,\n} from 'react-icons/md';\n\nimport { Cancel as IconCancel } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport DialogError from './Error';\n\nconst styles = {\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 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 // ignore\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?.data);\n }\n });\n }\n\n render() {\n const style = {\n ...styles.dropzone,\n ...(this.state.imageStatus === 'accepted' ? styles.dropzoneAccepted :\n (this.state.imageStatus === 'rejected' ? styles.dropzoneRejected : undefined)),\n };\n\n return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n classes={{ '& .MuiDialog-paper': styles.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 <style>\n {`\n.dropzoneRejected {\n borderColor: #970000;\n}\n.dropzoneAccepted: {\n borderColor: #17cd02;\n}\n`}\n </style>\n <Dropzone\n key='image-drop'\n maxSize={50000000}\n acceptClassName=\"dropzoneAccepted\"\n rejectClassName=\"dropzoneRejected\"\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='application/zip,application/x-zip-compressed'\n style={style}\n >\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 style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" style={{ ...styles.icon, ...styles.iconError }} />\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({ imageStatus: 'accepted' });\n }\n\n return <div style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" style={{ ...styles.icon, ...styles.iconOk }} />\n </div>;\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({ imageStatus: 'wait' });\n }\n return <div style={styles.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" style={styles.text}>\n {I18n.t('Drop some files here or click...')}\n </span>\n <IconUpload key=\"icon\" style={styles.icon} />\n </div>;\n }\n }\n }\n </Dropzone>\n {this.state.error ? <DialogError\n text={this.state.error}\n onClose={() => this.setState({ error: '' })}\n /> : null}\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.handleCancel()}\n startIcon={<IconCancel />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImportFile.propTypes = {\n onClose: PropTypes.func,\n};\n\nexport default DialogImportFile;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactSplit, { SplitDirection } from '@devbookhq/splitter';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\n\nimport {\n I18n,\n Utils,\n AdminConnection,\n Loader,\n GenericApp,\n Message as DialogMessage,\n Confirm as DialogConfirm,\n} from '@iobroker/adapter-react-v5';\n\nimport {\n MdMenu as IconMenuClosed,\n MdArrowBack as IconMenuOpened,\n MdVisibility as IconShowLog,\n} 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';\nimport {Box} from '@mui/material';\n\nconst styles = {\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n menuDiv: {\n overflow: 'hidden',\n },\n splitterDivs: theme => ({\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: theme => ({\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: theme => ({\n position: 'absolute',\n left: 0,\n borderRadius: '0 5px 5px 0',\n top: 6,\n pt: 1,\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 pl: '3px',\n '&:hover': {\n color: 'white',\n },\n }),\n showLogButton: theme => ({\n position: 'absolute',\n right: 3,\n borderRadius: '5px 5px 0 0',\n bottom: 0,\n pt: '3px',\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 pl: 1,\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 const logSizesStr = window.localStorage.getItem('JS.logSizes');\n let logSizes = [80, 20];\n if (logSizesStr) {\n try {\n logSizes = JSON.parse(logSizesStr);\n } catch (e) {\n // ignore\n }\n }\n\n const splitSizesStr = window.localStorage.getItem('JS.splitSizes');\n let splitSizes = [20, 80];\n if (splitSizesStr) {\n try {\n splitSizes = JSON.parse(splitSizesStr);\n } catch (e) {\n // ignore\n }\n }\n this.hosts = [];\n this.importFile = null;\n this.scripts = {};\n Object.assign(this.state, { splitSizes, logSizes });\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.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 const oldScript = this.scripts[oldIds[i]].common;\n const newScript = newScripts[oldIds[i]].common;\n\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.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 if (type === 'Blockly' && !source) {\n // Default Blockly XML for new scripts\n source = `\\n//${btoa(encodeURIComponent('<xml xmlns=\"https://developers.google.com/blockly/xml\"></xml>'))}`;\n }\n\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.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 <Box\n key=\"showLog\"\n title={I18n.t('Show logs')}\n sx={styles.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 </Box>;\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 let content;\n if (this.state.debugMode || this.state.hideLog) {\n content = <>\n {!this.state.debugMode && this.state.hideLog ? this.showLogButton() : undefined}\n {this.renderEditor()}\n </>;\n } else {\n content = <ReactSplit\n direction={this.state.logHorzLayout ? SplitDirection.Horizontal : SplitDirection.Vertical}\n initialSizes={this.state.logSizes}\n minWidths={[500, 100]}\n minHeights={[150, 50]}\n onResizeStarted={() => this.setState({ resizing: true })}\n onResizing\n onResizeFinished={(_gutterIdx, logSizes) => {\n this.setState({ logSizes, resizing: false });\n window.localStorage.setItem('JS.logSizes', JSON.stringify(logSizes));\n }}\n gutterClassName={this.state.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\n >\n {this.renderEditor()}\n <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 </ReactSplit>;\n }\n\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 <Box sx={styles.content} className=\"iobVerticalSplitter\" key=\"main\">\n <Box\n key=\"closeMenu\"\n sx={styles.menuOpenCloseButton}\n 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 >\n {this.state.menuOpened ? <IconMenuOpened /> : <IconMenuClosed />}\n </Box>\n {content}\n </Box>,\n ];\n }\n\n render() {\n if (!this.state.ready) {\n // return (<CircularProgress style={styles.progress} size={50} />);\n return <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Loader themeType={this.state.themeType} />\n </ThemeProvider>\n </StyledEngineProvider>;\n }\n\n let context;\n if (this.state.menuOpened) {\n context = <ReactSplit\n direction={SplitDirection.Horizontal}\n initialSizes={this.state.splitSizes}\n minWidths={[270, 400]}\n onResizeFinished={(_gutterIdx, splitSizes) => {\n this.setState({ splitSizes });\n window.localStorage.setItem('JS.splitSizes', JSON.stringify(splitSizes));\n }}\n gutterClassName={this.state.themeType === 'dark' ? 'Dark visGutter' : 'Light visGutter'}\n >\n <div style={styles.mainDiv} key=\"menu\">\n <SideMenu\n debugMode={this.state.debugMode}\n onDebugInstance={data =>\n this.setState({ debugInstance: data, debugMode: !!data })}\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 </ReactSplit>;\n } else {\n context = this.renderMain();\n }\n\n return <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div style={styles.root}>\n <ContextWrapper socket={this.socket}>\n {context}\n </ContextWrapper>\n </div>\n </ThemeProvider>\n </StyledEngineProvider>;\n }\n}\n\nApp.propTypes = {\n version: PropTypes.string,\n onThemeChange: PropTypes.func,\n};\n\nexport default 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';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport pgk from '../package.json';\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\nconsole.log(`iobroker.${window.adapterName}@${pgk.version}`);\n\nconst isMobile = window.innerWidth < 600;\nconst container = document.getElementById('root');\nconst root = createRoot(container);\nroot.render(<DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App version={pgk.version} />\n</DndProvider>);\n\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', () =>\n loadDynamicScript('vs/loader.js', () =>\n loadDynamicScript('vs/configure.js', () =>\n typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler())));\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","styles","card","minWidth","display","media","height","text","minHeight","complexity","fontStyle","marginBottom","DialogAddNew","arguments","type","openHtml","html","lang","getLanguage","includes","concat","window","focus","getJSCard","Card","CardActionArea","CardMedia","image","ImgJS","title","CardContent","CardActions","size","getTSCard","ImgTS","getBlocklyCard","ImgBlockly","getRulesCard","ImgRules","textAlign","DialogNew","onAdd","existingItems","indexOf","error","parent","trim","helperText","parents","splice","names","forEach","n","i","el","find","item","push","theme","background","palette","main","contrastText","DialogError","console","log","sx","DialogContentText","buttonIcon","marginRight","icon","filter","filterWithButton","marginTop","DialogAdapterDebug","adapterToDebug","enabled","socket","getObject","then","obj","common","setObject","_id","onDebug","jsInstance","localStorage","getItem","showAskForStop","jsInstanceHost","componentDidMount","getAdapterInstances","_i$common","onlyWWW","_item$common","_item$common2","_item$common3","adapter","host","sort","a","b","jsInstanceObj","startsWith","renderJavascriptList","js","Grid","List","component","ListItem","button","selected","ListItemIcon","src","alt","ListItemText","primary","renderInstances","toLowerCase","onDoubleClick","container","direction","Input","placeholder","setItem","endAdornment","InputAdornment","position","IconButton","IconClose","COLOR_RUN","green","COLOR_PROBLEM","yellow","COLOR_PAUSE","red","ROOT_ID","COMMON_ID","GLOBAL_ID","NARROW_WIDTH","SELECTED_STYLE","drawerPaper","overflow","toolbar","toolbarButtons","mode","iconButtonsDisabled","opacity","toolbarSearch","lineHeight","marginLeft","iconButtons","padding","iconDropdownMenu","paddingRight","iconOnTheRight","right","top","menu","innerMenu","overflowX","overflowY","listItemIcon","filterIcon","borderRadius","scriptIcon","cursor","userSelect","folderReorder","transitionDuration","transitionProperty","folderIcon","folderIconReorder","paddingTop","paddingBottom","paddingLeft","folderIconNoReorder","script","scriptReorder","reorder","expandButton","childrenCount","footer","footerButtons","mt","mr","backgroundColor","footerButtonsRight","float","mainList","images","Blockly","def","Rules","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","className","Utils","clsx","Draggable","drag","useDrag","isDragging","transform","SideDrawer","expanded","JSON","parse","inputRef","listItems","scripts","problems","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","onEnableDisable","debugMode","IconPause","IconPlay","onEdit","IconDoEdit","Promise","resolve","getTextStyle","whiteSpace","flex","onDblClick","isFilteredOut","renderListItem","childrenFiltered","depthPx","iconStyle","isExpanded","combinedStyle","IconFolderOpened","IconFolder","alignItems","justifyContent","ListItemSecondaryAction","onDragFinish","newId","renderOneItem","items","element","reactChildren","renderAllItems","dense","disablePadding","onAddNew","onCopy","onAddNewFolder","getUniqueName","copyId","word","m","getUniqueFolderName","onCloseMenu","menuAnchorFilterEl","getFilterBadge","getMainMenu","selectedItem","Menu","anchorEl","PaperProps","maxHeight","MENU_ITEM_HEIGHT","onExpertModeChange","IconExpert","onExport","IconExport","onImport","IconImport","onThemeChange","newThemeName","IconDark","IconCopy","IconDebug","getToolbarButtons","clearTimeout","onSearch","mini","IconClear","currentTarget","IconMore","IconAdd","IconAddFolder","IconFind","IconReorder","IconEdit","version","getFolders","folders","onCollapseAll","onExpandAll","getBottomButtons","Box","flexGrow","IconExpandAll","IconCollapseAll","getAdapterDebugDialog","onDebugInstance","renamingItem","copingItem","Drawer","anchor","Divider","DragDropContext","backend","HTML5Backend","newName","newInstance","DialogAddNewScript","getTimeString","d","getHours","getMinutes","getSeconds","getMilliseconds","logBox","logBoxInner","verticalAlign","info","warn","debug","silly","table","fontFamily","toolbox","boxShadow","trFrom","trTime","trSeverity","layoutIcon","gText","Log","logHandler","message","allLines","lines","editing","generateLine","severity","date","Date","ts","ms","toLocaleString","goBottom","lastIndex","messagesEnd","row","regExp","RegExp","from","matches","substr","scrollToBottom","current","scrollIntoView","behavior","registerLogHandler","unregisterLogHandler","componentDidUpdate","hasOwnProperty","copyToClipboard","clearLog","renderLogList","clear","IconBottom","onLayoutChange","verticalLayout","onHideLog","IconHide","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","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","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","textArea","textAreaLight","dialog","typography","DialogExport","popper","file","Blob","fileName","scriptId","themeType","download","rel","href","URL","createObjectURL","textDecoration","Popper","placement","transition","_ref","TransitionProps","Fade","timeout","Paper","left","tabIndex","defaultProps","resize","dropzone","borderWidth","borderStyle","borderColor","boxSizing","dropzoneDiv","dropzoneRejected","dropzoneAccepted","iconError","iconOk","fullHeight","DialogImport","document","getElementById","readFileDataUrl","reader","FileReader","onload","onabort","onerror","readAsText","handleDropFile","files","imageStatus","Dropzone","maxSize","acceptClassName","rejectClassName","multiple","getRootProps","getInputProps","isDragActive","isDragReject","IconNo","IconPlus","IconUpload","toolboxXml","languageBlocklyLoaded","languageOwnLoaded","toolboxText","scriptsLoaded","searchXml","root","_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","loading","xmlBlocks","utils","textToDom","paste","onBlocklyChanged","ignoreChanges","domToWorkspace","didUpdate","addEventListener","getToolbox","darkTheme","Theme","defineTheme","base","Themes","Classic","componentStyles","workspaceBackgroundColour","toolboxBackgroundColour","toolboxForegroundColour","flyoutBackgroundColour","flyoutForegroundColour","flyoutOpacity","scrollbarColour","insertionMarkerColour","insertionMarkerOpacity","scrollbarOpacity","cursorColour","blackBackground","inject","renderer","zoom","controls","wheel","startScale","maxScale","minScale","scaleSpeed","pinch","move","scrollbars","horizontal","vertical","trashcan","grid","spacing","snap","sounds","registerToolboxCategoryCallback","Procedures","flyoutCategoryNew","addChangeListener","masterEvent","allBlocks","removeSelect","Events","UI","CREATE","VIEWPORT_CHANGE","getElementsByClassName","getThemeManager","removeEventListener","retry","outerHTML","p1","MSG","CustomBlocks","Words","HUE","_b","prototype","call","renderMessageDialog","DialogMessage","renderErrorDialog","renderExportDialog","renderImportDialog","args","argsTitle","DialogScriptEditor","isReturn","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","formControl","mb","borderBottomColor","CustomInstance","attr","onInstanceHide","setOptions","_options","unshift","renderValue","input","placeContent","title2","FormHelperText","CustomModal","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableEscapeKeyDown","classes","paper","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","o","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","vars","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","openDialog","convertCronToText","ComplexCron","cronExpression","renderWizard","wizardText","Schedule","valid","now2string","state2text","default","valueAck","valueNotAck","Transition","Slide","TriggerState","Array","isArray","valOld","ackOld","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","i18n","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","editorDiv","Editor","editorDidMount","scriptName","Console","onClearAllLogs","frameRoot","frameTextRoot","frameTextPrimary","frameTextSecondary","pl","listRoot","scopeType","textTransform","scopeType_local","scopeType_closure","scopeType_user","scopeName","textOverflow","scopeButton","scopeValueEditable","selectedFrame","splitter","toolbarScopes","scopesAfterToolbar","scopeNameName","scopeNameEqual","scopeNameValue","scopeButtonDel","valueNull","valueUndefined","valueString","valueNumber","valueBoolean","valueObject","valueNone","valueFunc","Stack","framesSizesStr","framesSizes","editValue","callFrames","editRef","onExpressionNameUpdate","scopeValue","renderExpression","onBlur","CheckIcon","formatValue","valueType","onExpressionDelete","renderExpressions","expressions","renderOneFrameTitle","frame","mainScriptId","currentScriptId","ListItemButton","onChangeCurrentFrame","currentFrame","functionName","secondary","forEdit","description","ReactJson","enableClipboard","collapsed","displayDataTypes","onWriteScopeValue","variableName","scopeNumber","callFrameId","_this$editRef$current","renderScope","scopeId","_item$value","_item$value2","editable","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","ReactSplit","SplitDirection","Horizontal","initialSizes","minWidths","onResizeFinished","_gutterIdx","gutterClassName","onExpressionAdd","buttonRun","buttonPause","buttonRestart","buttonStop","buttonNext","buttonStep","buttonOut","buttonException","tabFile","tabText","closeButton","tabsRoot","tabRoot","bpListItem","borderTop","monospace","arrow","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","toolSizesStr","toolSizes","stopOnException","_obj$common$engine","_this$state$context","scopeChain","global","_this$state$context2","getTextAtLocation","renderQueryBreakpoints","renderError","closeTab","renderTabs","indicatorColor","scrollButtons","onResume","onPause","onNext","onStepIn","onStepOut","onRestart","onToggleException","renderToolbar","Toolbar","IconRestart","IconRun","IconNext","IconStep","IconOut","IconException","getPossibleBreakpoints","toggleBreakpoint","renderCode","sourceId","renderFrames","_this$state$context3","renderConsole","logWarning","renderTools","_console","Badge","badgeContent","LinearProgress","Vertical","minHeights","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","nl","pt","uk","ChatIcon","viewBox","fill","fullHeightDialog","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","flexDirection","gap","Close","Question","CircularProgress","Copy","Check","onAddCode","COLOR_DEBUG","COLOR_VERBOSE","toolbarButtonsDisabled","textButton","saveButton","textIcon","tabIcon","hintIcon","hintText","hintButton","tabMenuButton","tabChanged","tabChangedIcon","notRunning","tabButton","tabButtonWrapper","menuIcon","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","allowScrollButtonsMobile","wrapped","iconPosition","_event","IconCloseAll","getDebugMenu","menuDebugAnchorEl","IconVerbose","getDebugBadge","getAskAboutDebug","askAboutDebug","DialogConfirm","onDebugModeChange","cancel","getToolbar","isInstanceRunning","isScriptRunning","changedAll","onLocate","IconLocate","endIcon","IconCron","OpenAiDialog","IconAstro","IconSelectId","IconDebugMode","ImgBlockly2Js","ImgRules2Js","badgeMargin","IconDebugMenu","getScriptEditor","getBlocklyEditor","resizing","getRulesEditor","RulesEditor","getConfirmDialog","getSelectIdDialog","_this$selectId","allObjectTypes","expertModeTypes","selectedId","types","getCronDialog","DialogCron","getAstroDialog","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","Tooltip","isValidDate","toLocaleTimeString","align","serverTime","getEditorDialog","getToast","Snackbar","anchorOrigin","autoHideDuration","ContentProps","closeToast","getTour","isAnyRulesExists","Tour","steps","isOpen","onRequestClose","goToStep","getDebug","DialogImportFile","readAsDataURL","menuDiv","splitterDivs","mainDiv","splitterDivWithMenu","menuDivWithoutMenu","progress","menuOpenCloseButton","showLogButton","App","GenericApp","Connection","AdminConnection","translations","require","bottomButtons","autoSubscribeLog","sentryDSN","onScriptsChanged","onInstanceAliveChange","reload","onHostChanged","hosts","logSizesStr","logSizes","splitSizesStr","splitSizes","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","newCommon","_obj","extendObject","_rev","getLiveHost","getFullYear","getMonth","getDate","getRawSocket","emit","link","fileStorageNamespace","click","remove","onImportConfirmed","toggleLogLayout","renderEditor","sum","IconShowLog","renderMain","onResizeStarted","onResizing","IconMenuOpened","IconMenuClosed","StyledEngineProvider","injectFirst","ThemeProvider","Loader","SideMenu","update","setThemeName","getThemeType","menuSize","propTypes","PropTypes","hostname","pgk","createRoot","DndProvider","TouchBackend","navigator","serviceWorker","registration","unregister","loadDynamicScript","port","socketLoadedHandler"],"sourceRoot":""}