iobroker.admin 7.4.13 → 7.4.14

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/6858.7b3f28b9.chunk.js","mappings":"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","sources":["../../../dm-gui-components/src/TooltipButton.tsx","../../../dm-gui-components/src/Utils.tsx","../../../dm-gui-components/src/DeviceActionButton.tsx","../../../dm-gui-components/src/DeviceControl.tsx","../../../dm-gui-components/src/assets/z-wave.svg","../../../dm-gui-components/src/assets/zigbee.svg","../../../dm-gui-components/src/assets/thread.svg","../../../dm-gui-components/src/Switch.tsx","../../../dm-gui-components/src/DeviceStatus.tsx","../../../dm-gui-components/src/JsonConfig.tsx","../../../dm-gui-components/src/DeviceImageUpload.tsx","../../../dm-gui-components/src/DeviceCard.tsx","../../../dm-gui-components/src/Communication.tsx","../../../dm-gui-components/src/InstanceActionButton.tsx","../../../dm-gui-components/src/DeviceList.tsx","../../../dm-gui-components/src/index.ts","../../../dm-gui-components/node_modules/@iobroker/dm-utils/build/DeviceManagement.js","../../../dm-gui-components/node_modules/@iobroker/dm-utils/build/index.js","../../../dm-gui-components/node_modules/@iobroker/dm-utils/build/types/base.js","../../../dm-gui-components/node_modules/@iobroker/dm-utils/build/types/errorCodes.js","../../../dm-gui-components/node_modules/@iobroker/dm-utils/build/types/index.js"],"sourcesContent":["import React from 'react';\nimport { IconButton, Tooltip, Typography } from '@mui/material';\n\ninterface TooltipButtonProps {\n tooltip?: string;\n label?: string;\n disabled?: boolean;\n Icon: React.JSX.Element | null;\n onClick?: () => void;\n}\n\nexport default function TooltipButton(props: TooltipButtonProps): React.JSX.Element {\n const { tooltip, label, disabled, Icon, onClick } = props;\n\n const text = !!label && (\n <Typography\n variant=\"button\"\n style={{ marginLeft: 4 }}\n >\n {label}\n </Typography>\n );\n\n if (tooltip) {\n return (\n <Tooltip\n title={tooltip}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={onClick}\n disabled={disabled}\n size=\"small\"\n >\n {Icon}\n {text}\n </IconButton>\n </span>\n </Tooltip>\n );\n }\n\n return (\n <IconButton\n onClick={onClick}\n disabled={disabled}\n size=\"small\"\n >\n {Icon}\n {text}\n </IconButton>\n );\n}\n","import React from 'react';\n\nimport type { ControlBase } from '@iobroker/dm-utils/build/types/base';\nimport type { ActionBase } from '@iobroker/dm-utils/build/types/api';\nimport {\n Add,\n Article,\n Bluetooth,\n BluetoothDisabled,\n Delete,\n Edit,\n FastForward,\n FastRewind,\n Fluorescent,\n Group,\n Info,\n Lightbulb,\n Link as LinkIcon,\n LinkOff,\n NotListedLocation,\n Pause,\n Person,\n PlayArrow,\n Power,\n QrCode,\n QuestionMark,\n Refresh,\n Search,\n Settings,\n Stop,\n Visibility,\n WbIncandescent,\n Wifi,\n WifiOff,\n} from '@mui/icons-material';\n\nimport { I18n, Icon } from '@iobroker/adapter-react-v5';\n\n/**\n * Get Icon by font-awesome name. Do not use these names, use names from getIconByName\n *\n * @param icon font-awesome icon name\n * Only following font-awesome icons are supported:\n * - fa-trash-can, fa-trash\n * - fa-pen\n * - fa-redo-alt\n * - fa-plus\n * - fa-qrcode, qrcode\n * - fa-wifi\n * - fa-wifi-slash\n * - fa-bluetooth\n * - fa-bluetooth-slash\n * - fa-eye\n * - fa-search\n * - fa-unlink\n * - fa-link\n * - fa-search-location\n * - fa-play\n * - fa-stop\n * - fa-pause\n * @param color color of the icon\n */\nfunction getFaIcon(icon: string, color?: string): React.JSX.Element | null {\n const iconStyle = icon\n .split(' ')\n .map(s => s.trim())\n .filter(s => s !== 'fa-solid');\n\n if (iconStyle.includes('fa-trash-can') || iconStyle.includes('fa-trash')) {\n return <Delete style={{ color }} />;\n }\n if (iconStyle.includes('fa-pen')) {\n return <Edit style={{ color }} />;\n }\n if (iconStyle.includes('fa-redo-alt')) {\n return <Refresh style={{ color }} />;\n }\n if (iconStyle.includes('fa-plus')) {\n return <Add style={{ color }} />;\n }\n if (iconStyle.includes('fa-qrcode') || iconStyle.includes('qrcode')) {\n return <QrCode style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi')) {\n return <Wifi style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi-slash')) {\n return <WifiOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth')) {\n return <Bluetooth style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth-slash')) {\n return <BluetoothDisabled style={{ color }} />;\n }\n if (iconStyle.includes('fa-eye')) {\n return <Visibility style={{ color }} />;\n }\n if (iconStyle.includes('fa-search')) {\n return <Search style={{ color }} />;\n }\n if (iconStyle.includes('fa-unlink')) {\n return <LinkOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-link')) {\n return <LinkIcon style={{ color }} />;\n }\n if (iconStyle.includes('fa-search-location')) {\n return <NotListedLocation style={{ color }} />;\n }\n if (iconStyle.includes('fa-play')) {\n return <PlayArrow style={{ color }} />;\n }\n if (iconStyle.includes('fa-stop')) {\n return <Stop style={{ color }} />;\n }\n if (iconStyle.includes('fa-pause')) {\n return <Pause style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\n/**\n * Get Icon by name or by action\n *\n * @param name action name\n * possible action or icon names are\n * - edit, rename\n * - delete\n * - refresh\n * - newDevice, new, add\n * - discover, search\n * - unpairDevice, unpair\n * - pairDevice, pair\n * - identify\n * - play\n * - stop\n * - pause\n * - forward, next\n * - rewind, previous\n * - lamp, light\n * - backlight\n * - dimmer\n * - socket\n * - settings\n * - users, group\n * - user\n * - qrcode\n * - identify\n * - info\n * - lines\n * @param altName icon name\n * @param color color of the icon\n */\nfunction getIconByName(name: string, altName?: string, color?: string): React.JSX.Element | null {\n if (name === 'edit' || name === 'rename' || altName === 'edit' || altName === 'rename') {\n return <Edit style={{ color }} />;\n }\n if (name === 'delete' || altName === 'delete') {\n return <Delete style={{ color }} />;\n }\n if (name === 'refresh' || altName === 'refresh') {\n return <Refresh style={{ color }} />;\n }\n if (\n name === 'newDevice' ||\n name === 'new' ||\n name === 'add' ||\n altName === 'newDevice' ||\n altName === 'new' ||\n altName === 'add'\n ) {\n return <Add style={{ color }} />;\n }\n if (name === 'discover' || name === 'search' || altName === 'discover' || altName === 'search') {\n return <Search style={{ color }} />;\n }\n if (name === 'unpairDevice' || name === 'unpair' || altName === 'unpairDevice' || altName === 'unpair') {\n return <LinkOff style={{ color }} />;\n }\n if (name === 'pairDevice' || name === 'pair' || altName === 'pairDevice' || altName === 'pair') {\n return <LinkIcon style={{ color }} />;\n }\n if (name === 'identify' || altName === 'identify') {\n return <NotListedLocation style={{ color }} />;\n }\n if (name === 'play' || altName === 'play') {\n return <PlayArrow style={{ color }} />;\n }\n if (name === 'stop' || altName === 'stop') {\n return <Stop style={{ color }} />;\n }\n if (name === 'pause' || altName === 'pause') {\n return <Pause style={{ color }} />;\n }\n if (name === 'forward' || name === 'next' || altName === 'forward' || altName === 'next') {\n return <FastForward style={{ color }} />;\n }\n if (name === 'rewind' || name === 'previous' || altName === 'rewind' || altName === 'previous') {\n return <FastRewind style={{ color }} />;\n }\n if (name === 'lamp' || name === 'light' || altName === 'lamp' || altName === 'light') {\n return <Lightbulb style={{ color }} />;\n }\n if (name === 'backlight' || altName === 'backlight') {\n return <Fluorescent style={{ color }} />;\n }\n if (name === 'dimmer' || altName === 'dimmer') {\n return <WbIncandescent style={{ color }} />;\n }\n if (name === 'socket' || altName === 'socket') {\n return <Power style={{ color }} />;\n }\n if (name === 'settings' || altName === 'settings') {\n return <Settings style={{ color }} />;\n }\n if (name === 'users' || name === 'group' || altName === 'users' || altName === 'group') {\n return <Group style={{ color }} />;\n }\n if (name === 'user' || altName === 'user') {\n return <Person style={{ color }} />;\n }\n if (name === 'qrcode' || altName === 'qrcode') {\n return <QrCode style={{ color }} />;\n }\n if (name === 'info' || altName === 'info') {\n return <Info style={{ color }} />;\n }\n if (name === 'lines' || altName === 'lines') {\n return <Article style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\nexport function renderControlIcon(\n action: ControlBase,\n colors?: { primary: string; secondary: string },\n value?: string | number | boolean | null,\n): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n let color = (value && action.colorOn) || action.color || (action.state ? 'primary' : 'inherit');\n\n if (colors) {\n if (color === 'primary') {\n color = colors.primary;\n } else if (color === 'secondary') {\n color = colors.secondary;\n }\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, color);\n }\n if (value && action.iconOn?.startsWith('data:image')) {\n return (\n <Icon\n src={action.iconOn}\n style={{ color }}\n />\n );\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, color);\n}\n\nexport function renderActionIcon(action: ActionBase): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, action.color);\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color: action.color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, action.color);\n}\n\nlet language: ioBroker.Languages;\n\n/**\n * Get Translation\n */\nexport function getTranslation(\n /** Text to translate */\n text: ioBroker.StringOrTranslated,\n noTranslation?: boolean,\n): string {\n language = language || I18n.getLanguage();\n\n if (typeof text === 'object') {\n return text[language] || text.en;\n }\n\n return noTranslation ? text : I18n.t(text);\n}\n","import React from 'react';\n\nimport type { ActionBase, DeviceAction } from '@iobroker/dm-utils';\nimport TooltipButton from './TooltipButton';\nimport { renderActionIcon, getTranslation } from './Utils';\n\ninterface DeviceActionButtonProps {\n deviceId: string;\n action: DeviceAction;\n refresh: () => void;\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n disabled?: boolean;\n}\n\nexport default function DeviceActionButton(props: DeviceActionButtonProps): React.JSX.Element {\n const { deviceId, action, refresh, deviceHandler, disabled } = props;\n\n const icon = renderActionIcon(action);\n\n const tooltip = getTranslation(action.description ?? '') || (icon ? null : action.id);\n\n return (\n <TooltipButton\n tooltip={tooltip || undefined}\n disabled={disabled || action.disabled}\n Icon={icon}\n onClick={deviceHandler(deviceId, action, refresh)}\n />\n );\n}\n","import React, { Component, type JSX } from 'react';\nimport { Button, Fab, Switch } from '@mui/material';\n\nimport type { Connection } from '@iobroker/adapter-react-v5';\nimport type { ControlBase, ControlState, DeviceControl } from '@iobroker/dm-utils';\n\nimport { renderControlIcon, getTranslation } from './Utils';\n\ninterface DeviceControlProps {\n deviceId: string;\n /** Control object */\n control: DeviceControl;\n socket: Connection;\n /** Control handler to set the state */\n controlHandler: (\n deviceId: string,\n control: ControlBase,\n state: ControlState,\n ) => () => Promise<ioBroker.State | null>;\n /** Control handler to read the state */\n controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;\n colors: { primary: string; secondary: string };\n disabled?: boolean;\n}\n\ninterface DeviceControlState {\n value?: ControlState;\n ts?: number;\n}\n\n/**\n * Device Control component\n */\nexport default class DeviceControlComponent extends Component<DeviceControlProps, DeviceControlState> {\n constructor(props: DeviceControlProps) {\n super(props);\n this.state = {\n value: props.control.state?.val,\n ts: props.control.state?.ts,\n };\n }\n\n async componentDidMount(): Promise<void> {\n if (this.props.control.stateId) {\n const mayBePromise = this.props.socket.subscribeState(this.props.control.stateId, this.stateHandler);\n if (mayBePromise instanceof Promise) {\n await mayBePromise;\n }\n }\n }\n\n stateHandler = async (id: string, state: ioBroker.State): Promise<void> => {\n if (id === this.props.control.stateId && state) {\n // request new state\n const newState: ioBroker.State | null = await this.props.controlStateHandler(\n this.props.deviceId,\n this.props.control,\n )();\n if (newState?.ts && (!this.state.ts || newState.ts > this.state.ts)) {\n this.setState({\n value: newState.val,\n ts: newState.ts,\n });\n }\n }\n };\n\n componentWillUnmount(): void {\n if (this.props.control.stateId) {\n this.props.socket.unsubscribeState(this.props.control.stateId, this.stateHandler);\n }\n }\n\n static getDerivedStateFromProps(\n props: DeviceControlProps,\n state: DeviceControlState,\n ): Partial<DeviceControlState> | null {\n if (props.control.state?.ts && (!state.ts || props.control.state?.ts > state.ts)) {\n return {\n value: props.control.state.val,\n ts: props.control.state.ts,\n };\n }\n\n return null;\n }\n\n async sendControl(deviceId: string, control: ControlBase, value: ControlState): Promise<void> {\n const result = await this.props.controlHandler(deviceId, control, value)();\n if (result?.ts && (!this.state.ts || result?.ts > this.state.ts)) {\n this.setState({\n value: result.val,\n ts: result.ts,\n });\n }\n }\n\n renderButton(): JSX.Element {\n const tooltip = getTranslation(this.props.control.description ?? '');\n const icon = renderControlIcon(this.props.control, this.props.colors, this.state.value);\n\n if (!this.props.control.label) {\n return (\n <Fab\n size=\"small\"\n disabled={this.props.disabled}\n title={tooltip}\n onClick={() => this.sendControl(this.props.deviceId, this.props.control, true)}\n >\n {icon}\n </Fab>\n );\n }\n return (\n <Button\n disabled={this.props.disabled}\n title={tooltip}\n onClick={() => this.sendControl(this.props.deviceId, this.props.control, true)}\n startIcon={icon}\n >\n {getTranslation(this.props.control.label)}\n </Button>\n );\n }\n\n renderSwitch(): JSX.Element {\n const tooltip = getTranslation(this.props.control.description ?? '');\n // const icon = renderIcon(this.props.control, this.props.colors, this.state.value);\n\n return (\n <Switch\n disabled={this.props.disabled}\n title={tooltip}\n checked={!!this.state.value}\n onChange={e => this.sendControl(this.props.deviceId, this.props.control, e.target.checked)}\n />\n );\n }\n\n getColor(): string | undefined {\n let color: string | undefined;\n if (this.state.value) {\n color = this.props.control.colorOn || 'primary';\n } else if (this.props.control.type === 'switch') {\n color = this.props.control.color;\n }\n if (color === 'primary') {\n return this.props.colors.primary;\n }\n if (color === 'secondary') {\n return this.props.colors.secondary;\n }\n return color;\n }\n\n // TODO: implement the following render methods\n // eslint-disable-next-line react/no-unused-class-component-methods,class-methods-use-this\n renderSelect(): JSX.Element | null {\n return null;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods,class-methods-use-this\n renderSlider(): JSX.Element | null {\n return null;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods,class-methods-use-this\n renderColor(): JSX.Element | null {\n return null;\n }\n\n renderIcon(): JSX.Element {\n const tooltip = getTranslation(this.props.control.description ?? '');\n const icon = renderControlIcon(this.props.control, this.props.colors, this.state.value);\n const color = this.getColor();\n const style: React.CSSProperties | undefined =\n color === this.props.colors.primary || color === this.props.colors.secondary ? {} : { color };\n const colorProps =\n color === this.props.colors.primary\n ? 'primary'\n : color === this.props.colors.secondary\n ? 'secondary'\n : undefined;\n\n if (!this.props.control.label) {\n style.width = 34;\n style.height = 34;\n style.minHeight = 34;\n\n return (\n <Fab\n disabled={this.props.disabled}\n size=\"small\"\n title={tooltip}\n color={colorProps}\n style={style}\n onClick={() => this.sendControl(this.props.deviceId, this.props.control, !this.state.value)}\n >\n {icon}\n </Fab>\n );\n }\n return (\n <Button\n disabled={this.props.disabled}\n title={tooltip}\n color={colorProps}\n style={style}\n onClick={() => this.sendControl(this.props.deviceId, this.props.control, !this.state.value)}\n startIcon={icon}\n >\n {getTranslation(this.props.control.label)}\n </Button>\n );\n }\n\n render(): JSX.Element {\n if (this.props.control.type === 'button') {\n return this.renderButton();\n }\n\n if (this.props.control.type === 'icon') {\n return this.renderIcon();\n }\n\n if (this.props.control.type === 'switch') {\n return this.renderSwitch();\n }\n\n return <div style={{ color: 'red' }}>{this.props.control.type}</div>;\n }\n}\n","var _path;\nconst _excluded = [\"title\", \"titleId\"];\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); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgZWave(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1073 1068\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M716 1.1C632.9 5.3 549.8 23.7 472 55c-66.4 26.7-132.6 65.5-188.5 110.4-43.8 35.1-85.2 76.7-120.1 120.6C72.4 400.4 16.7 539.8 3.5 686 1.8 705.1-.1 754.7.7 758c.5 2 1 2 49.7 1.8l49.1-.3.7-20c2.4-64.6 13.4-126 33.2-186 80.8-243.9 297-419.9 552.1-449.4 20.2-2.4 44.2-4.1 56.6-4.1h8.9V50 0l-9.7.1c-5.4.1-16.8.6-25.3 1zm-.8 208c-78.5 4.7-158 27.4-226.5 64.5-68.7 37.3-126.4 86.3-175.2 148.9-11 14-33.2 47.3-42.3 63.5-44 77.8-68.6 164.9-70.9 251.2l-.6 22.8h49.5 49.4l1.2-19c6.3-98.7 40-185.8 102.2-263.3 12.7-15.9 41.2-45.2 57-58.7 66.1-56.3 142.1-91.8 226-105.5 18.9-3 44.1-5.5 56.7-5.5h9.3v-50-50l-11.2.1c-6.2.1-17.3.6-24.6 1zm17.8 251c-104.5 9.2-195.2 69.7-243.6 162.4-43.9 84-45.5 184.2-4.5 270 60.3 125.9 198.1 194.2 334.9 166 46.6-9.7 89.5-29.7 127.2-59.6 13.5-10.7 37.3-34.5 48-47.9 34.2-43.1 55.2-92 63.7-148.6 2.2-15.1 2.5-62.7.5-77.4-3.6-25.2-10.1-51.4-17.8-71.2-10.1-26.2-29.4-59.7-47-81.8-9.7-12.1-35-37.2-47.4-47-47.8-37.9-104.5-60.1-165.4-65-14.7-1.1-34.7-1.1-48.6.1zm174.7 138.6c-.3.5-30.9 49.2-68.1 108.3L772 814.5l67.9.5 68 .5-30.1 48.8-30 48.7h-131c-104.4 0-130.9-.3-130.5-1.3.2-.6 32.7-51.1 72.1-112.1L730 687.9c0-.5-29.5-1-66.5-1.1l-66.6-.3 27.7-44.3 27.6-44.2h128l127.5.7z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgZWave);\nexport default __webpack_public_path__ + \"static/media/z-wave.09176b331d7b6b4b101cffaddf3e441a.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nconst _excluded = [\"title\", \"titleId\"];\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); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgZigbee(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 48 48\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M32.042,9.792c4.595,1.238,4.88,3.165,5.524,5.048C34.841,17.664,17.35,35.7,17.35,35.7 s10.901,1.177,23.487-1.003c-0.001,0.029-0.002,0.048-0.003,0.076C42.829,31.661,44,27.97,44,24c0-11.046-8.954-20-20-20 c-5.634,0-10.715,2.338-14.35,6.087C15.489,9.124,26.89,8.403,32.042,9.792z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M14.724,37.285c-1.982-0.347-4.212-2.131-4.707-5.302c1.437-1.239,19.994-20.507,19.994-20.507 c-7.008-0.424-14.569-0.465-22.237,0.864C5.408,15.625,4,19.644,4,24c0,11.046,8.954,20,20,20c6.173,0,11.689-2.8,15.358-7.195 C35.486,37.33,23.257,38.769,14.724,37.285z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgZigbee);\nexport default __webpack_public_path__ + \"static/media/zigbee.0e17b818ea0c78a95e189da4dac70a6e.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nconst _excluded = [\"title\", \"titleId\"];\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); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgThread(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 165 165\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M82.498,0C37.008,0,0,37.008,0,82.496c0,45.181,36.51,81.977,81.573,82.476V82.569l-27.002-0.002 c-8.023,0-14.554,6.53-14.554,14.561c0,8.023,6.531,14.551,14.554,14.551v17.98c-17.939,0-32.534-14.595-32.534-32.531 c0-17.944,14.595-32.543,32.534-32.543l27.002,0.004v-9.096c0-14.932,12.146-27.08,27.075-27.08 c14.932,0,27.082,12.148,27.082,27.08c0,14.931-12.15,27.08-27.082,27.08l-9.097-0.001v80.641 C136.889,155.333,165,122.14,165,82.496C165,37.008,127.99,0,82.498,0z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M117.748,55.493c0-5.016-4.082-9.098-9.1-9.098c-5.015,0-9.097,4.082-9.097,9.098v9.097l9.097,0.001 C113.666,64.591,117.748,60.51,117.748,55.493z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgThread);\nexport default __webpack_public_path__ + \"static/media/thread.78489b630e6b27d860ae133d9ccca0a6.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react';\nimport { type IobTheme } from '@iobroker/adapter-react-v5';\n\ninterface SwitchProps {\n checked: boolean;\n style?: React.CSSProperties;\n onChange: (checked: boolean) => void;\n theme: IobTheme;\n labelOn?: string;\n labelOff?: string;\n size?: 'small';\n disabled?: boolean;\n}\n\nconst WIDTH = 34;\nconst HANDLE_SIZE = 20;\nconst WIDTH_SMALL = 30;\nconst HANDLE_SIZE_SMALL = 15;\n\nexport default class Switch extends Component<SwitchProps> {\n render(): React.JSX.Element {\n const sw = (\n <div\n style={{\n width: this.props.size === 'small' ? WIDTH_SMALL : WIDTH,\n height: HANDLE_SIZE,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n position: 'relative',\n opacity: this.props.disabled ? 0.7 : 1,\n }}\n onClick={e => {\n if (this.props.disabled) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n this.props.onChange(!this.props.checked);\n }}\n >\n <div\n style={{\n borderRadius: 15,\n width: '100%',\n height: (this.props.size === 'small' ? HANDLE_SIZE_SMALL : HANDLE_SIZE) * 0.7,\n opacity: 0.6,\n backgroundColor: this.props.checked\n ? this.props.theme.palette.primary.main\n : this.props.theme.palette.text.disabled,\n }}\n />\n <div\n style={{\n position: 'absolute',\n top: this.props.size === 'small' ? (HANDLE_SIZE - HANDLE_SIZE_SMALL) / 2 : 0,\n left: this.props.checked\n ? this.props.size === 'small'\n ? WIDTH_SMALL - HANDLE_SIZE_SMALL\n : WIDTH - HANDLE_SIZE\n : 0,\n transition: 'left 0.2s',\n borderRadius: 50,\n width: this.props.size === 'small' ? HANDLE_SIZE_SMALL : HANDLE_SIZE,\n height: this.props.size === 'small' ? HANDLE_SIZE_SMALL : HANDLE_SIZE,\n backgroundColor: this.props.checked ? this.props.theme.palette.primary.main : '#EEE',\n boxShadow:\n 'rgba(0, 0, 0, 0.2) 0px 2px 1px -1px, rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px',\n }}\n />\n </div>\n );\n\n if (this.props.labelOn || this.props.labelOff) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n {this.props.labelOff}\n {sw}\n {this.props.labelOn}\n </div>\n );\n }\n\n return sw;\n }\n}\n","import React from 'react';\nimport { IconButton, Tooltip } from '@mui/material';\n\nimport {\n Link as LinkIcon,\n LinkOff as LinkOffIcon,\n NetworkCheck as NetworkCheckIcon,\n Battery20 as Battery20Icon,\n Battery30 as Battery30Icon,\n Battery50 as Battery50Icon,\n Battery60 as Battery60Icon,\n Battery80 as Battery80Icon,\n Battery90 as Battery90Icon,\n BatteryFull as BatteryFullIcon,\n BatteryAlert as BatteryAlertIcon,\n Warning as WarningIcon,\n BatteryCharging50 as BatteryCharging50Icon,\n Cable as IconConnectionLan,\n Wifi as IconConnectionWifi,\n WifiOff as IconConnectionNoWifi,\n Bluetooth as IconConnectionBluetooth,\n BluetoothDisabled as IconConnectionNoBluetooth,\n} from '@mui/icons-material';\n\nimport type { DeviceStatus, DeviceAction, ActionBase, ConfigConnectionType } from '@iobroker/dm-utils';\nimport { Icon, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport ZWaveIcon from './assets/z-wave.svg';\nimport ZigBeeIcon from './assets/zigbee.svg';\nimport ThreadIcon from './assets/thread.svg';\n\nimport { getTranslation } from './Utils';\nimport Switch from './Switch';\n\nexport const ACTIONS = {\n STATUS: 'status',\n DISABLE: 'disable',\n ENABLE: 'enable',\n};\n\nconst styles: Record<string, React.CSSProperties> = {\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface DeviceStatusProps {\n status: DeviceStatus | null;\n deviceId: string;\n connectionType?: ConfigConnectionType;\n statusAction?: DeviceAction;\n enabled?: boolean;\n disableEnableAction?: DeviceAction;\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n refresh: () => void;\n theme: IobTheme;\n}\n/**\n * Device Status component\n *\n * @param props - Parameters\n * @param props.status - Status object, e.g. { connection: 'connected', battery: 100, rssi: -50 }\n */\nexport default function DeviceStatus(props: DeviceStatusProps): React.JSX.Element | null {\n if (!props.status) {\n return null;\n }\n\n let status: DeviceStatus;\n\n if (typeof props.status === 'string') {\n status = {\n connection: props.status,\n };\n } else {\n status = props.status;\n }\n\n const iconStyleOK = {\n fill: '#00ac00',\n };\n const iconStyleNotOK = {\n fill: '#ff0000',\n };\n const iconStyleWarning = {\n fill: '#ff9900',\n };\n const iconStyleUnknown = {\n fill: '#8a8a8a',\n };\n\n let batteryIconTooltip: React.ReactNode = null;\n if (typeof status.battery === 'number') {\n if (status.battery >= 96 && status.battery <= 100) {\n batteryIconTooltip = <BatteryFullIcon style={iconStyleOK} />;\n } else if (status.battery >= 90 && status.battery <= 95) {\n batteryIconTooltip = <Battery90Icon style={iconStyleOK} />;\n } else if (status.battery >= 80 && status.battery <= 89) {\n batteryIconTooltip = <Battery80Icon style={iconStyleOK} />;\n } else if (status.battery >= 60 && status.battery <= 79) {\n batteryIconTooltip = <Battery60Icon style={iconStyleOK} />;\n } else if (status.battery >= 50 && status.battery <= 59) {\n batteryIconTooltip = <Battery50Icon style={iconStyleOK} />;\n } else if (status.battery >= 30 && status.battery <= 49) {\n batteryIconTooltip = <Battery30Icon style={iconStyleOK} />;\n } else if (status.battery >= 20 && status.battery <= 29) {\n batteryIconTooltip = <Battery20Icon style={iconStyleNotOK} />;\n } else {\n batteryIconTooltip = <BatteryAlertIcon style={iconStyleNotOK} />;\n }\n }\n\n const disability =\n typeof props.enabled === 'boolean' ? (\n <>\n <div style={{ flexGrow: 1 }} />\n {\n <Tooltip\n title={\n props.enabled ? getTranslation('disableIconTooltip') : getTranslation('enableIconTooltip')\n }\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <Switch\n size=\"small\"\n checked={props.enabled}\n disabled={!props.disableEnableAction}\n onChange={() =>\n props.disableEnableAction &&\n props.deviceHandler(props.deviceId, props.disableEnableAction, props.refresh)()\n }\n theme={props.theme}\n />\n </div>\n </Tooltip>\n }\n </>\n ) : null;\n let connectionSymbol: React.JSX.Element | null;\n if (props.connectionType === 'wifi') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <IconConnectionWifi style={iconStyleOK} />\n ) : status.connection === 'disconnected' ? (\n <IconConnectionNoWifi style={iconStyleNotOK} />\n ) : (\n <IconConnectionWifi style={iconStyleUnknown} />\n );\n } else if (props.connectionType === 'bluetooth') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <IconConnectionBluetooth style={iconStyleOK} />\n ) : status.connection === 'disconnected' ? (\n <IconConnectionNoBluetooth style={iconStyleNotOK} />\n ) : (\n <IconConnectionBluetooth style={iconStyleUnknown} />\n );\n } else if (props.connectionType === 'lan') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <IconConnectionLan style={iconStyleOK} />\n ) : status.connection === 'disconnected' ? (\n <IconConnectionLan style={iconStyleNotOK} />\n ) : (\n <IconConnectionLan style={iconStyleUnknown} />\n );\n } else if (props.connectionType === 'thread') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <Icon\n src={ThreadIcon}\n style={iconStyleOK}\n />\n ) : status.connection === 'disconnected' ? (\n <Icon\n src={ThreadIcon}\n style={iconStyleNotOK}\n />\n ) : (\n <Icon\n src={ThreadIcon}\n style={iconStyleUnknown}\n />\n );\n } else if (props.connectionType === 'z-wave') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <Icon\n src={ZWaveIcon}\n style={iconStyleOK}\n />\n ) : status.connection === 'disconnected' ? (\n <Icon\n src={ZWaveIcon}\n style={iconStyleNotOK}\n />\n ) : (\n <Icon\n src={ZWaveIcon}\n style={iconStyleUnknown}\n />\n );\n } else if (props.connectionType === 'zigbee') {\n connectionSymbol =\n status.connection === 'connected' ? (\n <Icon\n src={ZigBeeIcon}\n style={iconStyleOK}\n />\n ) : status.connection === 'disconnected' ? (\n <Icon\n src={ZigBeeIcon}\n style={iconStyleNotOK}\n />\n ) : (\n <Icon\n src={ZigBeeIcon}\n style={iconStyleUnknown}\n />\n );\n } else {\n connectionSymbol =\n status.connection === 'connected' ? (\n <LinkIcon style={iconStyleOK} />\n ) : status.connection === 'disconnected' ? (\n <LinkOffIcon style={iconStyleNotOK} />\n ) : null;\n }\n\n const connectionIcon =\n status.connection === 'connected' || status.connection === 'disconnected' ? (\n <Tooltip\n title={\n (status.connection === 'connected'\n ? getTranslation('connectedIconTooltip')\n : getTranslation('disconnectedIconTooltip')) +\n (props.statusAction\n ? `. ${getTranslation(props.statusAction.description || 'moreInformation')}`\n : '')\n }\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n {props.statusAction ? (\n <IconButton\n onClick={e => {\n if (props.statusAction) {\n e.stopPropagation();\n props.deviceHandler(props.deviceId, props.statusAction, props.refresh)();\n }\n }}\n >\n {connectionSymbol}\n <div style={{ position: 'absolute', top: 0, left: 0, color: 'grey' }}>*</div>\n </IconButton>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {connectionSymbol}\n </div>\n )}\n </Tooltip>\n ) : (\n connectionSymbol\n );\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n cursor: props.statusAction ? 'pointer' : undefined,\n width: props.disableEnableAction ? '100%' : undefined,\n gap: 8,\n }}\n >\n {connectionIcon}\n\n {status.rssi && (\n <Tooltip\n title=\"RSSI\"\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <NetworkCheckIcon />\n <p style={{ fontSize: 'small', margin: 0 }}>{status.rssi}</p>\n </div>\n </Tooltip>\n )}\n\n {typeof status.battery === 'number' && (\n <Tooltip\n title={getTranslation('batteryTooltip')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {batteryIconTooltip}\n <p style={{ fontSize: 'small', margin: 0 }}>{status.battery}%</p>\n </div>\n </Tooltip>\n )}\n\n {typeof status.battery === 'string' && (\n <Tooltip\n title={getTranslation('batteryTooltip')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {status.battery === 'charging' ? <BatteryCharging50Icon /> : <BatteryFullIcon />}\n {status.battery !== 'charging' ? (\n status.battery.includes('V') || status.battery.includes('mV') ? (\n <p style={{ fontSize: 'small', margin: 0 }}>{status.battery}</p>\n ) : (\n <p style={{ fontSize: 'small', margin: 0 }}>\n <span style={{ marginRight: 4 }}>{status.battery}</span>\n mV\n </p>\n )\n ) : null}\n </div>\n </Tooltip>\n )}\n\n {typeof status.battery === 'boolean' && (\n <Tooltip\n title={getTranslation('batteryTooltip')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {status.battery ? (\n <BatteryFullIcon style={iconStyleOK} />\n ) : (\n <BatteryAlertIcon style={iconStyleNotOK} />\n )}\n </div>\n </Tooltip>\n )}\n\n {status.warning ? (\n typeof status.warning === 'string' || typeof status.warning === 'object' ? (\n <Tooltip\n title={getTranslation(status.warning)}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <WarningIcon style={iconStyleWarning} />\n </div>\n </Tooltip>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <WarningIcon style={iconStyleWarning} />\n </div>\n )\n ) : null}\n\n {disability}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport type { Connection, AdminConnection, ThemeName, ThemeType, IobTheme } from '@iobroker/adapter-react-v5';\nimport { JsonConfigComponent, type ConfigItemPanel, type ConfigItemTabs } from '@iobroker/json-config';\n\ninterface JsonConfigDmProps {\n instanceId: string;\n socket: Connection;\n schema: ConfigItemPanel | ConfigItemTabs;\n data: Record<string, any>;\n onChange: (data: Record<string, any>) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n isFloatComma?: boolean;\n dateFormat?: string;\n expertMode?: boolean;\n}\n\nexport default function JsonConfig(props: JsonConfigDmProps): React.JSX.Element | null {\n const { instanceId, socket, schema, data, onChange } = props;\n const [error, setError] = useState(false);\n\n if (schema === undefined) {\n return null;\n }\n\n const [adapterName, instance] = instanceId.split('.', 2);\n\n return (\n <>\n {error && <div>{error}</div>}\n <JsonConfigComponent\n expertMode={props.expertMode}\n socket={socket as any as AdminConnection}\n adapterName={adapterName}\n instance={parseInt(instance, 10)}\n schema={schema}\n data={data}\n onError={setError}\n onChange={(_data: Record<string, any>) => onChange(_data)}\n embedded\n themeName={props.themeName}\n themeType={props.themeType}\n theme={props.theme}\n isFloatComma={\n props.isFloatComma === undefined\n ? !!props.socket.systemConfig?.common.isFloatComma\n : props.isFloatComma\n }\n dateFormat={\n props.dateFormat === undefined\n ? (props.socket.systemConfig?.common.dateFormat as string)\n : props.dateFormat\n }\n />\n </>\n );\n\n /*\n JSON adapter config:\n className={classes.scroll}\n socket={socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n schema={this.state.schema}\n common={this.state.common}\n data={this.state.data}\n updateData={this.state.updateData}\n onError={(error) => this.setState({ error })}\n onChange={(data, changed) => this.setState({ data, changed })}\n customs={{ configCustomEasyAccess: ConfigCustomEasyAccess }}\n Object custom:\n instanceObj={instanceObj}\n customObj={customObj}\n custom={true}\n className={ '' }\n adapterName={adapter}\n instance={parseInt(instance.split('.').pop(), 10) || 0}\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n multiEdit={this.props.objectIDs.length > 1}\n\n schema={this.jsonConfigs[adapter].json}\n data={data}\n onError={error =>\n this.setState({error}, () => this.props.onError && this.props.onError(error))}\n onValueChange={(attr, value) => {\n console.log(attr + ' => ' + value);\n const newValues = JSON.parse(JSON.stringify(this.state.newValues));\n newValues[instance] = newValues[instance] || {};\n if (this.commonConfig[instance][attr] === value) {\n delete newValues[instance][attr];\n if (!Object.keys(newValues[instance]).length) {\n delete newValues[instance];\n }\n } else {\n newValues[instance][attr] = value;\n }\n this.setState({newValues, hasChanges: this.isChanged(newValues)}, () =>\n this.props.onChange && this.props.onChange(this.state.hasChanges));\n }}\n */\n}\n","import React, { type ChangeEvent, type ChangeEventHandler } from 'react';\nimport type { Connection } from '@iobroker/adapter-react-v5';\n\ninterface DeviceImageUploadProps {\n socket: Connection;\n manufacturer?: string;\n model?: string;\n deviceId: string;\n onImageSelect: (image: string) => void;\n uploadImagesToInstance: string;\n}\n\nfunction DeviceImageUpload(params: DeviceImageUploadProps): React.JSX.Element | null {\n const { socket, manufacturer, model, deviceId, onImageSelect, uploadImagesToInstance } = params;\n\n const handleImageUpload: ChangeEventHandler<HTMLInputElement> = (event: ChangeEvent<HTMLInputElement>): void => {\n const target = event.target as HTMLInputElement;\n const files: FileList | null = target.files;\n if (!files || files.length === 0) {\n return;\n }\n\n const file = files[0];\n\n if (file) {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent<FileReader>): void => {\n if (!e.target || !e.target.result) {\n return;\n }\n\n const img = new Image();\n img.src = e.target.result as string;\n\n img.onload = async () => {\n const maxWidth = 50;\n const maxHeight = 50;\n let width = img.width;\n let height = img.height;\n\n if (width > height) {\n if (width > maxWidth) {\n height *= maxWidth / width;\n width = maxWidth;\n }\n } else if (height > maxHeight) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (ctx) {\n canvas.width = width;\n canvas.height = height;\n ctx.drawImage(img, 0, 0, width, height);\n\n const resizedImage = canvas.toDataURL('image/webp');\n\n // Build the file name from a manufacturer and model, if not available, use device id\n const fileName = `${manufacturer ? `${manufacturer}_` : ''}${model || deviceId}`;\n const base64Data = resizedImage.replace(/^data:image\\/webp;base64,/, '');\n const response = await socket.writeFile64(uploadImagesToInstance, fileName, base64Data);\n console.log(`saveImage response: ${JSON.stringify(response)}`);\n\n if (onImageSelect) {\n onImageSelect(resizedImage);\n }\n }\n };\n };\n\n reader.readAsDataURL(file);\n }\n };\n\n const imageUploadButtonStyle: React.CSSProperties = {\n // make the button invisible but still clickable\n opacity: 0,\n position: 'absolute',\n width: '45px',\n height: '45px',\n zIndex: 3,\n };\n\n return (\n <div>\n <input\n style={imageUploadButtonStyle}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageUpload}\n />\n </div>\n );\n}\n\nexport default DeviceImageUpload;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n Fab,\n DialogTitle,\n Card,\n CardActions,\n CardHeader,\n CardContent,\n Paper,\n Box,\n} from '@mui/material';\n\nimport { MoreVert as MoreVertIcon, VideogameAsset as ControlIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n Utils,\n type Connection,\n I18n,\n type ThemeName,\n type ThemeType,\n type IobTheme,\n IconDeviceType,\n} from '@iobroker/adapter-react-v5';\nimport {\n type DeviceDetails,\n type DeviceInfo,\n type ActionBase,\n type ControlBase,\n type ControlState,\n ACTIONS,\n} from '@iobroker/dm-utils';\n\nimport DeviceActionButton from './DeviceActionButton';\nimport DeviceControlComponent from './DeviceControl';\nimport DeviceStatusComponent from './DeviceStatus';\nimport JsonConfig from './JsonConfig';\nimport DeviceImageUpload from './DeviceImageUpload';\nimport { getTranslation } from './Utils';\nimport type { ConfigItemPanel, ConfigItemTabs } from '@iobroker/json-config';\n\nfunction NoImageIcon(props: { style?: React.CSSProperties; className?: string }): JSX.Element {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n style={props.style}\n className={props.className}\n >\n <path\n fill=\"currentColor\"\n d=\"M21.9,21.9l-8.49-8.49l0,0L3.59,3.59l0,0L2.1,2.1L0.69,3.51L3,5.83V19c0,1.1,0.9,2,2,2h13.17l2.31,2.31L21.9,21.9z M5,18 l3.5-4.5l2.5,3.01L12.17,15l3,3H5z M21,18.17L5.83,3H19c1.1,0,2,0.9,2,2V18.17z\"\n />\n </svg>\n );\n}\n\ninterface DeviceCardProps {\n title?: string;\n /* Device ID */\n id: string;\n device: DeviceInfo;\n instanceId: string;\n socket: Connection;\n /* Instance, where the images should be uploaded to */\n uploadImagesToInstance?: string;\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n controlHandler: (\n deviceId: string,\n control: ControlBase,\n state: ControlState,\n ) => () => Promise<ioBroker.State | null>;\n controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;\n smallCards?: boolean;\n alive: boolean;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n isFloatComma: boolean;\n dateFormat: string;\n}\n\nfunction getText(text: ioBroker.StringOrTranslated | undefined): string | undefined {\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en;\n }\n\n return text;\n}\n\ninterface DeviceCardState {\n open: boolean;\n details: DeviceDetails | null;\n data: Record<string, any>;\n icon: string | undefined;\n showControlDialog: boolean;\n}\n\n/**\n * Device Card Component\n */\nclass DeviceCard extends Component<DeviceCardProps, DeviceCardState> {\n constructor(props: DeviceCardProps) {\n super(props);\n\n this.state = {\n open: false,\n details: null,\n data: {},\n icon: props.device.icon,\n showControlDialog: false,\n };\n }\n\n async fetchIcon(): Promise<void> {\n if (!this.props.device.icon) {\n const lang = I18n.getLanguage();\n const manufacturer =\n this.props.device.manufacturer && typeof this.props.device.manufacturer === 'object'\n ? this.props.device.manufacturer[lang] || this.props.device.manufacturer.en\n : this.props.device.manufacturer;\n const model =\n this.props.device.model && typeof this.props.device.model === 'object'\n ? this.props.device.model[lang] || this.props.device.model.en\n : this.props.device.model;\n\n // try to load the icon from file storage\n const fileName = `${manufacturer ? `${manufacturer}_` : ''}${model || this.props.device.id}`;\n\n try {\n const file = await this.props.socket.readFile(\n this.props.instanceId.replace('system.adapter.', ''),\n `${fileName}.webp`,\n true,\n );\n if (file) {\n this.setState({ icon: `data:image/${file.mimeType},${file.file}` });\n } else {\n this.setState({ icon: '' });\n }\n // const response = await fetch(url);\n // if (response.ok) {\n // const blob = await response.blob();\n // const reader = new FileReader();\n // reader.onloadend = () => {\n // setIcon(reader.result);\n // };\n // reader.readAsDataURL(blob);\n // } else {\n // throw new Error('Response not ok');\n // }\n } catch {\n if (this.state.icon) {\n this.setState({ icon: '' });\n }\n }\n }\n }\n\n componentDidMount(): void {\n this.fetchIcon().catch(e => console.error(e));\n }\n\n /**\n * Load the device details\n */\n async loadDetails(): Promise<void> {\n console.log(`Loading device details for ${this.props.device.id}... from ${this.props.instanceId}`);\n const details: DeviceDetails | null = await this.props.socket.sendTo(\n this.props.instanceId,\n 'dm:deviceDetails',\n this.props.device.id,\n );\n console.log(`Got device details for ${this.props.device.id}:`, details);\n this.setState({ details, data: details?.data || {} });\n }\n\n /**\n * Refresh the device details\n */\n refresh = (): void => {\n this.setState({ details: null });\n this.loadDetails().catch(console.error);\n };\n\n /**\n * Copy the device ID to the clipboard\n */\n copyToClipboard = (): void => {\n const textToCopy = this.props.device.id;\n Utils.copyToClipboard(textToCopy);\n alert(`${getTranslation('copied')} ${textToCopy} ${getTranslation('toClipboard')}!`);\n };\n\n renderDialog(): JSX.Element | null {\n if (!this.state.open || !this.state.details) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"md\"\n onClose={() => this.setState({ open: false })}\n >\n <DialogContent>\n <JsonConfig\n instanceId={this.props.instanceId}\n socket={this.props.socket}\n schema={this.state.details.schema as ConfigItemPanel | ConfigItemTabs}\n data={this.state.data}\n onChange={(data: Record<string, any>) => this.setState({ data })}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!this.props.alive}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.setState({ open: false })}\n autoFocus\n >\n {getTranslation('closeButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderControlDialog(): JSX.Element | null {\n if (!this.state.showControlDialog || !this.props.alive) {\n return null;\n }\n const colors = { primary: '#111', secondary: '#888' };\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showControlDialog: false })}\n >\n <DialogTitle>\n {this.props.title}\n <IconButton\n style={{\n position: 'absolute',\n top: 5,\n right: 5,\n zIndex: 10,\n }}\n onClick={() => this.setState({ showControlDialog: false })}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent style={{ display: 'flex', flexDirection: 'column' }}>\n {this.props.device.controls?.map(control => (\n <DeviceControlComponent\n disabled={false}\n key={control.id}\n control={control}\n socket={this.props.socket}\n colors={colors}\n deviceId={this.props.device.id}\n controlHandler={this.props.controlHandler}\n controlStateHandler={this.props.controlStateHandler}\n />\n ))}\n </DialogContent>\n </Dialog>\n );\n }\n\n renderControls(): JSX.Element | null {\n const colors = { primary: '#111', secondary: '#888' };\n const firstControl = this.props.device.controls?.[0];\n if (\n this.props.device.controls?.length === 1 &&\n firstControl &&\n (firstControl.type === 'icon' || firstControl.type === 'switch') &&\n !firstControl.label\n ) {\n // control can be placed in the button icon\n return (\n <DeviceControlComponent\n disabled={!this.props.alive}\n control={firstControl}\n colors={colors}\n socket={this.props.socket}\n deviceId={this.props.device.id}\n controlHandler={this.props.controlHandler}\n controlStateHandler={this.props.controlStateHandler}\n />\n );\n }\n\n if (this.props.device.controls?.length) {\n // place button and show controls dialog\n return (\n <Fab\n size=\"small\"\n disabled={!this.props.alive}\n onClick={() => this.setState({ showControlDialog: true })}\n >\n <ControlIcon />\n </Fab>\n );\n }\n return null;\n }\n\n renderActions(): JSX.Element[] | null {\n const actions = this.props.device.actions?.filter(\n a => a.id !== ACTIONS.STATUS && a.id !== ACTIONS.ENABLE_DISABLE,\n );\n\n return actions?.length\n ? actions.map(a => (\n <DeviceActionButton\n disabled={!this.props.alive}\n key={a.id}\n deviceId={this.props.device.id}\n action={a}\n deviceHandler={this.props.deviceHandler}\n refresh={this.refresh}\n />\n ))\n : null;\n }\n\n renderSmall(): JSX.Element {\n const hasDetails = this.props.device.hasDetails;\n const status = !this.props.device.status\n ? []\n : Array.isArray(this.props.device.status)\n ? this.props.device.status\n : [this.props.device.status];\n\n const icon = this.state.icon ? <IconDeviceType src={this.state.icon} /> : <NoImageIcon />;\n\n return (\n <Card\n sx={{\n maxWidth: 345,\n minWidth: 200,\n }}\n >\n <CardHeader\n sx={theme => ({\n backgroundColor:\n this.props.device.color === 'primary'\n ? theme.palette.primary.main\n : theme.palette.secondary.main === 'secondary'\n ? theme.palette.secondary.main\n : this.props.device.color || theme.palette.secondary.main,\n color:\n this.props.device.color &&\n this.props.device.color !== 'primary' &&\n this.props.device.color !== 'secondary'\n ? Utils.invertColor(this.props.device.color, true)\n : theme.palette.secondary.contrastText,\n maxWidth: 345,\n })}\n avatar={\n <div>\n {this.props.uploadImagesToInstance ? (\n <DeviceImageUpload\n uploadImagesToInstance={this.props.uploadImagesToInstance}\n deviceId={this.props.device.id}\n manufacturer={getText(this.props.device.manufacturer)}\n model={getText(this.props.device.model)}\n onImageSelect={(imageData: string): void => {\n if (imageData) {\n this.setState({ icon: imageData });\n }\n }}\n socket={this.props.socket}\n />\n ) : null}\n {icon}\n </div>\n }\n action={\n hasDetails ? (\n <IconButton\n aria-label=\"settings\"\n onClick={() => {\n if (!this.state.open) {\n this.loadDetails().catch(console.error);\n this.setState({ open: true });\n }\n }}\n >\n <MoreVertIcon />\n </IconButton>\n ) : null\n }\n title={this.props.title}\n subheader={\n this.props.device.manufacturer ? (\n <span>\n <b style={{ marginRight: 4 }}>{getTranslation('manufacturer')}:</b>\n {getText(this.props.device.manufacturer)}\n </span>\n ) : null\n }\n />\n <CardContent style={{ position: 'relative' }}>\n {status?.length ? (\n <div\n style={{\n display: 'flex',\n position: 'absolute',\n top: -11,\n background: '#88888880',\n padding: '0 8px',\n borderRadius: 5,\n width: 'calc(100% - 46px)',\n }}\n >\n {status.map((s, i) => (\n <DeviceStatusComponent\n key={i}\n status={s}\n connectionType={this.props.device.connectionType}\n enabled={this.props.device.enabled}\n deviceId={this.props.device.id}\n statusAction={this.props.device.actions?.find(a => a.id === ACTIONS.STATUS)}\n disableEnableAction={this.props.device.actions?.find(\n a => a.id === ACTIONS.ENABLE_DISABLE,\n )}\n deviceHandler={this.props.deviceHandler}\n refresh={this.refresh}\n theme={this.props.theme}\n />\n ))}\n </div>\n ) : null}\n <div>\n <Typography variant=\"body1\">\n <div\n onClick={this.copyToClipboard}\n style={{ textOverflow: 'ellipsis', overflow: 'hidden' }}\n >\n <b>ID:</b>\n <span style={{ marginLeft: 4 }}>{this.props.device.id.replace(/.*\\.\\d\\./, '')}</span>\n </div>\n {this.props.device.manufacturer ? (\n <div>\n <b style={{ marginRight: 4 }}>{getTranslation('manufacturer')}:</b>\n {getText(this.props.device.manufacturer)}\n </div>\n ) : null}\n {this.props.device.model ? (\n <div>\n <b style={{ marginRight: 4 }}>{getTranslation('model')}:</b>\n {getText(this.props.device.model)}\n </div>\n ) : null}\n </Typography>\n </div>\n </CardContent>\n <CardActions disableSpacing>\n {this.renderActions()}\n <div style={{ flexGrow: 1 }} />\n {this.renderControls()}\n </CardActions>\n {this.renderDialog()}\n {this.renderControlDialog()}\n </Card>\n );\n }\n\n renderBig(): JSX.Element {\n const cardStyle: React.CSSProperties = {\n width: 300,\n minHeight: 280,\n margin: 10,\n overflow: 'hidden',\n display: 'inline-block',\n };\n const headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n paddingLeft: 8,\n paddingRight: 8,\n position: 'relative',\n minHeight: 60,\n color: '#000',\n };\n const imgAreaStyle: React.CSSProperties = {\n height: 45,\n width: 45,\n justifyContent: 'center',\n display: 'flex',\n alignItems: 'center',\n };\n const imgStyle: React.CSSProperties = {\n zIndex: 2,\n maxWidth: '100%',\n maxHeight: '100%',\n color: '#FFF',\n };\n const titleStyle: React.CSSProperties = {\n fontSize: 16,\n fontWeight: 'bold',\n // whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n };\n const detailsButtonStyle: React.CSSProperties = {\n right: 20,\n bottom: -20,\n position: 'absolute',\n };\n const bodyStyle: React.CSSProperties = {\n height: 'calc(100% - 116px)',\n };\n const deviceInfoStyle: React.CSSProperties = {\n padding: '20px 16px 0 16px',\n height: 133,\n };\n const statusStyle: React.CSSProperties = {\n padding: '15px 25px 0 15px',\n height: 41,\n };\n const status = !this.props.device.status\n ? []\n : Array.isArray(this.props.device.status)\n ? this.props.device.status\n : [this.props.device.status];\n\n const icon = this.state.icon ? (\n <IconDeviceType\n src={this.state.icon}\n style={imgStyle}\n />\n ) : (\n <NoImageIcon style={imgStyle} />\n );\n\n const title: string = this.state.details?.data?.name || this.props.title || '';\n\n return (\n <Paper\n style={cardStyle}\n key={this.props.id}\n >\n <Box\n sx={theme => ({ backgroundColor: theme.palette.secondary.main })}\n style={headerStyle}\n >\n <div style={imgAreaStyle}>\n {this.props.uploadImagesToInstance ? (\n <DeviceImageUpload\n uploadImagesToInstance={this.props.uploadImagesToInstance}\n deviceId={this.props.device.id}\n manufacturer={getText(this.props.device.manufacturer)}\n model={getText(this.props.device.model)}\n onImageSelect={(imageData: string): void => {\n if (imageData) {\n this.setState({ icon: imageData });\n }\n }}\n socket={this.props.socket}\n />\n ) : null}\n {icon}\n </div>\n <Box\n style={titleStyle}\n title={title.length > 20 ? title : undefined}\n sx={theme => ({ color: theme.palette.secondary.contrastText })}\n >\n {this.state.details?.data?.name || this.props.title}\n </Box>\n {this.props.device.hasDetails ? (\n <Fab\n disabled={!this.props.alive}\n size=\"small\"\n style={detailsButtonStyle}\n onClick={() => {\n if (!this.state.open) {\n this.loadDetails().catch(console.error);\n this.setState({ open: true });\n }\n }}\n color=\"primary\"\n >\n <MoreVertIcon />\n </Fab>\n ) : null}\n </Box>\n <div style={statusStyle}>\n {status.map((s, i) => (\n <DeviceStatusComponent\n key={i}\n deviceId={this.props.device.id}\n connectionType={this.props.device.connectionType}\n status={s}\n enabled={this.props.device.enabled}\n statusAction={this.props.device.actions?.find(a => a.id === ACTIONS.STATUS)}\n disableEnableAction={this.props.device.actions?.find(a => a.id === ACTIONS.ENABLE_DISABLE)}\n deviceHandler={this.props.deviceHandler}\n refresh={this.refresh}\n theme={this.props.theme}\n />\n ))}\n </div>\n <div style={bodyStyle}>\n <Typography\n variant=\"body1\"\n style={deviceInfoStyle}\n >\n <div onClick={this.copyToClipboard}>\n <b style={{ marginRight: 4 }}>ID:</b>\n {this.props.device.id.replace(/.*\\.\\d\\./, '')}\n </div>\n {this.props.device.manufacturer ? (\n <div>\n <b style={{ marginRight: 4 }}>{getTranslation('manufacturer')}:</b>\n {getText(this.props.device.manufacturer)}\n </div>\n ) : null}\n {this.props.device.model ? (\n <div>\n <b style={{ marginRight: 4 }}>{getTranslation('model')}:</b>\n {getText(this.props.device.model)}\n </div>\n ) : null}\n </Typography>\n {!!this.props.device.actions?.length && (\n <div\n style={{\n flex: 1,\n position: 'relative',\n display: 'flex',\n gap: 8,\n paddingBottom: 5,\n height: 34,\n paddingLeft: 10,\n paddingRight: 10,\n }}\n >\n {this.renderActions()}\n <div style={{ flexGrow: 1 }} />\n {this.renderControls()}\n </div>\n )}\n </div>\n {this.renderDialog()}\n {this.renderControlDialog()}\n </Paper>\n );\n }\n\n render(): JSX.Element {\n if (this.props.smallCards) {\n return this.renderSmall();\n }\n\n return this.renderBig();\n }\n}\n\nexport default DeviceCard;\n","import React, { Component } from 'react';\n\nimport {\n Backdrop,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Grid2,\n IconButton,\n Input,\n InputAdornment,\n InputLabel,\n LinearProgress,\n MenuItem,\n Select,\n Slider,\n Snackbar,\n TextField,\n Typography,\n} from '@mui/material';\n\nimport { Close, Check } from '@mui/icons-material';\n\nimport {\n type Connection,\n type AdminConnection,\n type ThemeName,\n type ThemeType,\n type IobTheme,\n I18n,\n Icon,\n} from '@iobroker/adapter-react-v5';\nimport type {\n ActionBase,\n ControlBase,\n ControlState,\n DeviceInfo,\n DeviceRefresh,\n InstanceDetails,\n JsonFormSchema,\n ActionButton,\n} from '@iobroker/dm-utils';\nimport type { ConfigItemPanel, ConfigItemTabs } from '@iobroker/json-config';\n\nimport { getTranslation } from './Utils';\nimport JsonConfig from './JsonConfig';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nexport type CommunicationProps = {\n /** Socket connection */\n socket: Connection;\n /** Instance to communicate with device-manager backend, like `adapterName.X` */\n selectedInstance: string; // adapterName.X\n registerHandler?: (handler: null | ((command: string) => void)) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n isFloatComma: boolean;\n dateFormat: string;\n};\n\ninterface CommunicationForm {\n title?: ioBroker.StringOrTranslated | null | undefined;\n label?: ioBroker.StringOrTranslated | null | undefined; // same as title\n noTranslation?: boolean; // Do not translate title/label\n schema: JsonFormSchema;\n data?: Record<string, any>;\n buttons?: (ActionButton | 'apply' | 'cancel' | 'close')[];\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ninterface CommunicationFormInState extends CommunicationForm {\n handleClose?: (data?: Record<string, any>) => void;\n originalData: string;\n changed: boolean;\n}\n\ninterface InputAction extends ActionBase {\n /** If it is a device action */\n deviceId?: string;\n /** Optional refresh function to execute */\n refresh?: () => void;\n}\n\nexport type CommunicationState = {\n showSpinner: boolean;\n showToast: string | null;\n message: {\n message: string;\n handleClose: () => void;\n } | null;\n confirm: {\n message: string;\n handleClose: (confirmation?: boolean) => void;\n } | null;\n form: CommunicationFormInState | null;\n progress: {\n open: boolean;\n progress: number;\n } | null;\n showConfirmation: InputAction | null;\n showInput: InputAction | null;\n inputValue: string | boolean | number | null;\n};\n\ninterface DmResponse {\n /* Type of message */\n type: 'message' | 'confirm' | 'progress' | 'result' | 'form';\n /* Origin */\n origin: string;\n}\n\ninterface DmControlResponse extends DmResponse {\n result: {\n error?: {\n code: number;\n message: string;\n };\n state?: ioBroker.State;\n deviceId: string;\n controlId: string;\n };\n}\n\ninterface Message {\n actionId?: string;\n deviceId?: string;\n value?: unknown;\n origin?: string;\n confirm?: boolean;\n data?: any;\n}\n\ninterface DmActionResponse extends DmResponse {\n result: {\n refresh?: DeviceRefresh;\n error?: {\n code: number;\n message: string;\n };\n };\n message?: string;\n confirm?: string;\n form?: CommunicationForm;\n progress?: {\n open: boolean;\n progress: number;\n };\n}\n\n/**\n * Device List Component\n */\nclass Communication<P extends CommunicationProps, S extends CommunicationState> extends Component<P, S> {\n private responseTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n instanceHandler: (action: ActionBase) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlHandler: (\n deviceId: string,\n control: ControlBase,\n state: ControlState,\n ) => () => Promise<ioBroker.State | null>;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;\n\n constructor(props: P) {\n super(props);\n\n this.state = {\n showSpinner: false,\n showToast: null,\n message: null,\n confirm: null,\n form: null,\n progress: null,\n showConfirmation: null,\n showInput: null,\n inputValue: null,\n } as S;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.instanceHandler = action => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: action });\n return;\n }\n if (action.inputBefore) {\n this.setState({ showInput: action });\n return;\n }\n\n this.sendActionToInstance('dm:instanceAction', { actionId: action.id });\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.deviceHandler = (deviceId, action, refresh) => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: { ...action, deviceId, refresh } });\n return;\n }\n if (action.inputBefore) {\n this.setState({\n showInput: { ...action, deviceId, refresh },\n inputValue: action.inputBefore.defaultValue || '',\n });\n return;\n }\n\n this.sendActionToInstance('dm:deviceAction', { deviceId, actionId: action.id }, refresh);\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlHandler = (deviceId, control, state) => () =>\n this.sendControlToInstance('dm:deviceControl', { deviceId, controlId: control.id, state });\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlStateHandler = (deviceId, control) => () =>\n this.sendControlToInstance('dm:deviceControlState', { deviceId, controlId: control.id });\n\n if (this.props.registerHandler) {\n this.props.registerHandler(() => this.loadData());\n }\n }\n\n componentWillUnmount(): void {\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n loadData(): void {\n console.error('loadData not implemented');\n }\n\n sendActionToInstance = (command: `dm:${string}`, messageToSend: Message, refresh?: () => void): void => {\n const send = async (): Promise<void> => {\n this.setState({ showSpinner: true });\n this.responseTimeout = setTimeout(() => {\n this.setState({ showSpinner: false });\n window.alert(I18n.t('ra_No response from the backend'));\n }, 5000);\n\n const response: DmActionResponse = await this.props.socket.sendTo(\n this.props.selectedInstance,\n command,\n messageToSend,\n );\n\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n\n const type: string = response.type;\n console.log(`Response: ${response.type}`);\n switch (type) {\n case 'message':\n console.log(`Message received: ${response.message}`);\n if (response.message) {\n this.setState({\n message: {\n message: response.message,\n handleClose: () =>\n this.setState({ message: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n { origin: response.origin },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'confirm':\n console.log(`Confirm received: ${response.confirm}`);\n if (response.confirm) {\n this.setState({\n confirm: {\n message: response.confirm,\n handleClose: (confirm?: boolean) =>\n this.setState({ confirm: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n confirm,\n },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'form':\n console.log('Form received');\n if (response.form) {\n const data: Record<string, any> | undefined = response.form.data;\n const originalData: Record<string, any> = {};\n if (data) {\n Object.keys(data).forEach(key => {\n if (data[key] !== undefined) {\n originalData[key] = data[key];\n }\n });\n }\n response.form.data = JSON.parse(JSON.stringify(originalData)) as Record<string, any>;\n\n this.setState({\n form: {\n ...response.form,\n changed: false,\n originalData: JSON.stringify(originalData),\n handleClose: (data: any) =>\n this.setState({ form: null }, () => {\n console.log(`Form ${JSON.stringify(data)}`);\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n data,\n },\n refresh,\n );\n }),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'progress':\n if (response.progress) {\n if (this.state.progress) {\n const progress = { ...this.state.progress, ...response.progress };\n this.setState({ progress, showSpinner: false });\n } else {\n this.setState({ progress: response.progress, showSpinner: false });\n }\n }\n this.sendActionToInstance('dm:actionProgress', { origin: response.origin }, refresh);\n break;\n\n case 'result':\n console.log('Response content', response.result);\n if (response.result.refresh) {\n if (response.result.refresh === true) {\n console.log('Refreshing all');\n this.loadData();\n } else if (response.result.refresh === 'instance') {\n console.log(`Refreshing instance infos: ${this.props.selectedInstance}`);\n } else if (response.result.refresh === 'device') {\n if (!refresh) {\n console.log('No refresh function provided to refresh \"device\"');\n } else {\n console.log(`Refreshing device infos: ${this.props.selectedInstance}`);\n refresh();\n }\n } else {\n console.log('Not refreshing anything');\n }\n }\n if (response.result.error) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message, showSpinner: false });\n } else {\n this.setState({ showSpinner: false });\n }\n break;\n\n default:\n console.log(`Unknown response type: ${type}`);\n this.setState({ showSpinner: false });\n break;\n }\n };\n\n void send().catch(console.error);\n };\n\n sendControlToInstance = async (\n command: string,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<null | ioBroker.State> => {\n const response: DmControlResponse = await this.props.socket.sendTo(\n this.props.selectedInstance,\n command,\n messageToSend,\n );\n const type = response.type;\n console.log(`Response: ${response.type}`);\n if (response.type === 'result') {\n console.log('Response content', response.result);\n if (response.result.error) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message });\n } else if (response.result.state !== undefined) {\n return response.result.state;\n }\n } else {\n console.warn('Unexpected response type', type);\n }\n\n return null;\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n loadDevices(): Promise<DeviceInfo[]> {\n return this.props.socket.sendTo(this.props.selectedInstance, 'dm:listDevices');\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n loadInstanceInfos(): Promise<InstanceDetails> {\n return this.props.socket.sendTo(this.props.selectedInstance, 'dm:instanceInfo');\n }\n\n renderMessageDialog(): React.JSX.Element | null {\n if (!this.state.message) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.message?.handleClose()}\n hideBackdrop\n aria-describedby=\"message-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"message-dialog-description\">{this.state.message?.message}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"primary\"\n onClick={() => this.state.message?.handleClose()}\n variant=\"contained\"\n autoFocus\n >\n {getTranslation('okButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderConfirmDialog(): React.JSX.Element | null {\n if (!this.state.confirm) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.confirm?.handleClose()}\n hideBackdrop\n aria-describedby=\"confirm-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"confirm-dialog-description\">\n {getTranslation(this.state.confirm?.message)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.state.confirm?.handleClose(true)}\n autoFocus\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.state.confirm?.handleClose(false)}\n autoFocus\n >\n {getTranslation('noButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderSnackbar(): React.JSX.Element {\n return (\n <Snackbar\n open={!!this.state.showToast}\n autoHideDuration={6_000}\n onClose={() => this.setState({ showToast: null })}\n message={this.state.showToast}\n />\n );\n }\n\n getOkButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n if (typeof button === 'string') {\n button = undefined;\n }\n return (\n <Button\n key=\"apply\"\n disabled={!this.state.form?.changed}\n variant={button?.variant || 'contained'}\n color={button?.color || 'primary'}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose(this.state.form?.data)}\n startIcon={button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'okButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n getCancelButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n let isClose = false;\n if (typeof button === 'string') {\n isClose = button === 'close';\n button = undefined;\n }\n return (\n <Button\n key=\"cancel\"\n variant={button?.variant || 'contained'}\n color={button?.color || 'grey'}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose()}\n startIcon={isClose ? <Close /> : button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'cancelButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n renderFormDialog(): React.JSX.Element | null {\n if (!this.state.form || !this.state.form.schema) {\n return null;\n }\n let buttons: React.JSX.Element[];\n if (this.state.form.buttons) {\n buttons = [];\n this.state.form.buttons.forEach((button: ActionButton | 'apply' | 'cancel' | 'close'): void => {\n if (button === 'apply' || (button as ActionButton).type === 'apply') {\n buttons.push(this.getOkButton(button));\n } else {\n buttons.push(this.getCancelButton(button));\n }\n });\n } else {\n buttons = [this.getOkButton(), this.getCancelButton()];\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.form?.handleClose && this.state.form.handleClose()}\n hideBackdrop\n fullWidth\n maxWidth={this.state.form.maxWidth || 'md'}\n >\n {this.state.form?.title ? (\n <DialogTitle>\n {getTranslation(\n this.state.form?.label || this.state.form?.title,\n this.state.form.noTranslation,\n )}\n </DialogTitle>\n ) : null}\n <DialogContent>\n <JsonConfig\n instanceId={this.props.selectedInstance}\n schema={this.state.form.schema as ConfigItemPanel | ConfigItemTabs}\n data={this.state.form.data || {}}\n socket={this.props.socket as AdminConnection}\n onChange={(data: Record<string, any>) => {\n console.log('handleFormChange', { data });\n const form: CommunicationFormInState = {\n ...(this.state.form as CommunicationFormInState),\n };\n if (form) {\n form.data = data;\n form.changed = JSON.stringify(data) !== form.originalData;\n this.setState({ form });\n }\n }}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n </DialogContent>\n <DialogActions>{buttons}</DialogActions>\n </Dialog>\n );\n }\n\n renderProgressDialog(): React.JSX.Element | null {\n if (!this.state.progress?.open) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => {}}\n hideBackdrop\n >\n <LinearProgress\n variant=\"determinate\"\n value={this.state.progress?.progress || 0}\n />\n </Dialog>\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n renderContent(): React.JSX.Element | React.JSX.Element[] | null {\n return null;\n }\n\n renderSpinner(): React.JSX.Element | null {\n if (!this.state.showSpinner) {\n return null;\n }\n return (\n <Backdrop\n style={{ zIndex: 1000 }}\n open={!0}\n >\n <CircularProgress />\n </Backdrop>\n );\n }\n\n renderConfirmationDialog(): React.JSX.Element | null {\n if (!this.state.showConfirmation) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showConfirmation: null })}\n >\n <DialogTitle>\n {getTranslation(\n this.state.showConfirmation.confirmation === true\n ? getTranslation('areYouSureText')\n : getTranslation(this.state.showConfirmation.confirmation as ioBroker.StringOrTranslated),\n )}\n </DialogTitle>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (!this.state.showConfirmation) {\n return;\n }\n\n const showConfirmation = this.state.showConfirmation;\n this.setState({ showConfirmation: null }, () => {\n if (showConfirmation.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n { actionId: showConfirmation.id, deviceId: showConfirmation.deviceId },\n showConfirmation.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', { actionId: showConfirmation.id });\n }\n });\n }}\n autoFocus\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showConfirmation: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n onShowInputOk(): void {\n if (!this.state.showInput) {\n return;\n }\n\n const showInput = this.state.showInput;\n this.setState({ showInput: null }, () => {\n if (showInput.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n {\n actionId: showInput.id,\n deviceId: showInput.deviceId,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n },\n showInput.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', {\n actionId: showInput.id,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n });\n }\n });\n }\n\n renderInputDialog(): React.JSX.Element | null {\n if (!this.state.showInput || !this.state.showInput.inputBefore) {\n return null;\n }\n let okDisabled = false;\n if (!this.state.showInput.inputBefore.allowEmptyValue && this.state.showInput.inputBefore.type !== 'checkbox') {\n if (\n this.state.showInput.inputBefore.type === 'number' ||\n this.state.showInput.inputBefore.type === 'slider'\n ) {\n okDisabled =\n this.state.inputValue === '' ||\n this.state.inputValue === null ||\n !window.isFinite(this.state.inputValue as number);\n } else {\n okDisabled = !this.state.inputValue;\n }\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showInput: null })}\n >\n <DialogTitle>{getTranslation('pleaseEnterValueText')}</DialogTitle>\n <DialogContent>\n {this.state.showInput.inputBefore.type === 'text' ||\n this.state.showInput.inputBefore.type === 'number' ||\n !this.state.showInput.inputBefore.type ? (\n <TextField\n autoFocus\n margin=\"dense\"\n label={getTranslation(this.state.showInput.inputBefore.label)}\n slotProps={{\n htmlInput:\n this.state.showInput.inputBefore.type === 'number'\n ? {\n min: this.state.showInput.inputBefore.min,\n max: this.state.showInput.inputBefore.max,\n step: this.state.showInput.inputBefore.step,\n }\n : undefined,\n input: {\n endAdornment: this.state.inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ inputValue: '' })}\n >\n <Close />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n type={this.state.showInput.inputBefore.type === 'number' ? 'number' : 'text'}\n fullWidth\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n onKeyUp={(e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.onShowInputOk();\n }\n }}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'checkbox' ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.inputValue}\n autoFocus\n onChange={e => this.setState({ inputValue: e.target.checked })}\n />\n }\n label={getTranslation(this.state.showInput.inputBefore.label)}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'select' ? (\n <FormControl fullWidth>\n <InputLabel>{getTranslation(this.state.showInput.inputBefore.label)}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n >\n {this.state.showInput.inputBefore.options?.map(item => (\n <MenuItem\n key={item.value}\n value={item.value}\n >\n {getTranslation(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n ) : null}\n {this.state.showInput.inputBefore.type === 'slider' ? (\n <Box sx={{ width: '100%' }}>\n <Typography gutterBottom>\n {getTranslation(this.state.showInput.inputBefore.label)}\n </Typography>\n <Grid2\n container\n spacing={2}\n alignItems=\"center\"\n >\n <Grid2>\n <Slider\n value={typeof this.state.inputValue === 'number' ? this.state.inputValue : 0}\n onChange={(_event: Event, newValue: number) =>\n this.setState({ inputValue: newValue })\n }\n />\n </Grid2>\n <Grid2>\n <Input\n value={this.state.inputValue}\n size=\"small\"\n onChange={e =>\n this.setState({\n inputValue: e.target.value === '' ? 0 : Number(e.target.value),\n })\n }\n onBlur={() => {\n if (!this.state.showInput) {\n return;\n }\n\n const min =\n this.state.showInput.inputBefore?.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min;\n const max =\n this.state.showInput.inputBefore?.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max;\n\n if ((this.state.inputValue as number) < min) {\n this.setState({ inputValue: min });\n } else if ((this.state.inputValue as number) > max) {\n this.setState({ inputValue: max });\n }\n }}\n inputProps={{\n step: this.state.showInput.inputBefore.step,\n min:\n this.state.showInput.inputBefore.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min,\n max:\n this.state.showInput.inputBefore.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max,\n type: 'number',\n }}\n />\n </Grid2>\n </Grid2>\n </Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={okDisabled}\n color=\"primary\"\n onClick={() => this.onShowInputOk()}\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showInput: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): React.JSX.Element {\n return (\n <>\n {this.renderSnackbar()}\n {this.renderContent()}\n {this.renderConfirmDialog()}\n {this.renderMessageDialog()}\n {this.renderFormDialog()}\n {this.renderProgressDialog()}\n {this.renderConfirmationDialog()}\n {this.renderInputDialog()}\n {this.renderSpinner()}\n </>\n );\n }\n}\n\nexport default Communication;\n","import React from 'react';\n\nimport type { ActionBase, InstanceAction } from '@iobroker/dm-utils';\n\nimport TooltipButton from './TooltipButton';\nimport { getTranslation, renderActionIcon } from './Utils';\n\ninterface InstanceActionButtonProps {\n action: InstanceAction;\n instanceHandler: (action: ActionBase) => () => void;\n}\n\nexport default function InstanceActionButton(params: InstanceActionButtonProps): React.JSX.Element | null {\n const { action, instanceHandler } = params;\n\n const tooltip = getTranslation(action?.description ? action.description : '');\n const title = getTranslation(action?.title ? action.title : '');\n\n const icon = renderActionIcon(action);\n\n return (\n <TooltipButton\n tooltip={tooltip}\n label={title}\n disabled={action.disabled}\n Icon={icon}\n onClick={instanceHandler(action)}\n />\n );\n}\n","import React, { type JSX } from 'react';\nimport {\n IconButton,\n InputAdornment,\n TextField,\n Toolbar,\n Tooltip,\n LinearProgress,\n Select,\n MenuItem,\n} from '@mui/material';\n\nimport { Clear, QuestionMark, Refresh, FilterAltOff } from '@mui/icons-material';\n\nimport { I18n, IconDeviceType } from '@iobroker/adapter-react-v5';\nimport type { DeviceInfo, InstanceDetails } from '@iobroker/dm-utils';\n\nimport DeviceCard from './DeviceCard';\nimport { getTranslation } from './Utils';\nimport Communication, { type CommunicationProps, type CommunicationState } from './Communication';\nimport InstanceActionButton from './InstanceActionButton';\n\nimport de from './i18n/de.json';\nimport en from './i18n/en.json';\nimport ru from './i18n/ru.json';\nimport pt from './i18n/pt.json';\nimport nl from './i18n/nl.json';\nimport fr from './i18n/fr.json';\nimport it from './i18n/it.json';\nimport es from './i18n/es.json';\nimport pl from './i18n/pl.json';\nimport uk from './i18n/uk.json';\nimport zhCn from './i18n/zh-cn.json';\n\ninterface DeviceListProps extends CommunicationProps {\n /** Instance to upload images to, like `adapterName.X` */\n uploadImagesToInstance?: string;\n /** Filter devices with this string */\n filter?: string;\n /** If this component is used in GUI with own toolbar. `false` if this list is used with multiple instances and true if only with one (in this case, it will monitor alive itself */\n embedded?: boolean;\n /** If embedded, this text is shown in the toolbar */\n title?: string;\n /** Style of a component that displays all devices */\n style?: React.CSSProperties;\n /** Use small cards for devices */\n smallCards?: boolean;\n /** To trigger the reload of devices, just change this variable */\n triggerLoad?: number;\n}\n\ninterface DeviceListState extends CommunicationState {\n devices: DeviceInfo[];\n filteredDevices: DeviceInfo[];\n filter: string;\n instanceInfo: InstanceDetails;\n loading: boolean;\n alive: boolean | null;\n triggerLoad: number;\n groupKey: string;\n}\n\n/**\n * Device List Component\n */\nexport default class DeviceList extends Communication<DeviceListProps, DeviceListState> {\n static i18nInitialized = false;\n\n private lastPropsFilter: string | undefined;\n\n private lastInstance: string;\n\n private lastTriggerLoad = 0;\n\n private filterTimeout: ReturnType<typeof setTimeout> | null;\n\n private readonly language: ioBroker.Languages;\n\n constructor(props: DeviceListProps) {\n super(props);\n\n if (!DeviceList.i18nInitialized) {\n DeviceList.i18nInitialized = true;\n I18n.extendTranslations({\n en,\n de,\n ru,\n pt,\n nl,\n fr,\n it,\n es,\n pl,\n uk,\n 'zh-cn': zhCn,\n });\n }\n\n Object.assign(this.state, {\n devices: [],\n filteredDevices: [],\n filter: '',\n instanceInfo: null,\n loading: null,\n alive: null,\n groupKey: '',\n });\n\n this.lastPropsFilter = this.props.filter;\n this.lastInstance = this.props.selectedInstance;\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n this.filterTimeout = null;\n this.language = I18n.getLanguage();\n }\n\n async componentDidMount(): Promise<void> {\n let alive = false;\n if (this.state.alive === null) {\n try {\n // check if instance is alive\n const stateAlive = await this.props.socket.getState(\n `system.adapter.${this.props.selectedInstance}.alive`,\n );\n if (stateAlive?.val) {\n alive = true;\n }\n } catch (error) {\n console.error(error);\n }\n this.setState({ alive }, () =>\n this.props.socket.subscribeState(\n `system.adapter.${this.props.selectedInstance}.alive`,\n this.aliveHandler,\n ),\n );\n if (!alive) {\n return;\n }\n } else {\n alive = this.state.alive;\n }\n\n if (!this.props.embedded && alive) {\n try {\n const instanceInfo = await this.loadInstanceInfos();\n this.setState({ instanceInfo });\n } catch (error) {\n console.error(error);\n }\n }\n if (alive) {\n this.loadData();\n }\n }\n\n componentWillUnmount(): void {\n this.props.socket.unsubscribeState(`system.adapter.${this.props.selectedInstance}.alive`, this.aliveHandler);\n }\n\n aliveHandler: ioBroker.StateChangeHandler = (id: string, state: ioBroker.State | null | undefined): void => {\n if (id === `system.adapter.${this.props.selectedInstance}.alive`) {\n const alive = !!state?.val;\n if (alive !== this.state.alive) {\n this.setState({ alive }, () => {\n if (alive) {\n this.componentDidMount().catch(console.error);\n }\n });\n }\n }\n };\n\n /**\n * Load devices\n */\n override loadData(): void {\n this.setState({ loading: true }, async () => {\n console.log(`Loading devices for ${this.props.selectedInstance}...`);\n let devices: DeviceInfo[] = [];\n try {\n devices = await this.loadDevices();\n\n if (!devices || !Array.isArray(devices)) {\n console.error(\n `Message returned from sendTo() doesn't look like one from DeviceManagement, did you accidentally handle the message in your adapter? ${JSON.stringify(\n devices,\n )}`,\n );\n devices = [];\n }\n } catch (error) {\n console.error(error);\n devices = [];\n }\n\n this.setState({ devices, loading: false }, () => this.applyFilter());\n });\n }\n\n getText(text: ioBroker.StringOrTranslated): string {\n if (typeof text === 'object') {\n return text[this.language] || text.en;\n }\n\n return text;\n }\n\n applyFilter(): void {\n const filter = this.props.embedded ? this.props.filter : this.state.filter;\n\n // filter devices name\n if (filter) {\n const filteredDevices = this.state.devices.filter(device =>\n this.getText(device.name).toLowerCase().includes(filter.toLowerCase()),\n );\n this.setState({ filteredDevices });\n } else {\n this.setState({ filteredDevices: this.state.devices });\n }\n }\n\n handleFilterChange(filter: string): void {\n this.setState({ filter }, () => {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n this.filterTimeout = setTimeout(() => {\n this.filterTimeout = null;\n this.applyFilter();\n }, 250);\n });\n }\n\n renderGroups(\n groups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] | undefined,\n ): React.JSX.Element | null {\n if (!groups?.length) {\n return null;\n }\n\n return (\n <Select\n style={{ minWidth: 120, marginRight: 8, marginTop: 12.5 }}\n variant=\"standard\"\n value={this.state.groupKey || '_'}\n renderValue={value => {\n if (value === '_') {\n value = '';\n }\n const g = groups.find(g => g.value === value);\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {g?.icon || <div style={{ width: 24 }} />}\n {g?.name || value}\n </div>\n );\n }}\n onChange={e => this.setState({ groupKey: e.target.value === '_' ? '' : e.target.value })}\n >\n {groups.map(g => (\n <MenuItem\n value={g.value || '_'}\n key={g.value || '_'}\n style={{ display: 'flex', alignItems: 'center', gap: 8 }}\n >\n {g.icon || <div style={{ width: 24 }} />}\n {g.name}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n renderContent(): JSX.Element | JSX.Element[] | null {\n const emptyStyle: React.CSSProperties = {\n padding: 25,\n };\n\n if ((this.props.triggerLoad || 0) !== this.lastTriggerLoad) {\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n setTimeout(() => this.loadData(), 50);\n }\n\n if (this.props.embedded && this.lastPropsFilter !== this.props.filter) {\n this.lastPropsFilter = this.props.filter;\n setTimeout(() => this.applyFilter(), 50);\n }\n // if instance changed\n if (this.props.embedded && this.lastInstance !== this.props.selectedInstance) {\n this.lastInstance = this.props.selectedInstance;\n setTimeout(() => this.loadData(), 50);\n }\n const deviceGroups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] =\n [];\n let list: React.JSX.Element[] | undefined;\n if (!this.props.embedded && !this.state.alive) {\n list = [\n <div\n style={emptyStyle}\n key=\"notAlive\"\n >\n <span>{getTranslation('instanceNotAlive')}</span>\n </div>,\n ];\n } else if (!this.state.devices.length && this.props.selectedInstance) {\n list = [\n <div\n style={emptyStyle}\n key=\"notFound\"\n >\n <span>{getTranslation('noDevicesFoundText')}</span>\n </div>,\n ];\n } else if (this.state.devices.length && !this.state.filteredDevices.length) {\n list = [\n <div\n style={emptyStyle}\n key=\"filtered\"\n >\n <span>{getTranslation('allDevicesFilteredOut')}</span>\n </div>,\n ];\n } else {\n // build device types list\n let filteredDevices = this.state.filteredDevices;\n if (!this.props.embedded && filteredDevices.find(device => device.group)) {\n deviceGroups.push({\n name: I18n.t('All'),\n value: '',\n count: filteredDevices.length,\n icon: <FilterAltOff />,\n });\n filteredDevices.forEach(device => {\n if (device.group) {\n const type = deviceGroups.find(t => t.value === device.group?.key);\n if (type) {\n type.count++;\n } else {\n const icon = device.group.icon ? <IconDeviceType src={device.group.icon} /> : null;\n\n deviceGroups.push({\n name: this.getText(device.group.name || device.group.key),\n value: device.group.key,\n count: 1,\n icon,\n });\n }\n }\n });\n const unknown = filteredDevices.filter(device => !device.group);\n if (unknown.length) {\n deviceGroups.push({\n name: I18n.t('Unknown'),\n value: '?',\n count: unknown.length,\n icon: <QuestionMark />,\n });\n }\n\n if (this.state.groupKey) {\n // filter out all devices belonging to this group\n if (this.state.groupKey === '?') {\n filteredDevices = filteredDevices.filter(device => !device.group?.key);\n } else {\n filteredDevices = filteredDevices.filter(device => device.group?.key === this.state.groupKey);\n }\n if (!filteredDevices.length) {\n list = [\n <div\n style={emptyStyle}\n key=\"filtered\"\n >\n <span>{getTranslation('allDevicesFilteredOut')}</span>\n </div>,\n ];\n }\n }\n }\n\n if (filteredDevices.length) {\n list = filteredDevices.map(device => (\n <DeviceCard\n alive={!!this.state.alive}\n key={device.id}\n id={device.id}\n title={this.getText(device.name)}\n device={device}\n instanceId={this.props.selectedInstance}\n uploadImagesToInstance={this.props.uploadImagesToInstance}\n deviceHandler={this.deviceHandler}\n controlHandler={this.controlHandler}\n controlStateHandler={this.controlStateHandler}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n ));\n }\n }\n\n if (this.props.embedded) {\n return (\n <>\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {list}\n </>\n );\n }\n\n return (\n <div style={{ width: '100%', height: '100%', overflow: 'hidden' }}>\n <Toolbar\n variant=\"dense\"\n style={{ backgroundColor: '#777', display: 'flex' }}\n >\n {this.props.title}\n {this.props.selectedInstance ? (\n <Tooltip\n title={getTranslation('refreshTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={() => this.loadData()}\n disabled={!this.state.alive}\n size=\"small\"\n >\n <Refresh />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {this.state.alive && this.state.instanceInfo?.actions?.length ? (\n <div style={{ marginLeft: 20 }}>\n {this.state.instanceInfo.actions.map(action => (\n <InstanceActionButton\n key={action.id}\n action={action}\n instanceHandler={this.instanceHandler}\n />\n ))}\n </div>\n ) : null}\n\n <div style={{ flexGrow: 1 }} />\n\n {this.renderGroups(deviceGroups)}\n {this.state.alive ? (\n <TextField\n variant=\"standard\"\n style={{ width: 200 }}\n size=\"small\"\n label={getTranslation('filterLabelText')}\n onChange={e => this.handleFilterChange(e.target.value)}\n value={this.state.filter}\n autoComplete=\"off\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n endAdornment: this.state.filter ? (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => this.handleFilterChange('')}\n edge=\"end\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n ) : null}\n </Toolbar>\n <div\n style={{\n width: '100%',\n height: 'calc(100% - 56px)',\n marginTop: 8,\n overflow: 'auto',\n // justifyContent: 'center',\n // alignItems: 'stretch',\n // display: 'grid',\n // columnGap: 8,\n // rowGap: 8,\n ...this.props.style,\n }}\n >\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {list}\n </div>\n </div>\n );\n }\n}\n","import DeviceList from './DeviceList';\n\nexport default DeviceList;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageContext = exports.DeviceManagement = void 0;\nconst types_1 = require(\"./types\");\nclass DeviceManagement {\n constructor(adapter) {\n this.adapter = adapter;\n this.contexts = new Map();\n adapter.on('message', this.onMessage.bind(this));\n }\n get log() {\n return this.adapter.log;\n }\n getInstanceInfo() {\n return { apiVersion: 'v1' };\n }\n getDeviceDetails(id) {\n return { id, schema: {} };\n }\n handleInstanceAction(actionId, context, options) {\n var _a;\n if (!this.instanceInfo) {\n this.log.warn(`Instance action ${actionId} was called before getInstanceInfo()`);\n return {\n error: {\n code: types_1.ErrorCodes.E_INSTANCE_ACTION_NOT_INITIALIZED,\n message: `Instance action ${actionId} was called before getInstanceInfo()`,\n },\n };\n }\n const action = (_a = this.instanceInfo.actions) === null || _a === void 0 ? void 0 : _a.find(a => a.id === actionId);\n if (!action) {\n this.log.warn(`Instance action ${actionId} is unknown`);\n return {\n error: {\n code: types_1.ErrorCodes.E_INSTANCE_ACTION_UNKNOWN,\n message: `Instance action ${actionId} is unknown`,\n },\n };\n }\n if (!action.handler) {\n this.log.warn(`Instance action ${actionId} is disabled because it has no handler`);\n return {\n error: {\n code: types_1.ErrorCodes.E_INSTANCE_ACTION_NO_HANDLER,\n message: `Instance action ${actionId} is disabled because it has no handler`,\n },\n };\n }\n return action.handler(context, options);\n }\n handleDeviceAction(deviceId, actionId, context, options) {\n var _a;\n if (!this.devices) {\n this.log.warn(`Device action ${actionId} was called before listDevices()`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_ACTION_NOT_INITIALIZED,\n message: `Device action ${actionId} was called before listDevices()`,\n },\n };\n }\n const device = this.devices.get(deviceId);\n if (!device) {\n this.log.warn(`Device action ${actionId} was called on unknown device: ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_ACTION_DEVICE_UNKNOWN,\n message: `Device action ${actionId} was called on unknown device: ${deviceId}`,\n },\n };\n }\n const action = (_a = device.actions) === null || _a === void 0 ? void 0 : _a.find(a => a.id === actionId);\n if (!action) {\n this.log.warn(`Device action ${actionId} doesn't exist on device ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_ACTION_UNKNOWN,\n message: `Device action ${actionId} doesn't exist on device ${deviceId}`,\n },\n };\n }\n if (!action.handler) {\n this.log.warn(`Device action ${actionId} on ${deviceId} is disabled because it has no handler`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_ACTION_NO_HANDLER,\n message: `Device action ${actionId} on ${deviceId} is disabled because it has no handler`,\n },\n };\n }\n return action.handler(deviceId, context, options);\n }\n handleDeviceControl(deviceId, controlId, newState, context) {\n var _a;\n if (!this.devices) {\n this.log.warn(`Device control ${controlId} was called before listDevices()`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_CONTROL_NOT_INITIALIZED,\n message: `Device control ${controlId} was called before listDevices()`,\n },\n };\n }\n const device = this.devices.get(deviceId);\n if (!device) {\n this.log.warn(`Device control ${controlId} was called on unknown device: ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_CONTROL_DEVICE_UNKNOWN,\n message: `Device control ${controlId} was called on unknown device: ${deviceId}`,\n },\n };\n }\n const control = (_a = device.controls) === null || _a === void 0 ? void 0 : _a.find(a => a.id === controlId);\n if (!control) {\n this.log.warn(`Device control ${controlId} doesn't exist on device ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_CONTROL_UNKNOWN,\n message: `Device control ${controlId} doesn't exist on device ${deviceId}`,\n },\n };\n }\n if (!control.handler) {\n this.log.warn(`Device control ${controlId} on ${deviceId} is disabled because it has no handler`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_CONTROL_NO_HANDLER,\n message: `Device control ${controlId} on ${deviceId} is disabled because it has no handler`,\n },\n };\n }\n return control.handler(deviceId, controlId, newState, context);\n }\n // request state of control\n handleDeviceControlState(deviceId, controlId, context) {\n var _a;\n if (!this.devices) {\n this.log.warn(`Device get state ${controlId} was called before listDevices()`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_GET_STATE_NOT_INITIALIZED,\n message: `Device control ${controlId} was called before listDevices()`,\n },\n };\n }\n const device = this.devices.get(deviceId);\n if (!device) {\n this.log.warn(`Device get state ${controlId} was called on unknown device: ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_GET_STATE_DEVICE_UNKNOWN,\n message: `Device control ${controlId} was called on unknown device: ${deviceId}`,\n },\n };\n }\n const control = (_a = device.controls) === null || _a === void 0 ? void 0 : _a.find(a => a.id === controlId);\n if (!control) {\n this.log.warn(`Device get state ${controlId} doesn't exist on device ${deviceId}`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_GET_STATE_UNKNOWN,\n message: `Device control ${controlId} doesn't exist on device ${deviceId}`,\n },\n };\n }\n if (!control.getStateHandler) {\n this.log.warn(`Device get state ${controlId} on ${deviceId} is disabled because it has no handler`);\n return {\n error: {\n code: types_1.ErrorCodes.E_DEVICE_GET_STATE_NO_HANDLER,\n message: `Device get state ${controlId} on ${deviceId} is disabled because it has no handler`,\n },\n };\n }\n return control.getStateHandler(deviceId, controlId, context);\n }\n onMessage(obj) {\n if (!obj.command.startsWith('dm:')) {\n return;\n }\n void this.handleMessage(obj).catch(this.log.error);\n }\n async handleMessage(msg) {\n this.log.debug(`DeviceManagement received: ${JSON.stringify(msg)}`);\n switch (msg.command) {\n case 'dm:instanceInfo': {\n this.instanceInfo = await this.getInstanceInfo();\n this.sendReply(Object.assign(Object.assign({}, this.instanceInfo), { actions: this.convertActions(this.instanceInfo.actions) }), msg);\n return;\n }\n case 'dm:listDevices': {\n const deviceList = await this.listDevices();\n this.devices = deviceList.reduce((map, value) => {\n if (map.has(value.id)) {\n throw new Error(`Device ID ${value.id} is not unique`);\n }\n map.set(value.id, value);\n return map;\n }, new Map());\n const apiDeviceList = deviceList.map(d => (Object.assign(Object.assign({}, d), { actions: this.convertActions(d.actions), controls: this.convertControls(d.controls) })));\n this.sendReply(apiDeviceList, msg);\n this.adapter.sendTo(msg.from, msg.command, this.devices, msg.callback);\n return;\n }\n case 'dm:deviceDetails': {\n const details = await this.getDeviceDetails(msg.message);\n this.adapter.sendTo(msg.from, msg.command, details, msg.callback);\n return;\n }\n case 'dm:instanceAction': {\n const action = msg.message;\n const context = new MessageContext(msg, this.adapter);\n this.contexts.set(msg._id, context);\n const result = await this.handleInstanceAction(action.actionId, context, { value: action.value });\n this.contexts.delete(msg._id);\n context.sendFinalResult(result);\n return;\n }\n case 'dm:deviceAction': {\n const action = msg.message;\n const context = new MessageContext(msg, this.adapter);\n this.contexts.set(msg._id, context);\n const result = await this.handleDeviceAction(action.deviceId, action.actionId, context, {\n value: action.value,\n });\n this.contexts.delete(msg._id);\n context.sendFinalResult(result);\n return;\n }\n case 'dm:deviceControl': {\n const control = msg.message;\n const context = new MessageContext(msg, this.adapter);\n this.contexts.set(msg._id, context);\n const result = await this.handleDeviceControl(control.deviceId, control.controlId, control.state, context);\n this.contexts.delete(msg._id);\n context.sendControlResult(control.deviceId, control.controlId, result);\n return;\n }\n case 'dm:deviceControlState': {\n const control = msg.message;\n const context = new MessageContext(msg, this.adapter);\n this.contexts.set(msg._id, context);\n const result = await this.handleDeviceControlState(control.deviceId, control.controlId, context);\n this.contexts.delete(msg._id);\n context.sendControlResult(control.deviceId, control.controlId, result);\n return;\n }\n case 'dm:actionProgress': {\n const { origin } = msg.message;\n const context = this.contexts.get(origin);\n if (!context) {\n this.log.warn(`Unknown message origin: ${origin}`);\n this.sendReply({ error: 'Unknown action origin' }, msg);\n return;\n }\n context.handleProgress(msg);\n return;\n }\n }\n }\n convertActions(actions) {\n if (!actions) {\n return undefined;\n }\n // detect duplicate IDs\n const ids = new Set();\n actions.forEach(a => {\n if (ids.has(a.id)) {\n throw new Error(`Action ID ${a.id} is used twice, this would lead to unexpected behavior`);\n }\n ids.add(a.id);\n });\n // remove handler function to send it as JSON\n return actions.map((a) => (Object.assign(Object.assign({}, a), { handler: undefined, disabled: !a.handler })));\n }\n convertControls(controls) {\n if (!controls) {\n return undefined;\n }\n // detect duplicate IDs\n const ids = new Set();\n controls.forEach(a => {\n if (ids.has(a.id)) {\n throw new Error(`Control ID ${a.id} is used twice, this would lead to unexpected behavior`);\n }\n ids.add(a.id);\n });\n // remove handler function to send it as JSON\n return controls.map((a) => (Object.assign(Object.assign({}, a), { handler: undefined, getStateHandler: undefined })));\n }\n sendReply(reply, msg) {\n this.adapter.sendTo(msg.from, msg.command, reply, msg.callback);\n }\n}\nexports.DeviceManagement = DeviceManagement;\nclass MessageContext {\n constructor(msg, adapter) {\n this.adapter = adapter;\n this.hasOpenProgressDialog = false;\n this.lastMessage = msg;\n }\n showMessage(text) {\n this.checkPreconditions();\n const promise = new Promise(resolve => {\n this.progressHandler = () => resolve();\n });\n this.send('message', {\n message: text,\n });\n return promise;\n }\n showConfirmation(text) {\n this.checkPreconditions();\n const promise = new Promise(resolve => {\n this.progressHandler = msg => resolve(!!msg.confirm);\n });\n this.send('confirm', {\n confirm: text,\n });\n return promise;\n }\n showForm(schema, options) {\n this.checkPreconditions();\n const promise = new Promise(resolve => {\n this.progressHandler = msg => resolve(msg.data);\n });\n this.send('form', {\n form: Object.assign({ schema }, options),\n });\n return promise;\n }\n openProgress(title, options) {\n this.checkPreconditions();\n this.hasOpenProgressDialog = true;\n const dialog = {\n update: (update) => {\n const promise = new Promise(resolve => {\n this.progressHandler = () => resolve();\n });\n this.send('progress', {\n progress: Object.assign(Object.assign(Object.assign({ title }, options), update), { open: true }),\n }, true);\n return promise;\n },\n close: () => {\n const promise = new Promise(resolve => {\n this.progressHandler = () => {\n this.hasOpenProgressDialog = false;\n resolve();\n };\n });\n this.send('progress', {\n progress: { open: false },\n });\n return promise;\n },\n };\n const promise = new Promise(resolve => {\n this.progressHandler = () => resolve(dialog);\n });\n this.send('progress', {\n progress: Object.assign(Object.assign({ title }, options), { open: true }),\n }, true);\n return promise;\n }\n sendFinalResult(result) {\n this.send('result', {\n result,\n });\n }\n sendControlResult(deviceId, controlId, result) {\n if (typeof result === 'object' && 'error' in result) {\n this.send('result', {\n result: {\n error: result.error,\n deviceId,\n controlId,\n },\n });\n }\n else {\n this.send('result', {\n result: {\n state: result,\n deviceId,\n controlId,\n },\n });\n }\n }\n handleProgress(message) {\n const currentHandler = this.progressHandler;\n if (currentHandler && typeof message.message !== 'string') {\n this.lastMessage = message;\n this.progressHandler = undefined;\n currentHandler(message.message);\n }\n }\n checkPreconditions() {\n if (this.hasOpenProgressDialog) {\n throw new Error(\"Can't show another dialog while a progress dialog is open. Please call 'close()' on the dialog before opening another dialog.\");\n }\n }\n send(type, message, doNotClose) {\n if (!this.lastMessage) {\n throw new Error(\"No outstanding message, can't send a new one\");\n }\n this.adapter.sendTo(this.lastMessage.from, this.lastMessage.command, Object.assign(Object.assign({}, message), { type, origin: this.lastMessage.message.origin || this.lastMessage._id }), this.lastMessage.callback);\n if (!doNotClose) {\n // \"progress\" is exception. It will be closed with \"close\" flag\n this.lastMessage = undefined;\n }\n }\n}\nexports.MessageContext = MessageContext;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./DeviceManagement\"), exports);\n// don't export * from \"./MessageContext\" as it is private\n__exportStar(require(\"./types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ACTIONS = void 0;\n/** Reserved action names */\nexports.ACTIONS = {\n /** This action will be called when user clicks on connection icon */\n STATUS: 'status',\n /** This action will be called when the user clicks on enabled/disabled icon. The enabled/disabled icon will be shown only if the node status has \"enabled\" flag set to false or true */\n ENABLE_DISABLE: 'enable/disable',\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorCodes = void 0;\nvar ErrorCodes;\n(function (ErrorCodes) {\n ErrorCodes[ErrorCodes[\"E_INSTANCE_ACTION_NOT_INITIALIZED\"] = 101] = \"E_INSTANCE_ACTION_NOT_INITIALIZED\";\n ErrorCodes[ErrorCodes[\"E_INSTANCE_ACTION_UNKNOWN\"] = 102] = \"E_INSTANCE_ACTION_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_INSTANCE_ACTION_NO_HANDLER\"] = 103] = \"E_INSTANCE_ACTION_NO_HANDLER\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_ACTION_NOT_INITIALIZED\"] = 201] = \"E_DEVICE_ACTION_NOT_INITIALIZED\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_ACTION_DEVICE_UNKNOWN\"] = 202] = \"E_DEVICE_ACTION_DEVICE_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_ACTION_UNKNOWN\"] = 203] = \"E_DEVICE_ACTION_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_ACTION_NO_HANDLER\"] = 204] = \"E_DEVICE_ACTION_NO_HANDLER\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_CONTROL_NOT_INITIALIZED\"] = 301] = \"E_DEVICE_CONTROL_NOT_INITIALIZED\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_CONTROL_DEVICE_UNKNOWN\"] = 302] = \"E_DEVICE_CONTROL_DEVICE_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_CONTROL_UNKNOWN\"] = 303] = \"E_DEVICE_CONTROL_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_CONTROL_NO_HANDLER\"] = 304] = \"E_DEVICE_CONTROL_NO_HANDLER\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_GET_STATE_NOT_INITIALIZED\"] = 401] = \"E_DEVICE_GET_STATE_NOT_INITIALIZED\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_GET_STATE_DEVICE_UNKNOWN\"] = 402] = \"E_DEVICE_GET_STATE_DEVICE_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_GET_STATE_UNKNOWN\"] = 403] = \"E_DEVICE_GET_STATE_UNKNOWN\";\n ErrorCodes[ErrorCodes[\"E_DEVICE_GET_STATE_NO_HANDLER\"] = 404] = \"E_DEVICE_GET_STATE_NO_HANDLER\";\n})(ErrorCodes || (exports.ErrorCodes = ErrorCodes = {}));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ACTIONS = void 0;\n__exportStar(require(\"./errorCodes\"), exports);\nvar base_1 = require(\"./base\");\nObject.defineProperty(exports, \"ACTIONS\", { enumerable: true, get: function () { return base_1.ACTIONS; } });\n"],"names":["TooltipButton","props","tooltip","label","disabled","Icon","onClick","text","_jsx","Typography","variant","style","marginLeft","children","Tooltip","title","slotProps","popper","sx","pointerEvents","_jsxs","IconButton","size","getFaIcon","icon","color","iconStyle","split","map","s","trim","filter","includes","Delete","Edit","Refresh","Add","QrCode","Wifi","WifiOff","Bluetooth","BluetoothDisabled","Visibility","Search","LinkOff","LinkIcon","NotListedLocation","PlayArrow","Stop","Pause","QuestionMark","getIconByName","name","altName","FastForward","FastRewind","Lightbulb","Fluorescent","WbIncandescent","Power","Settings","Group","Person","Info","Article","renderControlIcon","action","colors","value","_action$icon","_action$icon2","_action$iconOn","_action$icon3","colorOn","state","primary","secondary","startsWith","iconOn","src","id","renderActionIcon","_action$icon4","_action$icon5","_action$icon6","language","getTranslation","noTranslation","I18n","getLanguage","en","t","DeviceActionButton","_action$description","deviceId","refresh","deviceHandler","description","undefined","DeviceControlComponent","Component","constructor","_props$control$state","_props$control$state2","super","stateHandler","async","this","control","stateId","newState","controlStateHandler","ts","setState","val","componentDidMount","mayBePromise","socket","subscribeState","Promise","componentWillUnmount","unsubscribeState","getDerivedStateFromProps","_props$control$state3","_props$control$state4","sendControl","result","controlHandler","renderButton","_this$props$control$d","Button","startIcon","Fab","renderSwitch","_this$props$control$d2","Switch","checked","onChange","e","target","getColor","type","renderSelect","renderSlider","renderColor","renderIcon","_this$props$control$d3","colorProps","width","height","minHeight","render","HANDLE_SIZE","sw","display","alignItems","cursor","position","opacity","stopPropagation","preventDefault","borderRadius","backgroundColor","theme","palette","main","top","left","WIDTH_SMALL","WIDTH","transition","boxShadow","labelOn","labelOff","gap","styles","DeviceStatus","status","connection","iconStyleOK","fill","iconStyleNotOK","iconStyleWarning","iconStyleUnknown","batteryIconTooltip","battery","BatteryFullIcon","Battery90Icon","Battery80Icon","Battery60Icon","Battery50Icon","Battery30Icon","Battery20Icon","BatteryAlertIcon","disability","enabled","_Fragment","flexGrow","flexDirection","disableEnableAction","connectionSymbol","connectionType","IconConnectionWifi","IconConnectionNoWifi","IconConnectionBluetooth","IconConnectionNoBluetooth","IconConnectionLan","ThreadIcon","ZWaveIcon","ZigBeeIcon","LinkOffIcon","connectionIcon","statusAction","concat","rssi","NetworkCheckIcon","fontSize","margin","BatteryCharging50Icon","marginRight","warning","WarningIcon","JsonConfig","_props$socket$systemC","_props$socket$systemC2","instanceId","schema","data","error","setError","useState","adapterName","instance","JsonConfigComponent","expertMode","parseInt","onError","_data","embedded","themeName","themeType","isFloatComma","systemConfig","common","dateFormat","params","manufacturer","model","onImageSelect","uploadImagesToInstance","zIndex","accept","event","files","length","file","reader","FileReader","onload","img","Image","canvas","document","createElement","ctx","getContext","drawImage","resizedImage","toDataURL","fileName","base64Data","replace","response","writeFile64","console","log","JSON","stringify","readAsDataURL","NoImageIcon","viewBox","className","d","getText","DeviceCard","details","loadDetails","catch","copyToClipboard","textToCopy","device","Utils","alert","open","showControlDialog","fetchIcon","lang","readFile","mimeType","_unused","sendTo","renderDialog","Dialog","maxWidth","onClose","DialogContent","DialogActions","alive","autoFocus","renderControlDialog","_this$props$device$co","DialogTitle","right","CloseIcon","controls","renderControls","_this$props$device$co2","_this$props$device$co3","_this$props$device$co4","firstControl","ControlIcon","renderActions","_this$props$device$ac","actions","a","ACTIONS","STATUS","ENABLE_DISABLE","renderSmall","hasDetails","Array","isArray","IconDeviceType","Card","minWidth","CardHeader","invertColor","contrastText","avatar","DeviceImageUpload","imageData","MoreVertIcon","subheader","CardContent","background","padding","i","_this$props$device$ac2","_this$props$device$ac3","DeviceStatusComponent","find","textOverflow","overflow","CardActions","disableSpacing","renderBig","_this$state$details","_this$state$details$d","_this$state$details2","_this$state$details2$","_this$props$device$ac6","imgStyle","maxHeight","Paper","Box","paddingLeft","paddingRight","justifyContent","fontWeight","bottom","_this$props$device$ac4","_this$props$device$ac5","flex","paddingBottom","smallCards","Communication","responseTimeout","instanceHandler","sendActionToInstance","command","messageToSend","showSpinner","setTimeout","window","selectedInstance","clearTimeout","message","handleClose","origin","confirm","form","originalData","Object","keys","forEach","key","parse","_objectSpread","changed","progress","loadData","showToast","send","sendControlToInstance","warn","showConfirmation","showInput","inputValue","confirmation","inputBefore","actionId","defaultValue","controlId","registerHandler","loadDevices","loadInstanceInfos","renderMessageDialog","_this$state$message2","_this$state$message","hideBackdrop","DialogContentText","_this$state$message3","renderConfirmDialog","_this$state$confirm2","_this$state$confirm","_this$state$confirm3","_this$state$confirm4","renderSnackbar","Snackbar","autoHideDuration","getOkButton","button","_this$state$form","_button","_button2","_button3","_button4","_button5","_button6","_this$state$form2","_this$state$form3","getCancelButton","_button7","_button8","_button9","_button10","_button11","_button12","isClose","_this$state$form4","Close","renderFormDialog","_this$state$form6","_this$state$form7","_this$state$form8","buttons","push","_this$state$form5","fullWidth","renderProgressDialog","_this$state$progress","_this$state$progress2","LinearProgress","renderContent","renderSpinner","Backdrop","CircularProgress","renderConfirmationDialog","Check","onShowInputOk","_showInput$inputBefor","_showInput$inputBefor2","_showInput$inputBefor3","_showInput$inputBefor4","parseFloat","renderInputDialog","_this$state$showInput","okDisabled","allowEmptyValue","isFinite","TextField","htmlInput","min","max","step","input","endAdornment","InputAdornment","onKeyUp","FormControlLabel","Checkbox","FormControl","InputLabel","Select","options","item","MenuItem","gutterBottom","Grid2","container","spacing","Slider","_event","newValue","Input","Number","onBlur","_this$state$showInput2","_this$state$showInput3","inputProps","InstanceActionButton","DeviceList","lastPropsFilter","lastInstance","lastTriggerLoad","filterTimeout","aliveHandler","i18nInitialized","extendTranslations","de","ru","pt","nl","fr","it","es","pl","uk","zhCn","assign","devices","filteredDevices","instanceInfo","loading","groupKey","triggerLoad","stateAlive","getState","applyFilter","toLowerCase","handleFilterChange","renderGroups","groups","marginTop","renderValue","g","_this$state$instanceI","_this$state$instanceI2","emptyStyle","deviceGroups","list","group","count","FilterAltOff","_device$group","unknown","_device$group2","_device$group3","Toolbar","autoComplete","edge","Clear","defineProperty","exports","MessageContext","DeviceManagement","types_1","require","adapter","contexts","Map","on","onMessage","bind","getInstanceInfo","apiVersion","getDeviceDetails","handleInstanceAction","context","_a","code","ErrorCodes","E_INSTANCE_ACTION_NOT_INITIALIZED","handler","E_INSTANCE_ACTION_NO_HANDLER","E_INSTANCE_ACTION_UNKNOWN","handleDeviceAction","E_DEVICE_ACTION_NOT_INITIALIZED","get","E_DEVICE_ACTION_DEVICE_UNKNOWN","E_DEVICE_ACTION_NO_HANDLER","E_DEVICE_ACTION_UNKNOWN","handleDeviceControl","E_DEVICE_CONTROL_NOT_INITIALIZED","E_DEVICE_CONTROL_DEVICE_UNKNOWN","E_DEVICE_CONTROL_NO_HANDLER","E_DEVICE_CONTROL_UNKNOWN","handleDeviceControlState","E_DEVICE_GET_STATE_NOT_INITIALIZED","E_DEVICE_GET_STATE_DEVICE_UNKNOWN","getStateHandler","E_DEVICE_GET_STATE_NO_HANDLER","E_DEVICE_GET_STATE_UNKNOWN","obj","handleMessage","msg","debug","sendReply","convertActions","deviceList","listDevices","reduce","has","Error","set","apiDeviceList","convertControls","from","callback","_id","delete","sendFinalResult","sendControlResult","handleProgress","ids","Set","add","reply","hasOpenProgressDialog","lastMessage","showMessage","checkPreconditions","promise","resolve","progressHandler","showForm","openProgress","dialog","update","close","currentHandler","doNotClose","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__exportStar","p","prototype","hasOwnProperty","call","base_1"],"sourceRoot":""}