iobroker.admin 7.1.2 → 7.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/adminWww/asset-manifest.json +13 -13
- package/adminWww/index.html +1 -1
- package/adminWww/static/css/{3210.f6c8a5fc.chunk.css → 4684.f5525d8f.chunk.css} +2 -2
- package/adminWww/static/css/4684.f5525d8f.chunk.css.map +1 -0
- package/adminWww/static/js/2534.89c71e34.chunk.js +2 -0
- package/adminWww/static/js/2534.89c71e34.chunk.js.map +1 -0
- package/adminWww/static/js/4684.e5f7632b.chunk.js +2 -0
- package/adminWww/static/js/4684.e5f7632b.chunk.js.map +1 -0
- package/adminWww/static/js/5056.9247882b.chunk.js +3 -0
- package/adminWww/static/js/5056.9247882b.chunk.js.map +1 -0
- package/adminWww/static/js/{8038.ae8b7862.chunk.js → 8038.64137a64.chunk.js} +2 -2
- package/adminWww/static/js/8038.64137a64.chunk.js.map +1 -0
- package/adminWww/static/js/{main.423e60b6.js → main.d3fd9aec.js} +2 -2
- package/adminWww/static/js/{main.423e60b6.js.map → main.d3fd9aec.js.map} +1 -1
- package/io-package.json +14 -14
- package/package.json +4 -13
- package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +0 -1
- package/adminWww/static/js/2534.d8fd195b.chunk.js +0 -2
- package/adminWww/static/js/2534.d8fd195b.chunk.js.map +0 -1
- package/adminWww/static/js/3210.1be726e7.chunk.js +0 -2
- package/adminWww/static/js/3210.1be726e7.chunk.js.map +0 -1
- package/adminWww/static/js/6539.0a444811.chunk.js +0 -3
- package/adminWww/static/js/6539.0a444811.chunk.js.map +0 -1
- package/adminWww/static/js/8038.ae8b7862.chunk.js.map +0 -1
- /package/adminWww/static/js/{6539.0a444811.chunk.js.LICENSE.txt → 5056.9247882b.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/js/4684.e5f7632b.chunk.js","mappings":"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","sources":["AdminUtils.tsx","components/ContextWrapper.tsx","components/NotificationMessage.tsx","dialogs/NotificationsDialog.tsx","dialogs/CommandDialog.tsx","helpers/cardSort.tsx","components/DragWrapper.tsx","components/DrawerItem.tsx","components/CustomDragLayer.tsx","components/CustomPopper.tsx","components/Drawer.tsx","components/Connecting.tsx","components/Wizard/WizardPasswordTab.tsx","components/LicenseTexts.tsx","components/Wizard/WizardLicenseTab.tsx","assets/longLogo.svg","assets/pin.svg","components/Wizard/WizardSettingsTab.tsx","components/Wizard/WizardAuthSSLTab.tsx","components/Wizard/WizardPortForwarding.tsx","components/Wizard/WizardAdaptersTab.tsx","dialogs/WizardDialog.tsx","dialogs/SystemSettingsTabs/BaseSystemSettingsDialog.tsx","dialogs/SystemSettingsTabs/MainSettingsDialog.tsx","dialogs/SystemSettingsTabs/RepositoriesDialog.tsx","dialogs/SystemSettingsTabs/LicensesDialog.tsx","dialogs/SystemSettingsTabs/CertificatesDialog.tsx","dialogs/SystemSettingsTabs/SSLDialog.tsx","dialogs/SystemSettingsTabs/ACLDialog.tsx","dialogs/SystemSettingsTabs/StatisticsDialog.tsx","dialogs/SystemSettingsDialog.tsx","login/Login.tsx","dialogs/ExpertModeDialog.tsx","dialogs/HostWarningDialog.tsx","Workers/LogsWorker.tsx","Workers/InstancesWorker.tsx","Workers/HostsWorker.tsx","Workers/AdaptersWorker.tsx","Workers/ObjectsWorker.tsx","dialogs/GenerateInputsModal.tsx","helpers/hooks/useStateLocal.tsx","dialogs/DiscoveryDialog.tsx","App.tsx","bootstrap.tsx","components/Command.tsx","components/Editor.tsx","components/HostSelectors.tsx","components/IsVisible.tsx","dialogs/LicenseDialog.tsx","dialogs/NewsAdminDialog.tsx","dialogs/SlowConnectionWarningDialog.tsx","helpers/MobileDialog.tsx","helpers/utils.ts","tabs/CustomTab.tsx"],"sourcesContent":["import semver from 'semver';\nimport { type Translate } from '@iobroker/adapter-react-v5';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nconst ANSI_RESET = 0;\nconst ANSI_RESET_COLOR = 39;\nconst ANSI_RESET_BG_COLOR = 49;\nconst ANSI_BOLD = 1;\nconst ANSI_RESET_BOLD = 22;\n\nexport interface Style {\n color?: string;\n backgroundColor?: string;\n fontWeight?: string;\n}\n\nconst STYLES: Record<string, Style> = {\n 30: { color: 'black' }, // ANSI_BLACK\n 31: { color: 'red' }, // ANSI_RED\n 32: { color: 'green' }, // ANSI_GREEN\n 33: { color: 'yellow' }, // ANSI_YELLOW\n 34: { color: 'blue' }, // ANSI_BLUE\n 35: { color: 'purple' }, // ANSI_PURPLE\n 36: { color: 'cyan' }, // ANSI_CYAN\n 37: { color: 'white' }, // ANSI_WHITE\n\n 90: { color: 'grey' }, // ANSI_BRIGHT_BLACK\n 91: { color: 'lightred' }, // ANSI_BRIGHT_RED\n 92: { color: 'lightgreen' }, // ANSI_BRIGHT_GREEN\n 93: { color: 'lightyellow' }, // ANSI_BRIGHT_YELLOW\n 94: { color: 'lightblue' }, // ANSI_BRIGHT_BLUE\n 95: { color: 'lightpurple' }, // ANSI_BRIGHT_PURPLE\n 96: { color: 'lightcyan' }, // ANSI_BRIGHT_CYAN\n 97: { color: 'white' }, // ANSI_BRIGHT_WHITE\n\n 40: { backgroundColor: 'black' }, // ANSI_BG_BLACK\n 41: { backgroundColor: 'red' }, // ANSI_BG_RED\n 42: { backgroundColor: 'green' }, // ANSI_BG_GREEN\n 43: { backgroundColor: 'yellow' }, // ANSI_BG_YELLOW\n 44: { backgroundColor: 'blue' }, // ANSI_BG_BLUE\n 45: { backgroundColor: 'purple' }, // ANSI_BG_PURPLE\n 46: { backgroundColor: 'cyan' }, // ANSI_BG_CYAN\n 47: { backgroundColor: 'white' }, // ANSI_BG_WHITE\n\n 100: { backgroundColor: 'grey' }, // ANSI_BRIGHT_BG_BLACK\n 101: { backgroundColor: 'lightred' }, // ANSI_BRIGHT_BG_RED\n 102: { backgroundColor: 'lightgreen' }, // ANSI_BRIGHT_BG_GREEN\n 103: { backgroundColor: 'lightyellow' }, // ANSI_BRIGHT_BG_YELLOW\n 104: { backgroundColor: 'lightblue' }, // ANSI_BRIGHT_BG_BLUE\n 105: { backgroundColor: 'lightpurple' }, // ANSI_BRIGHT_BG_PURPLE\n 106: { backgroundColor: 'lightcyan' }, // ANSI_BRIGHT_BG_CYAN\n 107: { backgroundColor: 'white' }, // ANSI_BRIGHT_BG_WHITE\n};\n\nclass AdminUtils {\n /**\n * Perform JSON parse/stringify with type inference\n *\n * @param obj the object to clone\n */\n static deepClone<T extends Record<string, any>>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n\n /**\n * Format bytes to MB or GB\n *\n * @param bytes the number of bytes\n */\n static formatRam(bytes: number): string {\n const GB = Math.floor((bytes / (1024 * 1024 * 1024)) * 10) / 10;\n bytes %= 1024 * 1024 * 1024;\n const MB = Math.floor((bytes / (1024 * 1024)) * 10) / 10;\n let text = '';\n\n if (GB > 1) {\n text += `${GB} GB`;\n } else {\n text += `${MB} MB`;\n }\n\n return text;\n }\n\n static formatSpeed(mhz: number): string {\n return `${mhz} MHz`;\n }\n\n static formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n static getFileExtension(fileName: string): string | null {\n const pos = fileName.lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n static invertColor(hex: string, bw: boolean): string {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n }\n // invert color components\n const finalR = (255 - r).toString(16);\n const finalG = (255 - g).toString(16);\n const finalB = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${finalR.padStart(2, '0')}${finalG.padStart(2, '0')}${finalB.padStart(2, '0')}`;\n }\n\n /**\n * Format number in seconds to time text\n *\n * @param seconds the number of seconds\n * @param t i18n.t function\n */\n static formatSeconds(seconds: number, t: Translate): string {\n const days = Math.floor(seconds / (3600 * 24));\n let minutesRes: string;\n let secondsRes: string;\n let hoursRes: string;\n\n seconds %= 3600 * 24;\n const hours = Math.floor(seconds / 3600);\n\n if (hours < 10) {\n hoursRes = `0${hours}`;\n } else {\n hoursRes = hours.toString();\n }\n seconds %= 3600;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutesRes = `0${minutes}`;\n } else {\n minutesRes = minutes.toString();\n }\n\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n secondsRes = `0${seconds}`;\n } else {\n secondsRes = seconds.toString();\n }\n\n let text = '';\n if (days) {\n text += `${days} ${t('daysShortText')} `;\n }\n text += `${hoursRes}:${minutesRes}:${secondsRes}`;\n\n return text;\n }\n\n // internal use\n static _replaceLink(\n link: string,\n objects: Record<string, ioBroker.InstanceObject>,\n adapterInstance: string,\n attr: string,\n placeholder: string,\n hosts: Record<string, ioBroker.HostObject>,\n hostname: string,\n adminInstance: string,\n ): string {\n if (attr === 'protocol') {\n attr = 'secure';\n }\n\n try {\n const object = objects[`system.adapter.${adapterInstance}`];\n\n if (link && object) {\n if (attr === 'secure') {\n link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');\n } else {\n let value = object.native[attr];\n // workaround for port\n if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {\n if (object.native.secure === true) {\n value = 443;\n } else {\n value = 80;\n }\n }\n\n if (attr === 'bind' || attr === 'ip') {\n let ip = object.native.bind || object.native.ip;\n if (ip === '0.0.0.0') {\n ip = AdminUtils.getHostname(object, objects, hosts, hostname, adminInstance);\n }\n if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, ip || '');\n } else {\n link = link.replace(`%${placeholder}%`, ip || '');\n }\n } else if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, value);\n } else {\n link = link.replace(`%${placeholder}%`, value);\n }\n }\n } else {\n console.log(`Cannot get link ${attr}`);\n link = link.replace(`%${placeholder}%`, '');\n }\n } catch (error) {\n console.log(error);\n }\n return link;\n }\n\n static ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n }\n\n static findNetworkAddressOfHost(obj: ioBroker.HostObject, localIp: string): null | string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (AdminUtils.ip2int(localIp) & AdminUtils.ip2int(ip.netmask)) ===\n (AdminUtils.ip2int(ip.address) & AdminUtils.ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n }\n }\n }\n\n return hostIp;\n }\n\n static getHostname(\n instanceObj: ioBroker.InstanceObject,\n objects: Record<string, ioBroker.InstanceObject>,\n hosts: Record<string, ioBroker.HostObject>,\n currentHostname: string,\n adminInstance: string,\n ): string {\n if (!instanceObj || !instanceObj.common) {\n return null;\n }\n\n let hostname;\n // check if the adapter from the same host as admin\n const adminHost = objects[`system.adapter.${adminInstance}`]?.common?.host;\n if (instanceObj.common.host !== adminHost) {\n // find IP address\n const host = hosts[`system.host.${instanceObj.common.host}`];\n if (host) {\n const ip = AdminUtils.findNetworkAddressOfHost(host, currentHostname);\n if (ip) {\n hostname = ip;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n hostname = currentHostname;\n }\n\n return hostname;\n }\n\n /**\n * Convert the template link to string\n */\n static replaceLink(\n /** pattern for link */\n link: string,\n /** adapter name */\n adapter: string,\n /** adapter instance number */\n instance: number,\n context: {\n instances: Record<string, ioBroker.InstanceObject>;\n hostname: string;\n adminInstance: string;\n hosts: Record<string, ioBroker.HostObject>;\n },\n ): {\n url: string;\n port: number;\n instance?: string;\n }[] {\n const _urls: {\n url: string;\n port: number;\n instance?: string;\n }[] = [];\n let port: number;\n\n if (link) {\n const instanceObj = context.instances[`system.adapter.${adapter}.${instance}`];\n const native = instanceObj?.native || {};\n\n const placeholders = link.match(/%(\\w+)%/g);\n\n if (placeholders) {\n for (let p = 0; p < placeholders.length; p++) {\n let placeholder = placeholders[p];\n\n if (placeholder === '%ip%') {\n let ip: string = (native.bind || native.ip) as string;\n if (!ip || ip === '127.0.0.1' || ip === 'localhost' || ip === '0.0.0.0') {\n // Check host\n ip = AdminUtils.getHostname(\n instanceObj,\n context.instances,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));\n } else {\n link = link.replace('%ip%', ip || '');\n }\n } else if (placeholder === '%protocol%') {\n const protocolVal: string | boolean =\n native.secure === undefined ? native.protocol : native.secure;\n let protocol: 'http' | 'https';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 'https';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = 'http';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as 'http' | 'https';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%protocol%', protocol)));\n } else {\n link = link.replace('%protocol%', protocol);\n }\n } else if (placeholder === '%instance%') {\n link = link.replace('%instance%', instance.toString());\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%instance%', instance.toString())));\n } else {\n link = link.replace('%instance%', instance.toString());\n }\n } else {\n // remove %%\n placeholder = placeholder.replace(/%/g, '');\n\n if (placeholder.startsWith('native_')) {\n placeholder = placeholder.substring(7);\n }\n\n // like web.0_port or web_protocol\n if (!placeholder.includes('_')) {\n // if only one instance\n const adapterInstance = `${adapter}.${instance}`;\n if (_urls.length) {\n _urls.forEach(\n item =>\n (item.url = AdminUtils._replaceLink(\n item.url,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n )),\n );\n } else {\n link = AdminUtils._replaceLink(\n link,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;\n }\n } else {\n const [adapterInstance, attr] = placeholder.split('_');\n\n // if instance number not found\n if (!adapterInstance.match(/\\.[0-9]+$/)) {\n // list all possible instances\n let ids: string[];\n if (adapter === adapterInstance) {\n // take only this one instance and that's all\n ids = [`${adapter}.${instance}`];\n } else {\n ids = Object.keys(context.instances)\n .filter(\n id =>\n id.startsWith(`system.adapter.${adapterInstance}.`) &&\n context.instances[id].common.enabled,\n )\n .map(id => id.substring(15));\n\n // try to get disabled instances\n if (!ids.length) {\n ids = Object.keys(context.instances)\n .filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))\n .map(id => id.substring(15));\n }\n }\n\n for (const id of ids) {\n if (_urls.length) {\n const item = _urls.find(t => t.instance === id);\n if (item) {\n item.url = AdminUtils._replaceLink(\n item.url,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n } else {\n // add new\n const _link = AdminUtils._replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n _urls.push({ url: _link, port: _port, instance: id });\n }\n } else {\n const _link = AdminUtils._replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n _urls.push({ url: _link, port: _port, instance: id });\n }\n }\n } else {\n link = AdminUtils._replaceLink(\n link,\n context.instances,\n adapterInstance,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port as number;\n }\n }\n }\n }\n }\n }\n\n if (_urls.length) {\n return _urls;\n }\n return [{ url: link, port }];\n }\n\n static objectMap<Result = any, Value = any>(\n object: Record<string, Value>,\n callback: (res: Value, key: string) => Result,\n ): Result[] {\n const result: Result[] = [];\n for (const key in object) {\n result.push(callback(object[key], key));\n }\n return result;\n }\n\n static fixAdminUI(obj: Record<string, any>): void {\n if (obj?.common) {\n if (!obj.common.adminUI) {\n if (obj.common.noConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'none';\n } else if (obj.common.jsonConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'materialize';\n } else {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'html';\n }\n\n if (obj.common.jsonCustom) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n } else if (obj.common.supportCustoms) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n }\n\n if (obj.common.materializeTab && obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'materialize';\n } else if (obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'html';\n }\n\n if (obj.common.adminUI) {\n console.warn(\n `Please add to \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n } else {\n let changed = false;\n if (obj.common.materializeTab && obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'materialize';\n changed = true;\n }\n } else if (obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'html' && obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'html';\n changed = true;\n }\n }\n\n if (obj.common.jsonCustom || obj.common.supportCustoms) {\n if (obj.common.adminUI.custom !== 'json') {\n obj.common.adminUI.custom = 'json';\n changed = true;\n }\n }\n\n if (obj.common.noConfig) {\n if (obj.common.adminUI.config !== 'none') {\n obj.common.adminUI.config = 'none';\n changed = true;\n }\n } else if (obj.common.jsonConfig) {\n if (obj.common.adminUI.config !== 'json') {\n obj.common.adminUI.config = 'json';\n changed = true;\n }\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n if (obj.common.adminUI.config !== 'materialize') {\n if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'materialize';\n changed = true;\n }\n }\n } else if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'html';\n changed = true;\n }\n if (changed) {\n console.warn(\n `Please modify \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n }\n }\n }\n\n static parseColorMessage(text: string): string | { original: string; parts: { text: string; style: Style }[] } {\n if (text && (text.includes('\\u001b[') || text.includes('\\u001B['))) {\n // eslint-disable-next-line\n let m = text.match(/\\u001b\\[\\d+m/gi);\n if (m) {\n const original = text;\n const result = [];\n let style: Style = {};\n for (let i = 0; i < m.length; i++) {\n const pos = text.indexOf(m[i]);\n if (pos) {\n result.push({ text: text.substring(0, pos), style: { ...style } });\n }\n const code = parseInt(m[i].substring(2), 10);\n if (STYLES[code]) {\n Object.assign(style, STYLES[code]);\n } else if (ANSI_RESET_COLOR === code) {\n delete style.color;\n } else if (ANSI_RESET_BG_COLOR === code) {\n delete style.backgroundColor;\n } else if (ANSI_RESET_BOLD === code) {\n delete style.fontWeight;\n } else if (ANSI_BOLD === code) {\n style.fontWeight = 'bold';\n } else if (ANSI_RESET === code) {\n style = {};\n }\n text = text.substring(m[i].length + pos);\n }\n if (text) {\n result.push({ text, style: { ...style } });\n }\n\n return { original, parts: result };\n }\n return text;\n }\n return text;\n }\n\n static PASSWORD_ERROR_LENGTH =\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters';\n\n static PASSWORD_ERROR_NOT_EQUAL = 'Repeat password is not equal with password';\n\n static PASSWORD_ERROR_EMPTY = 'Empty password is not allowed';\n\n static PASSWORD_SET = '***********';\n\n /** The languages for which docs are generated */\n static SUPPORTED_DOC_LANGUAGES: ioBroker.Languages[] = ['en', 'de', 'ru', 'zh-cn'];\n\n static checkPassword(password: string, passwordRepeat?: string): false | string {\n password = password || '';\n passwordRepeat = passwordRepeat || '';\n if (\n password &&\n passwordRepeat &&\n password !== AdminUtils.PASSWORD_SET &&\n passwordRepeat !== AdminUtils.PASSWORD_SET\n ) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n if (password !== passwordRepeat) {\n return AdminUtils.PASSWORD_ERROR_NOT_EQUAL;\n }\n return false;\n }\n if (password && password !== AdminUtils.PASSWORD_SET) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (passwordRepeat && passwordRepeat !== AdminUtils.PASSWORD_SET) {\n if (\n passwordRepeat.length < 8 ||\n !passwordRepeat.match(/\\d/) ||\n !passwordRepeat.match(/[a-z]/) ||\n !passwordRepeat.match(/[A-Z]/)\n ) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (password === AdminUtils.PASSWORD_SET || passwordRepeat === AdminUtils.PASSWORD_SET) {\n return false;\n }\n return AdminUtils.PASSWORD_ERROR_EMPTY;\n }\n\n /**\n * Get Link to adapter docs in given language\n *\n * @param options the adapter name without ioBroker. prefix and the language information\n * @param options.adapterName the adapter name without ioBroker. prefix\n * @param options.lang the language for the docs\n */\n static getDocsLinkForAdapter(options: { lang: ioBroker.Languages; adapterName: string }): string {\n const { adapterName } = options;\n let { lang } = options;\n\n if (!AdminUtils.SUPPORTED_DOC_LANGUAGES.includes(lang)) {\n lang = 'en';\n }\n\n return `https://www.iobroker.net/#${lang}/adapters/adapterref/iobroker.${adapterName}/README.md`;\n }\n\n static updateAvailable(oldVersion: string, newVersion: string): boolean {\n try {\n return semver.gt(newVersion, oldVersion) === true;\n } catch {\n console.warn(`[ADAPTERS] Cannot compare \"${newVersion}\" and \"${oldVersion}\"`);\n return false;\n }\n }\n\n static getText(word: ioBroker.StringOrTranslated, lang: ioBroker.Languages): string {\n if (typeof word === 'object') {\n if (!word) {\n return '';\n }\n return (word[lang] || word.en || '').toString();\n }\n\n return word ? word.toString() : '';\n }\n\n static clone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n}\n\nexport default AdminUtils;\n","import React, { createContext, useEffect, useMemo, useState, type JSX } from 'react';\n\nimport AdminUtils from '@/AdminUtils';\n\ntype MyContext = {\n hostsUpdate: number;\n adaptersUpdate: number;\n\n hosts: ioBroker.HostObject[] | null;\n repository: { [adapterName: string]: { icon: string; version: string } } | null;\n installed: { [adapterName: string]: { version: string; ignoreVersion?: string } } | null;\n};\n\nexport const ContextWrapper = createContext<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n});\n\nexport function ContextWrapperProvider({ children }: { children: JSX.Element[] | JSX.Element }): JSX.Element {\n const [stateContext, setState] = useState<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n });\n\n const setStateContext = useMemo(\n () => (obj: any) => {\n setState(prevState =>\n // If a full object is passed, replace it\n Object.keys(prevState).length === Object.keys(obj).length\n ? { ...obj }\n : // else merge the new object with the old one\n { ...prevState, ...obj },\n );\n },\n [setState],\n );\n\n useEffect(() => {\n if (stateContext.hosts) {\n const jsControllerVersion = stateContext.repository['js-controller'].version;\n let count = 0;\n stateContext.hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n setStateContext({ hostsUpdate: count });\n }\n\n if (stateContext.installed) {\n let count = 0;\n Object.keys(stateContext.installed).forEach(element => {\n const _installed = stateContext.installed[element];\n const adapter = stateContext.repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n setStateContext({ adaptersUpdate: count });\n }\n }, [setStateContext, stateContext.hosts, stateContext.installed, stateContext.repository]);\n\n return <ContextWrapper.Provider value={stateContext}>{children}</ContextWrapper.Provider>;\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, LinearProgress, Typography } from '@mui/material';\n\nimport {\n type AdminConnection,\n I18n,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n Utils,\n} from '@iobroker/adapter-react-v5';\nimport {\n type BackEndCommandGeneric,\n type BackEndCommandOpenLink,\n type ConfigItemPanel,\n JsonConfigComponent,\n} from '@iobroker/json-config';\n\nconst styles: Record<string, any> = {\n message: {\n position: 'relative',\n // justifyContent: 'space-between',\n display: 'block',\n width: '100%',\n // alignItems: 'center',\n // '@media screen and (max-width: 550px)': {\n // flexWrap: 'wrap',\n // },\n },\n offline: {\n position: 'relative',\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n opacity: 0.7,\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n timestamp: {\n color: 'text.secondary',\n position: 'absolute',\n top: 5,\n right: 25,\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n simpleMessage: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n mb: '10px',\n width: '100%',\n display: 'block',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n ml: 0,\n },\n },\n};\n\nexport interface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n/** Possible message severities */\nexport type Severity = 'notify' | 'info' | 'alert';\n\nexport interface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n /** Show button, that leads to this link */\n link?: {\n /**\n * - empty - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N\n * - `simpleText` - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N/<>simpleText>\n * - `#url` - URL = http://IP:8081/#url\n * - `http[s]://...` - URL = http[s]://...\n */\n url?: string;\n /** Button text. Default is \"open\" */\n text?: ioBroker.Translated;\n /** Target */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_blank' | '_self' | string;\n /** base64 icon */\n icon?: string;\n /** CSS style of the button */\n style?: Record<string, string>;\n /** Button style. Default is `contained` */\n variant?: 'outlined' | 'text' | 'contained';\n };\n instances: Record<string, InstanceMessage>;\n}\n\n/* TODO: Replace it later with ioBroker.NotificationAction */\n/** Structure for notification actions */\ninterface NotificationAction {\n /** This message will be shown if instance is offline */\n offlineMessage?: ioBroker.StringOrTranslated;\n /** any other data required for instance to show the dynamic GUI in the notification */\n [other: string]: any;\n}\n\ninterface NotificationMessageProps {\n // entry: Message;\n instanceId: string;\n message: { message: string; ts: number; contextData?: NotificationAction };\n // onClose: () => void;\n onLink: (linkCommand: BackEndCommandOpenLink) => void;\n dateFormat: string;\n socket: AdminConnection;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n isFloatComma: boolean;\n}\n\ninterface NotificationMessageState {\n alive: boolean;\n data: Record<string, any> | null;\n schema: ConfigItemPanel | null;\n error?: boolean;\n updateData: number;\n}\n\nclass NotificationMessage extends Component<NotificationMessageProps, NotificationMessageState> {\n private lastAlive: number = 0;\n\n constructor(props: NotificationMessageProps) {\n super(props);\n\n this.state = {\n alive: false,\n data: {},\n schema: null,\n updateData: 0,\n };\n }\n\n async componentDidMount(): Promise<void> {\n if (this.props.message.contextData) {\n // request GUI for this notification\n const alive = await this.props.socket.getState(`${this.props.instanceId}.alive`);\n this.lastAlive = alive?.val ? Date.now() : 0;\n this.setState({ alive: !!alive?.val }, () => this.getGui());\n await this.props.socket.subscribeState(`${this.props.instanceId}.alive`, this.onAliveChanged);\n }\n }\n\n getGui(): void {\n if (this.state.alive && this.props.message.contextData) {\n const contextData = JSON.parse(JSON.stringify(this.props.message.contextData));\n /** remove the offline message from contextData */\n if (contextData.offlineMessage) {\n delete contextData.offlineMessage;\n }\n // request GUI for this notification\n void this.props.socket\n .sendTo(\n this.props.instanceId.replace('system.adapter.', ''),\n 'admin:getNotificationSchema',\n contextData,\n )\n .then((result: { data: Record<string, any> | null; schema: ConfigItemPanel | null }) => {\n if (result) {\n this.setState({\n schema: result.schema,\n data: result.data || this.state.data,\n updateData: this.state.updateData + 1,\n });\n }\n });\n }\n }\n\n onAliveChanged = (id: string, state: ioBroker.State): void => {\n if (id === `${this.props.instanceId}.alive` && state && this.state.alive !== !!state.val) {\n if (state.val) {\n if (this.lastAlive && Date.now() - this.lastAlive < 500) {\n // ignore too fast changes\n return;\n }\n this.lastAlive = Date.now();\n }\n this.setState({ alive: !!state.val }, () => this.getGui());\n }\n };\n\n renderCustomGui(): JSX.Element | null {\n if (!this.state.schema || !this.state.data || !this.state.alive) {\n if (this.props.message.contextData) {\n if (!this.state.alive) {\n if (this.props.message.contextData.offlineMessage) {\n const text =\n typeof this.props.message.contextData.offlineMessage === 'string'\n ? this.props.message.contextData.offlineMessage\n : this.props.message.contextData.offlineMessage[this.props.socket.systemLang] ||\n this.props.message.contextData.offlineMessage.en;\n\n return <Box sx={styles.offline}>{Utils.renderTextWithA(text)}</Box>;\n }\n return <Typography>{I18n.t('Instance is not alive')}</Typography>;\n }\n return <LinearProgress />;\n }\n\n return null;\n }\n\n const [, , adapterName, instance] = this.props.instanceId.split('.');\n\n return (\n <>\n {this.state.error && <div style={{ color: 'red' }}>{this.state.error}</div>}\n <JsonConfigComponent\n style={{ width: '100%' }}\n updateData={this.state.updateData}\n socket={this.props.socket}\n adapterName={adapterName}\n instance={parseInt(instance, 10)}\n schema={this.state.schema}\n data={this.state.data}\n onError={(error?: boolean) => this.setState({ error })}\n onChange={(_data: Record<string, any>) => {\n // ignore for now\n }}\n onBackEndCommand={(command?: BackEndCommandGeneric) => {\n if (command.schema) {\n this.setState({ schema: command.schema, data: command.data || this.state.data });\n }\n\n if (command.command === 'refresh' || command.refresh) {\n this.getGui();\n }\n if (command.command === 'link') {\n this.props.onLink(command as BackEndCommandOpenLink);\n }\n }}\n embedded\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 renderSimpleMessage(): JSX.Element | null {\n return this.props.message.message ? (\n <Box sx={styles.simpleMessage}>{Utils.renderTextWithA(this.props.message.message)}</Box>\n ) : null;\n }\n\n render(): JSX.Element {\n return (\n <Typography\n component=\"div\"\n sx={styles.message}\n >\n <Box sx={styles.timestamp}>{new Date(this.props.message.ts).toLocaleString()}</Box>\n {this.renderSimpleMessage()}\n {this.renderCustomGui()}\n </Typography>\n );\n }\n}\n\nexport default NotificationMessage;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n Tooltip,\n} from '@mui/material';\n\nimport {\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type ThemeType, type IobTheme, type AdminConnection, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport type { BackEndCommandOpenLink } from '@iobroker/json-config/src';\n\nimport NotificationMessage, { type Message, type Severity } from '../components/NotificationMessage';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n button: {\n paddingTop: 5,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n // background: 'white',\n zIndex: 3,\n },\n img2: {\n width: 25,\n height: 25,\n margin: 'auto 0',\n mr: '10px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n width: '100%',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n p: '8px',\n '@media screen and (max-width: 550px)': {\n p: '4px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n m: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\ninterface StatusOptions {\n /** Severity of the message */\n severity?: Severity;\n /** If dark mode enabled */\n isDark: boolean;\n}\n\nfunction Status({ severity, isDark, ...props }: StatusOptions): JSX.Element {\n if (severity === 'notify') {\n return (\n <BellIcon\n color={isDark ? 'primary' : 'secondary'}\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n}\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n index: string;\n style: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element[];\n}\n\nconst TabPanel = ({ children, index, sxBox, style }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={style}\n >\n <Box sx={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </div>\n);\n\ninterface NotificationDialogOptions {\n notifications: {\n [host: string]: {\n result: {\n [scope: string]: {\n categories: {\n [category: string]: Message;\n };\n description: ioBroker.Translated;\n name: ioBroker.Translated;\n };\n };\n };\n };\n onClose: () => void;\n ackCallback: (host: string, name: string) => void;\n dateFormat: string;\n isFloatComma: boolean;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n instances: Record<string, ioBroker.InstanceObject>;\n socket: AdminConnection;\n}\n\ninterface MessagesPerScope {\n [scope: string]: Record<string, Message & { host: string }>;\n}\n\nfunction onLink(linkCommand: BackEndCommandOpenLink, instanceId: string, onClose: () => void): void {\n let target;\n let url = '';\n if (!linkCommand.url) {\n url = `#tab-instances/config/${instanceId}`;\n target = linkCommand.target || '_self';\n } else if (linkCommand.url.toString().startsWith('#')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.toString().startsWith('/')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.startsWith('http://') || linkCommand.url.startsWith('https://')) {\n target = linkCommand.target || '_blank';\n url = linkCommand.url;\n } else {\n url = `#tab-instances/config/${instanceId}/${linkCommand.url}`;\n target = linkCommand.target || '_self';\n }\n if (target === '_self') {\n // close dialog\n setTimeout(\n (_url: string) => {\n if (_url.startsWith('#')) {\n window.location.hash = _url;\n } else if (_url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n } else if (_url.startsWith('http://') || _url.startsWith('https://')) {\n window.location.href = _url;\n }\n },\n 100,\n url,\n );\n\n if (linkCommand.close && typeof onClose === 'function') {\n onClose();\n }\n } else {\n if (url.startsWith('#')) {\n url = `${window.location.protocol}:${window.location.host}${window.location.pathname}${url}`;\n } else if (url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n }\n\n window.open(url, target);\n }\n}\n\nconst NotificationsDialog = ({\n notifications,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n themeName,\n theme,\n isFloatComma,\n socket,\n}: NotificationDialogOptions): JSX.Element => {\n const notificationManagerInstalled = !!Object.values(instances).find(\n instance => instance.common.name === 'notification-manager',\n );\n\n const messages: MessagesPerScope = {};\n\n for (const [host, hostDetails] of Object.entries(notifications)) {\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const [category, categoryDetails] of Object.entries(scopeDetails.categories)) {\n messages[scope] = messages[scope] || {};\n messages[scope][category] = { ...categoryDetails, host };\n }\n }\n }\n\n const [panel, setPanel] = useState('');\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n\n const handleChange = (_event: React.SyntheticEvent, newValue: string): void => {\n setAutoCollapse(true);\n setPanel(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion = (panelName: string) => (_event: unknown, isExpanded: boolean) =>\n setExpanded(isExpanded ? panelName : '');\n\n const black = themeType === 'dark';\n\n let firstKey = '';\n Object.keys(messages).map(scope =>\n Object.keys(messages[scope]).map(name => (firstKey = firstKey || `${scope}--${name}`)),\n );\n // if a panel does not exist, set it to the first one\n if (panel) {\n const [scope, name] = panel.split('--');\n if (!messages[scope]) {\n setPanel(firstKey);\n } else if (!messages[scope][name]) {\n // find the first message in this scope\n let found = false;\n for (const key in messages[scope]) {\n found = true;\n setPanel(`${scope}--${key}`);\n break;\n }\n if (!found) {\n setPanel(firstKey);\n }\n }\n }\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <BellIcon\n sx={{ color: 'primary.main' }}\n style={{\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Notifications')}\n\n {!notificationManagerInstalled ? (\n <Tooltip\n sx={{ position: 'absolute', right: 24, color: 'text.primary' }}\n title={I18n.t(\n 'Tip: Use the \"notification-manager\" adapter to receive notifications automatically via messaging adapters.',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <InfoIcon />\n </Tooltip>\n ) : null}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={panel || firstKey}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={black ? 'primary' : 'secondary'}\n textColor={black ? 'primary' : 'secondary'}\n >\n {Object.keys(messages).map(scope =>\n Object.keys(messages[scope]).map((name, idx) => {\n const entry = messages[scope][name];\n const key = `${scope}--${name}`;\n\n return (\n <Tab\n disabled={disabled.includes(key)}\n key={key}\n value={key}\n label={`${entry.name[I18n.getLanguage()]}`}\n icon={\n <Status\n severity={entry.severity}\n isDark={black}\n />\n }\n {...a11yProps(idx)}\n />\n );\n }),\n )}\n </Tabs>\n </AppBar>\n {Object.keys(messages).map(scope =>\n Object.keys(messages[scope]).map(name => {\n const key = `${scope}--${name}`;\n if (panel === key || (!panel && key === firstKey)) {\n const entry = messages[scope][name];\n console.log(`Active panel: ${panel}`, `Key: ${key}`);\n return (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${name}`}\n style={{ ...styles.overflowAuto, color: black ? 'black' : undefined }}\n index={key}\n >\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {entry.name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {entry.description[I18n.getLanguage()]}\n </Box>\n <div>\n {entry.instances\n ? Object.keys(entry.instances).map(nameInst => {\n const accKey = `${key}--${nameInst}`;\n if (autoCollapse) {\n handleChangeAccordion(accKey)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (\n currentInstance?.common?.icon &&\n currentInstance?.common?.name\n ) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n\n return (\n <Accordion\n style={\n black ? undefined : { backgroundColor: '#c0c0c052' }\n }\n key={accKey}\n expanded={expanded === accKey}\n onChange={handleChangeAccordion(accKey)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{\n '& .MuiAccordionSummary-content': styles.content,\n }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {entry.instances[nameInst].messages.map((msg, i) => (\n <NotificationMessage\n key={i}\n message={msg}\n dateFormat={dateFormat}\n // entry={entry}\n instanceId={nameInst}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n theme={theme}\n isFloatComma={isFloatComma}\n // onClose={onClose}\n onLink={(\n linkCommand: BackEndCommandOpenLink,\n ) => onLink(linkCommand, nameInst, onClose)}\n />\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n <div style={styles.button}>\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages[scope]).length !== 1}\n disabled={disabled.includes(name)}\n style={\n disabled.includes(name) ? { backgroundColor: 'silver' } : undefined\n }\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(entry.host, name);\n setDisabled([...disabled, name]);\n }}\n color={Object.keys(messages[scope]).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n {Object.keys(messages[scope]).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(name)}\n sx={styles.buttonStyle}\n style={\n disabled.includes(name)\n ? { backgroundColor: 'silver' }\n : undefined\n }\n onClick={() => {\n setDisabled([...disabled, name]);\n ackCallback(entry.host, name);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n </div>\n </TabPanel>\n );\n }\n return null;\n }),\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"notifications-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default NotificationsDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon, OpenInBrowser as OpenInBrowserIcon } from '@mui/icons-material';\n\nimport type { IobTheme, Translate, AdminConnection } from '@iobroker/adapter-react-v5';\nimport Command from '../components/Command';\n\nconst styles: Record<string, any> = {\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n hiddenDialog: {\n display: 'none',\n },\n dialogRoot: {\n height: 'calc(100% - 64px)',\n },\n};\n\ninterface CommandDialogProps {\n t: Translate;\n confirmText?: string;\n onClose: () => void;\n callback: () => void;\n onInBackground: () => void;\n visible: boolean;\n ready: boolean;\n onSetCommandRunning: (running: boolean) => void;\n cmd: string;\n errorFunc: () => void;\n performed: () => void;\n inBackground: boolean;\n commandError: boolean;\n socket: AdminConnection;\n host: string;\n}\n\ninterface CommandDialogState {\n progressText: string;\n closeOnReady: boolean;\n isError: boolean;\n}\n\nclass CommandDialog extends Component<CommandDialogProps, CommandDialogState> {\n constructor(props: CommandDialogProps) {\n super(props);\n\n this.state = {\n progressText: '',\n isError: false,\n closeOnReady:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'CommandDialog.closeOnReady',\n ) === 'true',\n };\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n scroll=\"paper\"\n fullWidth\n sx={{\n '&.MuiDialog-root': !this.props.visible ? styles.hiddenDialog : undefined,\n '& .MuiDialog-paper': styles.dialogRoot,\n }}\n onClose={this.props.inBackground ? this.props.onClose : this.props.onInBackground}\n open={!0}\n maxWidth=\"md\"\n >\n <DialogTitle>\n {this.state.progressText || this.props.t('Running command')}\n <IconButton\n size=\"large\"\n sx={styles.closeButton}\n onClick={this.props.onClose}\n disabled={this.props.inBackground}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent\n dividers\n style={{ height: '100%' }}\n >\n <Command\n noSpacing\n key=\"command\"\n ready={this.props.ready}\n host={this.props.host}\n socket={this.props.socket}\n t={this.props.t}\n inBackground={this.props.inBackground}\n commandError={this.props.commandError}\n errorFunc={() => {\n this.setState({ isError: true });\n this.props.errorFunc();\n }}\n performed={this.props.performed}\n callback={this.props.callback}\n cmd={this.props.cmd}\n onFinished={() => this.state.closeOnReady && this.props.onClose()}\n onSetCommandRunning={(running: boolean) => this.props.onSetCommandRunning(running)}\n />\n </DialogContent>\n <DialogActions style={{ justifyContent: 'space-between' }}>\n <FormControlLabel\n style={{ marginLeft: 16 }}\n control={\n <Checkbox\n disabled={this.props.inBackground}\n checked={this.state.closeOnReady}\n onChange={e => {\n this.setState({ closeOnReady: e.target.checked });\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'CommandDialog.closeOnReady',\n e.target.checked ? 'true' : 'false',\n );\n }}\n />\n }\n label={this.props.t('close on ready')}\n />\n <div>\n <Button\n variant=\"contained\"\n autoFocus\n disabled={this.props.inBackground}\n onClick={this.props.onInBackground}\n startIcon={<OpenInBrowserIcon />}\n color=\"primary\"\n style={{\n marginRight: 8,\n }}\n >\n {this.props.confirmText || this.props.t('In background')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={!this.props.inBackground}\n onClick={this.props.onClose}\n color=\"grey\"\n style={{\n backgroundColor: this.state.isError ? '#834141' : undefined,\n color: this.state.isError ? '#fff' : undefined,\n }}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </div>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default CommandDialog;\n","import _ from 'lodash';\n\nconst funcSet = _.throttle((setTabs, tabs) => setTabs(tabs), 200);\n\nconst findCard = (id: string, cards: { name: string }[]): { card: { name: string }; index: number } => {\n const card = cards.find(c => c.name === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nconst moveCard = (\n id: string,\n atIndex: number, // index of the card being dragged\n tabs: { name: string }[],\n setTabs: (newTabs: { name: string }[]) => void,\n hoverClientY: number,\n hoverMiddleY: number,\n): void => {\n const { card, index } = findCard(id, tabs);\n if (index === atIndex) {\n return;\n }\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = JSON.parse(JSON.stringify(tabs));\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n funcSet(setTabs, copyCard);\n }\n};\n\nexport { moveCard, findCard };\n","import React, { useEffect, useRef, type JSX } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { findCard, moveCard } from '@/helpers/cardSort';\n\nconst styles: React.CSSProperties = {\n cursor: 'move',\n};\n\ninterface DragWrapperProps {\n canDrag: boolean;\n setEndDrag: () => void;\n iconJSX: JSX.Element;\n selected: boolean;\n compact: boolean;\n badgeContent: number;\n badgeColor: string;\n tab: { name: string };\n tabs: { name: string }[];\n setTabs: (newTabs: { name: string }[]) => void;\n _id: string;\n children: any;\n name: string;\n}\n\nconst DragWrapper = ({\n canDrag,\n setEndDrag,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n tab,\n tabs,\n setTabs,\n _id,\n children,\n name,\n}: DragWrapperProps): JSX.Element => {\n const ref = useRef(null);\n const [{ handlerId }, drop] = useDrop({\n accept: 'box',\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n // canDrop: () => false,\n hover({ _id: draggedId }, monitor) {\n if (!ref.current) {\n return;\n }\n const { index: overIndexActions } = findCard(_id, tabs);\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n moveCard(draggedId, overIndexActions, tabs, setTabs, hoverClientY, hoverMiddleY);\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'box',\n item: {\n _id: tab.name,\n ...tab,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n },\n canDrag: () => canDrag,\n end: () => setEndDrag(),\n collect: monitor => ({ isDragging: monitor.isDragging() }),\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const opacity = isDragging ? 0 : 1;\n drag(drop(ref));\n\n return (\n <div\n ref={ref}\n style={{ ...styles, opacity }}\n data-handler-id={handlerId}\n >\n <a\n type=\"box\"\n data-handler-id={handlerId}\n onClick={event => event.preventDefault()}\n href={`/#${name}`}\n style={{\n ...styles,\n opacity,\n color: 'inherit',\n textDecoration: 'none',\n }}\n >\n {children}\n </a>\n </div>\n );\n};\n\nexport default DragWrapper;\n","import React, { type JSX } from 'react';\n\nimport { Badge, Grid2, ListItemButton, ListItemIcon, ListItemText, Tooltip, Checkbox } from '@mui/material';\nimport { DragHandle } from '@mui/icons-material';\n\nimport { amber } from '@mui/material/colors';\n\nimport { Utils, ColorPicker, type IobTheme } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../AdminUtils';\n\nconst styles: Record<string, any> = {\n selected: (theme: IobTheme) => ({\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '&:hover': {\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '& $selectedIcon': {\n color:\n theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n },\n },\n }),\n selectedIcon: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n }),\n compactBadge: {\n pl: '12px',\n },\n noWrap: {\n flexWrap: 'nowrap',\n height: 40,\n },\n warn: {\n backgroundColor: amber[500],\n },\n};\n\ninterface DrawerItemProps {\n badgeColor?: 'error' | 'warn' | 'primary' | '';\n badgeContent?: number;\n compact?: boolean;\n icon: JSX.Element;\n onClick?: (e?: React.MouseEvent) => void;\n selected?: boolean;\n text: string;\n editMenuList?: boolean;\n visible?: boolean;\n color?: string;\n editListFunc?: (visible: boolean, color?: string | null) => void;\n badgeAdditionalContent?: number;\n badgeAdditionalColor?: 'error' | '' | 'warn' | 'secondary';\n style?: Record<string, any>;\n theme: IobTheme;\n}\n\nconst DrawerItem = (props: DrawerItemProps): JSX.Element => {\n const {\n badgeColor,\n badgeContent,\n compact,\n icon,\n onClick,\n selected,\n text,\n editMenuList,\n visible,\n color,\n editListFunc,\n badgeAdditionalContent,\n badgeAdditionalColor,\n style,\n } = props;\n\n let content = text ? text.replace('>', '>') : '';\n\n if (content === 'Text->Kommandos') {\n content = 'Text→Cmd';\n } else if (content === 'Text->Commands') {\n content = 'Text→Cmd';\n }\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', ...(style || {}) }}>\n {!!editMenuList && <DragHandle />}\n {!!editMenuList && (\n <Checkbox\n checked={visible}\n onClick={() => editListFunc(true)}\n />\n )}\n {!!editMenuList && (\n <ColorPicker\n value={color}\n noInputField\n onChange={value => editListFunc(false, value || null)}\n />\n )}\n <ListItemButton\n sx={Utils.getStyle(props.theme, selected && styles.selected, compact && styles.compactBadge)}\n onClick={onClick}\n >\n <Tooltip\n title={compact ? content : ''}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Grid2\n container\n spacing={1}\n alignItems=\"center\"\n style={styles.noWrap}\n >\n <Grid2>\n <ListItemIcon\n style={{ minWidth: 0, color }}\n sx={selected ? styles.selectedIcon : undefined}\n >\n <Badge\n badgeContent={badgeContent || 0}\n color={(badgeColor === 'warn' ? 'default' : badgeColor) || 'primary'}\n sx={badgeColor === 'warn' ? { '& .MuiBadge-badge': styles.warn } : undefined}\n >\n {icon}\n </Badge>\n </ListItemIcon>\n </Grid2>\n {!compact && (\n <Grid2>\n <ListItemText style={{ color }}>\n <Badge\n badgeContent={badgeAdditionalContent || 0}\n color={\n (badgeAdditionalColor === 'warn' ? 'default' : badgeAdditionalColor) ||\n 'primary'\n }\n sx={\n badgeAdditionalColor === 'warn'\n ? { '& .MuiBadge-badge': styles.warn }\n : undefined\n }\n >\n {content}\n </Badge>\n </ListItemText>\n </Grid2>\n )}\n </Grid2>\n </Tooltip>\n </ListItemButton>\n </div>\n );\n};\n\nexport default DrawerItem;\n","import React, { type JSX } from 'react';\nimport { useDragLayer } from 'react-dnd';\n\nimport { Box } from '@mui/material';\n\nimport type { IobTheme } from '@iobroker/adapter-react-v5';\n\nimport DrawerItem from './DrawerItem';\n\nconst layerStyles: React.CSSProperties = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n};\n\nfunction snapToGrid(x: number, y: number): [number, number] {\n const snappedX = Math.round(x / 32) * 32;\n const snappedY = Math.round(y / 32) * 32;\n return [snappedX, snappedY];\n}\n\nfunction getItemStyles(\n initialOffset: { x: number; y: number },\n currentOffset: { x: number; y: number },\n isSnapToGrid?: boolean,\n): React.CSSProperties {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none',\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform,\n };\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n }),\n};\n\nfunction CustomDragLayer(props: { theme: IobTheme }): JSX.Element {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n // targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n // targetIds: monitor.getTargetIds(),\n }));\n\n function renderItem(): JSX.Element | null {\n if (itemType === 'box') {\n return (\n <Box\n component=\"div\"\n sx={styles.root}\n style={{ width: 179 }}\n >\n <DrawerItem\n key={item.name}\n visible={item.visible}\n editListFunc={() => undefined}\n compact={item.compact}\n icon={item.iconJSX}\n text={item.title}\n selected={item.selected}\n badgeContent={item.badgeContent}\n badgeColor={item.badgeColor}\n theme={props.theme}\n />\n </Box>\n );\n }\n return null;\n }\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>{renderItem()}</div>\n </div>\n );\n}\n\nexport default CustomDragLayer;\n","import React, { type JSX } from 'react';\n\nimport { Popper, Typography, Fade, Paper, IconButton } from '@mui/material';\n\nimport { Edit as EditIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nlet timer: ReturnType<typeof setTimeout>;\n\ninterface CustomPopperProps {\n editMenuList: boolean;\n onClick: () => void;\n size?: 'small' | 'medium' | 'large';\n}\n\nconst CustomPopper = ({ editMenuList, onClick, size }: CustomPopperProps): JSX.Element => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [open, setOpen] = React.useState(false);\n const [placement, setPlacement] = React.useState<'right' | null>(null);\n\n return (\n <>\n <IconButton\n size={size || 'large'}\n style={editMenuList ? { color: 'red' } : null}\n onClick={el => {\n onClick();\n if (!editMenuList) {\n setAnchorEl(el.currentTarget);\n setOpen(prev => placement !== 'right' || !prev);\n setPlacement('right');\n\n timer = setTimeout(() => setOpen(false), 3000);\n } else {\n setOpen(false);\n clearTimeout(timer);\n }\n }}\n title={I18n.t('show/hide item')}\n >\n <EditIcon />\n </IconButton>\n <Popper\n style={{ zIndex: 2222 }}\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n transition\n >\n {({ TransitionProps }) => (\n <Fade\n {...TransitionProps}\n timeout={350}\n >\n <Paper>\n <Typography\n style={{\n padding: 16,\n }}\n >\n {I18n.t('You can drag and drop list items for reorder')}\n </Typography>\n </Paper>\n </Fade>\n )}\n </Popper>\n </>\n );\n};\n\nexport default CustomPopper;\n","import React, { Component, type RefObject, type JSX } from 'react';\n\nimport { Avatar, Drawer as MaterialDrawer, IconButton, List, Typography, SwipeableDrawer, Box } from '@mui/material';\n\nimport {\n ChevronLeft as ChevronLeftIcon,\n Apps as AppsIcon,\n Info as InfoIcon,\n Store as StoreIcon,\n Subtitles as SubtitlesIcon,\n ViewList as ViewListIcon,\n ArtTrack as ArtTrackIcon,\n Dvr as DvrIcon,\n ViewHeadline as ViewHeadlineIcon,\n Subscriptions as SubscriptionsIcon,\n FlashOn as FlashOnIcon,\n PersonOutline as PersonOutlineIcon,\n Storage as StorageIcon,\n FileCopy as FilesIcon,\n} from '@mui/icons-material';\n\nimport {\n Utils,\n I18n,\n Icon,\n withWidth,\n IconLogout as LogoutIcon,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { getHref } from '@/tabs/CustomTab';\nimport AdminUtils from '@/AdminUtils';\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type NotificationAnswer } from '@/Workers/HostsWorker';\nimport type LogsWorker from '@/Workers/LogsWorker';\nimport type { NotificationsCount } from '@/types';\nimport DragWrapper from './DragWrapper';\nimport CustomDragLayer from './CustomDragLayer';\nimport { ContextWrapper } from './ContextWrapper';\nimport CustomPopper from './CustomPopper';\nimport DrawerItem from './DrawerItem';\n\nexport const DRAWER_FULL_WIDTH = 180;\nexport const DRAWER_COMPACT_WIDTH = 50;\nexport const DRAWER_EDIT_WIDTH = 250;\n\nfunction ucFirst(str: string): string {\n return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n flexShrink: 0,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n display: 'flex',\n flexDirection: 'column',\n }),\n rootFullWidth: {\n width: DRAWER_FULL_WIDTH,\n },\n rootEditWidth: {\n width: DRAWER_EDIT_WIDTH,\n },\n rootCompactWidth: {\n width: DRAWER_COMPACT_WIDTH,\n },\n paper: {\n width: 'inherit',\n overflowX: 'hidden',\n },\n header: (theme: IobTheme) => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '0 8px 0 8px',\n ...theme.mixins.toolbar,\n justifyContent: 'flex-end',\n position: 'sticky',\n top: 0,\n zIndex: 2,\n background: theme.palette.background.default,\n }),\n headerCompact: {\n padding: 0,\n },\n headerLogout: {\n justifyContent: 'space-between',\n },\n list: {\n paddingTop: 0,\n flex: '1 0 auto',\n },\n icon: {\n width: 20,\n height: 20,\n },\n logoSize: {\n width: 50,\n height: 50,\n },\n avatarBlock: {\n width: '100%',\n display: 'flex',\n // justifyContent: 'center',\n // marginLeft: 48,\n marginTop: 5,\n marginBottom: 5,\n },\n avatarNotVisible: {\n opacity: 0,\n transition: 'opacity 0.3s',\n },\n avatarVisible: {\n opacity: 1,\n },\n styleVersion: (theme: IobTheme) => ({\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#ffffff5e' : '#0000005e',\n alignSelf: 'center',\n ml: '5px',\n }),\n editButton: {\n position: 'sticky',\n bottom: 0,\n right: 0,\n width: 'fit-content',\n marginLeft: 'auto',\n marginTop: 'auto',\n transition: 'opacity 0.5s',\n },\n};\n\nexport const STATES = {\n opened: 0,\n closed: 1,\n compact: 2,\n};\n\nconst tabsInfo: Record<string, { order: number; icon?: JSX.Element; host?: boolean; instance?: number }> = {\n 'tab-intro': { order: 1, icon: <AppsIcon /> },\n 'tab-info': { order: 5, icon: <InfoIcon />, host: true },\n 'tab-adapters': { order: 10, icon: <StoreIcon />, host: true },\n 'tab-instances': { order: 15, icon: <SubtitlesIcon />, host: true },\n 'tab-objects': { order: 20, icon: <ViewListIcon /> },\n 'tab-enums': { order: 25, icon: <ArtTrackIcon /> },\n 'tab-devices': { order: 27, icon: <DvrIcon />, host: true },\n 'tab-logs': { order: 30, icon: <ViewHeadlineIcon />, host: true },\n 'tab-scenes': { order: 35, icon: <SubscriptionsIcon /> },\n 'tab-events': { order: 40, icon: <FlashOnIcon /> },\n 'tab-users': { order: 45, icon: <PersonOutlineIcon /> },\n 'tab-javascript': { order: 50 },\n 'tab-text2command-0': { order: 55, instance: 0 },\n 'tab-text2command-1': { order: 56, instance: 1 },\n 'tab-text2command-2': { order: 57, instance: 2 },\n 'tab-node-red-0': { order: 60, instance: 0 },\n 'tab-node-red-1': { order: 61, instance: 1 },\n 'tab-node-red-2': { order: 62, instance: 2 },\n 'tab-fullcalendar-0': { order: 65, instance: 0 },\n 'tab-fullcalendar-1': { order: 66, instance: 1 },\n 'tab-fullcalendar-2': { order: 67, instance: 2 },\n 'tab-echarts': { order: 70, instance: 2 },\n 'tab-eventlist-0': { order: 80, instance: 0 },\n 'tab-eventlist-1': { order: 81, instance: 1 },\n 'tab-eventlist-2': { order: 82, instance: 2 },\n 'tab-hosts': { order: 100, icon: <StorageIcon /> },\n 'tab-files': { order: 110, icon: <FilesIcon /> },\n};\n\ninterface AdminTab {\n name: string;\n order: number;\n icon?: string | JSX.Element;\n title?: string;\n visible?: boolean;\n color?: string;\n}\n\ninterface DrawerProps {\n t: Translate;\n lang: ioBroker.Languages;\n state: 0 | 1 | 2;\n adminGuiConfig: Record<string, any>;\n onStateChange: (state: 0 | 1 | 2) => void;\n onLogout: () => void;\n isSecure: boolean;\n currentTab: string;\n themeType: ThemeType;\n socket: AdminConnection;\n versionAdmin: string;\n handleNavigation: (tab: string) => void;\n editMenuList: boolean;\n setEditMenuList: (editMenuList: boolean) => void;\n\n instancesWorker: InstancesWorker;\n hostsWorker: HostsWorker;\n logsWorker: LogsWorker;\n\n hostname: string;\n adminInstance: string;\n installed: Record<string, { version: string; ignoreVersion?: string }>;\n hosts: ioBroker.HostObject[];\n repository: Record<string, { icon: string; version: string }>;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n theme: IobTheme;\n}\n\ninterface DrawerState {\n tabs: AdminTab[];\n logErrors: number;\n logWarnings: number;\n hostNotifications: NotificationsCount;\n hostsUpdate: number;\n adaptersUpdate: number;\n}\n\nclass Drawer extends Component<DrawerProps, DrawerState> {\n private logsHandlerRegistered: boolean;\n\n private readonly refEditButton: RefObject<HTMLDivElement>;\n\n constructor(props: DrawerProps) {\n super(props);\n\n this.state = {\n tabs: [],\n logErrors: 0,\n logWarnings: 0,\n hostNotifications: { other: 0, warning: 0 },\n hostsUpdate: Drawer.calculateHostUpdates(this.props.hosts, this.props.repository),\n adaptersUpdate: Drawer.calculateAdapterUpdates(this.props.installed, this.props.repository),\n };\n\n this.refEditButton = React.createRef();\n\n this.getTabs().catch(e => window.alert(`Cannot get tabs: ${e}`));\n }\n\n static getDerivedStateFromProps(props: DrawerProps, state: DrawerState): Partial<DrawerState> | null {\n const hostsUpdate = Drawer.calculateHostUpdates(props.hosts, props.repository);\n const adaptersUpdate = Drawer.calculateAdapterUpdates(props.installed, props.repository);\n if (hostsUpdate !== state.hostsUpdate || adaptersUpdate !== state.adaptersUpdate) {\n return { hostsUpdate, adaptersUpdate };\n }\n return null;\n }\n\n static calculateHostUpdates(\n hosts: ioBroker.HostObject[],\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (hosts && repository) {\n const jsControllerVersion = repository['js-controller']?.version || '';\n let count = 0;\n hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n return count;\n }\n return 0;\n }\n\n static calculateAdapterUpdates(\n installed: Record<string, { version: string; ignoreVersion?: string }>,\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (installed) {\n let count = 0;\n\n Object.keys(installed)\n .sort()\n .forEach(element => {\n const _installed = installed[element];\n const adapter = repository && repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n return count;\n }\n return 0;\n }\n\n instanceChangedHandler = (): Promise<void> => this.getTabs(true);\n\n componentDidMount(): void {\n this.props.instancesWorker.registerHandler(this.instanceChangedHandler, true);\n\n void this.onNotificationsHandler().then(() => {\n this.props.hostsWorker.registerNotificationHandler(this.onNotificationsHandler);\n\n if (!this.logsHandlerRegistered) {\n this.logsHandlerRegistered = true;\n this.props.logsWorker.registerErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.registerWarningCountHandler(this.onWarningsUpdates);\n }\n });\n }\n\n onNotificationsHandler = (): Promise<void> =>\n this.props.hostsWorker\n .getNotifications()\n .then(notifications => this.calculateWarning(notifications))\n .catch(error => window.alert(`Cannot get notifications: ${error}`));\n\n onErrorsUpdates = (logErrors: number): void => {\n this.setState({ logErrors });\n };\n\n onWarningsUpdates = (logWarnings: number): void => {\n this.setState({ logWarnings });\n };\n\n calculateWarning = (notifications: Record<string, NotificationAnswer | null>): void => {\n if (!notifications) {\n return;\n }\n\n const count: NotificationsCount = { warning: 0, other: 0 };\n\n Object.keys(notifications).forEach(host => {\n if (!notifications[host]?.result?.system) {\n return;\n }\n\n if (Object.keys(notifications[host].result.system.categories).length) {\n const obj = notifications[host].result.system.categories;\n\n for (const category of Object.values(obj)) {\n Object.keys(category.instances).forEach(() =>\n category.severity === 'alert' ? count.warning++ : count.other++,\n );\n }\n }\n });\n\n this.setState({ hostNotifications: count });\n };\n\n componentWillUnmount(): void {\n this.props.instancesWorker.unregisterHandler(this.instanceChangedHandler);\n this.props.hostsWorker.unregisterNotificationHandler(this.onNotificationsHandler);\n\n if (this.logsHandlerRegistered) {\n this.logsHandlerRegistered = false;\n this.props.logsWorker.unregisterErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.unregisterWarningCountHandler(this.onWarningsUpdates);\n }\n }\n\n componentDidUpdate(): void {\n if (!this.isSwipeable() && this.props.state !== STATES.opened && this.props.editMenuList) {\n setTimeout(() => this.props.setEditMenuList(false));\n }\n }\n\n async getTabs(update?: boolean): Promise<void> {\n try {\n const _instances = await this.props.socket.getCompactInstances(update);\n const instances = _instances as any as Record<string, ioBroker.AdapterCommon>;\n const dynamicTabs: AdminTab[] = [];\n if (instances) {\n Object.keys(instances).forEach(id => {\n const instance = instances[id];\n\n if (!instance?.adminTab) {\n return;\n }\n\n let tab = `tab-${id.replace('system.adapter.', '').replace(/\\.\\d+$/, '')}`;\n\n const singleton = instance.adminTab.singleton;\n let instNum;\n if (!singleton) {\n const m = id.match(/\\.(\\d+)$/);\n if (m) {\n instNum = parseInt(m[1], 10);\n tab += `-${instNum}`;\n }\n }\n\n if (dynamicTabs.find(item => item.name === tab)) {\n return;\n }\n\n let title;\n\n if (instance.adminTab.name) {\n if (typeof instance.adminTab.name === 'object') {\n if (instance.adminTab.name && instance.adminTab.name[this.props.lang]) {\n title = instance.adminTab.name[this.props.lang];\n } else if (instance.adminTab.name?.en) {\n title = this.props.t(instance.adminTab.name.en);\n } else {\n title = this.props.t(instance.name);\n }\n } else {\n title = this.props.t(instance.adminTab.name);\n }\n } else {\n title = this.props.t(instance.name);\n }\n\n let obj: AdminTab;\n if (tabsInfo[tab]) {\n obj = { name: tab, ...tabsInfo[tab] };\n } else {\n obj = {\n name: tab,\n order: instance.adminTab.order !== undefined ? instance.adminTab.order : 200,\n icon: instance.adminTab.icon,\n };\n }\n\n if (!obj.icon) {\n obj.icon = `adapter/${instance.name}/${instance.icon}`;\n } else if (\n typeof obj.icon !== 'object' &&\n !obj.icon.startsWith('data:image') &&\n !obj.icon.includes('/')\n ) {\n obj.icon = `adapter/${instance.name}/${obj.icon}`;\n }\n\n obj.title = title;\n\n if (!singleton) {\n // obj.instance = instance;\n if (instNum) {\n obj.title += ` ${instNum}`;\n }\n }\n dynamicTabs.push(obj);\n });\n }\n\n const READY_TO_USE = [\n 'tab-intro',\n 'tab-adapters',\n 'tab-instances',\n 'tab-logs',\n 'tab-files',\n 'tab-objects',\n 'tab-hosts',\n 'tab-users',\n 'tab-enums',\n ];\n // DEV ONLY\n const tabNames = Object.keys(tabsInfo).filter(name => READY_TO_USE.includes(name));\n\n let tabs: AdminTab[] = tabNames.map(name => {\n const obj: AdminTab = { name, ...tabsInfo[name] };\n obj.title = I18n.t(\n ucFirst(\n name\n .replace('tab-', '')\n .replace('-0', '')\n .replace(/-(\\d+)$/, ' $1'),\n ),\n );\n obj.visible = true;\n return obj;\n });\n\n // add dynamic tabs\n tabs = tabs.concat(dynamicTabs);\n\n tabs = tabs.filter(obj => obj);\n tabs.forEach(obj => (obj.visible = true));\n\n tabs.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order;\n }\n if (a.order) {\n return -1;\n }\n if (b.order) {\n return 1;\n }\n return a.name > b.name ? -1 : a.name > b.name ? 1 : 0;\n });\n\n // Convert\n void this.props.socket.getCompactSystemConfig().then(systemConfig => {\n const tabsVisible: { name: string; visible: boolean; color?: string }[] =\n systemConfig.common.tabsVisible || [];\n\n tabs.forEach(tab => {\n const it = tabsVisible.find(el => el.name === tab.name);\n if (it) {\n tab.visible = it.visible;\n tab.color = it.color;\n }\n });\n\n const map: Record<string, number> = {};\n tabsVisible.forEach((item, i) => (map[item.name] = i));\n\n tabs.sort((a, b) => {\n const aa = map[a.name];\n const bb = map[b.name];\n if (aa !== undefined && bb !== undefined) {\n return aa - bb;\n }\n if (aa) {\n return -1;\n }\n if (bb) {\n return 1;\n }\n return 0;\n });\n\n this.setState({ tabs }, () => {\n const newTabsVisible = tabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (JSON.stringify(newTabsVisible) !== JSON.stringify(tabsVisible)) {\n void this.props.socket.getSystemConfig(true).then(_systemConfig => {\n _systemConfig.common.tabsVisible = tabsVisible;\n\n return this.props.socket\n .setSystemConfig(_systemConfig)\n .catch(e => window.alert(`Cannot set system config: ${e}`));\n });\n }\n });\n });\n } catch (error) {\n window.alert(`Cannot get instances: ${error}`);\n }\n }\n\n getHeader(): JSX.Element {\n const { state, handleNavigation } = this.props;\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles.header,\n this.props.state === STATES.opened && this.props.isSecure && styles.headerLogout,\n !this.isSwipeable() && this.props.state !== STATES.opened && styles.headerCompact,\n )}\n >\n <div\n style={{\n ...styles.avatarBlock,\n ...styles.avatarNotVisible,\n ...(state === 0 ? styles.avatarVisible : { display: 'none' }),\n }}\n >\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.props.adminGuiConfig.icon ? (\n <div style={{ height: 50, width: 102, lineHeight: '50px' }}>\n <img\n src={this.props.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%', verticalAlign: 'middle' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => handleNavigation('easy')}\n style={styles.logoSize}\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n {!this.props.adminGuiConfig.icon && this.props.versionAdmin && (\n <Typography sx={styles.styleVersion}>v{this.props.versionAdmin}</Typography>\n )}\n </div>\n <IconButton\n size=\"large\"\n onClick={() => {\n if (this.isSwipeable() || this.props.state === STATES.compact) {\n this.props.onStateChange(STATES.closed as 1);\n } else {\n this.props.onStateChange(STATES.compact as 2);\n }\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n </Box>\n );\n }\n\n isSwipeable(): boolean {\n return this.props.width === 'xs' || this.props.width === 'sm';\n }\n\n tabsEditSystemConfig = async (idx?: number, isVisibility?: boolean, newColor?: string): Promise<void> => {\n const { tabs } = this.state;\n const { socket } = this.props;\n const newTabs: AdminTab[] = JSON.parse(JSON.stringify(tabs)) as AdminTab[];\n if (isVisibility) {\n newTabs[idx].visible = !newTabs[idx].visible;\n }\n if (newColor !== undefined) {\n if (newColor === null) {\n delete newTabs[idx].color;\n } else {\n newTabs[idx].color = newColor;\n }\n }\n const newObjCopy = await this.props.socket.getSystemConfig(true);\n newObjCopy.common.tabsVisible = newTabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (isVisibility || newColor !== undefined) {\n this.setState({ tabs: newTabs }, () =>\n socket.setSystemConfig(newObjCopy).catch(e => window.alert(`Cannot set system config: ${e}`)),\n );\n } else {\n try {\n await socket.setSystemConfig(newObjCopy);\n } catch (e) {\n window.alert(`Cannot set system config: ${e}`);\n }\n }\n };\n\n getNavigationItems(): JSX.Element[] {\n const { tabs, logErrors, logWarnings } = this.state;\n const { currentTab, state, handleNavigation } = this.props;\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n this.props.hosts.forEach(host => (hosts[host._id] = host));\n\n return tabs.map((tab, idx) => {\n if (!this.props.editMenuList && !tab.visible) {\n return null;\n }\n\n if (this.props.adminGuiConfig.admin.menu && this.props.adminGuiConfig.admin.menu[tab.name] === false) {\n return null;\n }\n\n return (\n <DragWrapper\n key={tab.name}\n canDrag={this.props.editMenuList}\n name={tab.name}\n iconJSX={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n style={styles.icon}\n src={tab.icon}\n />\n )\n }\n _id={tab.name}\n selected={currentTab === tab.name}\n tab={tab}\n compact={!this.isSwipeable() && state !== STATES.opened}\n badgeContent={logErrors || logWarnings || 0}\n badgeColor={logErrors ? 'error' : logWarnings ? 'warn' : ''}\n tabs={tabs}\n setEndDrag={() => this.tabsEditSystemConfig()}\n setTabs={(newObj: AdminTab[]) => this.setState({ tabs: newObj })}\n >\n <DrawerItem\n key={tab.name}\n editMenuList={this.props.editMenuList}\n visible={tab.visible}\n color={tab.color}\n editListFunc={(isVisibility, color) => this.tabsEditSystemConfig(idx, isVisibility, color)}\n compact={!this.isSwipeable() && state !== STATES.opened}\n onClick={e => {\n if (e.ctrlKey || e.shiftKey) {\n void getHref(\n this.props.instancesWorker,\n tab.name,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeType,\n ).then(href => {\n if (href) {\n console.log(href);\n // Open in new tab\n window\n .open(\n `${window.location.protocol}//${window.location.host}/${href}`,\n tab.name,\n )\n .focus();\n } else {\n handleNavigation(tab.name);\n }\n });\n } else {\n handleNavigation(tab.name);\n }\n }}\n icon={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n src={tab.icon}\n style={styles.icon}\n />\n )\n }\n text={tab.title}\n selected={currentTab === tab.name}\n badgeContent={this.badge(tab).content}\n badgeColor={this.badge(tab).color}\n badgeAdditionalContent={this.badge(tab)?.additionalContent}\n badgeAdditionalColor={this.badge(tab)?.additionalColor}\n theme={this.props.theme}\n />\n </DragWrapper>\n );\n });\n }\n\n badge = (\n tab: AdminTab,\n ): {\n content: number;\n color: 'error' | 'warn' | 'primary' | '';\n additionalContent?: number;\n additionalColor?: 'error' | 'secondary' | '';\n } => {\n switch (tab.name) {\n case 'tab-logs': {\n const { logErrors, logWarnings } = this.state;\n return { content: logErrors || logWarnings || 0, color: logErrors ? 'error' : 'warn' };\n }\n\n case 'tab-adapters':\n return { content: this.state.adaptersUpdate || 0, color: 'primary' };\n\n case 'tab-hosts':\n return {\n content: this.state.hostsUpdate || 0,\n color: 'primary',\n additionalContent: this.state.hostNotifications.warning + this.state.hostNotifications.other,\n additionalColor: this.state.hostNotifications.warning > 0 ? 'error' : 'secondary',\n };\n\n default:\n return {\n content: 0,\n color: '',\n additionalContent: 0,\n additionalColor: '',\n };\n }\n };\n\n render(): JSX.Element {\n if (this.isSwipeable()) {\n return (\n <SwipeableDrawer\n sx={Utils.getStyle(this.props.theme, styles.root, { '&.MuiSwipeableDrawer-paper': styles.paper })}\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onClose={() => this.props.onStateChange(STATES.closed as 1)}\n onOpen={() => this.props.onStateChange(STATES.opened as 0)}\n >\n <CustomDragLayer theme={this.props.theme} />\n\n {this.getHeader()}\n\n <List>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div style={styles.editButton}>\n <CustomPopper\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </SwipeableDrawer>\n );\n }\n\n return (\n <MaterialDrawer\n sx={Utils.getStyle(\n this.props.theme,\n styles.root,\n this.props.state !== STATES.opened\n ? styles.rootCompactWidth\n : this.props.editMenuList\n ? styles.rootEditWidth\n : styles.rootFullWidth,\n {\n '& .MuiDrawer-paper': styles.paper,\n },\n )}\n variant=\"persistent\"\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onMouseEnter={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '1')}\n onMouseLeave={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '0')}\n >\n <CustomDragLayer theme={this.props.theme} />\n {this.getHeader()}\n <List style={styles.list}>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n style={{ flexShrink: 0 }}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div\n style={{ ...styles.editButton, opacity: 0 }}\n ref={this.refEditButton}\n >\n <CustomPopper\n size=\"small\"\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </MaterialDrawer>\n );\n }\n}\n\nDrawer.contextType = ContextWrapper;\nexport default withWidth()(Drawer);\n","import React, { type JSX } from 'react';\n\nconst offset = 187;\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n position: 'fixed',\n background: 'rgba(0, 0, 0, .3)',\n zIndex: 20000,\n },\n connecting: {\n left: '40%',\n top: '40%',\n width: '20%',\n height: '20%',\n position: 'absolute',\n },\n spinner: {\n animation: 'admin-connecting-rotator 1.4s linear infinite',\n },\n path: {\n strokeDasharray: 187,\n strokeDashoffset: 0,\n transformOrigin: 'center',\n animation: 'admin-connecting-dash 1.4s ease-in-out infinite, $colors 5.6s ease-in-out infinite',\n },\n};\n\nfunction Connecting(): JSX.Element {\n return (\n <div style={styles.root}>\n <style>\n {`\n' @keyframes admin-connecting-colors {\n 0% {\n stroke: #4285F4;\n }\n 25% {\n stroke: #DE3E35;\n }\n 50% {\n stroke: #F7C223;\n }\n 75% {\n stroke: #1B9A59;\n }\n 100% {\n stroke: #4285F4;\n }\n }\n @keyframes admin-connecting-dash {\n 0% {\n stroke-dashoffset: ${offset};\n }\n 50% {\n stroke-dashoffset: ${offset / 4};\n transform: rotate(135deg);\n }\n 100% {\n stroke-dashoffset: ${offset};\n transform: 'rotate(450deg);\n }\n }\n @keyframes admin-connecting-rotator {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n`}\n </style>\n <div style={styles.connecting}>\n <svg\n style={styles.spinner}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 66 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n style={styles.path}\n fill=\"none\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n />\n </svg>\n </div>\n </div>\n );\n}\n\nexport default Connecting;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { TextField, Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '../../AdminUtils';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardPasswordTabProps {\n t: Translate;\n onDone: (password: string) => void;\n}\n\ninterface WizardPasswordTabState {\n password: string;\n passwordRepeat: string;\n errorPassword: boolean | string;\n errorPasswordRepeat: boolean | string;\n}\n\nclass WizardPasswordTab extends Component<WizardPasswordTabProps, WizardPasswordTabState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPasswordTabProps) {\n super(props);\n\n this.state = {\n password: '',\n passwordRepeat: '',\n errorPassword: true,\n errorPasswordRepeat: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('You must set the administrator password')}\n </Box>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n disabled\n style={styles.input}\n label={this.props.t('Administrator name')}\n value=\"admin\"\n slotProps={{\n input: { readOnly: true },\n }}\n helperText={this.props.t('Administrator name cannot be changed')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' && this.state.password && !this.state.errorPassword) {\n const el = window.document.getElementById('admin_password');\n if (el) {\n el.focus();\n }\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n ref={this.focusRef}\n label={this.props.t('Administrator password')}\n type=\"password\"\n value={this.state.password}\n error={!!this.state.errorPassword}\n onChange={e => {\n const errorPassword = AdminUtils.checkPassword(e.target.value);\n const errorPasswordRepeat = AdminUtils.checkPassword(\n e.target.value,\n this.state.passwordRepeat,\n );\n this.setState({\n password: e.target.value,\n errorPassword: errorPassword ? this.props.t(errorPassword) : false,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.props.t(\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters',\n )}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n id: 'admin_password',\n },\n }}\n onKeyDown={e => {\n if (\n e.key === 'Enter' &&\n this.state.password &&\n !this.state.errorPassword &&\n !this.state.errorPasswordRepeat\n ) {\n this.props.onDone(this.state.password);\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n label={this.props.t('Repeat administrator password')}\n value={this.state.passwordRepeat}\n type=\"password\"\n error={!!this.state.errorPasswordRepeat}\n onChange={e => {\n const errorPasswordRepeat = AdminUtils.checkPassword(\n this.state.password,\n e.target.value,\n );\n this.setState({\n passwordRepeat: e.target.value,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.state.errorPasswordRepeat || ''}\n />\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone(this.state.password)}\n disabled={\n !this.state.passwordRepeat || !!this.state.errorPasswordRepeat || !!this.state.errorPassword\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Set administrator password')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPasswordTab);\n","const license: Record<ioBroker.Languages, string> = {\n en:\n 'The MIT License (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n de:\n 'MIT-Lizenz (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:\\n' +\n 'Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\\n' +\n 'DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',\n\n ru:\n 'Лицензия MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:\\n' +\n 'Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.\\n' +\n 'ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.',\n\n it:\n 'Licenza MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Si concede gratuitamente l\\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il \"Software\"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:\\n' +\n \"l'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.\\n\" +\n 'IL SOFTWARE VIENE FORNITO \"COSÌ COM\\'È\" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',\n\n fr:\n 'Licence MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n pt:\n 'Licença MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n nl:\n 'MIT-licentie\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n es:\n 'Licencia MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el \"Software\"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:\\n' +\n 'El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\\n' +\n 'EL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',\n\n pl:\n 'Licencja MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n uk:\n 'Ліцензія MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'zh-cn':\n 'MIT许可证\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人 同等权利,只需服从以下义务:\\n' +\n '在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。\\n' +\n '该软件是\"按原样\"提供的,没有任何形式的明示或暗示,包括但不限于为特定目的和 不侵权的适销性和适用性的保证担保。在任何情况下,作者或版权持有人,都无权要求 任何索赔,或有关损害赔偿的其他责任。无论在本软件的使用上或其他买卖交易中, 是否涉及合同,侵权或其他行为。\\n',\n};\n\nexport default license;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Toolbar,\n MenuItem,\n Grid2,\n Select,\n FormControlLabel,\n Checkbox,\n Button,\n FormControl,\n InputLabel,\n Paper,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from '@mui/material';\n\nimport { Language as IconWorld, Close as IconCancel, Check as IconCheck, Close } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type ThemeType, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport Editor from '@/components/Editor';\nimport LicenseTexts from '../LicenseTexts';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n gridDiv: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'hidden',\n padding: 16,\n textAlign: 'center',\n },\n languageSelect: {\n minWidth: 200,\n marginRight: 24,\n },\n licenseDiv: {\n width: '100%',\n height: `calc(100% - ${65 + 88}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n statAccept: {\n marginTop: 10,\n color: '#ff636e',\n },\n statAcceptDiv: {\n display: 'inline-block',\n },\n statAcceptNote: {\n textAlign: 'left',\n marginLeft: 32,\n },\n greenButton: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n licenseTextDiv: {\n width: '100%',\n maxWidth: 600,\n textAlign: 'left',\n margin: 'auto',\n },\n licenseText: {\n marginBottom: 15,\n },\n};\n\ninterface WizardLicenseTabProps {\n t: Translate;\n onDone: (config: { lang: ioBroker.Languages }) => void;\n lang?: ioBroker.Languages;\n socket: AdminConnection;\n themeType: ThemeType;\n}\n\ninterface WizardLicenseTabState {\n statisticsAccepted: boolean;\n lang: ioBroker.Languages;\n notAgree: boolean;\n showStatisticsDialog: boolean;\n requesting: boolean;\n diagData: Record<string, any> | null;\n}\n\nclass WizardLicenseTab extends Component<WizardLicenseTabProps, WizardLicenseTabState> {\n private readonly focusRef: React.RefObject<HTMLButtonElement>;\n\n constructor(props: WizardLicenseTabProps) {\n super(props);\n\n this.state = {\n statisticsAccepted: false,\n lang: this.props.lang || I18n.getLanguage(),\n notAgree: false,\n diagData: null,\n requesting: false,\n showStatisticsDialog: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n async readStatistics(): Promise<void> {\n // Get current host\n const instance = await this.props.socket.getCurrentInstance();\n // read settings of current instance\n const settings: ioBroker.InstanceObject = (await this.props.socket.getObject(\n `system.adapter.${instance}`,\n )) as any as ioBroker.InstanceObject;\n\n const diagData = await this.props.socket.getDiagData(settings.common.host, 'extended');\n\n this.setState({ diagData, requesting: false });\n }\n\n renderStatisticsDialog(): JSX.Element | null {\n if (!this.state.showStatisticsDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': { maxHeight: 'calc(100% - 96px)', height: 'calc(100% - 96px)' } }}\n onClose={() => this.setState({ showStatisticsDialog: false })}\n >\n <DialogTitle>{this.props.t('Sent data:')}</DialogTitle>\n <DialogContent>\n {this.state.requesting && <LinearProgress />}\n {this.state.requesting && <div>{this.props.t('Requesting data...')}</div>}\n {!this.state.requesting && (\n <div style={{ fontSize: 14, marginBottom: 8 }}>\n {this.props.t(\n 'The sent data will only be processed by ioBroker GmbH for statistical purposes and will not be shared with any third parties.',\n )}\n </div>\n )}\n {!this.state.requesting && (\n <Editor\n style={{ height: 'calc(100% - 41px)' }}\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.state.diagData, null, 2)}\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showStatisticsDialog: false })}\n color=\"primary\"\n autoFocus\n startIcon={<Close />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderNotAgree(): JSX.Element | null {\n if (!this.state.notAgree) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ notAgree: false })}\n >\n <DialogTitle>{this.props.t('Message')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <span\n role=\"img\"\n aria-label=\"unhappy\"\n >\n 😒\n </span>{' '}\n {this.props.t('Sorry, you cannot use ioBroker.')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ notAgree: false })}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {I18n.t('Understand')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n static renderLicenseText(): JSX.Element {\n const text = LicenseTexts[I18n.getLanguage()] || LicenseTexts.en;\n const lines = text.split('\\n');\n return (\n <div style={styles.licenseTextDiv}>\n {lines.map((line, i) => (\n <div\n style={styles.licenseText}\n key={i}\n >\n {line}\n </div>\n ))}\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n style={styles.gridDiv}\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.languageSelect}\n >\n <InputLabel>\n <IconWorld />\n {this.props.t('Language')}\n </InputLabel>\n <Select\n variant=\"standard\"\n value={I18n.getLanguage()}\n onChange={e => {\n I18n.setLanguage(e.target.value as ioBroker.Languages);\n this.setState({ lang: e.target.value as ioBroker.Languages });\n }}\n >\n <MenuItem value=\"en\">English</MenuItem>\n <MenuItem value=\"de\">Deutsch</MenuItem>\n <MenuItem value=\"ru\">русский</MenuItem>\n <MenuItem value=\"pt\">Portugues</MenuItem>\n <MenuItem value=\"nl\">Nederlands</MenuItem>\n <MenuItem value=\"fr\">français</MenuItem>\n <MenuItem value=\"it\">Italiano</MenuItem>\n <MenuItem value=\"es\">Espanol</MenuItem>\n <MenuItem value=\"pl\">Polski</MenuItem>\n <MenuItem value=\"uk\">Українська</MenuItem>\n <MenuItem value=\"zh-cn\">简体中文</MenuItem>\n </Select>\n </FormControl>\n <div style={styles.statAcceptDiv}>\n <FormControlLabel\n style={styles.statAccept}\n control={\n <Checkbox\n ref={this.focusRef}\n checked={this.state.statisticsAccepted}\n onChange={e => this.setState({ statisticsAccepted: e.target.checked })}\n />\n }\n label={this.props.t('I agree with the collection of anonymous statistics.')}\n />\n <div style={styles.statAcceptNote}>\n {this.props.t('(This can be disabled later in settings)')}\n <Button\n variant=\"outlined\"\n style={{ marginLeft: 16 }}\n onClick={() =>\n this.setState({ showStatisticsDialog: true, requesting: true }, () =>\n this.readStatistics(),\n )\n }\n >\n {this.props.t('Show sent statistics data')}\n </Button>\n </div>\n </div>\n </Grid2>\n <Grid2>\n <h1>{this.props.t('License terms')}</h1>\n </Grid2>\n <Grid2 style={styles.licenseDiv}>{WizardLicenseTab.renderLicenseText()}</Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ notAgree: true })}\n startIcon={<IconCancel />}\n >\n {this.props.t('Not agree')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n style={styles.greenButton}\n disabled={!this.state.statisticsAccepted}\n onClick={() => this.props.onDone({ lang: this.state.lang })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Agree')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n {this.renderNotAgree()}\n {this.renderStatisticsDialog()}\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardLicenseTab);\n","var _style, _g, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g2, _path9, _path10;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgLongLogo(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 550 370\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#144578;}\\n\\t.st1{fill:#3499CC;}\\n\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M293.2,244.1h-2.4v-3.2h-8.3v3.2h-2.4v-6.5c0-1,0.2-1.8,0.5-2.6s0.8-1.5,1.4-2.1c0.6-0.6,1.3-1,2.1-1.3 c0.8-0.3,1.7-0.5,2.6-0.5h5.3c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5V244.1 z M282.6,238.5h8.3v-5.1h-4.1c-0.1,0-0.2,0-0.5,0c-0.2,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.6,0.2-1,0.4s-0.7,0.4-0.9,0.7 s-0.5,0.7-0.7,1.2s-0.3,1-0.3,1.7V238.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M306.4,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M317.5,236.6h-4.1v7.5H311v-7.5H308v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M329.7,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M327.4,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M340.5,244.1h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-3.1v7.5h-2.4v-8.6 c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.2s0.3-0.1,0.5-0.1h4.3c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6v-0.7h3.2c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.5,0.1,0.7,0.2c0.2,0.1,0.5,0.3,0.7,0.4c0.2,0.2,0.4,0.4,0.6,0.6 c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.3,0.2,0.7,0.2,1.1v6.5h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-2.1 c0.1,0.3,0.1,0.6,0.1,0.9V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M358.1,240.8c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5 c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3v2.3h-4.3 c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2c0.3,0,0.6-0.1,0.7-0.3 c0.2-0.2,0.3-0.4,0.3-0.7v-3.3c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3h-5.2v-2.2h5.2c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6c0.3,0.3,0.6,0.6,0.8,1c0.2,0.4,0.3,0.9,0.3,1.5V240.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M369,236.6h-4.1v7.5h-2.4v-7.5h-3.1v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M381.1,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C381,236.4,381.1,236.9,381.1,237.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M396.2,244.1H392c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-6.5h2.4v6.5c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2V244.1z M399.5,245c0,0.4-0.1,0.8-0.2,1.1 c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6c-0.2,0.2-0.5,0.3-0.7,0.4s-0.5,0.2-0.7,0.2c-0.2,0.1-0.5,0.1-0.7,0.1H392V246 h4.3c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7v-10.8h2.4V245z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M412.5,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M410.1,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M425.2,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M436,236.6h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v6.5h-2.4v-6.5c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.3-0.1,0.5-0.1,0.7-0.1h5.3 V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M447.8,244.1h-1.1c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-10.7h2.4v10.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h1.1V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M451.7,232.2h-2.4v-2.1h2.4V232.2z M451.7,244.1h-2.4v-9.8h2.4V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M462.6,232.4h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v10.8H454v-10.8c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.5-0.1,0.7-0.1h5.3 V232.4z M462.6,236.6h-5.3v-2.4h5.3V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M474.7,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C474.6,236.4,474.7,236.9,474.7,237.5z\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M221.6,211.5c0,1.3-0.2,2.6-0.6,4c-0.4,1.4-1.1,2.8-2.1,4c-1,1.2-2.3,2.3-3.8,3.1c-1.6,0.8-3.5,1.2-5.8,1.2 h-38.6c-0.7,0-1.4-0.1-2-0.4c-0.6-0.3-1.2-0.6-1.6-1.1c-0.5-0.5-0.8-1-1.1-1.6c-0.3-0.6-0.4-1.3-0.4-2v-45.9c0-0.7,0.1-1.4,0.4-2 c0.3-0.6,0.6-1.2,1.1-1.6c0.5-0.5,1-0.8,1.6-1.1c0.6-0.3,1.3-0.4,2-0.4h34c1.3,0,2.6,0.2,4,0.7c1.4,0.4,2.8,1.2,4,2.1 c1.2,1,2.3,2.3,3.1,3.8c0.8,1.6,1.2,3.5,1.2,5.8v1.9c0,1.8-0.3,3.7-0.9,5.8c-0.6,2.1-1.6,4-2.9,5.9c1.1,0.7,2.2,1.6,3.2,2.5 c1,1,1.9,2.1,2.6,3.4c0.8,1.3,1.4,2.8,1.8,4.4c0.4,1.6,0.7,3.5,0.7,5.4V211.5z M211.4,209.5c0-1.3-0.2-2.5-0.6-3.6 c-0.4-1.1-1-2-1.8-2.7c-0.8-0.8-1.7-1.3-2.7-1.7c-1.1-0.4-2.3-0.6-3.6-0.6h-22.9v-10.3h18.4c1.3,0,2.5-0.2,3.6-0.6 c1.1-0.4,2-1,2.7-1.7c0.8-0.8,1.3-1.7,1.7-2.7c0.4-1.1,0.6-2.3,0.6-3.6V180c0-1.5-0.7-2.2-2.1-2.2h-29v35.8h33.6c0.2,0,0.4,0,0.7,0 c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7c0.2-0.3,0.2-0.7,0.2-1.3V209.5z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M266.9,191.7H244c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7c1-0.7,2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M320.1,209.5c0,1.7-0.2,3.3-0.7,4.7c-0.4,1.4-1,2.6-1.8,3.7c-0.7,1.1-1.6,2-2.5,2.7c-1,0.7-2,1.4-3,1.8 c-1.1,0.5-2.1,0.8-3.2,1c-1.1,0.2-2.1,0.3-3.1,0.3h-18.4c-1.4,0-2.9-0.2-4.6-0.7c-1.7-0.5-3.2-1.3-4.6-2.4c-1.4-1.1-2.6-2.6-3.6-4.4 c-1-1.8-1.4-4-1.4-6.7v-13.8c0-2.6,0.5-4.8,1.4-6.6c1-1.8,2.1-3.3,3.6-4.4c1.4-1.1,3-2,4.6-2.4c1.7-0.5,3.2-0.7,4.6-0.7h18.4 c2.6,0,4.8,0.5,6.7,1.4c1.8,0.9,3.3,2.1,4.4,3.5c1.1,1.4,1.9,3,2.4,4.6c0.5,1.7,0.8,3.2,0.8,4.7V209.5z M310,195.8 c0-1.4-0.4-2.5-1.1-3.1c-0.7-0.7-1.7-1-3.1-1h-18.3c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v13.8c0,1.3,0.4,2.3,1.1,3.1 c0.7,0.7,1.7,1.1,3.1,1.1h18.3c1.4,0,2.4-0.4,3.1-1.1c0.7-0.7,1-1.7,1-3.1V195.8z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M339.8,167.6h-10.2v2.5c3.4,0,6.8-0.1,10.2-0.2V167.6z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M329.6,170.1v53.7h10.2v-54.3C336.4,169.7,333,170,329.6,170.1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M379.1,181.4h-16.3l-18.6,15c-0.6,0.4-1,1-1.4,1.6c-0.3,0.6-0.5,1.3-0.6,2.1c-0.1,1.6,0.5,2.9,1.6,3.9 l20.5,19.8h14.7l-24-23.1L379.1,181.4z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M429.6,195.5c0,1.4-0.2,2.9-0.7,4.6c-0.5,1.6-1.3,3.1-2.4,4.5c-1.1,1.4-2.6,2.6-4.3,3.5c-1.8,0.9-4,1.4-6.5,1.4 h-18.4v-9.7h18.4c1.4,0,2.5-0.4,3.2-1.3c0.8-0.8,1.1-1.9,1.1-3.2c0-1.3-0.4-2.4-1.3-3.1c-0.8-0.8-1.9-1.1-3.1-1.1h-18.4 c-1.4,0-2.5,0.4-3.2,1.3c-0.8,0.8-1.1,1.9-1.1,3.2v14.2c0,1.4,0.4,2.4,1.3,3.2s1.9,1.1,3.2,1.1h18.3v9.7h-18.4 c-1.4,0-2.9-0.2-4.6-0.7c-1.6-0.5-3.1-1.3-4.5-2.4c-1.4-1.1-2.6-2.6-3.5-4.3c-0.9-1.8-1.4-4-1.4-6.5v-14.3c0-1.4,0.2-2.9,0.7-4.6 c0.5-1.6,1.3-3.1,2.4-4.5c1.1-1.4,2.6-2.6,4.3-3.5c1.8-0.9,4-1.4,6.5-1.4h18.4c1.4,0,2.9,0.2,4.6,0.7c1.6,0.5,3.1,1.3,4.5,2.4 c1.4,1.1,2.6,2.6,3.5,4.3C429.2,190.8,429.6,192.9,429.6,195.5z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M474.1,191.7h-22.9c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7s2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M126.3,168.8l0,10.8c11.4,3.5,18.9,13.9,18.9,26.4c0,15.4-12.6,27.9-28.1,27.9S89.1,221.4,89.1,206 c0-12.5,7.5-22.8,18.9-26.4v-10.8c-16.9,3.8-28.7,18.9-28.7,37.1c0,21.1,16.9,38.3,37.9,38.3S155,227.1,155,206 C155,187.8,143.2,172.6,126.3,168.8z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M117.2,178.1c1.9,0,3.8,0.2,5.7,0.6v-10.3c-1.9-0.3-3.8-0.4-5.7-0.4s-3.8,0.1-5.7,0.4v10.3 C113.3,178.3,115.2,178.1,117.2,178.1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M112,182c1.4-0.3,3.2-0.5,5.3-0.5c2.1,0,4,0.2,5.4,0.5c0,15.9,0,31.9,0,47.8c-3.6,0.8-7.1,0.8-10.7,0 C112,214,112,198,112,182z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLongLogo);\nexport default __webpack_public_path__ + \"static/media/longLogo.d88c527f6b93b57693fe78d036047c6b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgPin(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 293.334 293.334\",\n width: \"48px\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#4dabf5\"\n },\n d: \"M146.667,0C94.903,0,52.946,41.957,52.946,93.721c0,22.322,7.849,42.789,20.891,58.878 c4.204,5.178,11.237,13.331,14.903,18.906c21.109,32.069,48.19,78.643,56.082,116.864c1.354,6.527,2.986,6.641,4.743,0.212 c5.629-20.609,20.228-65.639,50.377-112.757c3.595-5.619,10.884-13.483,15.409-18.379c6.554-7.098,12.009-15.224,16.154-24.084 c5.651-12.086,8.882-25.466,8.882-39.629C240.387,41.962,198.43,0,146.667,0z M146.667,144.358 c-28.892,0-52.313-23.421-52.313-52.313c0-28.887,23.421-52.307,52.313-52.307s52.313,23.421,52.313,52.307 C198.98,120.938,175.559,144.358,146.667,144.358z\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n style: {\n fill: \"#4dabf5\"\n },\n cx: 146.667,\n cy: 90.196,\n r: 21.756\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPin);\nexport default __webpack_public_path__ + \"static/media/pin.773680e20aed21cad6ec30a795863659.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, type JSX } from 'react';\n\nimport {\n Grid2,\n Toolbar,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Fab,\n Button,\n Paper,\n InputAdornment,\n IconButton,\n Autocomplete,\n Box,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Check as IconCheck } from '@mui/icons-material';\n\nimport 'ol/ol.css';\nimport { Map, View, Feature } from 'ol';\nimport { Tile, Vector as LayerVector } from 'ol/layer';\nimport { Icon, Style } from 'ol/style';\nimport { OSM, Vector as VectorSource } from 'ol/source';\nimport { Point } from 'ol/geom';\nimport { toLonLat, fromLonLat } from 'ol/proj';\n\nimport { type AdminConnection, type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\n// Icons\nimport { FaCrosshairs as GeoIcon } from 'react-icons/fa';\nimport PinSVG from '../../assets/pin.svg';\n\nconst TOOLBAR_HEIGHT = 64;\nconst SETTINGS_WIDTH = 300;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n mainGrid: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n mapGrid: {\n height: '100%',\n width: `calc(100% - ${SETTINGS_WIDTH + 32}px)`,\n overflow: 'hidden',\n },\n map: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n },\n controlItem: {\n width: SETTINGS_WIDTH,\n marginBottom: 8,\n },\n controlItemAddress: {\n width: SETTINGS_WIDTH - 40,\n marginBottom: 8,\n },\n gridSettings: {\n width: SETTINGS_WIDTH + 16,\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'left',\n height: '100%',\n overflow: 'auto',\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n settingsGrid: {\n width: '100%',\n height: 'calc(100% - 54px)',\n },\n};\n\nconst CURRENCY: { id: string; title: string }[] = [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n];\n\ninterface WizardSettingsTabProps {\n t: Translate;\n socket: AdminConnection;\n theme: IobTheme;\n onDone: (settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) => void;\n}\n\ninterface WizardSettingsTabState {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number | string;\n latitude: number | string;\n firstDayOfWeek: 'sunday' | 'monday';\n}\n\nclass WizardSettingsTab extends Component<WizardSettingsTabProps, WizardSettingsTabState> {\n private OSM: {\n markerSource?: VectorSource;\n markerStyle?: Style;\n oMap?: Map;\n marker?: Feature;\n } | null = null;\n\n constructor(props: WizardSettingsTabProps) {\n super(props);\n\n this.state = {\n tempUnit: '°C',\n currency: '€',\n dateFormat: 'DD.MM.YYYY',\n isFloatComma: true,\n country: '',\n city: '',\n address: '',\n longitude: 0,\n latitude: 0,\n firstDayOfWeek: 'monday',\n };\n\n void this.props.socket.getCompactSystemConfig(true).then(obj =>\n this.setState(\n {\n tempUnit: obj.common.tempUnit,\n currency: obj.common.currency,\n dateFormat: obj.common.dateFormat,\n isFloatComma: obj.common.isFloatComma,\n country: obj.common.country,\n city: obj.common.city,\n address: '',\n longitude: obj.common.longitude,\n latitude: obj.common.latitude,\n firstDayOfWeek: obj.common.firstDayOfWeek || 'monday',\n },\n () => this.updateMap(),\n ),\n );\n }\n\n positionReady(position: { coords: { latitude: number; longitude: number } }): void {\n this.setState(\n {\n latitude: parseFloat(position.coords.latitude.toFixed(8)),\n longitude: parseFloat(position.coords.longitude.toFixed(8)),\n },\n () => this.updateMap(),\n );\n }\n\n getPositionForAddress(): void {\n window\n .fetch(\n `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(`${this.state.country} ${this.state.city} ${this.state.address}`)}`,\n )\n .then(data => data.json())\n .then(data => {\n let changed = false;\n\n if (!data || !data[0]) {\n window.alert(this.props.t('Nothing found'));\n return;\n }\n\n let latitude = parseFloat(this.state.latitude as any as string);\n if (latitude !== parseFloat(data[0].lat)) {\n latitude = parseFloat(data[0].lat);\n changed = true;\n }\n let longitude = parseFloat(this.state.longitude as any as string);\n if (longitude !== parseFloat(data[0].lon)) {\n longitude = parseFloat(data[0].lon);\n changed = true;\n }\n if (changed) {\n this.setState({ longitude, latitude }, () => this.updateMap());\n }\n })\n .catch(e => window.alert(this.props.t('Cannot fetch address %s', e)));\n }\n\n updateMap(): void {\n // OPEN STREET MAPS\n if (window.navigator.geolocation && (!this.state.longitude || !this.state.latitude)) {\n window.navigator.geolocation.getCurrentPosition(position => this.positionReady(position));\n }\n\n const center = fromLonLat([\n parseFloat((this.state.longitude as any as string) || '0'),\n parseFloat((this.state.latitude as any as string) || '0'),\n ]);\n\n if (!this.OSM) {\n // get the coordinates from the browser\n\n this.OSM = {};\n this.OSM.markerSource = new VectorSource();\n\n this.OSM.markerStyle = new Style({\n image: new Icon({\n anchor: [0.5, 49],\n anchorXUnits: 'fraction',\n anchorYUnits: 'pixels',\n opacity: 0.75,\n src: PinSVG,\n }),\n });\n\n this.OSM.oMap = new Map({\n target: 'map',\n layers: [\n new Tile({ source: new OSM() }),\n new LayerVector({\n source: this.OSM.markerSource,\n style: this.OSM.markerStyle,\n }),\n ],\n view: new View({ center, zoom: 17 }),\n });\n\n this.OSM.marker = new Feature({\n geometry: new Point(center),\n name: this.props.t('Your home'),\n });\n\n this.OSM.markerSource.addFeature(this.OSM.marker);\n\n this.OSM.oMap.on('singleclick', event => {\n const lonLat = toLonLat(event.coordinate);\n this.setState({ longitude: lonLat[0], latitude: lonLat[1] }, () => this.updateMap());\n });\n }\n\n const zoom = this.OSM.oMap.getView().getZoom();\n this.OSM.marker.setGeometry(new Point(center));\n this.OSM.oMap.setView(new View({ center, zoom }));\n }\n\n componentDidMount(): void {\n this.updateMap();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n style={styles.mainGrid}\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n style={{ width: 'calc(100% - 16px)' }}\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important main settings')}\n </Box>\n </Grid2>\n <Grid2\n container\n direction=\"column\"\n style={styles.settingsGrid}\n >\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Temperature unit')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.tempUnit}\n onChange={e => this.setState({ tempUnit: e.target.value as '°C' | '°F' })}\n >\n <MenuItem value=\"°C\">°C</MenuItem>\n <MenuItem value=\"°F\">°F</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <Autocomplete\n freeSolo\n options={CURRENCY}\n inputValue={this.state.currency}\n onChange={(event, newValue: { id: string; title: string }) =>\n this.setState({ currency: newValue ? newValue.id : '' })\n }\n onInputChange={(event, currency) => this.setState({ currency })}\n getOptionLabel={(option: { id: string; title: string }) => option.title}\n renderOption={(props, option: { id: string; title: string }) => (\n <li {...props}>{option.title}</li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t('Currency')}\n />\n )}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Date format')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.dateFormat}\n onChange={e => this.setState({ dateFormat: e.target.value })}\n >\n <MenuItem value=\"DD.MM.YYYY\">DD.MM.YYYY</MenuItem>\n <MenuItem value=\"YYYY.MM.DD\">YYYY.MM.DD</MenuItem>\n <MenuItem value=\"MM/DD/YYYY\">MM/DD/YYYY</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Float divider')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.isFloatComma ? 'true' : 'false'}\n onChange={e => this.setState({ isFloatComma: e.target.value === 'true' })}\n >\n <MenuItem value=\"true\">\n {this.props.t('comma')}\n <span style={{ marginLeft: 5 }}>- 3,14</span>\n </MenuItem>\n <MenuItem value=\"false\">\n {this.props.t('point')}\n <span style={{ marginLeft: 5 }}>- 3.14</span>\n </MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Country')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.country || ''}\n onChange={e => this.setState({ country: e.target.value })}\n >\n <MenuItem value=\"\">{this.props.t('Please select country')}</MenuItem>\n <MenuItem value=\"Germany\">{this.props.t('Germany')}</MenuItem>\n <MenuItem value=\"Austria\">{this.props.t('Austria')}</MenuItem>\n <MenuItem value=\"Switzerland\">{this.props.t('Switzerland')}</MenuItem>\n <MenuItem value=\"Russian Federation\">\n {this.props.t('Russian Federation')}\n </MenuItem>\n <MenuItem value=\"France\">{this.props.t('France')}</MenuItem>\n <MenuItem value=\"Netherlands\">{this.props.t('Netherlands')}</MenuItem>\n <MenuItem value=\"Italy\">{this.props.t('Italy')}</MenuItem>\n <MenuItem value=\"United Kingdom\">{this.props.t('United Kingdom')}</MenuItem>\n <MenuItem value=\"United States\">{this.props.t('United States')}</MenuItem>\n <MenuItem value=\"China\">{this.props.t('China')}</MenuItem>\n\n <MenuItem value=\"Afghanistan\">{this.props.t('Afghanistan')}</MenuItem>\n <MenuItem value=\"Albania\">{this.props.t('Albania')}</MenuItem>\n <MenuItem value=\"Algeria\">{this.props.t('Algeria')}</MenuItem>\n <MenuItem value=\"American Samoa\">{this.props.t('American Samoa')}</MenuItem>\n <MenuItem value=\"Andorra\">{this.props.t('Andorra')}</MenuItem>\n <MenuItem value=\"Angola\">{this.props.t('Angola')}</MenuItem>\n <MenuItem value=\"Anguilla\">{this.props.t('Anguilla')}</MenuItem>\n <MenuItem value=\"Antarctica\">{this.props.t('Antarctica')}</MenuItem>\n <MenuItem value=\"Antigua and Barbuda\">\n {this.props.t('Antigua and Barbuda')}\n </MenuItem>\n <MenuItem value=\"Argentina\">{this.props.t('Argentina')}</MenuItem>\n <MenuItem value=\"Armenia\">{this.props.t('Armenia')}</MenuItem>\n <MenuItem value=\"Aruba\">{this.props.t('Aruba')}</MenuItem>\n <MenuItem value=\"Australia\">{this.props.t('Australia')}</MenuItem>\n <MenuItem value=\"Azerbaijan\">{this.props.t('Azerbaijan')}</MenuItem>\n <MenuItem value=\"Bahamas\">{this.props.t('Bahamas')}</MenuItem>\n <MenuItem value=\"Bahrain\">{this.props.t('Bahrain')}</MenuItem>\n <MenuItem value=\"Bangladesh\">{this.props.t('Bangladesh')}</MenuItem>\n <MenuItem value=\"Barbados\">{this.props.t('Barbados')}</MenuItem>\n <MenuItem value=\"Belarus\">{this.props.t('Belarus')}</MenuItem>\n <MenuItem value=\"Belgium\">{this.props.t('Belgium')}</MenuItem>\n <MenuItem value=\"Belize\">{this.props.t('Belize')}</MenuItem>\n <MenuItem value=\"Benin\">{this.props.t('Benin')}</MenuItem>\n <MenuItem value=\"Bermuda\">{this.props.t('Bermuda')}</MenuItem>\n <MenuItem value=\"Bhutan\">{this.props.t('Bhutan')}</MenuItem>\n <MenuItem value=\"Bolivia\">{this.props.t('Bolivia')}</MenuItem>\n <MenuItem value=\"Bosnia and Herzegovina\">\n {this.props.t('Bosnia and Herzegovina')}\n </MenuItem>\n <MenuItem value=\"Botswana\">{this.props.t('Botswana')}</MenuItem>\n <MenuItem value=\"Bouvet Island\">{this.props.t('Bouvet Island')}</MenuItem>\n <MenuItem value=\"Brazil\">{this.props.t('Brazil')}</MenuItem>\n <MenuItem value=\"British Indian Ocean Territory\">\n {this.props.t('British Indian Ocean Territory')}\n </MenuItem>\n <MenuItem value=\"Brunei Darussalam\">\n {this.props.t('Brunei Darussalam')}\n </MenuItem>\n <MenuItem value=\"Bulgaria\">{this.props.t('Bulgaria')}</MenuItem>\n <MenuItem value=\"Burkina Faso\">{this.props.t('Burkina Faso')}</MenuItem>\n <MenuItem value=\"Burundi\">{this.props.t('Burundi')}</MenuItem>\n <MenuItem value=\"Cambodia\">{this.props.t('Cambodia')}</MenuItem>\n <MenuItem value=\"Cameroon\">{this.props.t('Cameroon')}</MenuItem>\n <MenuItem value=\"Canada\">{this.props.t('Canada')}</MenuItem>\n <MenuItem value=\"Cape Verde\">{this.props.t('Cape Verde')}</MenuItem>\n <MenuItem value=\"Cayman Islands\">{this.props.t('Cayman Islands')}</MenuItem>\n <MenuItem value=\"Central African Republic\">\n {this.props.t('Central African Republic')}\n </MenuItem>\n <MenuItem value=\"Chad\">{this.props.t('Chad')}</MenuItem>\n <MenuItem value=\"Chile\">{this.props.t('Chile')}</MenuItem>\n <MenuItem value=\"Christmas Island\">\n {this.props.t('Christmas Island')}\n </MenuItem>\n <MenuItem value=\"Cocos Islands\">{this.props.t('Cocos Islands')}</MenuItem>\n <MenuItem value=\"Colombia\">{this.props.t('Colombia')}</MenuItem>\n <MenuItem value=\"Comoros\">{this.props.t('Comoros')}</MenuItem>\n <MenuItem value=\"Congo\">{this.props.t('Congo')}</MenuItem>\n <MenuItem value=\"Cook Islands\">{this.props.t('Cook Islands')}</MenuItem>\n <MenuItem value=\"Costa Rica\">{this.props.t('Costa Rica')}</MenuItem>\n <MenuItem value=\"Croatia\">{this.props.t('Croatia')}</MenuItem>\n <MenuItem value=\"Cuba\">{this.props.t('Cuba')}</MenuItem>\n <MenuItem value=\"Cyprus\">{this.props.t('Cyprus')}</MenuItem>\n <MenuItem value=\"Czech Republic\">{this.props.t('Czech Republic')}</MenuItem>\n <MenuItem value=\"Denmark\">{this.props.t('Denmark')}</MenuItem>\n <MenuItem value=\"Djibouti\">{this.props.t('Djibouti')}</MenuItem>\n <MenuItem value=\"Dominica\">{this.props.t('Dominica')}</MenuItem>\n <MenuItem value=\"Dominican Republic\">\n {this.props.t('Dominican Republic')}\n </MenuItem>\n <MenuItem value=\"East Timor\">{this.props.t('East Timor')}</MenuItem>\n <MenuItem value=\"Ecuador\">{this.props.t('Ecuador')}</MenuItem>\n <MenuItem value=\"Egypt\">{this.props.t('Egypt')}</MenuItem>\n <MenuItem value=\"El Salvador\">{this.props.t('El Salvador')}</MenuItem>\n <MenuItem value=\"Equatorial Guinea\">\n {this.props.t('Equatorial Guinea')}\n </MenuItem>\n <MenuItem value=\"Eritrea\">{this.props.t('Eritrea')}</MenuItem>\n <MenuItem value=\"Estonia\">{this.props.t('Estonia')}</MenuItem>\n <MenuItem value=\"Ethiopia\">{this.props.t('Ethiopia')}</MenuItem>\n <MenuItem value=\"Falkland Islands (Malvinas)\">\n {this.props.t('Falkland Islands (Malvinas)')}\n </MenuItem>\n <MenuItem value=\"Faroe Islands\">{this.props.t('Faroe Islands')}</MenuItem>\n <MenuItem value=\"Fiji\">{this.props.t('Fiji')}</MenuItem>\n <MenuItem value=\"Finland\">{this.props.t('Finland')}</MenuItem>\n <MenuItem value=\"French Guiana\">{this.props.t('French Guiana')}</MenuItem>\n <MenuItem value=\"French Polynesia\">\n {this.props.t('French Polynesia')}\n </MenuItem>\n <MenuItem value=\"French Southern Territories\">\n {this.props.t('French Southern Territories')}\n </MenuItem>\n <MenuItem value=\"Gabon\">{this.props.t('Gabon')}</MenuItem>\n <MenuItem value=\"Gambia\">{this.props.t('Gambia')}</MenuItem>\n <MenuItem value=\"Georgia\">{this.props.t('Georgia')}</MenuItem>\n <MenuItem value=\"Ghana\">{this.props.t('Ghana')}</MenuItem>\n <MenuItem value=\"Gibraltar\">{this.props.t('Gibraltar')}</MenuItem>\n <MenuItem value=\"Guernsey\">{this.props.t('Guernsey')}</MenuItem>\n <MenuItem value=\"Greece\">{this.props.t('Greece')}</MenuItem>\n <MenuItem value=\"Greenland\">{this.props.t('Greenland')}</MenuItem>\n <MenuItem value=\"Grenada\">{this.props.t('Grenada')}</MenuItem>\n <MenuItem value=\"Guadeloupe\">{this.props.t('Guadeloupe')}</MenuItem>\n <MenuItem value=\"Guam\">{this.props.t('Guam')}</MenuItem>\n <MenuItem value=\"Guatemala\">{this.props.t('Guatemala')}</MenuItem>\n <MenuItem value=\"Guinea\">{this.props.t('Guinea')}</MenuItem>\n <MenuItem value=\"Guinea-Bissau\">{this.props.t('Guinea-Bissau')}</MenuItem>\n <MenuItem value=\"Guyana\">{this.props.t('Guyana')}</MenuItem>\n <MenuItem value=\"Haiti\">{this.props.t('Haiti')}</MenuItem>\n <MenuItem value=\"Heard and Mc Donald Islands\">\n {this.props.t('Heard and Mc Donald Islands')}\n </MenuItem>\n <MenuItem value=\"Honduras\">{this.props.t('Honduras')}</MenuItem>\n <MenuItem value=\"Hong Kong\">{this.props.t('Hong Kong')}</MenuItem>\n <MenuItem value=\"Hungary\">{this.props.t('Hungary')}</MenuItem>\n <MenuItem value=\"Iceland\">{this.props.t('Iceland')}</MenuItem>\n <MenuItem value=\"India\">{this.props.t('India')}</MenuItem>\n <MenuItem value=\"Isle of Man\">{this.props.t('Isle of Man')}</MenuItem>\n <MenuItem value=\"Indonesia\">{this.props.t('Indonesia')}</MenuItem>\n <MenuItem value=\"Iran\">{this.props.t('Iran')}</MenuItem>\n <MenuItem value=\"Iraq\">{this.props.t('Iraq')}</MenuItem>\n <MenuItem value=\"Ireland\">{this.props.t('Ireland')}</MenuItem>\n <MenuItem value=\"Israel\">{this.props.t('Israel')}</MenuItem>\n <MenuItem value=\"Ivory Coast\">{this.props.t('Ivory Coast')}</MenuItem>\n <MenuItem value=\"Jersey\">{this.props.t('Jersey')}</MenuItem>\n <MenuItem value=\"Jamaica\">{this.props.t('Jamaica')}</MenuItem>\n <MenuItem value=\"Japan\">{this.props.t('Japan')}</MenuItem>\n <MenuItem value=\"Jordan\">{this.props.t('Jordan')}</MenuItem>\n <MenuItem value=\"Kazakhstan\">{this.props.t('Kazakhstan')}</MenuItem>\n <MenuItem value=\"Kenya\">{this.props.t('Kenya')}</MenuItem>\n <MenuItem value=\"Kiribati\">{this.props.t('Kiribati')}</MenuItem>\n <MenuItem value=\"Korea\">{this.props.t('Korea')}</MenuItem>\n <MenuItem value=\"Kosovo\">{this.props.t('Kosovo')}</MenuItem>\n <MenuItem value=\"Kuwait\">{this.props.t('Kuwait')}</MenuItem>\n <MenuItem value=\"Kyrgyzstan\">{this.props.t('Kyrgyzstan')}</MenuItem>\n <MenuItem value=\"Lao People's Democratic Republic\">\n {this.props.t(\"Lao People's Democratic Republic\")}\n </MenuItem>\n <MenuItem value=\"Latvia\">{this.props.t('Latvia')}</MenuItem>\n <MenuItem value=\"Lebanon\">{this.props.t('Lebanon')}</MenuItem>\n <MenuItem value=\"Lesotho\">{this.props.t('Lesotho')}</MenuItem>\n <MenuItem value=\"Liberia\">{this.props.t('Liberia')}</MenuItem>\n <MenuItem value=\"Libyan Arab Jamahiriya\">\n {this.props.t('Libyan Arab Jamahiriya')}\n </MenuItem>\n <MenuItem value=\"Liechtenstein\">{this.props.t('Liechtenstein')}</MenuItem>\n <MenuItem value=\"Lithuania\">{this.props.t('Lithuania')}</MenuItem>\n <MenuItem value=\"Luxembourg\">{this.props.t('Luxembourg')}</MenuItem>\n <MenuItem value=\"Macau\">{this.props.t('Macau')}</MenuItem>\n <MenuItem value=\"Macedonia\">{this.props.t('Macedonia')}</MenuItem>\n <MenuItem value=\"Madagascar\">{this.props.t('Madagascar')}</MenuItem>\n <MenuItem value=\"Malawi\">{this.props.t('Malawi')}</MenuItem>\n <MenuItem value=\"Malaysia\">{this.props.t('Malaysia')}</MenuItem>\n <MenuItem value=\"Maldives\">{this.props.t('Maldives')}</MenuItem>\n <MenuItem value=\"Mali\">{this.props.t('Mali')}</MenuItem>\n <MenuItem value=\"Malta\">{this.props.t('Malta')}</MenuItem>\n <MenuItem value=\"Marshall Islands\">\n {this.props.t('Marshall Islands')}\n </MenuItem>\n <MenuItem value=\"Martinique\">{this.props.t('Martinique')}</MenuItem>\n <MenuItem value=\"Mauritania\">{this.props.t('Mauritania')}</MenuItem>\n <MenuItem value=\"Mauritius\">{this.props.t('Mauritius')}</MenuItem>\n <MenuItem value=\"Mayotte\">{this.props.t('Mayotte')}</MenuItem>\n <MenuItem value=\"Mexico\">{this.props.t('Mexico')}</MenuItem>\n <MenuItem value=\"Micronesia\">{this.props.t('Micronesia')}</MenuItem>\n <MenuItem value=\"Moldova\">{this.props.t('Moldova')}</MenuItem>\n <MenuItem value=\"Monaco\">{this.props.t('Monaco')}</MenuItem>\n <MenuItem value=\"Mongolia\">{this.props.t('Mongolia')}</MenuItem>\n <MenuItem value=\"Montenegro\">{this.props.t('Montenegro')}</MenuItem>\n <MenuItem value=\"Montserrat\">{this.props.t('Montserrat')}</MenuItem>\n <MenuItem value=\"Morocco\">{this.props.t('Morocco')}</MenuItem>\n <MenuItem value=\"Mozambique\">{this.props.t('Mozambique')}</MenuItem>\n <MenuItem value=\"Myanmar\">{this.props.t('Myanmar')}</MenuItem>\n <MenuItem value=\"Namibia\">{this.props.t('Namibia')}</MenuItem>\n <MenuItem value=\"Nauru\">{this.props.t('Nauru')}</MenuItem>\n <MenuItem value=\"Nepal\">{this.props.t('Nepal')}</MenuItem>\n <MenuItem value=\"Netherlands Antilles\">\n {this.props.t('Netherlands Antilles')}\n </MenuItem>\n <MenuItem value=\"New Caledonia\">{this.props.t('New Caledonia')}</MenuItem>\n <MenuItem value=\"New Zealand\">{this.props.t('New Zealand')}</MenuItem>\n <MenuItem value=\"Nicaragua\">{this.props.t('Nicaragua')}</MenuItem>\n <MenuItem value=\"Niger\">{this.props.t('Niger')}</MenuItem>\n <MenuItem value=\"Nigeria\">{this.props.t('Nigeria')}</MenuItem>\n <MenuItem value=\"Niue\">{this.props.t('Niue')}</MenuItem>\n <MenuItem value=\"Norfolk Island\">{this.props.t('Norfolk Island')}</MenuItem>\n <MenuItem value=\"Northern Mariana Islands\">\n {this.props.t('Northern Mariana Islands')}\n </MenuItem>\n <MenuItem value=\"Norway\">{this.props.t('Norway')}</MenuItem>\n <MenuItem value=\"Oman\">{this.props.t('Oman')}</MenuItem>\n <MenuItem value=\"Pakistan\">{this.props.t('Pakistan')}</MenuItem>\n <MenuItem value=\"Palau\">{this.props.t('Palau')}</MenuItem>\n <MenuItem value=\"Palestine\">{this.props.t('Palestine')}</MenuItem>\n <MenuItem value=\"Panama\">{this.props.t('Panama')}</MenuItem>\n <MenuItem value=\"Papua New Guinea\">\n {this.props.t('Papua New Guinea')}\n </MenuItem>\n <MenuItem value=\"Paraguay\">{this.props.t('Paraguay')}</MenuItem>\n <MenuItem value=\"Peru\">{this.props.t('Peru')}</MenuItem>\n <MenuItem value=\"Philippines\">{this.props.t('Philippines')}</MenuItem>\n <MenuItem value=\"Pitcairn\">{this.props.t('Pitcairn')}</MenuItem>\n <MenuItem value=\"Poland\">{this.props.t('Poland')}</MenuItem>\n <MenuItem value=\"Portugal\">{this.props.t('Portugal')}</MenuItem>\n <MenuItem value=\"Puerto Rico\">{this.props.t('Puerto Rico')}</MenuItem>\n <MenuItem value=\"Qatar\">{this.props.t('Qatar')}</MenuItem>\n <MenuItem value=\"Reunion\">{this.props.t('Reunion')}</MenuItem>\n <MenuItem value=\"Romania\">{this.props.t('Romania')}</MenuItem>\n <MenuItem value=\"Rwanda\">{this.props.t('Rwanda')}</MenuItem>\n <MenuItem value=\"Saint Kitts and Nevis\">\n {this.props.t('Saint Kitts and Nevis')}\n </MenuItem>\n <MenuItem value=\"Saint Lucia\">{this.props.t('Saint Lucia')}</MenuItem>\n <MenuItem value=\"Saint Vincent and the Grenadines\">\n {this.props.t('Saint Vincent and the Grenadines')}\n </MenuItem>\n <MenuItem value=\"Samoa\">{this.props.t('Samoa')}</MenuItem>\n <MenuItem value=\"San Marino\">{this.props.t('San Marino')}</MenuItem>\n <MenuItem value=\"Sao Tome and Principe\">\n {this.props.t('Sao Tome and Principe')}\n </MenuItem>\n <MenuItem value=\"Saudi Arabia\">{this.props.t('Saudi Arabia')}</MenuItem>\n <MenuItem value=\"Senegal\">{this.props.t('Senegal')}</MenuItem>\n <MenuItem value=\"Serbia\">{this.props.t('Serbia')}</MenuItem>\n <MenuItem value=\"Seychelles\">{this.props.t('Seychelles')}</MenuItem>\n <MenuItem value=\"Sierra Leone\">{this.props.t('Sierra Leone')}</MenuItem>\n <MenuItem value=\"Singapore\">{this.props.t('Singapore')}</MenuItem>\n <MenuItem value=\"Slovakia\">{this.props.t('Slovakia')}</MenuItem>\n <MenuItem value=\"Slovenia\">{this.props.t('Slovenia')}</MenuItem>\n <MenuItem value=\"Solomon Islands\">\n {this.props.t('Solomon Islands')}\n </MenuItem>\n <MenuItem value=\"Somalia\">{this.props.t('Somalia')}</MenuItem>\n <MenuItem value=\"South Africa\">{this.props.t('South Africa')}</MenuItem>\n <MenuItem value=\"South Georgia South Sandwich Islands\">\n {this.props.t('South Georgia South Sandwich Islands')}\n </MenuItem>\n <MenuItem value=\"Spain\">{this.props.t('Spain')}</MenuItem>\n <MenuItem value=\"Sri Lanka\">{this.props.t('Sri Lanka')}</MenuItem>\n <MenuItem value=\"St. Helena\">{this.props.t('St. Helena')}</MenuItem>\n <MenuItem value=\"St. Pierre and Miquelon\">\n {this.props.t('St. Pierre and Miquelon')}\n </MenuItem>\n <MenuItem value=\"Sudan\">{this.props.t('Sudan')}</MenuItem>\n <MenuItem value=\"Suriname\">{this.props.t('Suriname')}</MenuItem>\n <MenuItem value=\"Svalbard and Jan Mayen Islands\">\n {this.props.t('Svalbard and Jan Mayen Islands')}\n </MenuItem>\n <MenuItem value=\"Swaziland\">{this.props.t('Swaziland')}</MenuItem>\n <MenuItem value=\"Sweden\">{this.props.t('Sweden')}</MenuItem>\n <MenuItem value=\"Syrian Arab Republic\">\n {this.props.t('Syrian Arab Republic')}\n </MenuItem>\n <MenuItem value=\"Taiwan\">{this.props.t('Taiwan')}</MenuItem>\n <MenuItem value=\"Tajikistan\">{this.props.t('Tajikistan')}</MenuItem>\n <MenuItem value=\"Tanzania\">{this.props.t('Tanzania')}</MenuItem>\n <MenuItem value=\"Thailand\">{this.props.t('Thailand')}</MenuItem>\n <MenuItem value=\"Togo\">{this.props.t('Togo')}</MenuItem>\n <MenuItem value=\"Tokelau\">{this.props.t('Tokelau')}</MenuItem>\n <MenuItem value=\"Tonga\">{this.props.t('Tonga')}</MenuItem>\n <MenuItem value=\"Trinidad and Tobago\">\n {this.props.t('Trinidad and Tobago')}\n </MenuItem>\n <MenuItem value=\"Tunisia\">{this.props.t('Tunisia')}</MenuItem>\n <MenuItem value=\"Turkey\">{this.props.t('Turkey')}</MenuItem>\n <MenuItem value=\"Turkmenistan\">{this.props.t('Turkmenistan')}</MenuItem>\n <MenuItem value=\"Turks and Caicos Islands\">\n {this.props.t('Turks and Caicos Islands')}\n </MenuItem>\n <MenuItem value=\"Tuvalu\">{this.props.t('Tuvalu')}</MenuItem>\n <MenuItem value=\"Uganda\">{this.props.t('Uganda')}</MenuItem>\n <MenuItem value=\"Ukraine\">{this.props.t('Ukraine')}</MenuItem>\n <MenuItem value=\"United Arab Emirates\">\n {this.props.t('United Arab Emirates')}\n </MenuItem>\n <MenuItem value=\"United States minor outlying islands\">\n {this.props.t('United States minor outlying islands')}\n </MenuItem>\n <MenuItem value=\"Uruguay\">{this.props.t('Uruguay')}</MenuItem>\n <MenuItem value=\"Uzbekistan\">{this.props.t('Uzbekistan')}</MenuItem>\n <MenuItem value=\"Vanuatu\">{this.props.t('Vanuatu')}</MenuItem>\n <MenuItem value=\"Vatican City State\">\n {this.props.t('Vatican City State')}\n </MenuItem>\n <MenuItem value=\"Venezuela\">{this.props.t('Venezuela')}</MenuItem>\n <MenuItem value=\"Vietnam\">{this.props.t('Vietnam')}</MenuItem>\n <MenuItem value=\"Virgin Islands (British)\">\n {this.props.t('Virgin Islands (British)')}\n </MenuItem>\n <MenuItem value=\"Virgin Islands (U.S.)\">\n {this.props.t('Virgin Islands (U.S.)')}\n </MenuItem>\n <MenuItem value=\"Wallis and Futuna Islands\">\n {this.props.t('Wallis and Futuna Islands')}\n </MenuItem>\n <MenuItem value=\"Western Sahara\">{this.props.t('Western Sahara')}</MenuItem>\n <MenuItem value=\"Yemen\">{this.props.t('Yemen')}</MenuItem>\n <MenuItem value=\"Zaire\">{this.props.t('Zaire')}</MenuItem>\n <MenuItem value=\"Zambia\">{this.props.t('Zambia')}</MenuItem>\n <MenuItem value=\"Zimbabwe\">{this.props.t('Zimbabwe')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('City')}\n style={styles.controlItem}\n value={this.state.city}\n onChange={e => this.setState({ city: e.target.value })}\n slotProps={{\n input: {\n endAdornment: this.state.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ city: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Address')}\n style={styles.controlItemAddress}\n value={this.state.address}\n onKeyUp={e => e.key === 'Enter' && this.getPositionForAddress()}\n onChange={e => this.setState({ address: e.target.value })}\n helperText={this.props.t('Used only to calculate position.')}\n slotProps={{\n input: {\n endAdornment: this.state.address ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ address: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n <Fab\n size=\"small\"\n onClick={() => this.getPositionForAddress()}\n >\n <GeoIcon />\n </Fab>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Longitude')}\n style={styles.controlItem}\n value={this.state.longitude}\n onChange={e =>\n this.setState({ longitude: parseFloat(e.target.value.replace(',', '.')) })\n }\n slotProps={{\n input: {\n endAdornment: this.state.longitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ longitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Latitude')}\n style={styles.controlItem}\n value={this.state.latitude}\n onChange={e =>\n this.setState({ latitude: parseFloat(e.target.value.replace(',', '.')) })\n }\n slotProps={{\n input: {\n endAdornment: this.state.latitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ latitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Week starts with')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.firstDayOfWeek}\n onChange={e =>\n this.setState({ firstDayOfWeek: e.target.value as 'sunday' | 'monday' })\n }\n >\n <MenuItem value=\"monday\">{this.props.t('monday')}</MenuItem>\n <MenuItem value=\"sunday\">{this.props.t('sunday')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.mapGrid}>\n <div\n id=\"map\"\n style={styles.map}\n />\n </Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.onDone({\n tempUnit: this.state.tempUnit,\n currency: this.state.currency,\n dateFormat: this.state.dateFormat,\n isFloatComma: this.state.isFloatComma,\n address: this.state.address,\n firstDayOfWeek: this.state.firstDayOfWeek,\n country: this.state.country,\n city: this.state.city,\n longitude: parseFloat(this.state.longitude as string),\n latitude: parseFloat(this.state.latitude as string),\n })\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Save')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardSettingsTab);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Grid2,\n Toolbar,\n FormControlLabel,\n Checkbox,\n Button,\n Paper,\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n FormGroup,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n textAlign: 'left',\n },\n inputLine: {\n width: 400,\n margin: 'auto',\n marginBottom: 50,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardAuthSSLTabProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: (config: { auth: boolean; secure: boolean }) => void;\n}\n\ninterface WizardAuthSSLTabState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardAuthSSLTab extends Component<WizardAuthSSLTabProps, WizardAuthSSLTabState> {\n constructor(props: WizardAuthSSLTabProps) {\n super(props);\n\n this.state = {\n auth: !!this.props.auth,\n secure: !!this.props.secure,\n };\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('It is suggested to enable the authentication in admin')}\n </Box>\n </Grid2>\n <Grid2 style={styles.inputLine}>\n <FormGroup>\n <FormControlLabel\n style={styles.input}\n control={\n <Checkbox\n checked={this.state.auth}\n onChange={() => this.setState({ auth: !this.state.auth })}\n />\n }\n label={this.props.t('Authentication in Admin')}\n />\n <FormHelperText>\n {this.props.t(\n 'Activate the check of password in admin if you plan to access your ioBroker is not in \"Demilitarized Zone\"',\n )}\n </FormHelperText>\n </FormGroup>\n </Grid2>\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.input}\n >\n <InputLabel>{this.props.t('Certificates')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.secure ? 'true' : 'false'}\n onChange={e => this.setState({ secure: e.target.value === 'true' })}\n >\n <MenuItem value=\"false\">{this.props.t('No SSL')}</MenuItem>\n <MenuItem value=\"true\">{this.props.t('Use self signed certificates')}</MenuItem>\n </Select>\n <FormHelperText>\n {this.state.secure\n ? this.props.t(\n 'Browsers will inform you about the problem with self-signed certificates, but the communication is encrypted.',\n )\n : this.props.t('Your communication with admin is not encrypted')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone({ auth: this.state.auth, secure: this.state.secure })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Apply')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardAuthSSLTab);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Public as IconCloud, Language as IconCloudPro, Check as IconCheck } from '@mui/icons-material';\n\nimport { withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n text: {\n fontSize: 16,\n },\n\n error: {\n fontSize: 24,\n color: '#c61f1f',\n },\n warning: {\n fontSize: 20,\n color: '#c6891f',\n },\n information: {\n fontSize: 18,\n color: '#429c1b',\n },\n button: {\n marginRight: 16,\n },\n};\n\ninterface WizardPortForwardingProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: () => void;\n}\n\ninterface WizardPortForwardingState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardPortForwarding extends Component<WizardPortForwardingProps, WizardPortForwardingState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPortForwardingProps) {\n super(props);\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important information about port forwarding')}\n </Box>\n </Grid2>\n <Grid2>\n {!this.props.auth ? <div style={styles.error}>{this.props.t('Warning!')}</div> : null}\n {this.props.auth && !this.props.secure ? (\n <div style={styles.warning}>{this.props.t('Be aware!')}</div>\n ) : null}\n {this.props.auth && this.props.secure ? (\n <div style={styles.information}>{this.props.t('Information')}</div>\n ) : null}\n\n <div style={styles.text}>\n {this.props.t(\n 'Do not expose iobroker Admin or Web interfaces to the internet directly via the port forwarding!',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <div style={styles.text}>\n {this.props.t(\n 'The Cloud services from iobroker.net/pro can help here to do that securely:',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <Button\n style={styles.button}\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.pro', 'help')}\n startIcon={<IconCloudPro />}\n >\n ioBroker.pro\n </Button>\n <Button\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net', 'help')}\n startIcon={<IconCloud />}\n >\n ioBroker.net\n </Button>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone()}\n startIcon={<IconCheck />}\n >\n {this.props.t('Understand')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPortForwarding);\n","import React, { type JSX } from 'react';\nimport {\n Paper,\n Toolbar,\n Button,\n Accordion,\n Box,\n AccordionSummary,\n AccordionDetails,\n Checkbox,\n Typography,\n LinearProgress,\n} from '@mui/material';\nimport { Check as IconCheck, ExpandMore as ExpandMoreIcon, ArrowForward as IconNext } from '@mui/icons-material';\nimport { type AdminConnection, I18n } from '@iobroker/adapter-react-v5';\nimport type { Repository } from '@/types';\n\ninterface WizardAdaptersTabProps {\n /** Function to call if wizard step finishes */\n onDone: () => void;\n /** The socket connection */\n socket: AdminConnection;\n /** The host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardAdaptersTabState {\n /** The repository */\n repository: Repository;\n /** Adapters which should be installed */\n selectedAdapters: string[];\n}\n\ninterface AdapterOptions {\n /** Adapter name */\n name: string;\n /** Adapter description */\n description: string;\n}\n\nexport default class WizardAdaptersTab extends React.Component<WizardAdaptersTabProps, WizardAdaptersTabState> {\n /** Height of the toolbar */\n private readonly TOOLBAR_HEIGHT = 64;\n\n constructor(props: WizardAdaptersTabProps) {\n super(props);\n\n this.state = {\n repository: {},\n selectedAdapters: [],\n };\n }\n\n /**\n * Lifecycle hook called if component is mounted\n */\n async componentDidMount(): Promise<void> {\n try {\n const repository = await this.props.socket.getRepository(this.props.host, {\n repo: this.props.socket.systemConfig.common.activeRepo,\n });\n\n this.setState({ repository });\n } catch (e) {\n console.error(`Could not read repository: ${e.message}`);\n }\n }\n\n /**\n * Install adapters if the next button is called\n */\n async onDone(): Promise<void> {\n const { selectedAdapters } = this.state;\n\n this.props.onDone();\n\n // after calling onDone we install in the background\n for (const adapter of selectedAdapters) {\n await new Promise<void>(resolve => {\n this.props.executeCommand(`add ${adapter}`, this.props.host, resolve);\n });\n }\n }\n\n /**\n * Render Accordion for given adapter\n *\n * @param options Adapter specific information\n */\n renderAdapterAccordion(options: AdapterOptions): JSX.Element | null {\n const { name, description } = options;\n\n const adapter = this.state.repository[name];\n\n if (!adapter) {\n return null;\n }\n\n const lang = this.props.socket.systemLang;\n\n const title = adapter.titleLang[lang] || adapter.titleLang.en;\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'flex-start' }}>\n <Accordion\n style={{\n borderColor: 'rgba(0, 0, 0, 0.2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n width: '100%',\n }}\n >\n <AccordionSummary\n style={{\n backgroundColor: 'primary.main',\n fontWeight: 'bold',\n height: 52,\n }}\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n <Box style={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Checkbox\n sx={{ color: 'text.primary', '&.Mui-checked': { color: 'text.primary' } }}\n onClick={e => e.stopPropagation()}\n onChange={() => {\n const { selectedAdapters } = this.state;\n\n if (selectedAdapters.includes(name)) {\n const idx = selectedAdapters.indexOf(name);\n selectedAdapters.splice(idx, 1);\n } else {\n selectedAdapters.push(name);\n }\n\n this.setState({ selectedAdapters });\n }}\n />\n <img\n alt={title}\n src={adapter.extIcon}\n style={{ width: 45, height: 45 }}\n />\n {title}\n </Box>\n </AccordionSummary>\n <AccordionDetails\n style={{\n backgroundColor: 'background.appbar',\n whiteSpace: 'pre-wrap',\n fontSize: 16,\n textAlign: 'left',\n }}\n >\n <Typography>{description}</Typography>\n </AccordionDetails>\n </Accordion>\n </Box>\n );\n }\n\n /**\n * Render the actual content\n */\n renderContent(): JSX.Element {\n return (\n <Box sx={{ display: 'flex', gap: 1, flexDirection: 'column' }}>\n <Typography sx={{ paddingTop: 2 }}>{I18n.t('wizard adapter general description')}</Typography>\n <h2>{I18n.t('Cloud')}</h2>\n <Typography>{I18n.t('cloud wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'iot',\n description: I18n.t('iot wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'cloud', description: I18n.t('cloud wizard description') })}\n\n <h2>{I18n.t('Logic')}</h2>\n <Typography>{I18n.t('logic wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'javascript',\n description: I18n.t('javascript wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'scenes', description: I18n.t('scenes wizard description') })}\n\n <h2>{I18n.t('Notifications')}</h2>\n <Typography>{I18n.t('notifications wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'notification-manager',\n description: I18n.t('notification-manager wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'telegram', description: I18n.t('telegram wizard description') })}\n {this.renderAdapterAccordion({ name: 'email', description: I18n.t('email wizard description') })}\n {this.renderAdapterAccordion({ name: 'pushover', description: I18n.t('pushover wizard description') })}\n {this.renderAdapterAccordion({\n name: 'signal-cmb',\n description: I18n.t('signal-cmb wizard description'),\n })}\n\n <h2>{I18n.t('History data')}</h2>\n <Typography>{I18n.t('history wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'history', description: I18n.t('history wizard description') })}\n {this.renderAdapterAccordion({ name: 'sql', description: I18n.t('sql wizard description') })}\n\n <h2>{I18n.t('Weather')}</h2>\n <Typography>{I18n.t('weather wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'weatherunderground',\n description: I18n.t('weatherunderground wizard description'),\n })}\n\n <h2>{I18n.t('Visualization')}</h2>\n <Typography>{I18n.t('visualization wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'vis-2', description: I18n.t('vis-2 wizard description') })}\n </Box>\n );\n }\n\n /**\n * Render the component\n */\n render(): JSX.Element {\n const repositoryReceived = Object.keys(this.state.repository).length > 0;\n\n return (\n <Paper\n sx={{\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <Box\n sx={{\n height: `calc(100% - ${this.TOOLBAR_HEIGHT}px)`,\n width: '90%',\n maxWidth: '800px',\n overflow: 'auto',\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {repositoryReceived ? this.renderContent() : <LinearProgress />}\n </Box>\n <Toolbar\n sx={{\n height: this.TOOLBAR_HEIGHT,\n lineHeight: `${this.TOOLBAR_HEIGHT}px`,\n width: '100%',\n }}\n >\n <div style={{ flexGrow: 1 }} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.onDone()}\n startIcon={this.state.selectedAdapters.length ? <IconCheck /> : <IconNext />}\n >\n {this.state.selectedAdapters.length ? I18n.t('Install selected adapters') : I18n.t('Next')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Button, Dialog, DialogContent, DialogTitle, AppBar, Toolbar, Stepper, Step, StepLabel } from '@mui/material';\n\n// Icons\nimport { PlayArrow as PlayArrowIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport {\n withWidth,\n Router,\n ToggleThemeMenu,\n I18n,\n type AdminConnection,\n type ThemeName,\n type ThemeType,\n} from '@iobroker/adapter-react-v5';\n\nimport WizardPasswordTab from '@/components/Wizard/WizardPasswordTab';\nimport WizardLicenseTab from '@/components/Wizard/WizardLicenseTab';\nimport WizardFinishImage from '@/assets/wizard-finish.jpg';\nimport WizardWelcomeImage from '@/assets/wizard-welcome.jpg';\nimport Logo from '@/assets/logo.png';\nimport LongLogo from '@/assets/longLogo.svg';\nimport WizardSettingsTab from '@/components/Wizard/WizardSettingsTab';\nimport WizardAuthSSLTab from '@/components/Wizard/WizardAuthSSLTab';\nimport WizardPortForwarding from '@/components/Wizard/WizardPortForwarding';\nimport WizardAdaptersTab from '@/components/Wizard/WizardAdaptersTab';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, React.CSSProperties> = {\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n content: {\n textAlign: 'center',\n },\n tabPanel: {\n width: '100%',\n overflow: 'hidden',\n height: 'calc(100% - 72px)',\n },\n fullHeightWithoutToolbar: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'auto',\n },\n finishBackground: {\n backgroundImage: `url(${WizardFinishImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n welcomeBackground: {\n backgroundImage: `url(${WizardWelcomeImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n grow: {\n flexGrow: 1,\n },\n playIcon: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n },\n logo: {\n width: 32,\n height: 32,\n borderRadius: '50%',\n background: 'white',\n marginRight: 8,\n verticalAlign: 'middle',\n },\n themeButton: {\n float: 'right',\n display: 'inline-block',\n marginTop: -1,\n marginRight: 8,\n },\n\n finalText: {\n fontSize: 48,\n marginTop: 80,\n color: '#265063',\n fontWeight: 'bold',\n },\n finalLongLogo: {\n width: 500,\n },\n};\n\ninterface WizardDialogProps {\n socket: AdminConnection;\n onClose: (redirect?: string) => void;\n toggleTheme: () => void;\n themeName: ThemeName;\n themeType: ThemeType;\n /** Active host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardDialogState {\n activeStep: number;\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardDialog extends Component<WizardDialogProps, WizardDialogState> {\n private adminInstance: null | ioBroker.AdapterObject = null;\n\n constructor(props: WizardDialogProps) {\n super(props);\n\n this.state = {\n activeStep: 0,\n auth: false,\n secure: false,\n };\n }\n\n componentDidMount(): void {\n void this.props.socket.getCurrentInstance().then((namespace: string) =>\n this.props.socket.getObject(`system.adapter.${namespace}`).then(obj => {\n this.adminInstance = obj;\n this.setState({ auth: obj.native.auth, secure: obj.native.secure });\n }),\n );\n }\n\n renderWelcome(): JSX.Element {\n // shutterstock Standard commercial license on ioBroker GmbH: https://www.shutterstock.com/de/image-vector/welcome-neon-text-vector-sign-design-1186433386\n return (\n <div style={{ ...styles.paper, ...styles.welcomeBackground }}>\n <div style={styles.fullHeightWithoutToolbar}></div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.socket.getCompactSystemConfig(true).then(obj =>\n this.setState({\n activeStep: this.state.activeStep + 1 + (obj.common.licenseConfirmed ? 0 : 0),\n }),\n )\n }\n >\n {I18n.t('Start wizard')} <PlayArrowIcon style={styles.playIcon} />\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n renderLicense(): JSX.Element {\n return (\n <WizardLicenseTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n onDone={async (settings?: { lang: ioBroker.Languages }) => {\n const obj = await this.props.socket.getSystemConfig(true);\n obj.common.licenseConfirmed = true;\n if (settings?.lang) {\n obj.common.language = settings.lang;\n await this.props.socket.setSystemConfig(obj);\n }\n this.setState({ activeStep: this.state.activeStep + 1 });\n }}\n />\n );\n }\n\n renderPassword(): JSX.Element {\n return (\n <WizardPasswordTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(pass: string) =>\n this.props.socket\n .changePassword('admin', pass)\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderSettings(): JSX.Element {\n return (\n <WizardSettingsTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) =>\n this.props.socket\n .getSystemConfig(true)\n .then(obj => {\n Object.assign(obj.common, settings);\n return this.props.socket.setSystemConfig(obj);\n })\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderAuthentication(): JSX.Element {\n return (\n <WizardAuthSSLTab\n t={I18n.t}\n auth={this.state.auth}\n secure={this.state.secure}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: any) =>\n this.setState(settings, () => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderPortForwarding(): JSX.Element {\n return (\n <WizardPortForwarding\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n auth={this.state.auth}\n secure={this.state.secure}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n /**\n * Render the adapter selection wizard tab\n */\n renderAdapters(): JSX.Element {\n return (\n <WizardAdaptersTab\n host={this.props.host}\n socket={this.props.socket}\n executeCommand={this.props.executeCommand}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n async onClose(): Promise<void> {\n // read if discovery is available\n const discovery = await this.props.socket.getState('system.adapter.discovery.0.alive');\n\n if (this.adminInstance) {\n let certPublic;\n let certPrivate;\n if (\n this.adminInstance.native.secure !== this.state.secure ||\n this.adminInstance.native.auth !== this.state.auth\n ) {\n if (\n this.state.secure &&\n (!this.adminInstance.native.certPublic || !!this.adminInstance.native.certPrivate)\n ) {\n // get certificates\n try {\n const certs = await this.props.socket.getCertificates();\n certPublic = certs && certs.find(c => c.type === 'public');\n certPrivate = certs && certs.find(c => c.type === 'private');\n } catch (e) {\n window.alert(`Cannot read certificates: ${e}`);\n }\n }\n this.adminInstance.native.auth = this.state.auth;\n\n if (this.state.secure) {\n if (\n !(this.adminInstance.native.certPublic || certPublic) ||\n !(this.adminInstance.native.certPrivate || certPrivate)\n ) {\n window.alert(I18n.t('Cannot enable authentication as no certificates found!'));\n this.adminInstance.native.secure = false;\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n setTimeout(\n () =>\n (window.location.href = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`),\n 1000,\n );\n this.props.onClose();\n return;\n }\n this.adminInstance.native.secure = this.state.secure;\n this.adminInstance.native.certPublic = this.adminInstance.native.certPublic || certPublic.name;\n this.adminInstance.native.certPrivate = this.adminInstance.native.certPrivate || certPrivate.name;\n }\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n\n // redirect to https or http\n let redirect;\n if (this.adminInstance.native.secure) {\n redirect = `https://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n } else {\n redirect = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n }\n\n this.props.onClose(redirect);\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n }\n\n renderFinish(): JSX.Element {\n // Free Image license: https://pixabay.com/illustrations/road-sky-mountains-clouds-black-908176/\n return (\n <div style={{ ...styles.paper, ...styles.finishBackground }}>\n <div style={styles.fullHeightWithoutToolbar}>\n <div style={styles.finalText}>{I18n.t('Have fun automating your home with')}</div>\n <img\n src={LongLogo}\n alt=\"ioBroker\"\n style={styles.finalLongLogo}\n />\n </div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.onClose()}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Finish')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n onClose={() => {\n // ignore\n // This dialog can be closed only by button\n }}\n fullWidth\n fullScreen\n aria-labelledby=\"wizard-dialog-title\"\n >\n <DialogTitle id=\"wizard-dialog-title\">\n <img\n src={Logo}\n style={styles.logo}\n alt=\"logo\"\n />\n {I18n.t('Initial ioBroker setup')}{' '}\n <ToggleThemeMenu\n style={styles.themeButton}\n t={I18n.t}\n toggleTheme={this.props.toggleTheme}\n themeName={this.props.themeName as any}\n size=\"small\"\n />\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Toolbar>\n <Stepper activeStep={this.state.activeStep}>\n <Step>\n <StepLabel>{I18n.t('Welcome')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('License agreement')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Password')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Authentication')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Port forwarding')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Settings')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Adapters')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Finish')}</StepLabel>\n </Step>\n </Stepper>\n </Toolbar>\n </AppBar>\n {this.state.activeStep === 0 ? <div style={styles.tabPanel}>{this.renderWelcome()}</div> : null}\n {this.state.activeStep === 1 ? <div style={styles.tabPanel}>{this.renderLicense()}</div> : null}\n {this.state.activeStep === 2 ? <div style={styles.tabPanel}>{this.renderPassword()}</div> : null}\n {this.state.activeStep === 3 ? (\n <div style={styles.tabPanel}>{this.renderAuthentication()}</div>\n ) : null}\n {this.state.activeStep === 4 ? (\n <div style={styles.tabPanel}>{this.renderPortForwarding()}</div>\n ) : null}\n {this.state.activeStep === 5 ? <div style={styles.tabPanel}>{this.renderSettings()}</div> : null}\n {this.state.activeStep === 6 ? <div style={styles.tabPanel}>{this.renderAdapters()}</div> : null}\n {this.state.activeStep === 7 ? <div style={styles.tabPanel}>{this.renderFinish()}</div> : null}\n </DialogContent>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(WizardDialog);\n","import React from 'react';\n\nimport { type AdminConnection, type Translate, type ThemeType, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig } from '@/types';\n\nexport interface BaseSystemSettingsDialogProps {\n adminGuiConfig: AdminGuiConfig;\n onChange: (data: any, dataAux: any, cb: () => void) => void;\n data: any;\n dataAux: any;\n handle: (type: 'none' | 'extended' | 'no-city') => void;\n users: ioBroker.UserObject[];\n groups: ioBroker.GroupObject[];\n multipleRepos: boolean;\n activeRepo: string[];\n repoInfo: Record<string, ioBroker.RepoInfo>;\n histories: string[];\n themeName: ThemeName;\n themeType: ThemeType;\n host: string;\n t: Translate;\n socket: AdminConnection;\n saving: boolean;\n}\n\nabstract class BaseSystemSettingsDialog<P = undefined, S extends object = object> extends React.Component<\n P extends undefined ? BaseSystemSettingsDialogProps : P,\n S\n> {}\n\nexport default BaseSystemSettingsDialog;\n","import React, { type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport {\n Grid2,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Autocomplete,\n FormHelperText,\n InputAdornment,\n IconButton,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { Marker } from 'leaflet';\nimport type { DragEndEvent, LatLngTuple, Map } from 'leaflet';\n\nimport { Confirm as ConfirmDialog, withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\nimport { type AdminGuiConfig } from '@/types';\n\nimport AdminUtils from '../../AdminUtils';\nimport countries from '../../assets/json/countries.json';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n formControl: {\n marginRight: 8,\n minWidth: '100%',\n },\n selectEmpty: {\n marginTop: 16,\n },\n map: {\n borderRadius: 5,\n },\n};\n\nconst MyMapComponent: React.FC<{ addMap: (map: any) => any }> = props => {\n const map = useMap();\n if (props.addMap) {\n props.addMap(map);\n }\n return null;\n};\n\ninterface Setting {\n id: string;\n title: string;\n translate?: boolean;\n values: { id: string | boolean; title: string }[];\n allowText?: boolean;\n autocomplete?: boolean;\n help?: string;\n}\n\ninterface Props {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: ioBroker.SystemConfigObject;\n adminGuiConfig: AdminGuiConfig;\n saving: boolean;\n onChange: (data: any, dataAux: any, cb?: () => void) => void;\n histories: string[];\n multipleRepos: boolean;\n}\n\ninterface State {\n zoom: number;\n confirm: boolean;\n confirmValue: string;\n}\n\nclass MainSettingsDialog extends BaseSystemSettingsDialog<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n zoom: 14,\n confirm: false,\n confirmValue: '',\n };\n }\n\n marker: Marker;\n\n map: Map;\n\n cityTimer: ReturnType<typeof setTimeout>;\n\n latLongTimer: ReturnType<typeof setTimeout>;\n\n getSettings(): Setting[] {\n return [\n {\n id: 'language',\n title: 'System language:',\n translate: false,\n values: [\n {\n id: 'en',\n title: 'English',\n },\n {\n id: 'de',\n title: 'Deutsch',\n },\n {\n id: 'ru',\n title: 'русский',\n },\n {\n id: 'uk',\n title: 'український',\n },\n {\n id: 'pt',\n title: 'Portugues',\n },\n {\n id: 'nl',\n title: 'Nederlands',\n },\n {\n id: 'fr',\n title: 'français',\n },\n {\n id: 'it',\n title: 'Italiano',\n },\n {\n id: 'es',\n title: 'Espanol',\n },\n {\n id: 'pl',\n title: 'Polski',\n },\n {\n id: 'zh-ch',\n title: '简体中文',\n },\n ],\n },\n {\n id: 'tempUnit',\n title: 'Temperature units',\n translate: false,\n values: [\n {\n id: '°C',\n title: '°C',\n },\n {\n id: '°F',\n title: '°F',\n },\n ],\n },\n {\n id: 'currency',\n title: 'Currency sign',\n translate: false,\n allowText: true,\n autocomplete: true,\n values: [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n ],\n },\n {\n id: 'dateFormat',\n title: 'Date format',\n translate: true,\n values: [\n {\n id: 'DD.MM.YYYY',\n title: 'DD.MM.YYYY',\n },\n {\n id: 'YYYY.MM.DD',\n title: 'YYYY.MM.DD',\n },\n {\n id: 'MM/DD/YYYY',\n title: 'MM/DD/YYYY',\n },\n ],\n },\n {\n id: 'isFloatComma',\n title: 'Float divider sign',\n translate: true,\n values: [\n {\n id: true,\n title: 'comma',\n },\n {\n id: false,\n title: 'point',\n },\n ],\n },\n {\n id: 'defaultHistory',\n title: 'Default History',\n values: [\n { id: '', title: this.props.t('None') },\n ...this.props.histories.map(history => ({\n id: history,\n title: history,\n })),\n ],\n },\n {\n id: 'activeRepo',\n title: 'Default Repository',\n translate: false,\n values: AdminUtils.objectMap(this.props.dataAux.native.repositories, (_repo, name) => ({\n id: name,\n title: name,\n })),\n },\n {\n id: 'expertMode',\n title: 'Expert mode',\n values: [\n { id: true, title: 'on' },\n { id: false, title: 'off (default)' },\n ],\n },\n {\n id: 'defaultLogLevel',\n title: 'Default log level',\n help: 'for new instances',\n translate: false,\n values: [\n { id: 'debug', title: 'debug' },\n { id: 'info', title: 'info' },\n { id: 'warn', title: 'warn' },\n { id: 'error', title: 'error' },\n ],\n },\n {\n id: 'firstDayOfWeek',\n title: 'First day of week',\n translate: true,\n values: [\n { id: 'monday', title: 'Monday' },\n { id: 'sunday', title: 'Sunday' },\n ],\n },\n ];\n }\n\n onMap = (map: Map): void => {\n if (this.props.saving) {\n return;\n }\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n this.marker = new Marker(center, {\n draggable: true,\n title: I18n.t('Resource location'),\n alt: I18n.t('Resource Location'),\n riseOnHover: true,\n })\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: (evt: DragEndEvent) => this.onMarkerDragend(evt) });\n }\n };\n\n getSelect(e: Setting, i: number): JSX.Element | null {\n let value = (this.props.data.common as Record<string, any>)[e.id];\n\n if (e.id === 'defaultLogLevel' && !value) {\n value = 'info';\n }\n\n if (e.id === 'activeRepo' && this.props.multipleRepos) {\n return null;\n }\n\n // if disabled by vendor settings\n if (this.props.adminGuiConfig.admin.settings && this.props.adminGuiConfig.admin.settings[e.id] === false) {\n return null;\n }\n\n if (e.autocomplete && e.values) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <Autocomplete<Setting['values'][0], false, false, true>\n // variant=\"standard\"\n freeSolo\n disabled={this.props.saving}\n options={e.values}\n inputValue={value.toString()}\n onChange={(_evt, newValue) => {\n const id = this.getSettings()[i].id;\n if (typeof newValue === 'string') {\n this.doChange(id, newValue);\n return;\n }\n this.doChange(id, newValue ? newValue.id : '');\n }}\n onInputChange={(_event, newValue) => {\n const id = this.getSettings()[i].id;\n this.doChange(id, newValue);\n }}\n getOptionLabel={option => {\n if (typeof option === 'string') {\n return option;\n }\n if (e.translate) {\n return this.props.t(option.title || option.id.toString());\n }\n return option.title || option.id.toString();\n }}\n renderOption={(props, option) => (\n <li {...props}>\n {e.translate\n ? this.props.t(option.title || option.id.toString())\n : option.title || option.id}\n </li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t(e.title)}\n />\n )}\n />\n </Grid2>\n );\n }\n\n // If value is not in known values, show text input\n if (e.allowText && value && !e.values.find(elem => elem.id === value)) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={e.id}\n value={value.toString()}\n onChange={evt => this.handleChange(evt, i)}\n helperText={e.help ? this.props.t(e.help) : ''}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: value.toString() ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.handleChange({ target: { value: '' } }, i)}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n );\n }\n\n const items = e.values.map((elem, index) => (\n <MenuItem\n value={elem.id as string}\n key={index}\n >\n {e.translate ? this.props.t(elem.title || elem.id.toString()) : elem.title || elem.id}\n </MenuItem>\n ));\n\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id={e.id}\n value={value === undefined ? false : value}\n onChange={evt => this.handleChange(evt, i)}\n displayEmpty\n >\n {items}\n </Select>\n {e.help ? <FormHelperText>{this.props.t(e.help)}</FormHelperText> : null}\n </FormControl>\n </Grid2>\n );\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (this.state.confirm) {\n return (\n <ConfirmDialog\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.doChange('activeRepo', value);\n }\n });\n }}\n />\n );\n }\n\n return null;\n }\n\n getCounters = (): JSX.Element => {\n const items = countries.map((elem, index) => (\n <MenuItem\n value={elem.name}\n key={index}\n >\n {this.props.t(elem.name)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"country-label\"\n >\n {this.props.t('Country:')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"country\"\n value={this.props.data.common.country}\n onChange={this.handleChangeCountry}\n displayEmpty\n >\n {items}\n </Select>\n </FormControl>\n );\n };\n\n handleChangeCountry = (evt: SelectChangeEvent<string>): void => {\n const value = evt.target.value;\n const id = 'country';\n this.doChange(id, value);\n };\n\n onChangeText = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n this.onChangeInput(value, id);\n\n if (id === 'longitude' || id === 'latitude') {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(() => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n }, 500);\n }\n };\n\n onChangeInput = (value: any, id: string, cb?: () => void): void => this.doChange(id, value, cb);\n\n onChangeCity = (evt: { target: { value: string } }): void => {\n this.onChangeText(evt, 'city');\n\n if (this.cityTimer) {\n clearTimeout(this.cityTimer);\n }\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n void provider.search({ query: evt.target.value }).then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.onChangeInput(results[0].y, 'latitude', () =>\n this.onChangeInput(results[0].x, 'longitude', () =>\n this.onChangeInput(23, 'zoom', () => {\n this.map.flyTo([results[0].y, results[0].x]);\n this.marker.setLatLng([results[0].y, results[0].x]);\n }),\n ),\n ),\n 1200,\n );\n }\n });\n }, 500);\n };\n\n handleChange = (evt: { target: { value: string } }, selectId: number): void => {\n const value = evt.target.value;\n const id = this.getSettings()[selectId].id;\n\n if (\n id === 'activeRepo' &&\n !value.toLowerCase().startsWith('stable') &&\n !value.toLowerCase().includes('default')\n ) {\n this.setState({ confirm: true, confirmValue: value });\n } else {\n this.doChange(id, value);\n }\n };\n\n doChange = (name: string, value: any, cb?: () => void): void => {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData, null, () => cb && cb());\n };\n\n onMarkerDragend = (evt: DragEndEvent): void => {\n const ll = JSON.parse(JSON.stringify(evt.target._latlng));\n this.doChange('latitude', ll.lat, () => this.doChange('longitude', ll.lng));\n };\n\n render(): JSX.Element {\n const selectors = this.getSettings().map((e, i) => this.getSelect(e, i));\n\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n const { zoom } = this.state;\n\n return (\n <div style={styles.tabPanel}>\n {this.renderConfirmDialog()}\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 6, md: 12 }}>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ xs: 12 }}>\n <TextField\n disabled={this.props.saving}\n fullWidth\n variant=\"standard\"\n id=\"siteName\"\n label={this.props.t('Site name')}\n // @ts-expect-error will be fixed in js-controller\n value={this.props.data.common.siteName || ''}\n onChange={e => this.doChange('siteName', e.target.value)}\n helperText={this.props.t(\n \"This name will be shown in admin's header. Just to identify the whole installation\",\n )}\n slotProps={{\n input: {\n // @ts-expect-error will be fixed in js-controller\n endAdornment: this.props.data.common.siteName ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.doChange('siteName', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n {selectors}\n </Grid2>\n </Grid2>\n <Grid2 size={{ lg: 6, md: 12 }}>\n <MapContainer\n style={styles.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl\n zoomControl\n doubleClickZoom\n scrollWheelZoom\n dragging\n // animate\n easeLinearity={0.35}\n >\n <TileLayer url=\"https://{s}.tile.osm.org/{z}/{x}/{y}.png\" />\n <MyMapComponent addMap={map => this.onMap(map)} />\n </MapContainer>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>{this.getCounters()}</Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"city-label\"\n >\n {this.props.t('City:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"city\"\n label={this.props.t('City:')}\n value={this.props.data.common.city}\n onChange={evt => this.onChangeCity(evt)}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: this.props.data.common.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeCity({ target: { value: '' } })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"latitude-label\"\n >\n {this.props.t('Latitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"latitude\"\n label={this.props.t('Latitude:')}\n value={this.props.data.common.latitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'latitude')}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"longitude-label\"\n >\n {this.props.t('Longitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"longitude\"\n label={this.props.t('Longitude:')}\n value={this.props.data.common.longitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'longitude')}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(MainSettingsDialog);\n","import React from 'react';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\n\nimport {\n Checkbox,\n Fab,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Select,\n MenuItem,\n Typography,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n Menu as DragHandleIcon,\n SettingsBackupRestore as RestoreIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, withWidth, Confirm as ConfirmDialog, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport IsVisible from '@/components/IsVisible';\nimport { AUTO_UPGRADE_OPTIONS_MAPPING, AUTO_UPGRADE_SETTINGS } from '@/helpers/utils';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\nimport AdminUtils from '../../AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n dragColumn: {\n width: 32,\n },\n enableColumn: {\n width: 110,\n },\n stableColumn: {\n width: 80,\n },\n upgradePolicyColumn: {\n width: 190,\n textAlign: 'center',\n },\n buttonColumn: {\n width: 80,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n checkboxError: {\n '& span:first-child': {\n border: '2px solid #FF0000',\n borderRadius: 4,\n },\n },\n fabButton: {\n marginRight: 8,\n width: 44,\n height: 44,\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ntype Repository = Record<'stable' | string, ioBroker.RepositoryInformation>;\n\ntype RepositoryArray = Array<{ title: string; link: string }>;\n\nfunction repoToArray(repos: Repository): RepositoryArray {\n return AdminUtils.objectMap(repos, (repo, name) => ({\n title: name,\n link: repo.link,\n }));\n}\n\nfunction arrayToRepo(array: RepositoryArray): Repository {\n const result: Repository = {};\n for (const item of array) {\n // @ts-expect-error will be fixed in js-controller\n result[item.title] = { link: item.link };\n }\n\n return result;\n}\n\nconst DragHandle = SortableHandle(() => <DragHandleIcon style={{ marginTop: 8, marginRight: 0, cursor: 'handle' }} />);\n\ninterface RepositoriesDialogProps {\n t: Translate;\n data: ioBrokerObject<{ repositories: Repository }>;\n dataAux: ioBrokerObject<object, { activeRepo: string | string[] }>;\n multipleRepos: boolean;\n repoInfo: Repository;\n saving: boolean;\n onChange: (\n data: ioBrokerObject<{ repositories: Repository }>,\n dataAux?: ioBrokerObject<object, { activeRepo: string | string[] }>,\n ) => void;\n adminGuiConfig: AdminGuiConfig;\n themeType: ThemeType;\n}\n\ninterface RepositoriesDialogState {\n error: boolean;\n confirm: boolean;\n confirmValue: {\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>;\n error: boolean;\n } | null;\n}\n\nconst SortableList = SortableContainer<{ value: any }>(({ value }: { value: any }) => value);\nconst SortableItem = SortableElement<{ value: any }>(({ value }: { value: any }) => value);\n\nclass RepositoriesDialog extends BaseSystemSettingsDialog<RepositoriesDialogProps, RepositoriesDialogState> {\n constructor(props: RepositoriesDialogProps) {\n super(props);\n const repos = (\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? [this.props.dataAux.common.activeRepo]\n : this.props.dataAux.common.activeRepo\n ).filter(r => r);\n\n this.state = {\n error: !repos.length,\n confirm: false,\n confirmValue: null,\n };\n }\n\n onValueChanged(value: any, id: string, name: 'title' | 'link'): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const item = array.find(element => element.title === id);\n const oldTitle = item.title;\n item[name] = value;\n newData.native.repositories = arrayToRepo(array);\n\n let newConfig;\n if (\n ((typeof this.props.dataAux.common.activeRepo === 'string' &&\n this.props.dataAux.common.activeRepo === id) ||\n (typeof this.props.dataAux.common.activeRepo !== 'string' &&\n this.props.dataAux.common.activeRepo.includes(id))) &&\n name === 'title'\n ) {\n newConfig = this.getUpdateDefaultRepo(value, newData, oldTitle, value);\n }\n\n this.props.onChange(newData, newConfig);\n }\n\n onDelete(id: string): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.repositories = arrayToRepo(array);\n if (this.props.dataAux.common.activeRepo === id) {\n if (Object.keys(newData.native.repositories).length) {\n // set first repo as active\n this.props.onChange(newData, this.getUpdateDefaultRepo(Object.keys(newData.native.repositories)[0]));\n } else {\n this.props.onChange(newData, this.getUpdateDefaultRepo(''));\n }\n } else {\n this.props.onChange(newData);\n }\n }\n\n onAdd = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n array.push({\n title: '__',\n link: '',\n });\n newData.native.repositories = arrayToRepo(array);\n this.props.onChange(newData);\n };\n\n onRestore = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.repositories = {\n // @ts-expect-error will be fixed in js-controller\n stable: {\n link: 'http://download.iobroker.net/sources-dist.json',\n },\n // @ts-expect-error will be fixed in js-controller\n beta: {\n link: 'http://download.iobroker.net/sources-dist-latest.json',\n },\n };\n // Store old information if already read\n const oldStable = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.stable.link,\n );\n if (oldStable) {\n if (newData.native.repositories.stable.json) {\n newData.native.repositories.stable.json = this.props.data.native.repositories[oldStable].json;\n }\n if (newData.native.repositories.stable.hash) {\n newData.native.repositories.stable.hash = this.props.data.native.repositories[oldStable].hash;\n }\n if (newData.native.repositories.stable.time) {\n newData.native.repositories.stable.time = this.props.data.native.repositories[oldStable].time;\n }\n }\n const oldBeta = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.beta.link,\n );\n if (oldBeta) {\n if (newData.native.repositories.beta.json) {\n newData.native.repositories.beta.json = this.props.data.native.repositories[oldBeta].json;\n }\n if (newData.native.repositories.beta.hash) {\n newData.native.repositories.beta.hash = this.props.data.native.repositories[oldBeta].hash;\n }\n if (newData.native.repositories.beta.time) {\n newData.native.repositories.beta.time = this.props.data.native.repositories[oldBeta].time;\n }\n }\n\n const newConfig: ioBrokerObject<Record<string, unknown>, { activeRepo: string | string[] }> = AdminUtils.clone(\n this.props.dataAux,\n );\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = 'stable';\n this.props.onChange(newData, newConfig);\n return;\n }\n newConfig.common.activeRepo = ['stable'];\n newConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n\n this.props.onChange(newData, newConfig);\n return null;\n };\n\n getUpdateDefaultRepo = (\n newRepo: string,\n newData?: ioBrokerObject<{ repositories: Repository }>,\n oldTitle?: string,\n newTitle?: string,\n ): ioBrokerObject<object, { activeRepo: string | string[] }> => {\n const newConfig = AdminUtils.clone(this.props.dataAux);\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = newRepo;\n return newConfig;\n }\n newData = newData || AdminUtils.clone(this.props.data);\n if (oldTitle !== undefined && typeof newConfig.common.activeRepo !== 'string') {\n const pos = newConfig.common.activeRepo.indexOf(oldTitle);\n if (pos !== -1) {\n newConfig.common.activeRepo[pos] = newTitle;\n }\n }\n\n if (typeof newConfig.common.activeRepo === 'string' && newConfig.common.activeRepo) {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n newConfig.common.activeRepo = newConfig.common.activeRepo || [];\n if (typeof newConfig.common.activeRepo !== 'string') {\n if (!newConfig.common.activeRepo.includes(newRepo)) {\n // sort activeRepo anew\n const items = repoToArray(newData.native.repositories);\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(item => item.title === a);\n const indexB = items.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n }\n }\n\n return newConfig;\n };\n\n onSortEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }): void => {\n console.log(oldIndex, newIndex);\n const newData = AdminUtils.clone(this.props.data);\n const items = repoToArray(newData.native.repositories);\n const item = items[oldIndex];\n items.splice(oldIndex, 1);\n items.splice(newIndex, 0, item);\n newData.native.repositories = arrayToRepo(items);\n\n const newConfig = AdminUtils.clone(this.props.dataAux);\n\n if (typeof newConfig.common.activeRepo === 'string') {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n\n // sort activeRepo anew\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(it => it.title === a);\n const indexB = items.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n this.props.onChange(newData, newConfig);\n };\n\n onChangeActiveRepo(\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>,\n error: boolean,\n showWarning: boolean,\n ): void {\n if (showWarning) {\n this.setState({ confirm: true, confirmValue: { newData, error } });\n } else {\n this.setState({ error }, () => this.props.onChange(null, newData));\n }\n }\n\n renderConfirmDialog(): React.JSX.Element {\n if (this.state.confirm) {\n return (\n <ConfirmDialog\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.setState({ error: value.error }, () => this.props.onChange(null, value.newData));\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n renderSortableItem(item: RepositoryArray[number], index: number): React.JSX.Element {\n const result = (\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n title={this.props.t('Drag and drop to reorder')}\n >\n <DragHandle />\n </TableCell>\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {index + 1}\n {this.props.multipleRepos ? (\n <Checkbox\n disabled={\n this.props.adminGuiConfig.admin.settings.activeRepo === false || this.props.saving\n }\n sx={this.state.error ? styles.checkboxError : undefined}\n title={this.state.error ? I18n.t('At least one repo must be selected') : ''}\n checked={\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? this.props.dataAux.common.activeRepo === item.title\n : this.props.dataAux.common.activeRepo.includes(item.title)\n }\n onChange={() => {\n let showWarning = false;\n const newData = AdminUtils.clone(this.props.dataAux);\n if (typeof newData.common.activeRepo === 'string') {\n newData.common.activeRepo = [newData.common.activeRepo];\n }\n let pos = newData.common.activeRepo.indexOf(item.title);\n if (pos === -1) {\n newData.common.activeRepo.push(item.title);\n // newData.common.activeRepo.sort();\n // sort repos according to order of repos\n const arr = repoToArray(this.props.data.native.repositories);\n newData.common.activeRepo.sort((a, b) => {\n const indexA = arr.findIndex(it => it.title === a);\n const indexB = arr.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n showWarning = item.title.toLowerCase().startsWith('beta');\n } else {\n newData.common.activeRepo.splice(pos, 1);\n }\n\n if (\n item.title.toLowerCase().startsWith('beta') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('stable'))\n ) {\n pos = newData.common.activeRepo.findIndex(r =>\n r.toLowerCase().startsWith('stable'),\n );\n newData.common.activeRepo.splice(pos, 1);\n } else if (\n item.title.toLowerCase().startsWith('stable') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('beta'))\n ) {\n pos = newData.common.activeRepo.findIndex(r => r.toLowerCase().startsWith('beta'));\n newData.common.activeRepo.splice(pos, 1);\n }\n\n const _error = !newData.common.activeRepo.length;\n this.onChangeActiveRepo(newData, _error, showWarning);\n }}\n />\n ) : null}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t(\n 'Flag will be automatically detected as repository will be read for the first time',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled\n // @ts-expect-error will be fixed in js-controller\n checked={this.props.repoInfo[item.title]?.stable}\n indeterminate={!this.props.repoInfo[item.title]}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t('Allow automatic adapter upgrades for this repository')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled={this.props.saving}\n checked={this.props.dataAux.common?.adapterAutoUpgrade?.repositories[item.title]}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = {\n repositories: {},\n defaultPolicy: 'none',\n };\n }\n\n sysConfig.common.adapterAutoUpgrade.repositories[item.title] = e.target.checked;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n variant=\"standard\"\n disabled={this.props.saving}\n value={item.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'title')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n endAdornment: item.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${index}`}\n value={item.link}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'link')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: item.link ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'link')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(item.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n\n return (\n <SortableItem\n key={index}\n index={index}\n value={result}\n />\n );\n }\n\n renderSortableList(items: RepositoryArray): React.JSX.Element {\n const result = (\n <Table style={styles.table}>\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n />\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {this.props.multipleRepos ? I18n.t('Active') : ''}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n {I18n.t('Stable')}\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n {I18n.t('Auto-Upgrade')}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('link')}</TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{items.map((item, index) => this.renderSortableItem(item, index))}</TableBody>\n </Table>\n );\n\n return (\n <SortableList\n helperClass=\"draggable-item\"\n useDragHandle\n lockAxis=\"y\"\n onSortEnd={this.onSortEnd}\n value={result}\n />\n );\n }\n\n /**\n * Render the auto upgrade policy\n */\n renderAutoUpgradePolicy(): React.JSX.Element {\n const policy: ioBroker.AutoUpgradePolicy =\n this.props.dataAux.common.adapterAutoUpgrade?.defaultPolicy || 'none';\n const activatedRepos = this.props.dataAux.common.adapterAutoUpgrade?.repositories || {};\n\n return (\n <div style={{ display: 'flex', marginLeft: 20, flexDirection: 'column' }}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Typography>\n {I18n.t('Allow only the following upgrades to be performed automatically:')}\n </Typography>\n <Select\n variant=\"standard\"\n sx={{ marginLeft: 1, marginBottom: 1 }}\n value={policy}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n }\n\n sysConfig.common.adapterAutoUpgrade.defaultPolicy = e.target.value;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n >\n {AUTO_UPGRADE_SETTINGS.map(option => (\n <MenuItem\n value={option}\n key={option}\n >\n {AUTO_UPGRADE_OPTIONS_MAPPING[option]}\n </MenuItem>\n ))}\n </Select>\n </div>\n <IsVisible value={!!(activatedRepos.beta || activatedRepos['Beta (latest)']) && policy !== 'none'}>\n <InfoBox type=\"warning\">{I18n.t('repo_update_hint')}</InfoBox>\n </IsVisible>\n <IsVisible value={policy === 'major'}>\n <InfoBox type=\"warning\">\n {I18n.t(\n 'The current selected configuration will allow to automatically pull in incompatible changes of this adapter!',\n )}\n </InfoBox>\n </IsVisible>\n </div>\n );\n }\n\n render(): React.JSX.Element {\n const items = repoToArray(this.props.data.native.repositories);\n\n return (\n <div style={styles.tabPanel}>\n {this.renderConfirmDialog()}\n <div style={styles.buttonPanel}>\n <Fab\n size=\"small\"\n color=\"primary\"\n disabled={this.props.saving}\n aria-label=\"add\"\n onClick={this.onAdd}\n style={styles.fabButton}\n title={this.props.t('Add new line to the repository list')}\n >\n <AddIcon />\n </Fab>\n <Fab\n size=\"small\"\n disabled={this.props.saving}\n onClick={this.onRestore}\n style={styles.fabButton}\n title={this.props.t('Restore repository list to default')}\n >\n <RestoreIcon />\n </Fab>\n {this.renderAutoUpgradePolicy()}\n </div>\n <TableContainer>{this.renderSortableList(items)}</TableContainer>\n </div>\n );\n }\n}\n\nexport default withWidth()(RepositoriesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField } from '@mui/material';\n\nimport { Refresh as IconRefresh } from '@mui/icons-material';\n\nimport { withWidth, Utils, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n input: {\n width: 250,\n marginRight: 16,\n },\n button: {\n marginTop: 16,\n },\n uuidGreen: {\n color: 'green',\n },\n uuidGrey: {\n color: 'grey',\n },\n tableName: {\n width: 200,\n },\n tableDate: {\n width: 150,\n textAlign: 'right',\n },\n tableUuid: {\n width: 300,\n },\n tableValid: {\n width: 100,\n },\n tableVersion: {\n width: 50,\n },\n tableUsedIn: {\n width: 100,\n },\n tableDiv: {\n overflow: 'auto',\n height: 'calc(100% - 75px)',\n },\n tableCommercial: {\n width: 100,\n },\n licenseId: {\n fontSize: 10,\n opacity: 0.5,\n fontStyle: 'italic',\n },\n};\n\ninterface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n}\n\n// Todo: implement license object in js-controller - 'system.licenses'\ntype LicenseObject = ioBrokerObject<{\n licenses: License[];\n login: string;\n password: string;\n}>;\n\ninterface LicensesDialogProps {\n t: Translate;\n data: LicenseObject;\n host: string;\n saving: boolean;\n socket: AdminConnection;\n onChange: (data: LicenseObject) => void;\n}\n\ninterface LicensesDialogState {\n uuid: string;\n requesting: boolean;\n licenses: License[];\n // readTime: number;\n}\n\nclass LicensesDialog extends BaseSystemSettingsDialog<LicensesDialogProps, LicensesDialogState> {\n constructor(props: LicensesDialogProps) {\n super(props);\n\n this.state = {\n uuid: '',\n requesting: false,\n licenses: this.props.data.native.licenses || [],\n // readTime: this.props.data.native.readTime || 0,\n };\n }\n\n onLicensesChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (id === 'system.licenses') {\n obj = obj || ({} as ioBroker.Object);\n obj.native = obj.native || {};\n obj.native.licenses = obj.native.licenses || [];\n\n // if licenses changed\n if (JSON.stringify(obj.native.licenses) !== JSON.stringify(this.state.licenses)) {\n window.alert(this.props.t('New licenses were stored'));\n this.setState({ licenses: obj.native.licenses /* , readTime: obj.native.licenses.readTime || 0 */ });\n } else {\n window.alert(this.props.t('Licenses have not changed'));\n }\n }\n };\n\n componentDidMount(): void {\n void this.props.socket.getObject('system.meta.uuid').then(obj => {\n this.props.socket\n .subscribeObject('system.licenses', this.onLicensesChanged)\n .catch(e => window.alert(`Cannot subscribe on system.licenses: ${e}`));\n this.setState({ uuid: obj.native.uuid });\n });\n }\n\n componentWillUnmount(): void {\n void this.props.socket.unsubscribeObject('system.licenses', this.onLicensesChanged);\n }\n\n doChange(name: 'login' | 'password', value: string): void {\n const newData: LicenseObject = Utils.clone(this.props.data) as LicenseObject;\n newData.native[name] = value;\n this.props.onChange(newData);\n }\n\n async requestLicenses(): Promise<void> {\n this.setState({ requesting: true });\n try {\n let password = this.props.data.native.password;\n // if the password was not changed\n if (password === '__SOME_PASSWORD__') {\n const obj = await this.props.socket.getObject('system.licenses');\n // if login was changed\n if (obj.native.login !== this.props.data.native.login) {\n password = await this.props.socket.decrypt(obj.native.password);\n } else {\n password = null;\n }\n }\n\n const licenses = await this.props.socket.updateLicenses(\n password ? this.props.data.native.login : null,\n password,\n );\n\n if (licenses !== null && licenses !== undefined) {\n if (password) {\n window.alert(\n this.props.t('Licenses were not stored. They will be stored after the settings will be saved'),\n );\n }\n\n this.setState({ licenses, requesting: false });\n } else {\n this.setState({ requesting: false });\n }\n } catch (error) {\n this.setState({ requesting: false });\n if (error === 'permissionError') {\n window.alert(this.props.t('May not trigger \"updateLicenses\"'));\n } else if (error === 'Authentication required') {\n window.alert(this.props.t('Cannot update licenses: %s', this.props.t('Authentication required')));\n } else {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n }\n\n renderLicenses(): JSX.Element {\n return (\n <div style={styles.tableDiv}>\n <TableContainer>\n <Table\n stickyHeader\n size=\"small\"\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.tableName}>{this.props.t('Product')}</TableCell>\n <TableCell style={styles.tableDate}>{this.props.t('Ordered at')}</TableCell>\n <TableCell style={styles.tableUuid}>{this.props.t('UUID')}</TableCell>\n <TableCell style={styles.tableValid}>{this.props.t('Valid till')}</TableCell>\n <TableCell style={styles.tableVersion}>{this.props.t('V')}</TableCell>\n <TableCell style={styles.tableUsedIn}>{this.props.t('Used by')}</TableCell>\n <TableCell style={styles.tableCommercial}>{this.props.t('Invoice number')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.licenses &&\n this.state.licenses.map(license => (\n <TableRow key={license.id}>\n <TableCell style={styles.tableName}>\n <div>{license.product}</div>\n <div style={styles.licenseId}>{license.id}</div>\n </TableCell>\n <TableCell style={styles.tableDate}>\n {new Date(license.time).toLocaleDateString()}\n </TableCell>\n <TableCell\n style={{\n ...styles.tableUuid,\n ...(license.uuid && this.state.uuid === license.uuid\n ? styles.uuidGreen\n : license.uuid\n ? styles.uuidGrey\n : undefined),\n }}\n >\n {license.uuid || ''}\n </TableCell>\n <TableCell style={styles.tableValid}>\n {license.validTill === '0000-00-00 00:00:00' ? '' : license.validTill || ''}\n </TableCell>\n <TableCell style={styles.tableVersion}>{license.version || ''}</TableCell>\n <TableCell style={styles.tableUsedIn}>{license.usedBy || ''}</TableCell>\n <TableCell style={styles.tableCommercial}>\n {license.invoice !== 'free'\n ? license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.invoice\n : '-'}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <div style={styles.tabPanel}>\n <TextField\n variant=\"standard\"\n style={styles.input}\n disabled={this.props.saving || this.state.requesting}\n value={this.props.data.native.login}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Login/Email')}\n onChange={e => this.doChange('login', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <TextField\n variant=\"standard\"\n disabled={this.props.saving || this.state.requesting}\n style={styles.input}\n type=\"password\"\n value={this.props.data.native.password}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Password')}\n onChange={e => this.doChange('password', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <Button\n variant=\"contained\"\n startIcon={<IconRefresh />}\n disabled={\n this.state.requesting ||\n this.props.saving ||\n !this.props.host ||\n !this.props.data.native.password ||\n !this.props.data.native.login\n }\n onClick={() => this.requestLicenses()}\n style={styles.button}\n color=\"grey\"\n >\n {this.props.t('Check')}\n </Button>\n {this.renderLicenses()}\n </div>\n );\n }\n}\n\nexport default withWidth()(LicensesDialog);\n","import React, { type JSX } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Fab,\n IconButton,\n InputAdornment,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n} from '@mui/material';\n\nimport { Add as AddIcon, Delete as DeleteIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '../../AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n// icons\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n position: 'relative',\n },\n tableContainer: {\n zIndex: 100,\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n littleRow: {\n width: 110,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n};\n\ntype CertificateArray = {\n title: string;\n data: string;\n}[];\n\ntype Certificate = Record<string, string>;\n\ninterface CertificatesDialogProps {\n t: Translate;\n // TODO: implement certificates in js-controller - 'system.certificates'\n data: ioBrokerObject<CertificateArray>;\n onChange: (data: ioBrokerObject<CertificateArray>) => void;\n saving: boolean;\n width: string;\n}\n\ninterface CertificatesDialogState {\n chClass: boolean;\n}\n\nclass CertificatesDialog extends BaseSystemSettingsDialog<CertificatesDialogProps, CertificatesDialogState> {\n constructor(props: CertificatesDialogProps) {\n super(props);\n\n this.state = {\n chClass: false,\n };\n }\n\n static certToArray(certs: Certificate): CertificateArray {\n return AdminUtils.objectMap(certs, (cert, name: string) => ({\n title: name,\n data: cert,\n }));\n }\n\n static arrayToCert(array: CertificateArray): Certificate {\n const result: Record<string, string> = {};\n array.forEach(e => {\n result[e.title] = e.data;\n });\n\n return result;\n }\n\n static detectType(name: string): string {\n name = name.toLowerCase();\n\n if (name.includes('public') || name.includes('cert')) {\n return 'public';\n }\n if (name.includes('priv') || name.includes('key')) {\n return 'private';\n }\n if (name.includes('chain') || name.includes('ca')) {\n return 'chained';\n }\n return '';\n }\n\n render(): JSX.Element {\n const arr = CertificatesDialog.certToArray(this.props.data.native.certificates);\n\n const rows = arr.map((e, i) => {\n const type = CertificatesDialog.detectType(e.title);\n\n return (\n <TableRow\n key={i}\n className=\"float_row\"\n >\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {i + 1}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n value={e.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onChangeText(evt.target.value, e.title, 'title')}\n error={!type}\n helperText={\n type ||\n I18n.t(\n 'Unknown type: use in name \"private\", \"public\" or \"chained\" to define the certificate type',\n )\n }\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${i}`}\n value={e.data}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => {\n let value = evt.target.value.replace(/\\r/g, '').replace(/\\n/g, '');\n if (value.startsWith('--')) {\n const parts = value.split('-----');\n parts[2] = parts[2].replace(/\\s/g, '');\n value = `-----${parts[1]}-----\\r\\n${parts[2]}\\r\\n-----${parts[3]}-----`;\n }\n\n this.onChangeText(value, e.title, 'data');\n }}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.data ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'data')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(e.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n });\n return (\n <div style={styles.tabPanel}>\n <Dropzone noClick>\n {({ getRootProps, getInputProps, acceptedFiles, fileRejections }) => (\n <div\n {...getRootProps({\n className: this.state.chClass ? 'drop-container drop-dop' : 'drop-container',\n onDragEnter: () => this.setState({ chClass: true }),\n onDragLeave: () => this.setState({ chClass: false }),\n onDrop: () => {\n if (this.props.saving) {\n // ignore\n return;\n }\n if (fileRejections.length) {\n const msg: string[] = [];\n fileRejections.forEach(e => {\n const m = `${e.file.name}: `;\n const mm: string[] = [];\n e.errors.forEach(ee => mm.push(ee.message));\n msg.push(m + mm.join(','));\n });\n\n alert(msg.join(', '));\n }\n\n if (acceptedFiles.length) {\n acceptedFiles.forEach(file => {\n const reader = new FileReader();\n reader.onload = e => this.onAdd(file.name, e.target.result as string);\n reader.readAsText(file);\n });\n } else if (!fileRejections.length) {\n alert(this.props.t('No files exists'));\n }\n\n this.setState({ chClass: false });\n },\n })}\n >\n <input {...getInputProps()} />\n </div>\n )}\n </Dropzone>\n <div style={styles.buttonPanel}>\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n className=\"small_size\"\n color=\"primary\"\n aria-label=\"add\"\n onClick={() => this.onAdd()}\n >\n <AddIcon />\n </Fab>\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n {this.props.t('certs_hint')}\n </Paper>\n </div>\n <TableContainer style={styles.tableContainer}>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('Certificate')}</TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n onChangeText = (value: string, id: string, name: 'title' | 'data'): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n array.find(element => element.title === id)[name] = value;\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onDelete = (id: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onAdd = (title?: string, data?: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const certText = this.props.t('certificate');\n if (!title) {\n for (let i = 1; ; i++) {\n if (!array.find(item => item.title === `${certText}_${i}`)) {\n title = `${certText}_${i}`;\n break;\n }\n }\n }\n\n array.push({\n title: title || '__',\n data: data || '',\n });\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n}\n\nexport default withWidth()(CertificatesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Grid2, FormControl, TextField, Paper, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, type Translate, type IobTheme } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\nimport AdminUtils from '@/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 50,\n display: 'flex',\n },\n descriptionPanel: (theme: IobTheme) => ({\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n '& a': {\n paddingLeft: 3,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n }),\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n};\n\ninterface SSLDialogProps {\n t: Translate;\n data: ioBrokerObject<{ letsEncrypt: { email?: string; domains?: string; path?: string } }>;\n onChange: (data: Record<string, any>) => void;\n saving: boolean;\n}\n\nclass SSLDialog extends BaseSystemSettingsDialog<SSLDialogProps> {\n render(): JSX.Element {\n const { data } = this.props;\n const { letsEncrypt } = data.native || {};\n return (\n <div style={styles.tabPanel}>\n <div\n style={{\n width: '100%',\n // height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n fontSize: 20,\n color: '#ff4949',\n }}\n >\n {this.props.t('ra_Use iobroker.acme adapter for letsencrypt certificates')}\n </div>\n <div style={styles.buttonPanel}>\n <Paper\n variant=\"outlined\"\n sx={styles.descriptionPanel}\n dangerouslySetInnerHTML={{ __html: this.props.t('letsnecrypt_help') }}\n />\n </div>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"email\"\n disabled={this.props.saving}\n label={this.props.t('Email for account:')}\n value={letsEncrypt?.email || ''}\n onChange={evt => this.onChangeText(evt, 'email')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.email ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'email')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"domains\"\n label={this.props.t('Domains:')}\n value={letsEncrypt?.domains || ''}\n onChange={evt => this.onChangeText(evt, 'domains')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.domains ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'domains')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"path\"\n disabled={this.props.saving}\n label={this.props.t('Path to storage:')}\n value={letsEncrypt?.path || ''}\n onChange={evt => this.onChangeText(evt, 'path')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.path ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText({ target: { value: '' } }, 'path')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n\n onChangeText(evt: { target: { value: string } }, id: 'email' | 'domains' | 'path'): void {\n const value = evt.target.value;\n this.doChange(id, value);\n }\n\n doChange(name: 'email' | 'domains' | 'path', value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.letsEncrypt = newData.native.letsEncrypt || {};\n newData.native.letsEncrypt[name] = value;\n this.props.onChange(newData);\n }\n}\n\nexport default withWidth()(SSLDialog);\n","import React, { Fragment, type JSX } from 'react';\n\nimport {\n Grid2,\n Typography,\n FormControl,\n Checkbox,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n MenuItem,\n Select,\n InputLabel,\n} from '@mui/material';\n\nimport { I18n, withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '@/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex',\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n tableCell: {\n textAlign: 'center',\n border: '1px solid #AAA',\n paddingLeft: 0,\n paddingRight: 0,\n },\n};\n\ntype ACLOwners = {\n owner: ioBroker.ObjectIDs.User;\n ownerGroup: ioBroker.ObjectIDs.Group;\n};\n\ntype ACLRights = {\n object: number;\n state: number;\n file: number;\n};\n\ntype ACLObject = ioBrokerObject<object, { defaultNewAcl: ACLOwners & ACLRights }>;\n\ntype ACLObjectProps = {\n t: Translate;\n data: ACLObject;\n users: ioBroker.Object[];\n groups: ioBroker.Object[];\n onChange: (data: ACLObject) => void;\n saving: boolean;\n};\n\nclass ACLDialog extends BaseSystemSettingsDialog<ACLObjectProps> {\n private static permBits: [number, number][] = [\n [0x400, 0x200],\n [0x40, 0x20],\n [0x4, 0x2],\n ];\n\n static getTypes(): { type: keyof ACLRights; title: string }[] {\n return [\n {\n type: 'object',\n title: 'Object rights',\n },\n {\n type: 'state',\n title: 'States rights',\n },\n {\n type: 'file',\n title: 'File rights',\n },\n ];\n }\n\n getRights(type: keyof ACLRights): number[][] {\n const rts = this.props.data.common.defaultNewAcl[type];\n return ACLDialog.permBits.map(bitGroup => bitGroup.map(bit => rts & bit));\n }\n\n getTable(owner: keyof ACLRights): JSX.Element {\n const checks = this.getRights(owner);\n const checkboxes = checks.map((elem, index) => (\n <Fragment key={index}>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[0]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 0)}\n />\n </TableCell>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[1]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 1)}\n />\n </TableCell>\n </Fragment>\n ));\n\n return (\n <TableContainer>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Owner')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Group')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Everyone')}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n </TableRow>\n <TableRow>{checkboxes}</TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n );\n }\n\n doChange(name: keyof ACLOwners, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n if (name === 'owner') {\n newData.common.defaultNewAcl.owner = value as ioBroker.ObjectIDs.User;\n } else if (name === 'ownerGroup') {\n newData.common.defaultNewAcl.ownerGroup = value as ioBroker.ObjectIDs.Group;\n }\n this.props.onChange(newData);\n }\n\n handleCheck(ownerType: keyof ACLRights, elemNum: number, num: number): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.common.defaultNewAcl[ownerType] ^= ACLDialog.permBits[elemNum][num];\n this.props.onChange(newData);\n }\n\n render(): JSX.Element {\n const lang = I18n.getLanguage();\n const users = this.props.users.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const groups = this.props.groups.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const objectRights = ACLDialog.getTypes().map((ee, ii) => (\n <Grid2\n size={{ lg: 4, xs: 12, md: 6 }}\n key={ii}\n >\n <Typography\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t(ee.title)}\n </Typography>\n {this.getTable(ee.type)}\n </Grid2>\n ));\n\n return (\n <div style={styles.tabPanel}>\n <Typography\n variant=\"h5\"\n component=\"div\"\n >\n {this.props.t('Access control list')}\n </Typography>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"owner-label\"\n >\n {this.props.t('Owner user')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"owner\"\n value={this.props.data.common.defaultNewAcl.owner}\n onChange={evt => this.doChange('owner', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'users' }}\n >\n {users}\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"ownerGroup-label\"\n >\n {this.props.t('Owner group')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"ownerGroup\"\n value={this.props.data.common.defaultNewAcl.ownerGroup}\n onChange={evt => this.doChange('ownerGroup', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'ownerGroup' }}\n >\n {groups}\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={3}\n >\n {objectRights}\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(ACLDialog);\n","import React, { type JSX } from 'react';\n\nimport {\n Grid2,\n Paper,\n Card,\n Typography,\n MenuItem,\n FormControl,\n Select,\n InputLabel,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport blueGrey from '@mui/material/colors/blueGrey';\n\nimport { withWidth, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/AdminUtils';\nimport Editor from '../../components/Editor';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n(window as any).ace.config.set('basePath', 'lib/js/ace');\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n note: {\n padding: 15,\n backgroundColor: blueGrey[500],\n color: '#FFF',\n overflow: 'auto',\n flex: 'none',\n },\n sentData: {\n padding: 15,\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n border: 'none',\n overflow: 'auto',\n },\n selectEmpty: {\n marginTop: 16,\n },\n};\n\ninterface StatisticsDialogProps {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: Record<string, any> | null;\n themeType: ThemeType;\n onChange: (data: ioBroker.SystemConfigObject) => void;\n saving: boolean;\n handle: (type: string) => void;\n}\n\nclass StatisticsDialog extends BaseSystemSettingsDialog<StatisticsDialogProps> {\n static getTypes(): { id: string; title: string }[] {\n return [\n {\n id: 'none',\n title: 'none',\n },\n {\n id: 'normal',\n title: 'normal',\n },\n {\n id: 'no-city',\n title: 'no-city',\n },\n {\n id: 'extended',\n title: 'extended',\n },\n ];\n }\n\n getTypesSelector(): JSX.Element {\n const { common } = this.props.data;\n\n const items = StatisticsDialog.getTypes().map((elem, index) => (\n <MenuItem\n value={elem.title}\n key={index}\n >\n {this.props.t(elem.title)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"statistics-label\"\n >\n {this.props.t('Statistics')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"statistics\"\n value={common.diag}\n displayEmpty\n onChange={(e: SelectChangeEvent<'none' | 'normal' | 'no-city' | 'extended'>) =>\n this.handleChangeType(e.target.value as 'none' | 'normal' | 'no-city' | 'extended')\n }\n >\n {items}\n </Select>\n </FormControl>\n );\n }\n\n doChange(name: string, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData);\n }\n\n handleChangeType = (value: 'none' | 'normal' | 'no-city' | 'extended'): void => {\n this.doChange('diag', value);\n if (this.props.handle) {\n this.props.handle(value);\n }\n };\n\n render(): JSX.Element {\n return (\n <div style={{ ...styles.tabPanel, height: '100%' }}>\n <Grid2\n container\n spacing={3}\n className=\"sendData-grid\"\n style={{ height: '100%' }}\n >\n <Grid2\n size={{ lg: 4, md: 4, xs: 12 }}\n style={{ display: 'flex', flexDirection: 'column' }}\n >\n <Card style={styles.note}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Note:')}\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"div\"\n dangerouslySetInnerHTML={{ __html: this.props.t('diag-note') }}\n />\n </Card>\n {this.getTypesSelector()}\n {this.props.dataAux ? (\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n <ul>\n {Object.keys(this.props.dataAux).map(key => (\n <li key={key}>{key}</li>\n ))}\n </ul>\n </Paper>\n ) : null}\n </Grid2>\n <Grid2\n size={{ lg: 8, md: 4, xs: 12 }}\n className=\"sendData-grid\"\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <Paper style={styles.sentData}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Sent data:')}\n </Typography>\n </Paper>\n <Editor\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.props.dataAux, null, 2)}\n />\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(StatisticsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n AppBar,\n Tab,\n Tabs,\n Typography,\n Button,\n LinearProgress,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n Confirm as ConfirmDialog,\n withWidth,\n type IobTheme,\n type Translate,\n Router,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig } from '@/types';\nimport AdminUtils from '@/AdminUtils';\nimport MainSettingsDialog from './SystemSettingsTabs/MainSettingsDialog';\nimport RepositoriesDialog from './SystemSettingsTabs/RepositoriesDialog';\nimport LicensesDialog from './SystemSettingsTabs/LicensesDialog';\nimport CertificatesDialog from './SystemSettingsTabs/CertificatesDialog';\nimport SSLDialog from './SystemSettingsTabs/SSLDialog';\nimport ACLDialog from './SystemSettingsTabs/ACLDialog';\nimport StatisticsDialog from './SystemSettingsTabs/StatisticsDialog';\nimport type { BaseSystemSettingsDialogProps } from './SystemSettingsTabs/BaseSystemSettingsDialog';\n// icons\n\n// style\nimport '../assets/css/style.css';\n\nconst SOME_PASSWORD = '__SOME_PASSWORD__';\n\nconst styles: Record<string, any> = {\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'hidden',\n }),\n tab: {\n // backgroundColor:'#FFF',\n // color:lightBlue[500]\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 0 0 20px',\n },\n dialog: {\n width: '100%',\n height: '100%',\n maxWidth: '100%',\n },\n content: {\n padding: '0 !important',\n },\n selected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }),\n};\n\ntype SystemLicenseObject = ioBroker.Object & {\n name: string;\n};\n\ninterface SystemSettingsDialogProps {\n t: Translate;\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n onClose: (repoChanged?: boolean) => void;\n currentTab: { id: string };\n width: string;\n adminGuiConfig: AdminGuiConfig;\n expertModeFunc: (value: boolean) => void;\n currentHost: string;\n}\n\ninterface SystemSettingsDialogState {\n loading: boolean;\n confirmExit: boolean;\n systemConfig: ioBroker.SystemConfigObject;\n systemCertificates: ioBroker.Object;\n systemRepositories: ioBroker.Object;\n systemLicenses: ioBroker.Object;\n multipleRepos: boolean;\n licenseManager: boolean;\n host: string;\n repoInfo: Record<string, ioBroker.RepoInfo>;\n users?: ioBroker.UserObject[];\n groups?: ioBroker.GroupObject[];\n histories?: string[];\n diagData?: any;\n saving?: boolean;\n}\n\ninterface SystemSettingsDialogTab {\n id: number;\n title: string;\n component: React.FC<BaseSystemSettingsDialogProps>;\n data: string;\n name: string;\n dataAux: string;\n handle?: (type: 'none' | 'extended' | 'no-city') => void;\n socket?: AdminConnection;\n}\n\nclass SystemSettingsDialog extends Component<SystemSettingsDialogProps, SystemSettingsDialogState> {\n originalCertificates: string;\n\n originalConfig: string;\n\n originalRepositories: string;\n\n originalLicenses: string;\n\n constructor(props: SystemSettingsDialogProps) {\n super(props);\n this.state = {\n loading: true,\n confirmExit: false,\n systemConfig: null,\n systemCertificates: null,\n systemRepositories: null,\n systemLicenses: null,\n multipleRepos: false,\n licenseManager: false,\n host: '',\n repoInfo: {},\n };\n this.getSettings(/* this.state.currentHost */).catch(e => window.alert(`Cannot read settings: ${e}`));\n }\n\n async componentDidMount(): Promise<void> {\n const multipleRepos = await this.props.socket.checkFeatureSupported('CONTROLLER_MULTI_REPO');\n const licenseManager = await this.props.socket.checkFeatureSupported('CONTROLLER_LICENSE_MANAGER');\n const namespace = await this.props.socket.getCurrentInstance();\n const obj = (await this.props.socket.getObject(\n `system.adapter.${namespace}`,\n )) as any as ioBroker.InstanceObject;\n this.setState({ host: obj.common.host, multipleRepos, licenseManager });\n }\n\n async getSettings(): Promise<void> {\n const newState: Partial<SystemSettingsDialogState> = { loading: false };\n try {\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = AdminUtils.clone(systemRepositories);\n systemRepositories = (systemRepositories || {}) as ioBroker.RepositoryObject;\n systemRepositories.native = (systemRepositories.native || {}) as ioBroker.RepositoryObject['native'];\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n newState.repoInfo = {};\n\n Object.keys(systemRepositories.native.repositories).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newState.repoInfo[repo] = systemRepositories.native.repositories[repo].json._repoInfo;\n delete systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n delete systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n delete systemRepositories.native.repositories[repo].time;\n }\n }\n });\n\n this.originalRepositories = JSON.stringify(systemRepositories);\n newState.systemRepositories = systemRepositories;\n const systemConfig = await this.props.socket.getSystemConfig(true);\n this.originalConfig = JSON.stringify(systemConfig || {});\n newState.systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n systemConfig.common = systemConfig.common || ({} as ioBroker.SystemConfigCommon);\n systemConfig.native = systemConfig.native || ({} as ioBroker.SystemConfigObject['native']);\n\n systemConfig.common.defaultNewAcl = systemConfig.common.defaultNewAcl || {\n object: 1636,\n state: 1636,\n file: 1632,\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n };\n\n systemConfig.common.firstDayOfWeek = systemConfig.common.firstDayOfWeek || 'monday';\n\n newState.diagData = await this.props.socket.getDiagData(this.props.currentHost, systemConfig.common.diag);\n newState.users = await this.props.socket.getUsers();\n newState.groups = await this.props.socket.getGroups();\n const instances = await this.props.socket.getAdapterInstances(true);\n newState.histories = Object.values(instances)\n .filter(instance => instance.common.getHistory)\n .map(instance => {\n const id = instance._id.split('.');\n return `${id[id.length - 2]}.${id[id.length - 1]}`;\n });\n\n const systemCertificates = await this.props.socket.getObject('system.certificates');\n this.originalCertificates = JSON.stringify(systemCertificates);\n newState.systemCertificates = systemCertificates;\n let systemLicenses: ioBroker.Object = await this.props.socket.getObject('system.licenses');\n systemLicenses =\n systemLicenses ||\n ({\n common: {\n name: 'Licenses from iobroker.net',\n },\n native: {\n login: '',\n password: '',\n licenses: [],\n },\n type: 'config',\n } as unknown as ioBroker.Object);\n if (systemLicenses.native.password) {\n systemLicenses.native.password = SOME_PASSWORD;\n }\n\n this.originalLicenses = JSON.stringify({\n login: systemLicenses.native.login,\n password: systemLicenses.native.password,\n });\n newState.systemLicenses = systemLicenses;\n this.setState(newState as SystemSettingsDialogState);\n } catch (e) {\n window.alert(`Cannot read settings: ${e}`);\n }\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <ConfirmDialog\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n onSave(): void {\n let repoChanged = false;\n this.setState({ saving: true }, async () => {\n try {\n let systemConfig = await this.props.socket.getSystemConfig(true);\n systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n if (JSON.stringify(systemConfig.common) !== JSON.stringify(this.state.systemConfig.common)) {\n await this.props.socket.setSystemConfig(this.state.systemConfig);\n }\n await this.props.socket.setObject('system.certificates', this.state.systemCertificates);\n\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = systemRepositories || ({} as ioBroker.RepositoryObject);\n systemRepositories.native = systemRepositories.native || ({} as ioBroker.RepositoryObject['native']);\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n const newRepo = JSON.parse(JSON.stringify(this.state.systemRepositories.native.repositories));\n\n // merge new and existing info\n Object.keys(newRepo).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newRepo[repo].json = systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n newRepo[repo].hash = systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n newRepo[repo].time = systemRepositories.native.repositories[repo].time;\n }\n }\n });\n if (JSON.stringify(this.state.systemRepositories.native.repositories) !== JSON.stringify(newRepo)) {\n systemRepositories.native.repositories = newRepo;\n repoChanged = true;\n await this.props.socket.setObject('system.repositories', systemRepositories);\n }\n\n let systemLicenses = (await this.props.socket.getObject('system.licenses')) as SystemLicenseObject;\n systemLicenses = systemLicenses || ({} as SystemLicenseObject);\n systemLicenses.type = systemLicenses.type || 'config';\n systemLicenses.name = systemLicenses.name || 'Licenses from iobroker.net';\n systemLicenses.common = systemLicenses.common || ({} as SystemLicenseObject['common']);\n systemLicenses.native = systemLicenses.native || ({} as SystemLicenseObject['native']);\n systemLicenses.native.licenses = systemLicenses.native.licenses || [];\n systemLicenses.native.password = systemLicenses.native.password || '';\n systemLicenses.native.login = systemLicenses.native.login || '';\n\n const currentPassword = systemLicenses.native.password ? SOME_PASSWORD : '';\n\n if (\n this.state.systemLicenses.native.password !== currentPassword ||\n systemLicenses.native.login !== this.state.systemLicenses.native.login\n ) {\n systemLicenses.native.login = this.state.systemLicenses.native.login;\n\n if (\n this.state.systemLicenses.native.password !== SOME_PASSWORD &&\n this.state.systemLicenses.native.password\n ) {\n // encode it\n try {\n systemLicenses.native.password = await this.props.socket.encrypt(\n this.state.systemLicenses.native.password,\n );\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n } else if (!this.state.systemLicenses.native.password) {\n systemLicenses.native.password = '';\n }\n try {\n await this.props.socket.setObject('system.licenses', systemLicenses);\n await this.props.socket.updateLicenses(null, null);\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n\n // this.getSettings();\n alert(this.props.t('Settings saved'));\n this.props.onClose(repoChanged);\n if (this.state.systemConfig.common.expertMode !== JSON.parse(this.originalConfig).common.expertMode) {\n this.props.expertModeFunc(this.state.systemConfig.common.expertMode);\n }\n if (\n this.state.systemConfig.common.language !== JSON.parse(this.originalConfig).common.language ||\n JSON.stringify(this.state.systemConfig.common.activeRepo) !==\n JSON.stringify(JSON.parse(this.originalConfig).common.activeRepo)\n ) {\n window.location.reload();\n }\n this.setState({ saving: false });\n } catch (e) {\n window.alert(`Cannot save system configuration: ${e}`);\n }\n });\n }\n\n getTabs(): SystemSettingsDialogTab[] {\n return [\n {\n id: 0,\n title: 'System settings',\n component: MainSettingsDialog,\n data: 'systemConfig',\n name: 'tabConfig',\n dataAux: 'systemRepositories',\n handle: null,\n },\n {\n id: 1,\n title: 'Repositories',\n component: RepositoriesDialog,\n data: 'systemRepositories',\n name: 'tabRepositories',\n dataAux: 'systemConfig',\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 2,\n title: 'Licenses',\n component: LicensesDialog,\n data: 'systemLicenses',\n name: 'tabLicenses',\n dataAux: null,\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 3,\n title: 'Certificates',\n component: CertificatesDialog,\n data: 'systemCertificates',\n name: 'tabCertificates',\n dataAux: null,\n handle: null,\n },\n {\n id: 4,\n title: \"Let's encrypt SSL\",\n component: SSLDialog,\n data: 'systemCertificates',\n name: 'tabLetsEncrypt',\n dataAux: null,\n handle: null,\n },\n {\n id: 5,\n title: 'Default ACL',\n component: ACLDialog,\n data: 'systemConfig',\n name: 'tabDefaultACL',\n dataAux: null,\n handle: null,\n },\n {\n id: 6,\n title: 'Statistics',\n component: StatisticsDialog,\n data: 'systemConfig',\n dataAux: 'diagData',\n name: 'tabStatistics',\n handle: type => this.onChangeDiagType(type),\n },\n ];\n }\n\n onChangeDiagType = (type: 'none' | 'extended' | 'no-city'): void => {\n void this.props.socket.getDiagData(this.props.currentHost, type).then(diagData =>\n this.setState({\n diagData,\n systemConfig: {\n ...this.state.systemConfig,\n common: {\n ...this.state.systemConfig.common,\n diag: type,\n },\n },\n }),\n );\n };\n\n getDialogContent(tabsList: SystemSettingsDialogTab[]): JSX.Element {\n if (this.state.loading) {\n return <LinearProgress />;\n }\n\n const tab = tabsList.find(t => t.name === this.props.currentTab.id) || tabsList[0];\n\n const MyComponent: React.FC<BaseSystemSettingsDialogProps> = tab.component;\n const { groups, users, histories } = this.state;\n return (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n <MyComponent\n adminGuiConfig={this.props.adminGuiConfig}\n onChange={(data: any, dataAux: any, cb: () => void) =>\n this.onChangedTab(tab.data, data, tab.dataAux, dataAux, cb)\n }\n data={this.state[tab.data as keyof SystemSettingsDialogState]}\n dataAux={this.state[tab.dataAux as keyof SystemSettingsDialogState]}\n handle={tab.handle}\n users={users}\n groups={groups}\n multipleRepos={this.state.multipleRepos}\n activeRepo={this.state.systemConfig.common.activeRepo}\n repoInfo={this.state.repoInfo}\n histories={histories}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n host={this.state.host}\n t={this.props.t}\n socket={this.props.socket}\n saving={this.state.saving}\n />\n </Box>\n );\n }\n\n static onTabChanged = (newTab: string): void => {\n Router.doNavigate(null, 'system', newTab);\n };\n\n onChangedTab(id: any, data: any, idAux: any, dataAux: any, cb: () => void): void {\n if (data || dataAux) {\n const state: SystemSettingsDialogState = { ...this.state };\n if (data) {\n (state as any)[id] = data;\n }\n if (dataAux) {\n (state as any)[idAux] = dataAux;\n }\n this.setState(state, () => cb && cb());\n }\n }\n\n render(): JSX.Element {\n const changed = !(\n JSON.stringify(this.state.systemRepositories) === this.originalRepositories &&\n JSON.stringify(this.state.systemConfig) === this.originalConfig &&\n JSON.stringify(this.state.systemCertificates) === this.originalCertificates &&\n JSON.stringify({\n login: this.state.systemLicenses.native.login,\n password: this.state.systemLicenses.native.password,\n }) === this.originalLicenses\n );\n\n const tabsList = this.getTabs().filter(tab => {\n if (!this.state.licenseManager && tab.name === 'tabLicenses') {\n return false;\n }\n return this.props.adminGuiConfig.admin.settings[tab.name] !== false;\n });\n\n const tabs = tabsList.map(tab => (\n <Tab\n key={tab.title}\n label={this.props.t(tab.title)}\n value={tab.name}\n sx={{ '&.Mui-selected': styles.selected }}\n />\n ));\n\n return (\n <Dialog\n sx={{\n '&.MuiDialog-root': styles.dialog,\n '& .MuiDialog-paper': {\n height: 'calc(100% - 64px)',\n width: 'calc(100% - 64px)',\n maxWidth: 'calc(100% - 64px)',\n },\n }}\n open={!0}\n onClose={(_e, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n if (changed) {\n this.setState({ confirmExit: true });\n } else {\n this.props.onClose();\n }\n }\n }}\n fullWidth\n fullScreen={false}\n aria-labelledby=\"system-settings-dialog-title\"\n >\n <DialogContent style={styles.content}>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.dialogTitle}>\n {this.props.width !== 'xs' && this.props.width !== 'sm' && (\n <Typography className=\"dialogName\">{this.props.t('Base settings')}</Typography>\n )}\n <Tabs\n style={styles.tab}\n indicatorColor=\"secondary\"\n value={this.props.currentTab.id || 'tabConfig'}\n onChange={(_event, newTab: string) => SystemSettingsDialog.onTabChanged(newTab)}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {tabs}\n </Tabs>\n <IconButton\n size=\"large\"\n disabled={this.state.saving}\n edge=\"start\"\n color=\"inherit\"\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </div>\n </AppBar>\n {this.getDialogContent(tabsList)}\n {this.renderConfirmDialog()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!changed || this.state.saving}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.props.t('Save & Close')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={this.state.saving}\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {changed ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(SystemSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Avatar,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n FormControlLabel,\n Grid2,\n Link,\n Paper,\n TextField,\n Typography,\n} from '@mui/material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst boxShadow = '0 4px 7px 5px rgb(0 0 0 / 14%), 0 3px 1px 1px rgb(0 0 0 / 12%), 0 1px 5px 0 rgb(0 0 0 / 20%)';\n\nconst styles: Record<string, any> = {\n root: {\n padding: 10,\n margin: 'auto',\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n borderRadius: 0,\n justifyContent: 'center',\n },\n paper: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper + (theme.palette.background.paper.length < 7 ? 'd' : 'dd'),\n p: '24px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxHeight: 500,\n maxWidth: 380,\n boxShadow,\n }),\n avatar: {\n margin: 8,\n backgroundColor: '#fff',\n width: 100,\n height: 100,\n },\n avatarImg: {\n width: 'calc(100% - 4px)',\n height: 'calc(100% - 4px)',\n padding: 2,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: 8,\n },\n submit: {\n margin: 8,\n },\n alert: {\n marginTop: 16,\n backgroundColor: '#f44336',\n padding: 8,\n color: '#fff',\n borderRadius: 4,\n fontSize: 16,\n },\n ioBrokerLink: {\n textTransform: 'inherit',\n },\n marginTop: {\n marginTop: 'auto',\n },\n progress: {\n textAlign: 'center',\n },\n};\n\ndeclare global {\n interface Window {\n loginBackgroundColor: string;\n loginBackgroundImage: string;\n loginLink: string;\n loginMotto: string;\n login: string;\n loginLogo: string;\n loginHideLogo: string;\n loginTitle: string;\n }\n}\n\ninterface LoginProps {\n t: Translate;\n}\n\ninterface LoginState {\n inProcess: boolean;\n}\n\nclass Login extends Component<LoginProps, LoginState> {\n private readonly formRef: React.RefObject<HTMLFormElement>;\n\n constructor(props: LoginProps) {\n super(props);\n\n this.state = {\n inProcess: false,\n };\n\n this.formRef = React.createRef();\n\n // apply image\n const body = window.document.body;\n body.style.backgroundColor = window.loginBackgroundColor;\n body.style.backgroundImage = window.loginBackgroundImage;\n body.style.backgroundSize = 'cover';\n }\n\n render(): JSX.Element {\n const action = `${window.location.port === '3000' ? `${window.location.protocol}//${window.location.hostname}:8081/` : ''}login?${window.location.port === '3000' ? 'dev&' : ''}href=${window.location.hash}`;\n\n const link =\n window.loginLink && window.loginLink !== '@@loginLink@@' ? window.loginLink : 'https://www.iobroker.net/';\n const motto =\n window.loginMotto && window.loginMotto !== '@@loginMotto@@' ? window.loginMotto : 'Discover awesome. ';\n\n if (window.login !== 'true') {\n // eslint-disable-next-line no-debugger\n debugger;\n window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n }\n const style =\n (window.loginBackgroundColor && window.loginBackgroundColor !== 'inherit') || window.loginBackgroundImage\n ? { background: '#00000000' }\n : {};\n\n return (\n <Paper\n component=\"main\"\n style={{ ...styles.root, ...style }}\n >\n <Paper sx={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n alignItems=\"center\"\n >\n {window.loginLogo && window.loginLogo !== '@@loginLogo@@' ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={window.loginLogo}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n window.loginHideLogo === 'false' && (\n <Avatar\n style={styles.avatar}\n src=\"img/logo.png\"\n sx={{ '& .MuiAvatar-img': styles.avatarImg }}\n />\n )\n )}\n <Typography\n component=\"h1\"\n variant=\"h5\"\n >\n {window.loginTitle && window.loginTitle !== '@@loginTitle@@'\n ? window.loginTitle\n : this.props.t('loginTitle')}\n </Typography>\n {window.location.search.includes('error') && (\n <div style={styles.alert}>{this.props.t('wrongPassword')}</div>\n )}\n <form\n ref={this.formRef}\n style={styles.form}\n action={action}\n method=\"post\"\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n id=\"username\"\n label={this.props.t('enterLogin')}\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n name=\"password\"\n label={this.props.t('enterPassword')}\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n />\n <FormControlLabel\n control={\n <Checkbox\n id=\"stayloggedin\"\n name=\"stayloggedin\"\n value=\"on\"\n color=\"primary\"\n disabled={this.state.inProcess}\n />\n }\n label={this.props.t('Stay signed in')}\n />\n <input\n id=\"origin\"\n type=\"hidden\"\n name=\"origin\"\n value={window.location.pathname + window.location.search.replace('&error', '')}\n />\n {\n <Button\n type=\"submit\"\n disabled={this.state.inProcess}\n onClick={() => {\n this.formRef.current.submit();\n // give time to firefox to send the data\n setTimeout(() => this.setState({ inProcess: true }), 50);\n }}\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n style={styles.submit}\n >\n {this.state.inProcess ? <CircularProgress size={24} /> : this.props.t('login')}\n </Button>\n }\n </form>\n </Grid2>\n <Box style={styles.marginTop}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n align=\"center\"\n >\n {window.loginLink && window.loginLink !== '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {motto}\n </Link>\n ) : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? motto : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n ioBroker\n </Link>\n ) : null}\n </Typography>\n </Box>\n </Paper>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(Login);\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Checkbox,\n Grid2,\n DialogTitle,\n IconButton,\n Typography,\n Box,\n} from '@mui/material';\nimport { Build as BuildIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, IconExpert, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n fontSize: 16,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n }),\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n },\n text: {\n fontSize: 16,\n },\n textBold: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n width100: {\n width: '100%',\n },\n};\n\ninterface ExpertModeDialogProps {\n expertMode: boolean;\n onClose: (result?: string | boolean) => void;\n}\n\nconst ExpertModeDialog: React.FC<ExpertModeDialogProps> = ({\n expertMode,\n onClose,\n}: ExpertModeDialogProps): JSX.Element => {\n const [doNotShow, setDoNotShow] = useState(false);\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n <IconExpert style={{ marginRight: 8 }} />\n {I18n.t('Expert mode')}\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Grid2 container>\n <Grid2 style={styles.width100}>\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <div style={styles.pre}>\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {expertMode\n ? I18n.t(\n 'Now the expert mode will be deactivated only during this browser session.',\n )\n : I18n.t(\n 'Now the expert mode will be active only during this browser session.',\n )}\n </Typography>\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('The expert mode allows you to view and edit system internal details.')}\n </Typography>\n ) : null}\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('Please make sure you know what you are doing!')}\n </Typography>\n ) : null}\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t(\n 'If you need to save the mode all the time, you can do this in the system settings.',\n )}\n </Typography>\n {I18n.t('Use this button:')}\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={() => onClose('openSettings')}\n >\n <BuildIcon />\n </IconButton>\n </div>\n </Box>\n </Grid2>\n <Grid2>\n <FormControlLabel\n control={\n <Checkbox\n id=\"expert-mode-do-not-show\"\n checked={doNotShow}\n onChange={e => setDoNotShow(e.target.checked)}\n />\n }\n label={I18n.t('Do not show this dialog in this browser session any more')}\n />\n </Grid2>\n </Grid2>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"expert-mode-dialog-ok\"\n variant=\"contained\"\n autoFocus\n onClick={() => {\n if (doNotShow) {\n (((window as any)._sessionStorage as Storage) || window.sessionStorage).setItem(\n 'App.doNotShowExpertDialog',\n 'true',\n );\n }\n onClose(true);\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ExpertModeDialog;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n} from '@mui/material';\n\nimport {\n Update as UpdateIcon,\n SettingsRemote as SettingsRemoteIcon,\n Cancel as CancelIcon,\n CancelPresentation as CancelPresentationIcon,\n PermDeviceInformation as PermDeviceInformationIcon,\n ImportExport as ImportExportIcon,\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n Memory as MemoryIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, Utils, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n silver: {\n color: 'silver',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3,\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n marginLeft: 0,\n },\n },\n img2: {\n width: 25,\n height: 25,\n mr: '10px',\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n margin: 8,\n p: '24px',\n '@media screen and (max-width: 550px)': {\n p: '10px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n margin: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\n/** Possible message severities */\ntype Severity = 'notify' | 'info' | 'alert';\n\ninterface StatusOptions {\n /** Id of the message */\n name: string;\n /** Severity of the message */\n severity?: Severity;\n}\n\nconst Status = ({ name, severity, ...props }: StatusOptions): JSX.Element => {\n switch (name) {\n case 'restartLoop':\n return (\n <UpdateIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'memIssues':\n return (\n <MemoryIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'fsIoErrors':\n return (\n <ImportExportIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'noDiskSpace':\n return (\n <PermDeviceInformationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'accessErrors':\n return (\n <CancelPresentationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'nonExistingFileErrors':\n return (\n <CancelIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'remoteHostErrors':\n return (\n <SettingsRemoteIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'heading':\n return (\n <BellIcon\n sx={{\n fontSize: 36,\n marginLeft: 4,\n marginRight: 2,\n }}\n {...props}\n />\n );\n\n default:\n if (severity === 'notify') {\n return (\n <BellIcon\n color=\"primary\"\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n }\n};\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n value: number;\n index: number;\n styleDiv: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element;\n}\n\nconst TabPanel = ({ children, value, index, styleDiv, sxBox, ...other }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={styleDiv}\n {...other}\n >\n {value === index && (\n <Box style={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n )}\n </div>\n);\n\ninterface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n\ninterface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n instances: Record<string, InstanceMessage>;\n}\n\ninterface HostWarningDialogOptions {\n messages: Record<string, Message>;\n onClose: () => void;\n ackCallback: (name: string) => void;\n dateFormat: string;\n themeType: ThemeType;\n instances: any;\n}\n\nconst HostWarningDialog = ({\n messages,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n}: HostWarningDialogOptions): JSX.Element => {\n const [value, setValue] = useState(0);\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n\n const handleChange = (event: unknown, newValue: number): void => {\n setAutoCollapse(true);\n setValue(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion =\n (panel: string) =>\n (_event: unknown, isExpanded: boolean): void =>\n setExpanded(isExpanded ? panel : '');\n\n const dark = themeType === 'dark';\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <Status name=\"heading\" />\n {I18n.t('Host-specific notifications')}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={value}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={dark ? 'primary' : 'secondary'}\n textColor=\"primary\"\n >\n {Object.entries(messages).map(([name, entry], idx) => (\n <Tab\n style={dark ? { color: 'white' } : { color: 'black' }}\n disabled={disabled.includes(name)}\n key={name}\n label={entry.name[I18n.getLanguage()]}\n icon={\n <Status\n name={name}\n severity={entry.severity}\n />\n }\n {...a11yProps(idx)}\n />\n ))}\n </Tabs>\n </AppBar>\n {Object.keys(messages).map((name, idx) => (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${name}`}\n styleDiv={{ ...styles.overflowAuto, color: dark ? 'black' : undefined }}\n value={value}\n index={idx}\n >\n <div>\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {messages[name].name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {messages[name].description[I18n.getLanguage()]}\n </Box>\n <div>\n {messages[name].instances\n ? Object.keys(messages[name].instances).map(nameInst => {\n const index = Object.keys(messages).indexOf(name);\n\n if (autoCollapse && value === index) {\n handleChangeAccordion(`${name}-${nameInst}`)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n return (\n <Accordion\n style={dark ? undefined : { background: '#c0c0c052' }}\n key={nameInst}\n expanded={expanded === `${name}-${nameInst}`}\n onChange={handleChangeAccordion(`${name}-${nameInst}`)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{ '& .MuiAccordionSummary-content': styles.content }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {messages[name].instances[nameInst].messages.map(msg => (\n <Typography\n key={msg.ts}\n component=\"div\"\n sx={styles.message}\n >\n <Box\n component=\"div\"\n sx={styles.terminal}\n >\n {Utils.renderTextWithA(msg.message)}\n </Box>\n <Box\n component=\"div\"\n sx={styles.silver}\n >\n {Utils.formatDate(new Date(msg.ts), dateFormat)}\n </Box>\n </Typography>\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n <div style={styles.button}>\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages).length !== 1}\n disabled={disabled.includes(name)}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(name);\n setDisabled([...disabled, name]);\n }}\n color={Object.keys(messages).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n {Object.keys(messages).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(name)}\n sx={styles.buttonStyle}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, name]);\n ackCallback(name);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n </div>\n </div>\n </TabPanel>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"host-warning-dialog-ok\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default HostWarningDialog;\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils, { type Style } from '../AdminUtils';\n\ninterface LogLine {\n severity: string;\n ts: number;\n message: string | { original: string; parts: { text: string; style: Style }[] };\n from: string;\n _id: number;\n}\n\nexport interface LogLineSaved extends LogLine {\n key?: number;\n}\n\nexport default class LogsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: LogLineSaved[], messageSize: number) => void)[];\n\n private promise: Promise<{ logs: LogLineSaved[]; logSize: number }> | null;\n\n private connected: boolean;\n\n private logs: LogLineSaved[] | null;\n\n private newLogs: LogLineSaved[] | null;\n\n private errorCountHandlers: ((errors: number) => void)[];\n\n private warningCountHandlers: ((warnings: number) => void)[];\n\n private countErrors: boolean;\n\n private countWarnings: boolean;\n\n private errors: number;\n\n private warnings: number;\n\n private currentHost: string;\n\n private readonly maxLogs: number;\n\n private readonly isSafari: boolean;\n\n private logTimeout: ReturnType<typeof setTimeout> | null;\n\n private logSize: number;\n\n constructor(socket: AdminConnection, maxLogs?: number) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n this.errorCountHandlers = [];\n this.warningCountHandlers = [];\n this.countErrors = true;\n this.countWarnings = true;\n this.errors = 0;\n this.warnings = 0;\n this.currentHost = '';\n this.connected = this.socket.isConnected();\n this.maxLogs = maxLogs || 1000;\n this.logs = null;\n this.isSafari =\n navigator.vendor &&\n navigator.vendor.includes('Apple') &&\n navigator.userAgent &&\n !navigator.userAgent.includes('CriOS') &&\n !navigator.userAgent.includes('FxiOS');\n\n socket.registerLogHandler(this.logHandler);\n socket.registerConnectionHandler(this.connectionHandler);\n }\n\n setCurrentHost(currentHost: string): void {\n if (currentHost !== this.currentHost) {\n this.currentHost = currentHost;\n void this.getLogs(true);\n }\n }\n\n enableCountErrors(isEnabled: boolean): void {\n if (this.countErrors !== isEnabled) {\n this.countErrors = isEnabled;\n if (!this.countErrors) {\n const errors = this.errors;\n this.errors = 0;\n if (errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(errors));\n }\n }\n }\n }\n\n enableCountWarnings(isEnabled: boolean): void {\n if (this.countWarnings !== isEnabled) {\n this.countWarnings = isEnabled;\n if (!this.countWarnings) {\n const warnings = this.warnings;\n this.warnings = 0;\n if (warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(warnings));\n }\n }\n }\n }\n\n resetErrors(): void {\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n }\n\n resetWarnings(): void {\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n\n logHandler = (line: LogLine | string): void => {\n const result = this._processLine(line);\n\n if (result?.objLine) {\n this.newLogs = this.newLogs || [];\n this.newLogs.push(result.objLine);\n\n if (!this.logTimeout) {\n this.logTimeout = setTimeout(() => {\n this.logTimeout = null;\n const newLogs = this.newLogs;\n this.newLogs = null;\n\n this.handlers.forEach(handler => handler && handler(newLogs, JSON.stringify(line).length - 65));\n }, 200);\n }\n\n if (result.isNew) {\n if (result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n } else if (result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n }\n };\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n void this.getLogs(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n }\n }\n\n unregisterHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n const pos = this.handlers.indexOf(cb);\n\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n }\n\n registerErrorCountHandler(cb: (errors: number) => void): void {\n if (!this.errorCountHandlers.includes(cb)) {\n this.errorCountHandlers.push(cb);\n }\n }\n\n unregisterErrorCountHandler(cb: (errors: number) => void): void {\n const pos = this.errorCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.errorCountHandlers.splice(pos, 1);\n }\n }\n\n registerWarningCountHandler(cb: (warnings: number) => void): void {\n if (!this.warningCountHandlers.includes(cb)) {\n this.warningCountHandlers.push(cb);\n }\n }\n\n unregisterWarningCountHandler(cb: (warnings: number) => void): void {\n const pos = this.warningCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.warningCountHandlers.splice(pos, 1);\n }\n }\n\n _processLine(line: LogLine | string, lastKey?: number): { objLine: LogLineSaved; isNew: boolean } | null {\n // do not update logs before the first logs from host received\n if (!this.logs) {\n return null;\n }\n if (!line) {\n return null;\n }\n /* const line = {\n \"severity\": \"error\",\n \"ts\": 1588162801514,\n \"message\": \"host.DESKTOP-PLLTPO1 Invalid request getLogs. \\\"callback\\\" or \\\"from\\\" is null\",\n \"from\": \"host.DESKTOP-PLLTPO1\",\n \"_id\": 48358425\n }; */\n\n let objLine: LogLineSaved;\n let isNew = true;\n const length = this.logs.length;\n lastKey = lastKey || (length && this.logs[this.logs.length - 1].key) || 0;\n\n if (typeof line === 'object') {\n objLine = line as LogLineSaved;\n if (lastKey && lastKey <= objLine.ts) {\n objLine.key = lastKey + 1;\n } else {\n objLine.key = objLine.ts;\n }\n } else {\n // parse string\n const time = line.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}/);\n\n if (time && time.length > 0) {\n let ts;\n // Safari sucks. It is a very idiotic browser, and because of it, we must parse every number apart\n if (this.isSafari) {\n // parse every number\n const tt = line.match(/^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})/);\n ts = new Date(\n parseInt(tt[1], 10),\n parseInt(tt[2], 10) - 1,\n parseInt(tt[3], 10),\n parseInt(tt[4], 10),\n parseInt(tt[5], 10),\n parseInt(tt[6], 10),\n parseInt(tt[7], 10),\n ).getTime();\n } else {\n const tt = time[0].split(' ');\n ts = new Date(`${tt[0]}T${tt[1]}`).getTime();\n }\n let key = ts;\n\n if (lastKey && lastKey <= ts) {\n key = lastKey + 1;\n }\n\n // detect from\n const from = line.match(/: (host\\..+? |[-\\w]+\\.\\d+ \\()/);\n\n objLine = {\n key,\n from: from ? from[0].replace(/[ :(]/g, '') : '',\n message: line.split(/\\[\\d+m: /)[1],\n severity: line.match(/\\d+m(silly|debug|info|warn|error)/)[0].replace(/[\\dm]/g, ''),\n ts,\n } as LogLineSaved;\n } else {\n isNew = false;\n // if no time found\n if (length) {\n objLine = this.logs[length - 1];\n if (objLine) {\n if (typeof objLine.message === 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message.original + line);\n } else {\n objLine.message += line;\n }\n }\n }\n }\n }\n\n if (!objLine) {\n return null;\n }\n\n if (typeof objLine.message !== 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message);\n }\n\n if (isNew) {\n // if new message time is less than last message in log\n if (length && this.logs[length - 1].key > objLine.key) {\n let i;\n // find the place\n for (i = length - 1; i >= 0; i--) {\n if (this.logs[i].key < objLine.key) {\n break;\n }\n }\n if (i === -1) {\n this.logs.unshift(objLine);\n } else {\n this.logs.splice(i + 1, 0, objLine);\n }\n } else {\n this.logs.push(objLine);\n }\n\n if (length + 1 === this.maxLogs) {\n this.logs.shift();\n }\n }\n\n return { objLine, isNew };\n }\n\n getLogs(update?: boolean): Promise<{ logs: LogLineSaved[]; logSize: number }> {\n if (!this.currentHost) {\n return Promise.resolve({ logs: [], logSize: 0 });\n }\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n const oldErrors = this.errors;\n const oldWarnings = this.warnings;\n this.errors = 0;\n this.warnings = 0;\n\n this.promise = this.socket\n .getLogs(this.currentHost, 200)\n .then(lines => {\n // @ts-expect-error it can return error string or error object { error: 'permissionError' }\n if ((lines as string) === 'permissionError' || lines?.error !== undefined) {\n this.logs = [];\n\n window.alert('Cannot get logs: no permission');\n\n return { logs: this.logs, logSize: 0 };\n }\n\n const logSizeStr: string | null = lines ? (lines as string[]).pop() : null;\n let logSize = 0;\n\n if (typeof logSizeStr === 'string') {\n logSize = parseInt(logSizeStr, 10);\n }\n\n this.logs = [];\n let lastKey: number;\n\n (lines as string[]).forEach(line => {\n const result = this._processLine(line, lastKey);\n if (result?.objLine) {\n lastKey = result.objLine.key;\n if (result.isNew && result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n }\n\n if (result.isNew && result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n }\n }\n });\n\n if (this.logs?.length && this.logs[0].ts) {\n this.logs.sort((a, b) => (a.ts > b.ts ? 1 : a.ts < b.ts ? -1 : 0));\n }\n\n this.logSize = logSize;\n\n // inform subscribes about each line\n this.handlers.forEach(cb => cb && cb(this.logs, logSize));\n\n if (oldErrors !== this.errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n if (oldWarnings !== this.warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n\n return { logs: this.logs, logSize };\n })\n .catch(e => {\n window.alert(`Cannot get logs: ${e}`);\n return { logs: this.logs, logSize: 0 };\n });\n\n return this.promise;\n }\n\n clearLines(): void {\n this.logs = [];\n this.logSize = 0;\n\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../AdminUtils';\n\nexport type InstanceEventType = 'new' | 'changed' | 'deleted';\n\nexport interface InstanceEvent {\n id: string;\n obj?: ioBroker.InstanceObject;\n type: InstanceEventType;\n oldObj?: ioBroker.InstanceObject;\n}\n\nexport default class InstancesWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: InstanceEvent[]) => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.InstanceObject>> | null;\n\n private forceUpdate: boolean;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.InstanceObject> | null;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n this.forceUpdate = false;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id: string, obj?: ioBroker.InstanceObject): void => {\n this.objects = this.objects || {};\n // if instance\n if (id.match(/^system\\.adapter\\.[^.]+\\.\\d+$/)) {\n let type: InstanceEventType;\n let oldObj: ioBroker.InstanceObject | undefined;\n if (obj) {\n if (obj.type !== 'instance') {\n return;\n }\n\n AdminUtils.fixAdminUI(obj);\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n\n this.promise = null;\n this.socket.getAdapterInstancesResetCache('');\n this.forceUpdate = true;\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n isForceUpdate(): boolean {\n return this.forceUpdate;\n }\n\n // be careful with this object. Do not change them.\n getInstances(update?: boolean): Promise<void | Record<string, ioBroker.InstanceObject>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n this.promise = this.socket\n .getAdapterInstances('', update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => (this.objects[obj._id] = obj));\n return this.objects;\n })\n .catch(e => window.alert(`Cannot get adapter instances: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n void this.getInstances(true).then(\n instances =>\n instances && Object.keys(instances).forEach(id => this.objectChangeHandler(id, instances[id])),\n );\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: InstanceEvent[]) => void, doNotRequestAdapters?: boolean): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.adapter.*', this.objectChangeHandler)\n .then(() => !doNotRequestAdapters && this.getInstances())\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: InstanceEvent[]) => void): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n\n if (!this.handlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n}\n","import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport type { FilteredNotificationInformation } from '@iobroker/socket-client';\n\nexport type HostEventType = 'new' | 'changed' | 'deleted';\n\nexport type NotificationAnswer = { result: FilteredNotificationInformation } | null;\n\nexport interface HostEvent {\n id: `system.host.${string}`;\n obj?: ioBroker.HostObject;\n type: HostEventType;\n oldObj?: ioBroker.HostObject;\n}\n\nexport interface HostAliveEvent {\n id: `system.host.${string}`;\n alive: boolean;\n type: HostEventType;\n}\n\nexport default class HostsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: HostEvent[]) => void)[];\n\n private readonly aliveHandlers: (((events: HostAliveEvent[]) => void) | false)[];\n\n private readonly notificationsHandlers: ((notifications: Record<string, NotificationAnswer>) => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.HostObject>> | null;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.HostObject> | null;\n\n private readonly aliveStates: Record<string, boolean>;\n\n private readonly notificationPromises: Record<string, Promise<Record<string, NotificationAnswer | null>>>;\n\n private notificationTimer: ReturnType<typeof setTimeout> | null;\n\n private subscribeTs: number | undefined;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.aliveHandlers = [];\n this.notificationsHandlers = [];\n this.promise = null;\n this.notificationPromises = {};\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n console.log(`Connected: ${this.connected}`);\n this.objects = {};\n this.aliveStates = {};\n if (this.connected) {\n this.connectionHandler(true);\n }\n }\n\n objectChangeHandler = (id: string, obj: ioBroker.HostObject): void => {\n // if host\n if (id.startsWith('system.host.')) {\n let type: HostEventType;\n let oldObj: ioBroker.HostObject | undefined;\n if (obj) {\n if (obj.type !== 'host') {\n return;\n }\n\n if (this.objects[id]) {\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n type = 'deleted';\n oldObj = this.objects[id];\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n\n this.handlers.forEach(cb =>\n cb([\n {\n id: id as `system.host.${string}`,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n aliveChangeHandler = (id: string, state: ioBroker.State): void => {\n // if instance\n if (id.startsWith('system.host.') && id.endsWith('.alive')) {\n let type: HostEventType;\n id = id.replace(/\\.alive$/, '');\n if (state) {\n if (this.aliveStates[id] !== undefined) {\n if (!!this.aliveStates[id] !== !!state?.val) {\n type = 'changed';\n this.aliveStates[id] = !!state?.val;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.aliveStates[id] = !!state?.val;\n }\n } else if (this.aliveStates[id]) {\n type = 'deleted';\n delete this.aliveStates[id];\n } else {\n // deleted unknown instance\n return;\n }\n this.aliveHandlers.forEach(\n cb =>\n cb &&\n cb([\n {\n id: id as `system.host.${string}`,\n alive: this.aliveStates[id],\n type,\n },\n ]),\n );\n }\n };\n\n getHosts(update?: boolean): Promise<void | Record<string, ioBroker.HostObject>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getHosts(update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => (this.objects[obj._id] = obj));\n return this.objects;\n })\n .catch(e => window.alert(`Cannot get hosts: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n // read all hosts anew and inform about it\n void this.getHosts(true).then(\n hosts => hosts && Object.keys(hosts).forEach(id => this.objectChangeHandler(id, hosts[id])),\n );\n }\n if (this.aliveHandlers.length) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n Object.keys(this.aliveStates).forEach((id: string) => (this.aliveStates[id] = false));\n }\n };\n\n registerHandler(cb: (events: HostEvent[]) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: HostEvent[]) => void): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n if (!this.handlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n registerAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n if (!this.aliveHandlers.includes(cb)) {\n this.aliveHandlers.push(cb);\n\n if (this.aliveHandlers.length === 1 && this.connected) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n unregisterAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n const pos = this.aliveHandlers.indexOf(cb);\n if (pos !== -1) {\n this.aliveHandlers.splice(pos, 1);\n if (!this.aliveHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n onNotificationHandler = (id: string /* , state */): void => {\n const host = id.replace(/\\.notifications\\..+$/, '');\n\n // ignore subscribe events\n if (!this.subscribeTs || Date.now() - this.subscribeTs > 500) {\n if (this.notificationTimer) {\n clearTimeout(this.notificationTimer);\n }\n\n this.notificationTimer = setTimeout(\n host_ => {\n this.notificationTimer = null;\n this.notificationPromises[host_] = this._getNotificationsFromHosts(host_, true);\n\n void this.notificationPromises[host_].then(\n notifications => notifications && this.notificationsHandlers.forEach(cb => cb(notifications)),\n );\n },\n 300,\n host,\n );\n }\n };\n\n _getNotificationsFromHosts(hostId: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (!update && this.notificationPromises[hostId] instanceof Promise) {\n return this.notificationPromises[hostId];\n }\n\n this.notificationPromises[hostId] = this.socket.getState(`${hostId}.alive`).then(state => {\n if (state?.val) {\n return this.socket\n .getNotifications(hostId, '')\n .then((notifications: NotificationAnswer) => ({ [hostId]: notifications || null }))\n .catch(e => {\n console.warn(`Cannot read notifications from \"${hostId}\": ${e}`);\n return { [hostId]: null };\n });\n }\n return { [hostId]: null };\n });\n\n return this.notificationPromises[hostId];\n }\n\n async getNotifications(hostId?: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (hostId) {\n return this._getNotificationsFromHosts(hostId, update);\n }\n\n // get from all hosts\n const hosts = await this.socket.getCompactHosts(update);\n const promises = hosts.map(host => this._getNotificationsFromHosts(host._id, update));\n const pResults = await Promise.all(promises);\n const result: Record<string, NotificationAnswer | null> = {};\n pResults.forEach(r => Object.assign(result, r));\n return result;\n }\n\n registerNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n if (!this.notificationsHandlers.includes(cb)) {\n this.notificationsHandlers.push(cb);\n\n if (this.notificationsHandlers.length === 1 && this.connected) {\n this.subscribeTs = Date.now();\n void this.socket.subscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n\n unregisterNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n const pos = this.notificationsHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.notificationsHandlers.splice(pos, 1);\n if (!this.notificationsHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../AdminUtils';\n\nexport type AdapterEventType = 'new' | 'changed' | 'deleted';\n\nexport interface AdapterEvent {\n id: string;\n obj?: ioBroker.AdapterObject;\n type: AdapterEventType;\n oldObj?: ioBroker.AdapterObject;\n}\n\nexport default class AdaptersWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: AdapterEvent[]) => void)[];\n\n private readonly repositoryHandlers: (() => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.AdapterObject>> | null;\n\n private forceUpdate: boolean;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.AdapterObject> | null;\n\n private repoTimer: ReturnType<typeof setTimeout> | null;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.repositoryHandlers = [];\n this.promise = null;\n this.forceUpdate = false;\n\n socket.registerConnectionHandler(this.connectionHandler);\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id: string, obj: ioBroker.AdapterObject): void => {\n this.objects = this.objects || {};\n // if instance\n if (id.match(/^system\\.adapter\\.[^.]+$/)) {\n let type: AdapterEventType;\n let oldObj: ioBroker.AdapterObject | undefined;\n\n if (obj) {\n if (obj.type !== 'adapter') {\n return;\n }\n\n AdminUtils.fixAdminUI(obj);\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n\n this.socket.getAdaptersResetCache();\n this.socket.getInstalledResetCache('');\n this.forceUpdate = true;\n this.promise = null;\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n isForceUpdate(): boolean {\n return this.forceUpdate;\n }\n\n // be careful with this object. Do not change them.\n getAdapters(update?: boolean): Promise<void | Record<string, ioBroker.AdapterObject>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n this.promise = this.socket\n .getAdapters(null, update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => (this.objects[obj._id] = obj));\n return this.objects;\n })\n .catch(e => window.alert(`Cannot get adapters: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n void this.getAdapters(true).then(\n adapters =>\n adapters && Object.keys(adapters).forEach(id => this.objectChangeHandler(id, adapters[id])),\n );\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: AdapterEvent[]) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: AdapterEvent[]) => void): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n\n if (!this.handlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n\n repoChangeHandler = (/* id, obj */): void => {\n if (this.repoTimer) {\n clearTimeout(this.repoTimer);\n }\n this.repoTimer = setTimeout(() => {\n this.repoTimer = null;\n this.repositoryHandlers.forEach(cb => cb());\n }, 500);\n };\n\n registerRepositoryHandler(cb: () => void): void {\n if (!this.repositoryHandlers.includes(cb)) {\n this.repositoryHandlers.push(cb);\n\n if (this.repositoryHandlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterRepositoryHandler(cb: () => void): void {\n const pos = this.repositoryHandlers.indexOf(cb);\n if (pos !== -1) {\n this.repositoryHandlers.splice(pos, 1);\n }\n\n if (!this.repositoryHandlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../AdminUtils';\n\nexport type ObjectEventType = 'new' | 'changed' | 'deleted';\n\nexport interface ObjectEvent {\n id: string;\n obj?: ioBroker.Object;\n type: ObjectEventType;\n oldObj?: ioBroker.Object;\n}\n\n// export interface ObjectsWorker {\n// getObjects(update?: boolean): Promise<void | Record<string, ioBroker.Object>>;\n// registerHandler(cb: (events: ObjectEvent[]) => void): void;\n// unregisterHandler(cb: (events: ObjectEvent[]) => void, doNotUnsubscribe?: boolean): void;\n// }\n\nexport default class ObjectsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: ObjectEvent[]) => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.Object>> | null;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.Object> | null;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id: string, obj: ioBroker.Object | null): void => {\n this.objects = this.objects || {};\n // if instance\n let oldObj: ioBroker.Object | undefined;\n let type: ObjectEventType;\n\n if (obj) {\n if (obj.type === 'instance' || obj.type === 'adapter') {\n AdminUtils.fixAdminUI(obj);\n }\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n type = 'changed';\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n type = 'deleted';\n }\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n };\n\n // be careful with this object. Do not change them.\n getObjects(update?: boolean): Promise<void | Record<string, ioBroker.Object>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjects(update, true)\n .then(objects => {\n this.objects = objects;\n return this.objects;\n })\n .catch(e => window.alert(`Cannot get objects: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on objects: ${e}`));\n\n void this.getObjects(true).then(\n objects => objects && Object.keys(objects).forEach(id => this.objectChangeHandler(id, objects[id])),\n );\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: ObjectEvent[]) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: ObjectEvent[]) => void, doNotUnsubscribe?: boolean): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n\n if (!this.handlers.length && this.connected && !doNotUnsubscribe) {\n this.socket\n .unsubscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { Button, Dialog, DialogActions, DialogContent, Paper, Typography, Box, AppBar } from '@mui/material';\n\nimport { Settings as SettingsIcon, Close as CloseIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, type AdminConnection, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport { type ConfigItemPanel, ConfigPanel } from '@iobroker/json-config';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n};\n\ninterface TabPanelProps {\n children: JSX.Element;\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n}\n\nconst TabPanel: React.FC<TabPanelProps> = ({ children, value, index, title, custom, ...props }) => {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n\n return (\n <div {...props}>\n {value === index && (\n <>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.headerBlock}>{title}</div>\n </AppBar>\n <Box p={3}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </>\n )}\n </div>\n );\n};\ntype InputType = 'password' | 'checkbox' | 'select' | 'link' | 'comment' | 'text' | 'name' | 'title';\ntype InputControlType = 'password' | 'checkbox' | 'select' | 'text' | 'staticText' | 'header';\n\nconst types: Record<InputType, InputControlType> = {\n password: 'password',\n checkbox: 'checkbox',\n select: 'select',\n link: 'staticText',\n comment: 'staticText',\n text: 'text',\n name: 'staticText',\n title: 'staticText',\n};\n\ninterface DiscoveryInstanceCommentInput {\n /** Link to attribute, like: 'native.user' */\n name: string;\n def: string | boolean | number;\n type: InputType;\n title: string;\n options: Record<string, string | boolean | number>;\n}\n\nexport interface DiscoveryInstanceComment {\n add?: boolean | string | number | string[];\n changed?: boolean | string | number | string[];\n extended?: boolean | string | number | string[];\n text?: string;\n ack?: boolean;\n inputs?: DiscoveryInstanceCommentInput[];\n license?: string;\n}\n\nexport interface DiscoveryInstance {\n /** Adapter instance ID, like system.adapter.tr-064.0 */\n _id: `system.adapter.${string}.${number}`;\n common: {\n name: string;\n title?: string;\n licenseUrl?: ioBroker.StringOrTranslated;\n };\n comment: DiscoveryInstanceComment;\n native: Record<string, any>;\n}\n\ninterface DiscoveryDevice {\n _addr: string;\n _name: string;\n _ping: {\n alive: boolean;\n ms: number;\n };\n _source: 'ping';\n _type: 'ip' | 'once';\n _dns?: {\n /** \"fritz.box\", \"www.fritz.box\" */\n hostnames: string[];\n };\n}\n\nexport interface DiscoveryObject {\n _id: 'system.discovery';\n common: {\n name: ioBroker.StringOrTranslated;\n };\n type: 'config';\n native: {\n lastScan: string;\n newInstances: DiscoveryInstance[];\n devices: DiscoveryDevice[];\n };\n}\n\nfunction _setValueInObj(obj: Record<string, any>, path: string[], value: string | number | boolean): void {\n const attr = path.unshift();\n if (!path.length) {\n obj[attr] = value;\n } else {\n obj[attr] = obj[attr] || {};\n _setValueInObj(obj[attr], path, value);\n }\n}\n\nfunction setValueInObj(obj: Record<string, any>, path: string, value: string | number | boolean): void {\n const pathArray = path.split('.');\n\n _setValueInObj(obj, pathArray, value);\n}\n\ninterface SchemaItem {\n type: InputControlType;\n label: string;\n text: string;\n href: string;\n sm: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n newLine: boolean;\n button: boolean;\n variant: 'contained';\n icon: string;\n repeat: boolean;\n required: boolean;\n name: string;\n}\n\ninterface GenerateInputsModalProps {\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n socket: AdminConnection;\n newInstance: DiscoveryInstance;\n /** The result looks like { native: { attr1: value }} */\n onClose: (obj?: { native: Record<string, any> }) => void;\n}\n\nconst GenerateInputsModal: React.FC<GenerateInputsModalProps> = ({\n theme,\n themeType,\n themeName,\n socket,\n newInstance,\n onClose,\n}) => {\n const [error, setError] = useState<Record<string, string>>({});\n\n const [schema, setSchema] = useState<{ type: 'panel'; items: Record<string, Partial<SchemaItem>> }>({\n type: 'panel',\n items: {},\n });\n\n const [schemaData, setSchemaData] = useState<Record<string, string | boolean | number>>({});\n\n useEffect(() => {\n const objSchema: {\n [key: string]: Partial<SchemaItem>;\n } = {};\n const objValue: {\n [key: string]: string | boolean | number;\n } = {};\n if (newInstance?.comment?.add && Array.isArray(newInstance?.comment?.add)) {\n newInstance.comment.add.forEach((text: string, idx: number) => (objSchema[idx] = { type: 'header', text }));\n\n newInstance.comment.inputs.forEach((el, idx) => {\n objSchema[idx + 1] = {\n ...el,\n type: types[el.type],\n label: el.title,\n text: el.def ? el.def.toString() : '',\n href: el.def ? el.def.toString() : '',\n sm: 6,\n newLine: true,\n };\n\n if (el.type === 'link') {\n objSchema[idx + 1].button = true;\n objSchema[idx + 1].variant = 'contained';\n objSchema[idx + 1].href = el.def ? el.def.toString() : '';\n objSchema[idx + 1].text = el.title;\n objSchema[idx + 1].icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L3N2Zz4=';\n }\n\n if (el.type === 'password') {\n objSchema[idx + 1].repeat = true;\n }\n\n if (el.def !== undefined) {\n objValue[idx + 1] = '';\n }\n\n if (el.type === 'checkbox') {\n objValue[idx + 1] = false;\n }\n });\n setSchemaData(objValue);\n setSchema({ type: 'panel', items: objSchema });\n }\n }, [newInstance]);\n\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <SettingsIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Instance parameters for %s', newInstance._id.replace('system.adapter.', ''))}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n value={1}\n index={1}\n custom\n title={I18n.t('Test')}\n >\n <Paper style={styles.paperTable}>\n <ConfigPanel\n data={schemaData}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n theme={theme}\n onChange={setSchemaData}\n schema={schema as unknown as ConfigItemPanel}\n onError={(attr, _error) => setError({ ...error, [attr]: _error })}\n // all unused properties\n isFloatComma\n instance={0}\n alive\n dateFormat=\"YYYY.MM.DD\"\n forceUpdate={() => {}}\n onCommandRunning={() => {}}\n changed={false}\n adapterName=\"dummy\"\n originalData={schemaData}\n common={{}}\n />\n </Paper>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"inputs-modal-dialog-apply\"\n variant=\"contained\"\n autoFocus\n disabled={!!Object.keys(error).find(attr => error[attr])}\n onClick={() => {\n const obj: { native: Record<string, any> } = { native: {} };\n let err = false;\n Object.keys(schema.items).forEach((key: string) => {\n if (schema.items[key].required) {\n if (!schemaData[key] && schema.items[key].type !== 'checkbox') {\n err = true;\n alert(`no data ${schema.items[key].label}`);\n } else {\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n } else if (schema.items[key].name) {\n err = false;\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n });\n if (!err) {\n onClose(obj);\n }\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Apply')}\n </Button>\n <Button\n id=\"inputs-modal-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default GenerateInputsModal;\n","import { useState } from 'react';\n\nexport default function useStateLocal(defaultValue: any, key: string): [any, (newValue: any) => void, boolean] {\n const data = (window._localStorage || window.localStorage).getItem(key);\n if (data) {\n try {\n defaultValue = JSON.parse(data);\n } catch {\n // ignore\n }\n }\n\n const [state, setState] = useState(defaultValue);\n\n const eventsToInstall = (newValue: any): void => {\n (window._localStorage || window.localStorage).setItem(key, JSON.stringify(newValue));\n setState(newValue);\n };\n\n return [state, eventsToInstall, !!(window._localStorage || window.localStorage).getItem(key)];\n}\n","import React, { useEffect, useState } from 'react';\n\nimport {\n DialogActions,\n DialogContent,\n Button,\n Dialog,\n Tooltip,\n AppBar,\n Avatar,\n Box,\n Checkbox,\n CircularProgress,\n LinearProgress,\n Paper,\n Step,\n StepLabel,\n Stepper,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n Typography,\n} from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport {\n Visibility as VisibilityIcon,\n NavigateNext as NavigateNextIcon,\n NavigateBefore as NavigateBeforeIcon,\n Search as SearchIcon,\n Close as CloseIcon,\n LibraryAdd as LibraryAddIcon,\n AssignmentTurnedIn as AssignmentTurnedInIcon,\n ReportProblem as ReportProblemIcon,\n} from '@mui/icons-material';\n\nimport {\n I18n,\n Utils,\n SelectWithIcon,\n type IobTheme,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\n\nimport Command from '../components/Command';\nimport LicenseDialog from './LicenseDialog';\nimport GenerateInputsModal, {\n type DiscoveryInstance,\n type DiscoveryInstanceComment,\n type DiscoveryObject,\n} from './GenerateInputsModal';\nimport useStateLocal from '../helpers/hooks/useStateLocal';\n\nconst styles: Record<string, any> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 15,\n },\n descriptionHeaderText: {\n margin: '10px 0',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n headerBlockDisplayItem: {\n p: '5px',\n fontSize: 16,\n display: 'flex',\n m: '2px',\n border: '1px solid #c0c0c045',\n borderRadius: '4px',\n alignItems: 'center',\n transition: 'background .5s, color .5s',\n },\n activeBlock: {\n backgroundColor: '#c0c0c021',\n border: '1px solid #4dabf5',\n },\n pointer: {\n cursor: 'pointer',\n },\n hover: {\n '&:hover': {\n backgroundColor: '#c0c0c021',\n },\n },\n installSuccess: {\n opacity: 0.7,\n color: '#5ef05e',\n },\n installError: {\n opacity: 0.7,\n color: '#ffc14f',\n },\n width200: {\n width: 200,\n },\n table: {\n // '& *': {\n // color: 'black'\n // }\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n wrapperSwitch: {\n display: 'flex',\n margin: 10,\n marginTop: 0,\n },\n divSwitch: {\n display: 'flex',\n // margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n },\n marginLeft: {\n marginLeft: 40,\n },\n stepper: {\n padding: 0,\n background: 'inherit',\n },\n instanceIcon: {\n width: 30,\n height: 30,\n margin: 3,\n },\n instanceId: {\n marginLeft: 10,\n },\n instanceWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n};\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\n\ninterface TabPanelProps {\n children: JSX.Element | JSX.Element[];\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n boxHeight?: boolean;\n black?: boolean;\n [other: string]: unknown;\n}\n\nfunction TabPanel({\n style,\n children,\n value,\n index,\n title,\n custom,\n boxHeight,\n black,\n ...props\n}: TabPanelProps): JSX.Element | null {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n if (value === index) {\n return (\n <div\n {...props}\n style={style}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>{title}</div>\n </AppBar>\n <Box\n style={boxHeight ? { height: 'calc(100% - 45px)' } : undefined}\n p={3}\n >\n <Typography\n style={boxHeight ? { height: '100%' } : undefined}\n component=\"div\"\n >\n {children}\n </Typography>\n </Box>\n </div>\n );\n }\n return null;\n}\n\nconst headCells = [\n {\n id: 'instance',\n numeric: false,\n disablePadding: true,\n label: 'Instance',\n },\n {\n id: 'host',\n numeric: false,\n disablePadding: false,\n label: 'Host',\n },\n {\n id: 'description',\n numeric: false,\n disablePadding: false,\n label: 'Description',\n },\n {\n id: 'ignore',\n numeric: true,\n disablePadding: false,\n label: 'Ignore',\n },\n];\n\ninterface EnhancedTableHeadProps {\n numSelected: number;\n onSelectAllClick: (event: React.ChangeEvent) => void;\n rowCount: number;\n}\n\nfunction EnhancedTableHead(props: EnhancedTableHeadProps): JSX.Element {\n const { numSelected, rowCount, onSelectAllClick } = props;\n\n return (\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\">\n <Checkbox\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={(event: React.ChangeEvent) => onSelectAllClick(event)}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n {headCells.map(headCell => (\n <TableCell\n key={headCell.id}\n align={headCell.numeric ? 'right' : 'left'}\n padding={headCell.disablePadding ? 'none' : 'normal'}\n >\n <TableSortLabel>{headCell.label}</TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\nfunction buildComment(comment: DiscoveryInstanceComment): string {\n if (!comment) {\n return 'new';\n }\n if (typeof comment === 'string') {\n return comment;\n }\n let text = '';\n\n if (comment.add) {\n text += I18n.t('new');\n if (Array.isArray(comment.add) && comment.add.length) {\n text += ': ';\n if (comment.add.length <= 5) {\n text += comment.add.join(', ');\n } else {\n text += I18n.t('%s devices', comment.add.length);\n }\n } else if (typeof comment.add === 'string' || typeof comment.add === 'number') {\n text += ': ';\n text += comment.add;\n }\n }\n\n if (comment.changed) {\n text += (text ? ', ' : '') + I18n.t('changed');\n if (Array.isArray(comment.changed) && comment.changed.length) {\n text += ': ';\n if (comment.changed.length <= 5) {\n text += comment.changed.join(', ');\n } else {\n text += I18n.t('%s devices', comment.changed.length);\n }\n } else if (typeof comment.changed === 'string' || typeof comment.changed === 'number') {\n text += ': ';\n text += comment.changed;\n }\n }\n\n if (comment.extended) {\n text += (text ? ', ' : '') + I18n.t('extended');\n if (Array.isArray(comment.extended) && comment.extended.length) {\n text += ': ';\n if (comment.extended.length <= 5) {\n text += comment.extended.join(', ');\n } else {\n text += I18n.t('%s devices', comment.extended.length);\n }\n } else if (typeof comment.extended === 'string' || typeof comment.extended === 'number') {\n text += ': ';\n text += comment.extended;\n }\n }\n\n if (comment.text) {\n text += (text ? ', ' : '') + comment.text;\n }\n return text;\n}\n\ninterface DiscoveryDialogProps {\n themeType: ThemeType;\n themeName: ThemeName;\n socket: AdminConnection;\n dateFormat: string;\n currentHost: string;\n defaultLogLevel: ioBroker.LogLevel;\n repository: CompactRepository;\n hosts: CompactHost[];\n onClose: () => void;\n theme: IobTheme;\n}\n\nfunction DiscoveryDialog({\n themeType,\n themeName,\n socket,\n dateFormat,\n currentHost,\n defaultLogLevel,\n repository,\n hosts,\n onClose,\n theme,\n}: DiscoveryDialogProps): JSX.Element {\n const [step, setStep] = useState<number>(0);\n const [listMethods, setListMethods] = useState<Record<string, { type: string; source: string; timeout?: number }>>(\n {},\n );\n const [checkboxChecked, setCheckboxChecked] = useState<Record<string, boolean>>({});\n const [disableScanner, setDisableScanner] = useState<boolean>(false);\n const [discoveryData, setDiscoveryData] = useState<DiscoveryObject | null>(null);\n\n useEffect(() => {\n async function fetchData(): Promise<void> {\n const resultList: Record<string, { type: string; source: string; timeout?: number }> = await socket.sendTo(\n 'system.adapter.discovery.0',\n 'listMethods',\n null,\n );\n const listChecked: Record<string, boolean> = {};\n const lastSelectionStr =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'App.discoveryLastSelection',\n ) || null;\n let lastSelection: null | Record<string, boolean>;\n if (lastSelectionStr) {\n try {\n lastSelection = JSON.parse(lastSelectionStr) as Record<string, boolean>;\n } catch {\n lastSelection = null;\n }\n }\n\n Object.keys(resultList).forEach(key => {\n if (lastSelection) {\n listChecked[key] = lastSelection[key];\n } else {\n listChecked[key] = key !== 'serial';\n }\n });\n\n setCheckboxChecked(listChecked);\n setListMethods(resultList);\n }\n\n void fetchData().catch(e => console.warn(`Cannot read listMethods: ${e}`));\n }, [socket]);\n\n useEffect(() => {\n async function readOldData(): Promise<void> {\n const dataDiscovery = await socket.getObject('system.discovery');\n if (dataDiscovery !== undefined) {\n setDiscoveryData(dataDiscovery as unknown as DiscoveryObject);\n }\n }\n\n readOldData().catch(e => console.warn(`Cannot read system.discovery: ${e}`));\n }, [socket]);\n\n const [aliveHosts, setAliveHosts] = useState<Record<string, boolean>>({});\n const [checkSelectHosts, setCheckSelectHosts] = useState(false);\n const [hostInstances, setHostInstances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n hosts.forEach(async ({ _id }: { _id: string }) => {\n const aliveValue = await socket.getState(`${_id}.alive`);\n\n setAliveHosts(prev => ({\n ...prev,\n [_id]: !aliveValue || aliveValue.val === null ? false : !!aliveValue.val,\n }));\n });\n\n if (Object.keys(aliveHosts).filter(key => aliveHosts[key]).length > 1) {\n setCheckSelectHosts(true);\n }\n }, [hosts, socket, aliveHosts]);\n\n const [devicesFound, setDevicesFound] = useState(0);\n const [devicesProgress, setDevicesProgress] = useState(0);\n const [instancesFound, setInstancesFound] = useState(0);\n const [scanRunning, setScanRunning] = useState(false);\n const [servicesProgress, setServicesProgress] = useState(0);\n const [selected, setSelected] = useState<string[]>([]);\n const [installProgress, setInstallProgress] = useState(false);\n const [currentInstall, setCurrentInstall] = useState(1);\n const [installStatus, setInstallStatus] = useState<Record<string, 'error' | 'success'>>({});\n const [cmdName, setCmdName] = useState('install');\n const [suggested, setSuggested] = useStateLocal(true, 'discovery.suggested');\n const [showAll, setShowAll] = useStateLocal(true, 'discovery.showAll');\n const [showLicenseDialog, setShowLicenseDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n const [showInputsDialog, setShowInputsDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n\n const black = themeType === 'dark';\n\n const [instancesInputsParams, setInstancesInputsParams] = useState<{ native: Record<string, any> }>({ native: {} });\n const steps = ['Select methods', 'Create instances', 'Installation process'];\n const [logs, setLogs] = useState<Record<string, any>>({});\n const [finishInstall, setFinishInstall] = useState(false);\n const [selectLogsIndex, setSelectLogsIndex] = useState(1);\n\n const handlerInstall = (name: string, value: ioBroker.State | null | undefined): void => {\n if (!value) {\n return;\n }\n switch (name) {\n case 'discovery.0.devicesFound':\n setDevicesFound(value.val as number);\n break;\n case 'discovery.0.devicesProgress':\n setDevicesProgress(value.val as number);\n break;\n case 'discovery.0.instancesFound':\n setInstancesFound(value.val as number);\n break;\n case 'discovery.0.scanRunning':\n setScanRunning(value.val as boolean);\n break;\n case 'discovery.0.servicesProgress':\n setServicesProgress(value.val as number);\n break;\n default:\n break;\n }\n };\n const onSystemDiscoveryChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (!obj) {\n return;\n }\n if (id === 'system.discovery') {\n setDiscoveryData(obj as unknown as DiscoveryObject);\n }\n };\n useEffect(() => {\n void socket.subscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.subscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.subscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.subscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.subscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.subscribeState('discovery.0.servicesProgress', handlerInstall);\n\n return () => {\n void socket.unsubscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.unsubscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.unsubscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.unsubscribeState('discovery.0.servicesProgress', handlerInstall);\n };\n }, [socket]);\n\n const stepUp = (): void => setStep(step + 1);\n\n const stepDown = (): void => setStep(step - 1);\n\n const extendObject = (id: string, data: Record<string, any>): Promise<void> =>\n socket.extendObject(id, data).catch((error: any) => window.alert(error));\n\n const discoverScanner = async (): Promise<void> => {\n setDisableScanner(true);\n const dataArray = Object.keys(checkboxChecked).filter(key => checkboxChecked[key]);\n const resultList = await socket.sendTo('system.adapter.discovery.0', 'browse', dataArray);\n setDisableScanner(false);\n if (resultList.error) {\n window.alert(resultList.error);\n } else {\n setStep(1);\n }\n };\n\n const handleSelectAllClick = (event: any): void => {\n if (event.target.checked) {\n const newSelected = discoveryData?.native?.newInstances?.map(n => n._id);\n setSelected(newSelected);\n return;\n }\n setSelected([]);\n };\n\n const isSelected = (name: string, arr: string[]): boolean => arr.includes(name);\n\n const handleClick = (_event: any, name: string, arr: string[], func: (newSelected: any) => void): void => {\n const selectedIndex = arr.indexOf(name);\n let newSelected: string[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(arr, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(arr.slice(1));\n } else if (selectedIndex === arr.length - 1) {\n newSelected = newSelected.concat(arr.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(arr.slice(0, selectedIndex), arr.slice(selectedIndex + 1));\n }\n\n func(newSelected);\n };\n\n const checkLicenseAndInputs = (objName: string, cb: () => void): void => {\n const instanceObj: DiscoveryInstance | null = discoveryData?.native?.newInstances.find(\n ob => ob._id === objName,\n );\n const obj: DiscoveryInstance | null = instanceObj ? JSON.parse(JSON.stringify(instanceObj)) : null;\n let license = true;\n if (obj?.comment?.license && obj.comment.license !== 'MIT') {\n license = false;\n if (!obj.common.licenseUrl) {\n obj.common.licenseUrl = `https://raw.githubusercontent.com/ioBroker/ioBroker.${obj.common.name}/master/LICENSE`;\n }\n if (obj.common.licenseUrl && typeof obj.common.licenseUrl === 'object') {\n obj.common.licenseUrl = obj.common.licenseUrl[I18n.getLanguage()] || obj.common.licenseUrl.en;\n }\n if ((obj.common.licenseUrl as string).includes('github.com')) {\n obj.common.licenseUrl = (obj.common.licenseUrl as string)\n .replace('github.com', 'raw.githubusercontent.com')\n .replace('/blob/', '/');\n }\n }\n\n if (license) {\n if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n } else {\n setShowLicenseDialog({ cb, obj });\n }\n };\n\n const goToNextInstance = (id: string, reason: string): void => {\n const index = selected.indexOf(id) + 1;\n setInstallStatus(status => ({ ...status, [index]: 'error' }));\n\n if (reason) {\n setLogs(logsEl => ({ ...logsEl, [selected[index - 1]]: [I18n.t(reason)] }));\n }\n\n if (selected.length > index) {\n setTimeout(\n () =>\n checkLicenseAndInputs(selected[index], () => {\n setCurrentInstall(index + 1);\n setCmdName('install');\n setInstallProgress(true);\n }),\n 100,\n );\n } else {\n setFinishInstall(true);\n }\n };\n\n const inputsDialog = showInputsDialog ? (\n <GenerateInputsModal\n socket={socket}\n theme={theme}\n themeType={themeType}\n themeName={themeName}\n newInstance={showInputsDialog.obj}\n onClose={params => {\n const { cb } = showInputsDialog;\n const { obj } = showInputsDialog;\n setShowInputsDialog(null);\n\n if (params) {\n setInstancesInputsParams(params);\n cb();\n } else {\n goToNextInstance(obj._id, 'Error: configuration dialog canceled');\n }\n }}\n />\n ) : null;\n\n const resetStateBack = (): void => {\n setSelected([]);\n setInstallProgress(false);\n setFinishInstall(false);\n setCurrentInstall(1);\n setCmdName('install');\n setInstallStatus({});\n };\n\n const checkInstall = (): void => {\n checkLicenseAndInputs(selected[0], () => {\n setCurrentInstall(1);\n setInstallProgress(true);\n });\n };\n\n const licenseDialog = showLicenseDialog ? (\n <LicenseDialog\n licenseType={showLicenseDialog.obj.comment.license}\n url={showLicenseDialog.obj.common.licenseUrl as string}\n onClose={result => {\n const { cb, obj } = showLicenseDialog;\n setShowLicenseDialog(null);\n if (!result) {\n // license isn't accepted, go to the next instance\n goToNextInstance(obj._id, 'Error: license not accepted');\n } else if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n }}\n />\n ) : null;\n\n return (\n <ThemeProvider theme={theme}>\n {licenseDialog}\n {inputsDialog}\n <Dialog\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n onClose();\n }\n }}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <VisibilityIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Find devices and services')}\n </h2>\n <Stepper\n style={styles.stepper}\n alternativeLabel\n activeStep={step}\n >\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{I18n.t(label)}</StepLabel>\n </Step>\n ))}\n </Stepper>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n style={{ ...styles.overflowAuto, color: black ? 'white' : undefined }}\n value={step}\n index={0}\n black={black}\n title={I18n.t('Discover all possible devices')}\n >\n {!disableScanner ? (\n <>\n {' '}\n <div style={styles.headerText}>{I18n.t('press_discover')}</div>\n {discoveryData?.native?.lastScan && (\n <div style={styles.descriptionHeaderText}>\n {I18n.t(\n 'Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )}\n </div>\n )}\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>\n {I18n.t('Use following methods:')}\n </div>\n {Object.keys(listMethods).map(key => (\n <div key={key}>\n <Checkbox\n checked={checkboxChecked[key]}\n disabled={disableScanner}\n onChange={(_, value) => {\n const newCheckboxChecked = JSON.parse(\n JSON.stringify(checkboxChecked),\n );\n newCheckboxChecked[key] = value;\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.discoveryLastSelection',\n JSON.stringify(newCheckboxChecked),\n );\n setCheckboxChecked(newCheckboxChecked);\n }}\n />\n {key}\n </div>\n ))}\n </>\n ) : (\n scanRunning && (\n <div>\n {devicesProgress >= 99\n ? `Lookup services - ${servicesProgress}%`\n : `Lookup devices - ${devicesProgress}%`}\n {disableScanner && (\n <LinearProgress\n variant=\"determinate\"\n value={devicesProgress >= 99 ? servicesProgress : devicesProgress}\n />\n )}\n {devicesProgress >= 99\n ? `${instancesFound} service(s) found`\n : `${devicesFound} device(s) found`}\n </div>\n )\n )}\n </TabPanel>\n <TabPanel\n style={styles.overflowAuto}\n value={step}\n index={1}\n title={\n discoveryData?.native?.lastScan\n ? I18n.t(\n 'Create instances automatically - Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )\n : I18n.t('Create instances automatically')\n }\n >\n <div style={styles.wrapperSwitch}>\n <div style={styles.divSwitch}>\n <div style={!showAll ? { color: 'green' } : undefined}>\n {I18n.t('hide ignored')}\n </div>\n <Switch\n checked={showAll}\n onChange={e => setShowAll(e.target.checked)}\n color=\"primary\"\n />\n <div style={showAll ? { color: 'green' } : undefined}>{I18n.t('show ignored')}</div>\n </div>\n <div style={{ ...styles.divSwitch, ...styles.marginLeft }}>\n <div style={!suggested ? { color: 'green' } : undefined}>\n {I18n.t('hide suggested')}\n </div>\n <Switch\n checked={suggested}\n onChange={e => setSuggested(e.target.checked)}\n color=\"primary\"\n />\n <div style={suggested ? { color: 'green' } : undefined}>\n {I18n.t('show suggested')}\n </div>\n </div>\n </div>\n <Paper style={styles.paperTable}>\n <TableContainer>\n <Table\n style={styles.table}\n size=\"small\"\n >\n <EnhancedTableHead\n numSelected={selected.length}\n onSelectAllClick={handleSelectAllClick}\n rowCount={discoveryData?.native?.newInstances?.length || 0}\n />\n <TableBody>\n {discoveryData?.native?.newInstances\n ?.filter((el: any) => {\n if (!suggested) {\n return !el.comment?.advice;\n }\n if (!showAll) {\n return !el?.comment?.ack;\n }\n return true;\n })\n .map((obj: any, idx: number) => (\n <TableRow\n hover\n role=\"checkbox\"\n key={obj._id}\n selected={obj.comment?.advice}\n >\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected(obj._id, selected)}\n onClick={e =>\n handleClick(e, obj._id, selected, setSelected)\n }\n />\n </TableCell>\n <TableCell\n component=\"th\"\n scope=\"row\"\n padding=\"none\"\n >\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={obj._id.replace('system.adapter.', '')}\n src={repository[obj.common.name]?.icon}\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {obj._id.replace('system.adapter.', '')}\n </div>\n </div>\n </TableCell>\n <TableCell align=\"left\">\n {checkSelectHosts ? (\n <SelectWithIcon\n fullWidth\n lang={I18n.getLanguage()}\n list={hosts as ioBroker.Object[]}\n t={I18n.t}\n value={hostInstances[obj._id] || currentHost}\n themeType={themeType}\n onChange={val =>\n setHostInstances({\n ...hostInstances,\n [obj._id]: val,\n })\n }\n />\n ) : (\n '_'\n )}\n </TableCell>\n <TableCell align=\"left\">{buildComment(obj.comment)}</TableCell>\n <TableCell\n align=\"right\"\n padding=\"checkbox\"\n >\n <Checkbox\n checked={!!obj?.comment?.ack}\n onClick={() => {\n const newInstances = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances,\n ),\n );\n\n newInstances[idx].comment = {\n ...newInstances[idx].comment,\n ack: !newInstances[idx].comment.ack,\n };\n\n void extendObject('system.discovery', {\n native: { newInstances },\n });\n }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </TabPanel>\n <TabPanel\n value={step}\n index={2}\n style={{ ...styles.overflowAuto, height: '100%' }}\n boxHeight\n title={I18n.t('Install adapters')}\n >\n <div style={{ display: 'flex', height: '100%' }}>\n <div>\n {selected.map((el, idx) => (\n <Box\n component=\"div\"\n key={el}\n onClick={finishInstall ? () => setSelectLogsIndex(idx) : undefined}\n sx={{\n ...styles.headerBlockDisplayItem,\n ...(finishInstall ? styles.pointer : undefined),\n ...(finishInstall ? styles.hover : undefined),\n ...(finishInstall && selectLogsIndex === idx\n ? styles.activeBlock\n : undefined),\n }}\n >\n <div style={styles.width200}>\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={el.replace('system.adapter.', '')}\n src={\n repository[el.replace('system.adapter.', '').split('.')[0]]\n ?.icon\n }\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {el.replace('system.adapter.', '')}\n </div>\n </div>\n </div>\n {currentInstall === idx + 1 && !installStatus[idx + 1] && (\n <CircularProgress size={20} />\n )}\n {installStatus[idx + 1] === 'error' ? (\n <ReportProblemIcon style={styles.installError} />\n ) : installStatus[idx + 1] === 'success' ? (\n <AssignmentTurnedInIcon style={styles.installSuccess} />\n ) : null}\n </Box>\n ))}\n </div>\n {currentInstall && (installProgress || finishInstall) && (\n <div style={{ overflow: 'hidden', width: 'calc(100% - 260px)' }}>\n <Command\n noSpacing\n key={`${currentInstall}-${cmdName}`}\n ready\n host={currentHost}\n logsRead={\n finishInstall ? logs[selected[selectLogsIndex]] || ['skipped'] : null\n }\n showElement={!finishInstall}\n socket={socket}\n t={I18n.t}\n cmd={\n finishInstall\n ? ''\n : `${cmdName} ${\n selected[currentInstall - 1]\n .replace('system.adapter.', '')\n .split('.')[0]\n }`\n }\n onFinished={(_, logsSuccess) => {\n let data = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances.find(\n (obj: any) => obj._id === selected[currentInstall - 1],\n ),\n ),\n );\n delete data.comment;\n\n let adapterId = data._id.split('.');\n adapterId.pop();\n adapterId = adapterId.join('.');\n void socket.getObject(adapterId).then((obj: ioBroker.AdapterObject) => {\n data = { ...obj, ...data };\n data.common = Object.assign(obj.common, data.common);\n data.native = Object.assign(obj.native, data.native);\n data.type = 'instance';\n\n // set log level\n if (defaultLogLevel) {\n data.common.logLevel = defaultLogLevel;\n }\n data.common.logLevel = data.common.logLevel || 'info';\n\n if (\n instancesInputsParams.native &&\n Object.keys(instancesInputsParams.native).length\n ) {\n Object.assign(data.native, instancesInputsParams.native);\n setInstancesInputsParams({ native: {} });\n }\n if (checkSelectHosts && hostInstances[data._id]) {\n data.common.host = hostInstances[data._id];\n }\n\n // write created instance\n void extendObject(data._id, data).then(() => {\n if (currentInstall < selected.length) {\n // install next\n checkLicenseAndInputs(selected[currentInstall], () => {\n setCurrentInstall(currentInstall + 1);\n setCmdName('install');\n });\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n } else {\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(\n JSON.stringify(discoveryData),\n );\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(\n el => el === _id,\n );\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject(\n 'system.discovery',\n dataDiscovery,\n );\n }\n setFinishInstall(true);\n window.alert(I18n.t('Finished'));\n }\n });\n });\n }}\n errorFunc={(el, logsError) => {\n if (el === 51 && cmdName === 'install') {\n setCmdName('upload');\n return;\n }\n if (selected.length > currentInstall && cmdName === 'upload') {\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setInstallStatus({ ...installStatus, [currentInstall]: 'error' });\n } else {\n if (selected.length > currentInstall) {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setCmdName('install');\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n } else {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n setFinishInstall(true);\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(JSON.stringify(discoveryData));\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(ele => ele === _id);\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject('system.discovery', dataDiscovery);\n }\n }\n window.alert(`error ${selected[currentInstall - 1]}`);\n }\n }}\n />\n </div>\n )}\n </div>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n {step > 0 && step !== 4 && (\n <Button\n variant=\"contained\"\n disabled={step === 0}\n onClick={() => {\n if (step === 2) {\n resetStateBack();\n }\n stepDown();\n }}\n color=\"grey\"\n startIcon={<NavigateBeforeIcon />}\n >\n {I18n.t('Back')}\n </Button>\n )}\n {step === 0 && (\n <Button\n variant=\"contained\"\n autoFocus\n disabled={disableScanner}\n onClick={discoverScanner}\n color=\"primary\"\n startIcon={<SearchIcon />}\n >\n {I18n.t('Discover')}\n </Button>\n )}\n {step !== 2 && step !== 4 && (\n <Tooltip\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n title={\n step === 0\n ? I18n.t('Skip discovery process and go to install with last scan results')\n : ''\n }\n >\n <span style={{ marginLeft: 8 }}>\n <Button\n variant=\"contained\"\n disabled={\n !discoveryData ||\n !discoveryData?.native?.lastScan ||\n step === 2 ||\n disableScanner ||\n (step === 1 && !selected.length)\n }\n onClick={() => {\n stepUp();\n if (step === 1) {\n checkInstall();\n }\n }}\n color={step === 1 ? 'primary' : 'grey'}\n startIcon={step === 1 ? <LibraryAddIcon /> : <NavigateNextIcon />}\n >\n {I18n.t(step === 1 ? 'Create instances' : 'Use last scan')}\n </Button>\n </span>\n </Tooltip>\n )}\n <Button\n variant=\"contained\"\n disabled={disableScanner}\n onClick={() => onClose()}\n color={step === 2 ? 'primary' : 'grey'}\n startIcon={<CloseIcon />}\n >\n {I18n.t(step === 2 ? 'Finish' : 'Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>\n );\n}\n\nexport default DiscoveryDialog;\n","import React, { type RefObject, Suspense, type JSX } from 'react';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\n// @mui/material\nimport {\n AppBar,\n Avatar,\n Grid2 as Grid,\n IconButton,\n Paper,\n Snackbar,\n Toolbar,\n Typography,\n Tooltip,\n Badge,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n CircularProgress,\n Dialog,\n DialogTitle,\n Button,\n DialogContent,\n DialogContentText,\n DialogActions,\n Box,\n} from '@mui/material';\n\n// @material-ui/icons\nimport {\n Menu as MenuIcon,\n Build as BuildIcon,\n Update as UpdateIcon,\n Visibility as VisibilityIcon,\n PictureInPictureAlt as PictureInPictureAltIcon,\n Person as UserIcon,\n CloudSync as SyncIcon,\n SyncDisabled as SyncIconDisabled,\n Close as CancelIcon,\n Notifications as NotificationsIcon,\n} from '@mui/icons-material';\n\nimport { AdminConnection as Connection, type FilteredNotificationInformation, PROGRESS } from '@iobroker/socket-client';\n\nimport {\n LoaderPT,\n LoaderMV,\n LoaderVendor,\n Loader,\n I18n,\n Router,\n Confirm as ConfirmDialog,\n Icon,\n withWidth,\n Theme,\n IconExpert,\n ToggleThemeMenu,\n type IobTheme,\n type ThemeName,\n type AdminConnection,\n type ThemeType,\n Utils,\n} from '@iobroker/adapter-react-v5';\n\nimport enAR from '@iobroker/adapter-react-v5/i18n/en.json';\nimport deAR from '@iobroker/adapter-react-v5/i18n/de.json';\nimport ruAR from '@iobroker/adapter-react-v5/i18n/ru.json';\nimport ptAR from '@iobroker/adapter-react-v5/i18n/pt.json';\nimport nlAR from '@iobroker/adapter-react-v5/i18n/nl.json';\nimport frAR from '@iobroker/adapter-react-v5/i18n/fr.json';\nimport itAR from '@iobroker/adapter-react-v5/i18n/it.json';\nimport esAR from '@iobroker/adapter-react-v5/i18n/es.json';\nimport plAR from '@iobroker/adapter-react-v5/i18n/pl.json';\nimport ukAR from '@iobroker/adapter-react-v5/i18n/uk.json';\nimport zhCNAR from '@iobroker/adapter-react-v5/i18n/zh-cn.json';\n\nimport NotificationsDialog from '@/dialogs/NotificationsDialog';\nimport type { AdminGuiConfig, CompactAdapterInfo, CompactHost, NotificationsCount } from '@/types';\nimport type { InstanceConfig } from '@/tabs/EasyMode';\n\nimport CommandDialog from './dialogs/CommandDialog';\nimport Drawer, {\n STATES as DrawerStates,\n DRAWER_FULL_WIDTH,\n DRAWER_COMPACT_WIDTH,\n DRAWER_EDIT_WIDTH,\n} from './components/Drawer';\n\nimport Connecting from './components/Connecting';\n\nimport WizardDialog from './dialogs/WizardDialog';\nimport SystemSettingsDialog from './dialogs/SystemSettingsDialog';\nimport Login from './login/Login';\nimport HostSelectors from './components/HostSelectors';\nimport ExpertModeDialog from './dialogs/ExpertModeDialog';\nimport NewsAdminDialog, { checkMessages, type ShowMessage } from './dialogs/NewsAdminDialog';\nimport HostWarningDialog from './dialogs/HostWarningDialog';\nimport LogsWorker from './Workers/LogsWorker';\nimport InstancesWorker from './Workers/InstancesWorker';\nimport HostsWorker, { type HostEvent, type NotificationAnswer } from './Workers/HostsWorker';\nimport AdaptersWorker, { type AdapterEvent } from './Workers/AdaptersWorker';\nimport ObjectsWorker from './Workers/ObjectsWorker';\nimport DiscoveryDialog from './dialogs/DiscoveryDialog';\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from './dialogs/SlowConnectionWarningDialog';\nimport IsVisible from './components/IsVisible';\n\nimport enLocal from './i18n/en.json';\nimport deLocal from './i18n/de.json';\nimport ruLocal from './i18n/ru.json';\nimport ptLocal from './i18n/pt.json';\nimport nlLocal from './i18n/nl.json';\nimport frLocal from './i18n/fr.json';\nimport itLocal from './i18n/it.json';\nimport esLocal from './i18n/es.json';\nimport plLocal from './i18n/pl.json';\nimport ukLocal from './i18n/uk.json';\nimport zhCNLocal from './i18n/zh-cn.json';\n\n// Tabs\nconst Adapters = React.lazy(() => import('./tabs/Adapters'));\nconst Instances = React.lazy(() => import('./tabs/Instances'));\nconst Intro = React.lazy(() => import('./tabs/Intro'));\nconst Logs = React.lazy(() => import('./tabs/Logs'));\nconst Files = React.lazy(() => import('./tabs/Files'));\nconst Objects = React.lazy(() => import('./tabs/Objects'));\nconst Users = React.lazy(() => import('./tabs/Users'));\nconst Enums = React.lazy(() => import('./tabs/Enums'));\nconst CustomTab = React.lazy(() => import('./tabs/CustomTab'));\nconst Hosts = React.lazy(() => import('./tabs/Hosts'));\nconst EasyMode = React.lazy(() => import('./tabs/EasyMode'));\n\ndeclare global {\n interface Window {\n _localStorage?: Storage;\n _sessionStorage?: Storage;\n\n sidebar?: {\n addPanel: (name: string, icon: string, element: React.ReactNode) => void;\n };\n opera: boolean;\n }\n interface Navigator {\n // @deprecated\n userLanguage: string;\n }\n}\n\nconst query: { login?: boolean } = {};\n\n(window.location.search || '')\n .replace(/^\\?/, '')\n .split('&')\n .forEach(attr => {\n const parts = attr.split('=');\n if (!parts[0]) {\n return;\n }\n (query as Record<string, boolean | string>)[parts[0]] =\n parts[1] === undefined ? true : decodeURIComponent(parts[1]);\n });\n\nconst styles: Record<string, any> = {\n root: {\n display: 'flex',\n height: '100%',\n },\n appBar: (theme: IobTheme) => ({\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n }),\n logoWhite: {\n backgroundColor: '#FFFFFF',\n },\n appBarShift: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_FULL_WIDTH}px)`,\n ml: DRAWER_FULL_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftEdit: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_EDIT_WIDTH}px)`,\n ml: DRAWER_EDIT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftCompact: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_COMPACT_WIDTH}px)`,\n ml: DRAWER_COMPACT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n menuButton: {\n marginRight: 16,\n },\n hide: {\n display: 'none',\n },\n content: (theme: IobTheme) => ({\n flexGrow: 1,\n padding: 1,\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowY: 'auto',\n mt: `${theme.mixins.toolbar?.minHeight}px`,\n '@media (min-width:0px) and (orientation: landscape)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)'].minHeight}px`\n : undefined,\n },\n '@media (min-width:600px)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:600px)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:600px)'].minHeight}px`\n : undefined,\n },\n }),\n contentMargin: {\n ml: -DRAWER_FULL_WIDTH / 8,\n },\n contentMarginEdit: {\n ml: -DRAWER_EDIT_WIDTH / 8,\n },\n contentMarginCompact: {\n ml: -DRAWER_COMPACT_WIDTH / 8,\n },\n contentShift: (theme: IobTheme) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n ml: 0,\n }),\n expertIcon: {\n width: 22,\n height: 22,\n // color: theme.palette.text ? theme.palette.text.disabled : 'grey'\n },\n expertIconActive: {\n // color: theme.palette.action.active\n },\n baseSettingsButton: {\n color: 'red',\n },\n alert_info: {},\n alert_error: {\n backgroundColor: '#f44336',\n },\n alert_success: {\n backgroundColor: '#4caf50',\n },\n avatarNotVisible: {\n opacity: 0,\n marginLeft: 5,\n transition: 'opacity 0.3s',\n width: 'initial',\n },\n avatarVisible: {\n opacity: 1,\n },\n cmd: {\n animation: '1s linear infinite alternate $myEffect',\n opacity: 0.2,\n },\n errorCmd: {\n color: '#a90000',\n animation: '0.2s linear infinite alternate myEffect2',\n },\n performed: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? '#3bfd44' : '#388e3c',\n animation: '0.2s linear infinite alternate myEffect2',\n }),\n wrapperButtons: {\n display: 'flex',\n marginRight: 'auto',\n overflowY: 'auto',\n },\n\n flexGrow: {\n flexGrow: 2,\n },\n userBadge: {\n lineHeight: '48px',\n display: 'inline-block',\n },\n userIcon: {\n borderRadius: 4,\n width: 44,\n height: 44,\n verticalAlign: 'middle',\n marginLeft: 10,\n marginRight: 10,\n },\n userText: {\n verticalAlign: 'middle',\n fontSize: 16,\n maxWidth: 250,\n marginRight: 10,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'inline-block',\n },\n userBackground: (theme: IobTheme) => ({\n borderRadius: 1,\n backgroundColor: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n p: 0.5,\n }),\n styleVersion: {\n fontSize: 10,\n },\n wrapperName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: 10,\n },\n expertBadge: {\n mt: '11px',\n mr: '11px',\n },\n siteName: {\n lineHeight: '48px',\n fontSize: 24,\n marginLeft: 10,\n marginRight: 10,\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface ObjectGuiSettings extends ioBroker.StateObject {\n common: {\n name: ioBroker.StringOrTranslated;\n type: 'boolean';\n read: true;\n write: false;\n role: 'state';\n };\n native: {\n localStorage: Record<string, any>;\n sessionStorage: Record<string, any>;\n 'App.drawerState'?: string;\n };\n}\n\nconst DEFAULT_GUI_SETTINGS_OBJECT: ObjectGuiSettings = {\n _id: '',\n type: 'state',\n common: {\n name: 'Admin settings',\n type: 'boolean',\n read: true,\n write: false,\n role: 'state',\n },\n native: {\n localStorage: {},\n sessionStorage: {},\n },\n};\n\ninterface AppProps {\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\ntype CompactInstalledInfo = Record<\n string,\n {\n version: string;\n ignoreVersion?: string;\n }\n>;\n\ninterface AppState {\n connected: boolean;\n progress: number;\n ready: boolean;\n lang: ioBroker.Languages;\n expertMode: boolean;\n expertModeDialog?: boolean;\n showGuiSettings?: HTMLButtonElement | null;\n hosts: CompactHost[];\n currentHost: string;\n currentHostName: string;\n ownHost: string;\n currentTab: {\n tab: string;\n dialog?: string;\n id?: string;\n arg?: string;\n };\n systemConfig: ioBroker.SystemConfigObject;\n showHostWarning: {\n host: string;\n instances: Record<string, ioBroker.InstanceObject>;\n result: FilteredNotificationInformation;\n } | null;\n user: {\n id: string;\n name: string;\n color?: string;\n icon?: string;\n invertBackground: boolean;\n } | null;\n repository: CompactRepository;\n installed: CompactInstalledInfo;\n waitForRestart: boolean;\n tabs: any;\n config: Record<string, any>;\n stateChanged: boolean;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n alert: boolean;\n alertType: 'error' | 'warning' | 'info' | 'success';\n alertMessage: string;\n drawerState: 0 | 1 | 2;\n editMenuList: boolean;\n tab: any;\n allStored: boolean;\n dataNotStoredDialog: boolean;\n dataNotStoredTab: string;\n baseSettingsOpened: boolean;\n unsavedDataInDialog: boolean;\n systemSettingsOpened: boolean;\n\n cmd: string | null;\n cmdDialog: boolean;\n commandHost: string | null;\n callback?: ((exitCode?: number) => void) | null;\n commandError: boolean;\n commandRunning: boolean;\n\n wizard: boolean;\n performed: boolean;\n discoveryAlive: boolean;\n readTimeoutMs: number;\n showSlowConnectionWarning: boolean;\n expireWarningMode: boolean;\n versionAdmin: string;\n forceUpdateAdapters: number;\n noTranslation: boolean;\n cloudNotConnected: boolean;\n cloudReconnect: number;\n showRedirect: string;\n redirectCountDown: number;\n triggerAdapterUpdate: number;\n updating: boolean;\n notificationsDialog: boolean;\n notifications: Record<string, any>;\n /** Number of active notifications */\n noNotifications: NotificationsCount;\n configNotSaved: boolean;\n login: boolean;\n hostname: string;\n hasGlobalError?: null | Error;\n guiSettings?: boolean;\n strictEasyMode?: boolean;\n easyModeConfigs?: InstanceConfig[];\n adapters: Record<string, CompactAdapterInfo>;\n showNews?: {\n checkNews: ShowMessage[];\n lastNewsId: string | undefined;\n } | null;\n}\n\nclass App extends Router<AppProps, AppState> {\n private readonly translations: Record<ioBroker.Languages, Record<string, string>>;\n\n /** Seconds before logout to show warning */\n private readonly EXPIRE_WARNING_THRESHOLD: number = 120;\n\n private refConfigIframe: HTMLIFrameElement | null = null;\n\n private readonly refUser: RefObject<HTMLDivElement>;\n\n private readonly refUserDiv: RefObject<HTMLDivElement>;\n\n private expireInSec: number | null = null;\n\n private lastExecution: number = 0;\n\n private pingAuth: ReturnType<typeof setTimeout> | null = null;\n\n private expireInSecInterval: ReturnType<typeof setTimeout> | null = null;\n\n private readonly toggleThemePossible: boolean;\n\n private readonly expireText: string = I18n.t('Session expire in %s', '%s');\n\n private adminGuiConfig: AdminGuiConfig;\n\n private logsWorker: LogsWorker | null;\n\n private instancesWorker: InstancesWorker | null;\n\n private hostsWorker: HostsWorker | null;\n\n private adaptersWorker: AdaptersWorker | null;\n\n private objectsWorker: ObjectsWorker | null;\n\n private guiSettings: ObjectGuiSettings;\n\n private localStorageTimer: ReturnType<typeof setTimeout> | null = null;\n\n private languageSet: boolean;\n\n private socket: AdminConnection;\n\n private adminInstance: string = '';\n\n private newsInstance: number = 0;\n\n constructor(props: AppProps) {\n super(props);\n\n try {\n window.alert = message => {\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n } catch {\n // ignore. FF could not redefine alert\n }\n\n // init translations\n this.translations = {\n en: enAR,\n de: deAR,\n ru: ruAR,\n pt: ptAR,\n nl: nlAR,\n fr: frAR,\n it: itAR,\n es: esAR,\n pl: plAR,\n uk: ukAR,\n 'zh-cn': zhCNAR,\n };\n\n const translations: Record<ioBroker.Languages, Record<string, string>> = {\n en: enLocal,\n de: deLocal,\n ru: ruLocal,\n pt: ptLocal,\n nl: nlLocal,\n fr: frLocal,\n it: itLocal,\n es: esLocal,\n pl: plLocal,\n uk: ukLocal,\n 'zh-cn': zhCNLocal,\n };\n\n // merge together\n Object.keys(translations).forEach((lang: ioBroker.Languages) =>\n Object.assign(this.translations[lang], translations[lang]),\n );\n\n // init translations\n I18n.setTranslations(this.translations);\n I18n.setLanguage(\n (window.navigator.language || window.navigator.userLanguage || 'en')\n .substring(0, 2)\n .toLowerCase() as ioBroker.Languages,\n );\n\n this.refUser = React.createRef<HTMLDivElement>();\n this.refUserDiv = React.createRef<HTMLDivElement>();\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n };\n\n const vendorPrefix = window.vendorPrefix;\n this.toggleThemePossible = !vendorPrefix || vendorPrefix === '@@vendorPrefix@@' || vendorPrefix === 'MV';\n\n if (!query.login) {\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n\n const theme = App.createTheme();\n\n // install setter for configNotSaved (used in javascript)\n Object.defineProperty(window, 'configNotSaved', {\n get: () => this.state.configNotSaved,\n set: configNotSaved => {\n const allStored = !configNotSaved;\n if (allStored !== this.state.allStored) {\n this.setState({ allStored });\n }\n },\n configurable: true,\n });\n\n this.state = {\n connected: false,\n progress: 0,\n ready: false,\n lang: 'en',\n\n hostname: window.location.hostname,\n\n expertMode: false,\n\n hosts: [],\n currentHost: '',\n currentHostName: '',\n ownHost: '',\n currentTab: Router.getLocation(),\n systemConfig: null,\n user: null, // Logged in user\n\n repository: {},\n installed: {},\n\n waitForRestart: false,\n tabs: null,\n config: {},\n\n stateChanged: false,\n\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n\n alert: false,\n alertType: 'info',\n alertMessage: '',\n drawerState,\n editMenuList: false,\n\n tab: null,\n allStored: true,\n dataNotStoredDialog: false,\n dataNotStoredTab: '',\n\n baseSettingsOpened: false,\n unsavedDataInDialog: false,\n systemSettingsOpened: false,\n\n cmd: null,\n cmdDialog: false,\n commandHost: null,\n commandError: false,\n commandRunning: false,\n\n wizard: true,\n performed: false,\n\n discoveryAlive: false,\n\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n\n /** if true, shows the expiry warning (left time and update button) */\n expireWarningMode: false,\n\n versionAdmin: '',\n\n forceUpdateAdapters: 0,\n\n noTranslation: (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false',\n\n cloudNotConnected: false,\n cloudReconnect: 0,\n\n showRedirect: '',\n redirectCountDown: 0,\n\n triggerAdapterUpdate: 0,\n\n updating: false, // js controller updating\n /** If the notification dialog should be shown */\n notificationsDialog: false,\n /** Notifications, excluding the system ones */\n notifications: {},\n /** Number of new notifications */\n noNotifications: {\n warning: 0,\n other: 0,\n },\n\n configNotSaved: false,\n login: false,\n showHostWarning: null,\n adapters: {},\n };\n this.logsWorker = null;\n this.instancesWorker = null;\n this.hostsWorker = null;\n } else {\n const theme = App.createTheme();\n this.state = {\n login: true,\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n } as AppState;\n }\n }\n\n static getDerivedStateFromError(error: null | { message: string; stack: any }): {\n hasGlobalError: null | { message: string; stack: any };\n } {\n // Update state so the next render will show the fallback UI.\n return { hasGlobalError: error };\n }\n\n componentDidCatch(error: Error): void {\n this.setState({ hasGlobalError: error });\n }\n\n setUnsavedData(hasUnsavedData: boolean): void {\n if (hasUnsavedData !== this.state.unsavedDataInDialog) {\n this.setState({ unsavedDataInDialog: hasUnsavedData });\n }\n }\n\n // If the background color must be inverted. Depends on the current theme.\n mustInvertBackground(color: string): boolean {\n if (!color) {\n return false;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && this.state.themeType === 'dark') {\n return true;\n }\n\n return invertedColor === '#000000' && this.state.themeType === 'light';\n }\n\n localStorageGetItem = (name: string): any => this.guiSettings.native.localStorage[name];\n\n localStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.localStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.localStorage[name] = value.toString();\n\n this.localStorageSave();\n };\n\n localStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.localStorage, name)) {\n delete this.guiSettings.native.localStorage[name];\n this.localStorageSave();\n }\n };\n\n sessionStorageGetItem = (name: string): any => this.guiSettings.native.sessionStorage[name];\n\n sessionStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.sessionStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.sessionStorage[name] = value.toString();\n this.localStorageSave();\n };\n\n sessionStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.sessionStorage, name)) {\n delete this.guiSettings.native.sessionStorage[name];\n this.localStorageSave();\n }\n };\n\n localStorageSave(): void {\n if (this.localStorageTimer) {\n clearTimeout(this.localStorageTimer);\n }\n this.localStorageTimer = setTimeout(async () => {\n this.localStorageTimer = null;\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n }, 200);\n }\n\n toggleTranslation = (): void => {\n (window._localStorage || window.localStorage).setItem(\n 'App.noTranslation',\n this.state.noTranslation ? 'false' : 'true',\n );\n this.setState({ noTranslation: !this.state.noTranslation });\n };\n\n async getGUISettings(): Promise<void> {\n let obj;\n\n if (!this.adminInstance) {\n return;\n }\n\n try {\n obj = await this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch (e) {\n console.warn(`Could not get \"system.adapter.${this.adminInstance}.guiSettings\": ${e.message}`);\n }\n\n if (!obj) {\n obj = JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n try {\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, obj);\n } catch (e) {\n console.warn(`Could not update \"system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n\n let state;\n try {\n state = await this.socket.getState(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch {\n state = { val: false };\n }\n if (state?.val) {\n this.guiSettings = obj;\n this.guiSettings.native = this.guiSettings.native || { localStorage: {}, sessionStorage: {} };\n if (!this.guiSettings.native.localStorage) {\n this.guiSettings.native = { localStorage: this.guiSettings.native, sessionStorage: {} };\n }\n\n // @ts-expect-error it is not full implementation of storage\n window._localStorage = {\n getItem: this.localStorageGetItem,\n setItem: this.localStorageSetItem,\n removeItem: this.localStorageRemoveItem,\n };\n // @ts-expect-error it is not full implementation of storage\n window._sessionStorage = {\n getItem: this.sessionStorageGetItem,\n setItem: this.sessionStorageSetItem,\n removeItem: this.sessionStorageRemoveItem,\n };\n\n // this is only settings that initialized before the connection was established\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n const noTranslation =\n (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false';\n\n this.setState({ guiSettings: true, drawerState, noTranslation }, () => {\n if (Utils.getThemeName() !== this.state.theme.name) {\n this.toggleTheme(Utils.getThemeName());\n }\n });\n } else if (this.state.guiSettings) {\n window._localStorage = null;\n window._sessionStorage = null;\n\n this.setState({ guiSettings: false });\n }\n }\n\n enableGuiSettings(enabled: boolean, ownSettings?: boolean): void {\n if (enabled && !this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n this.guiSettings = obj || JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n\n if (ownSettings || !this.guiSettings.native || !Object.keys(this.guiSettings.native).length) {\n this.guiSettings.native = { localStorage: {}, sessionStorage: {} };\n Object.keys(window.localStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.localStorage[name] = window.localStorage.getItem(name);\n }\n });\n\n Object.keys(window.sessionStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.sessionStorage[name] = window.sessionStorage.getItem(name);\n }\n });\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n } else {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n window.location.reload();\n }\n\n await this.getGUISettings();\n });\n } else if (!enabled && this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n if (!obj) {\n try {\n // create an object if not exists\n await this.socket.setObject(\n `system.adapter.${this.adminInstance}.guiSettings`,\n DEFAULT_GUI_SETTINGS_OBJECT,\n );\n } catch (e) {\n console.error(`Cannot create system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n window._localStorage = null;\n window._sessionStorage = null;\n\n // clear localStorage\n Object.keys(window.localStorage).forEach(key => window.localStorage.removeItem(key));\n Object.keys(window.sessionStorage).forEach(key => window.sessionStorage.removeItem(key));\n\n Object.keys(this.guiSettings.native.localStorage).forEach(name =>\n window.localStorage.setItem(name, this.guiSettings.native.localStorage[name]),\n );\n Object.keys(this.guiSettings.native.sessionStorage).forEach(name =>\n window.sessionStorage.setItem(name, this.guiSettings.native.sessionStorage[name]),\n );\n\n this.guiSettings = null;\n\n try {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: false,\n ack: true,\n });\n } catch (e) {\n window.alert(`Cannot disable settings: ${e}`);\n }\n this.setState({ guiSettings: false });\n });\n }\n }\n\n componentDidMount(): void {\n if (!this.state.login) {\n window.addEventListener('hashchange', this.onHashChanged, false);\n\n if (!this.state.currentTab.tab) {\n this.handleNavigation('tab-intro');\n } else {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n this.socket = new Connection({\n protocol: window.location.protocol,\n host: window.location.hostname,\n\n name: 'admin',\n admin5only: true,\n port: App.getPort(),\n autoSubscribes: ['system.adapter.*'], // Do not subscribe on '*' and really we don't need a 'system.adapter.*' too. Every tab must subscribe itself to everything that it needs\n autoSubscribeLog: true,\n onProgress: progress => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({\n connected: false,\n });\n } else if (progress === PROGRESS.READY) {\n // BF: (2022.05.09) here must be this.socket.getVersion(true), but I have no Idea, why it does not work :(\n this.socket\n .getVersion()\n .then(async versionInfo => {\n console.log(\n `Stored version: ${this.state.versionAdmin}, new version: ${versionInfo.version}`,\n );\n if (this.state.versionAdmin && this.state.versionAdmin !== versionInfo.version) {\n window.alert('New adapter version detected. Reloading...');\n setTimeout(() => window.location.reload(), 500);\n }\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n\n // read settings anew\n await this.getGUISettings();\n\n const newState: Partial<AppState> = {\n connected: true,\n progress: 100,\n versionAdmin: versionInfo.version,\n };\n\n if (this.state.cmd && this.state.cmd.match(/ admin(@[-.\\w]+)?$/)) {\n // close the command dialog after reconnecting (maybe admin was restarted, and update is now finished)\n newState.commandRunning = false;\n newState.forceUpdateAdapters = this.state.forceUpdateAdapters + 1;\n\n this.closeCmdDialog(() => {\n this.setState(newState as AppState);\n window.location.reload();\n });\n } else {\n try {\n const adminObj = await this.socket.getObject(\n `system.adapter.${this.adminInstance}`,\n );\n // use instance language\n if (adminObj?.native?.language) {\n if (adminObj.native.language !== I18n.getLanguage()) {\n console.log(`Language changed to ${adminObj.native.language}`);\n I18n.setLanguage(adminObj.native.language);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } else if (this.socket.systemLang !== I18n.getLanguage()) {\n console.log(`Language changed to ${this.socket.systemLang}`);\n I18n.setLanguage(this.socket.systemLang);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } catch (e) {\n console.error(`Cannot read admin settings: ${e}`);\n }\n\n this.setState(newState as AppState);\n }\n })\n .catch(err => {\n console.error(`Cannot read version: ${err}`);\n if (err === 'ioBroker is not connected') {\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n });\n } else {\n this.setState({\n connected: true,\n progress: Math.round((PROGRESS.READY / progress) * 100),\n });\n }\n },\n onReady: async () => {\n // Combine adminGuiConfig with user settings\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n ...this.socket.systemConfig.native?.vendor,\n };\n this.adminGuiConfig.admin.menu = this.adminGuiConfig.admin.menu || {};\n this.adminGuiConfig.admin.settings = this.adminGuiConfig.admin.settings || {};\n this.adminGuiConfig.admin.adapters = this.adminGuiConfig.admin.adapters || {};\n this.adminGuiConfig.admin.login = this.adminGuiConfig.admin.login || {};\n\n try {\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n if (!this.adminInstance) {\n console.error('Cannot read admin instance!');\n }\n const adminObj = await this.socket.getObject(`system.adapter.${this.adminInstance}`);\n // use instance language\n if (adminObj?.native?.language) {\n I18n.setLanguage(adminObj.native.language);\n } else {\n I18n.setLanguage(this.socket.systemLang);\n }\n\n this.languageSet = true;\n const isStrict = await this.socket.getIsEasyModeStrict();\n\n await this.getGUISettings();\n\n if (isStrict) {\n const config = await this.socket.getEasyMode();\n this.setState({\n lang: this.socket.systemLang,\n ready: true,\n strictEasyMode: true,\n easyModeConfigs: config.configs,\n });\n return;\n }\n\n // create Workers\n this.logsWorker = this.logsWorker || new LogsWorker(this.socket, 1_000);\n this.instancesWorker = this.instancesWorker || new InstancesWorker(this.socket);\n this.hostsWorker = this.hostsWorker || new HostsWorker(this.socket);\n this.adaptersWorker = this.adaptersWorker || new AdaptersWorker(this.socket);\n this.objectsWorker = this.objectsWorker || new ObjectsWorker(this.socket);\n\n const newState: Partial<AppState> = {\n lang: this.socket.systemLang,\n ready: true,\n };\n\n try {\n newState.systemConfig = await this.socket.getCompactSystemConfig();\n newState.wizard = !newState.systemConfig.common.licenseConfirmed;\n await this.findCurrentHost(newState);\n await this.readRepoAndInstalledInfo(newState.currentHost, newState.hosts);\n } catch (e) {\n console.log(`Error reading repo in onReady: ${e.stack}`);\n }\n\n this.adaptersWorker.registerRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker.registerHandler(this.adaptersChangeHandler);\n this.hostsWorker.registerHandler(this.updateHosts);\n this.hostsWorker.registerNotificationHandler(this.handleNewNotifications);\n\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem(\n 'App.expertMode',\n );\n newState.expertMode = storedExpertMode\n ? storedExpertMode === 'true'\n : !!newState.systemConfig.common.expertMode;\n\n // Read user and show him\n if (this.socket.isSecure || this.socket.systemConfig.native?.vendor) {\n try {\n const user = await this.socket.getCurrentUser();\n\n const userObj = await this.socket.getObject(`system.user.${user}`);\n\n if (userObj.native?.vendor) {\n Object.assign(this.adminGuiConfig, userObj.native.vendor);\n }\n\n if (this.socket.isSecure) {\n this.setState({\n user: {\n id: userObj._id,\n name: Utils.getObjectNameFromObj(userObj, this.socket.systemLang),\n color: userObj.common.color,\n icon: userObj.common.icon,\n invertBackground: this.mustInvertBackground(userObj.common.color),\n },\n });\n\n // start ping interval\n void this.makePingAuth();\n }\n } catch (e) {\n console.error(`Could not determine user to show: ${e}`);\n this.showAlert(e, 'error');\n }\n }\n\n this.setState(newState as AppState, () => this.setCurrentTabTitle());\n\n void this.socket.subscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n // Give some time for communication\n setTimeout(() => this.logsWorkerChanged(this.state.currentHost), 1000);\n\n setTimeout(\n () =>\n this.findNewsInstance().then(instance => {\n this.newsInstance = instance;\n void this.socket.subscribeState(`admin.${instance}.info.newsFeed`, this.onNews);\n }),\n 5_000,\n );\n\n setTimeout(async () => {\n const notifications = await this.hostsWorker.getNotifications(newState.currentHost);\n await this.handleNewNotifications(notifications);\n }, 3_000);\n } catch (e) {\n console.error(`Error in onReady: ${e.stack}`);\n this.showAlert(`Error in onReady: ${e.stack}`, 'error');\n }\n },\n onError: error => {\n console.error(error);\n error = error.message || error.toString();\n if (error === 'ioBroker is not connected') {\n if (!this.state.cloudNotConnected) {\n this.showAlert(I18n.t(error), 'error');\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n } else {\n this.showAlert(error, 'error');\n }\n },\n });\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('hashchange', this.onHashChanged, false);\n this.socket?.unsubscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n this.adaptersWorker?.unregisterRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker?.unregisterHandler(this.adaptersChangeHandler);\n this.hostsWorker?.unregisterHandler(this.updateHosts);\n\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n if (this.expireInSecInterval) {\n clearInterval(this.expireInSecInterval);\n this.expireInSecInterval = null;\n }\n\n if (window._localStorage) {\n window._localStorage = null;\n window._sessionStorage = null;\n }\n }\n\n updateHosts = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n\n events.forEach((event: HostEvent): void => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj as CompactHost;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n // new\n hosts.push(event.obj as CompactHost);\n }\n });\n\n this.setState({ hosts });\n };\n\n repoChangeHandler = (): void => {\n void this.readRepoAndInstalledInfo(this.state.currentHost, null, true).then(() => console.log('Repo updated!'));\n };\n\n adaptersChangeHandler = (events: AdapterEvent[]): void => {\n // update installed\n //\n const installed: CompactInstalledInfo = JSON.parse(JSON.stringify(this.state.installed));\n let changed = false;\n events.forEach(event => {\n const parts = event.id.split('.');\n const adapter = parts[2];\n if (event.type === 'deleted' || !event.obj) {\n if (installed[adapter]) {\n changed = true;\n delete installed[adapter];\n }\n } else if (installed[adapter]) {\n Object.keys(installed[adapter]).forEach(attr => {\n if (\n (installed[adapter] as Record<string, any>)[attr] !==\n (event.obj.common as Record<string, any>)[attr]\n ) {\n (installed[adapter] as Record<string, any>)[attr] = (event.obj.common as Record<string, any>)[\n attr\n ];\n changed = true;\n }\n });\n } else {\n installed[adapter] = { version: event.obj.common.version };\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ installed });\n }\n };\n\n async findCurrentHost(newState: Partial<AppState>): Promise<void> {\n newState.hosts = await this.socket.getCompactHosts();\n\n if (!this.state.currentHost) {\n const currentHost = (window._localStorage || window.localStorage).getItem('App.currentHost');\n\n const itemHost = newState.hosts.find(host => host._id === currentHost);\n\n if (currentHost && itemHost) {\n newState.currentHost = itemHost._id;\n newState.currentHostName = itemHost.common?.name || itemHost._id.replace('system.host.', '');\n } else {\n newState.currentHost = newState.hosts[0]._id;\n newState.currentHostName =\n newState.hosts[0].common?.name || newState.hosts[0]._id.replace('system.host.', '');\n }\n }\n\n newState.ownHost = newState.currentHost;\n\n // Check that host is alive\n let alive;\n try {\n alive = await this.socket.getState(`${newState.currentHost}.alive`);\n } catch (e) {\n alive = null;\n console.warn(`Cannot get state ${newState.currentHost}.alive: ${e}`);\n }\n\n if (!alive || !alive.val) {\n // find first the live host\n for (let h = 0; h < newState.hosts.length; h++) {\n alive = await this.socket.getState(`${newState.hosts[h]._id}.alive`);\n if (alive && alive.val) {\n newState.currentHost = newState.hosts[h]._id;\n newState.currentHostName = newState.hosts[h].common.name;\n }\n }\n }\n }\n\n updateExpireIn(): void {\n const now = Date.now();\n this.expireInSec = this.expireInSec > 0 ? this.expireInSec - (now - this.lastExecution) / 1_000 : 0;\n\n const time = Utils.formatTime(this.expireInSec);\n if (this.refUser.current) {\n this.refUser.current.title = this.expireText.replace('%s', time);\n }\n if (this.expireInSec < this.EXPIRE_WARNING_THRESHOLD && this.refUserDiv.current) {\n this.refUserDiv.current.innerHTML = time;\n\n if (!this.state.expireWarningMode) {\n this.setState({ expireWarningMode: true });\n }\n } else if (this.state.expireWarningMode) {\n this.refUserDiv.current.innerHTML = this.state.user.name;\n this.setState({ expireWarningMode: false });\n }\n\n if (this.expireInSec <= 0) {\n window.alert('Session expired');\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n\n this.lastExecution = now;\n }\n\n /**\n * Start interval to handle logout after the session expires, this also refreshes the session\n */\n async makePingAuth(): Promise<void> {\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n\n try {\n const data = await this.socket.getCurrentSession();\n\n if (data) {\n if (!this.expireInSecInterval) {\n this.expireInSecInterval = setInterval(() => this.updateExpireIn(), 1_000);\n }\n this.expireInSec = data.expireInSec;\n this.lastExecution = Date.now();\n this.updateExpireIn();\n }\n } catch (e) {\n window.alert(`Session timeout: ${e}`);\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n }\n\n onDiscoveryAlive = (_name: string, value?: ioBroker.State | null): void => {\n if (!!value?.val !== this.state.discoveryAlive) {\n this.setState({ discoveryAlive: !!value?.val });\n }\n };\n\n getDiscoveryModal = (): JSX.Element => (\n <DiscoveryDialog\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n currentHost={this.state.currentHost}\n defaultLogLevel={this.state.systemConfig.common.defaultLogLevel}\n repository={this.state.repository}\n hosts={this.state.hosts}\n onClose={() => Router.doNavigate(null)}\n />\n );\n\n async findNewsInstance(): Promise<number> {\n const maxCount = 200;\n for (let instance = 0; instance < maxCount; instance++) {\n try {\n const adminAlive = await this.socket.getState(`system.adapter.admin.${instance}.alive`);\n if (adminAlive?.val) {\n return instance;\n }\n } catch (e) {\n console.error(`Cannot find news instance: ${e.stack}`);\n this.showAlert(`Cannot find news instance: ${e.stack}`, 'error');\n }\n }\n return 0;\n }\n\n /**\n * Render the notification dialog\n */\n renderNotificationsDialog(): JSX.Element | null {\n if (!this.state.notificationsDialog) {\n return null;\n }\n\n return (\n <NotificationsDialog\n notifications={this.state.notifications?.notifications || {}}\n instances={this.state.notifications?.instances || {}}\n onClose={() => this.setState({ notificationsDialog: false })}\n ackCallback={(host, name) => this.socket.clearNotifications(host, name)}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n />\n );\n }\n\n renderHostWarningDialog(): JSX.Element | null {\n if (!this.state.showHostWarning) {\n return null;\n }\n\n return (\n <HostWarningDialog\n instances={this.state.showHostWarning.instances}\n messages={this.state.showHostWarning.result.system.categories}\n dateFormat={this.state.systemConfig.common.dateFormat}\n themeType={this.state.themeType}\n ackCallback={name => this.socket.clearNotifications(this.state.showHostWarning.host, name)}\n onClose={() => this.setState({ showHostWarning: null })}\n />\n );\n }\n\n /** Called when notifications detected, updates the notification indicator */\n handleNewNotifications = async (notifications: Record<string, NotificationAnswer>): Promise<void> => {\n const noNotifications: NotificationsCount = {\n warning: 0,\n other: 0,\n };\n\n // if host is offline it returns null\n if (!notifications) {\n this.setState({ noNotifications, notifications: {} });\n return;\n }\n\n for (const hostDetails of Object.values(notifications)) {\n if (!hostDetails?.result) {\n continue;\n }\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const categoryDetails of Object.values(scopeDetails.categories)) {\n for (const instanceDetails of Object.values(categoryDetails.instances)) {\n const isWarning = categoryDetails.severity === 'alert';\n noNotifications[isWarning ? 'warning' : 'other'] += instanceDetails.messages.length;\n }\n }\n }\n }\n\n const instances = await this.instancesWorker.getInstances();\n\n this.setState({ noNotifications, notifications: { notifications, instances } });\n };\n\n /**\n * Shows notifications to the user\n *\n * @param notifications present notifications\n * @param host host to get notifications from\n */\n showAdaptersWarning = async (\n notifications: Record<string, NotificationAnswer | null>,\n host: string,\n ): Promise<void> => {\n if (!notifications || !notifications[host] || !notifications[host].result) {\n return;\n }\n\n const result = notifications[host].result;\n\n if (result?.system && Object.keys(result.system.categories).length) {\n await this.instancesWorker.getInstances().then(instances =>\n this.setState({\n showHostWarning: {\n host,\n instances: instances as Record<string, ioBroker.InstanceObject>,\n result,\n },\n }),\n );\n }\n };\n\n /**\n * Get news for specific adapter instance\n */\n onNews = async (_id: string, newsFeed: ioBroker.State): Promise<void> => {\n try {\n if (!this.state.systemConfig.common.licenseConfirmed) {\n return;\n }\n\n const lastNewsId = await this.socket.getState(`admin.${this.newsInstance}.info.newsLastId`);\n if (newsFeed?.val) {\n let news = null;\n try {\n news = JSON.parse(newsFeed.val as string);\n } catch {\n console.error(`Cannot parse news: ${newsFeed.val}`);\n }\n\n if (news?.length && news[0].id !== lastNewsId?.val) {\n const uuid: string = await this.socket.getUuid();\n const info = await this.socket.getHostInfo(this.state.currentHost).catch(() => null);\n\n const instances = await this.socket.getCompactInstances().catch(() => null);\n\n const objectsDbType = (await this.socket.getDiagData(this.state.currentHost, 'normal')).objectsType;\n\n const objects = await this.objectsWorker.getObjects(true);\n const noObjects = Object.keys(objects || {}).length;\n\n const checkNews = checkMessages(news, lastNewsId?.val as string, {\n lang: I18n.getLanguage(),\n adapters: this.state.adapters,\n instances: instances || [],\n nodeVersion: info ? info['Node.js'] || '?' : '?',\n npmVersion: info ? info.NPM || '?' : '?',\n os: info ? info.os || '?' : '?',\n activeRepo: this.state.systemConfig.common.activeRepo,\n uuid,\n objectsDbType,\n noObjects,\n });\n\n if (checkNews?.length) {\n this.setState({\n showNews: {\n checkNews,\n lastNewsId: lastNewsId?.val as string,\n },\n });\n }\n }\n }\n } catch (e) {\n console.error(`Could not process news: ${e.stack}`);\n this.showAlert(`Could not process news: ${e.stack}`, 'error');\n }\n };\n\n renderNewsDialog(): JSX.Element | null {\n if (!this.state.showNews) {\n return null;\n }\n return (\n <NewsAdminDialog\n newsArr={this.state.showNews.checkNews}\n current={this.state.showNews.lastNewsId}\n onSetLastNewsId={async id => {\n if (id) {\n await this.socket.setState(`admin.${this.newsInstance}.info.newsLastId`, {\n val: id,\n ack: true,\n });\n }\n this.setState({ showNews: null });\n }}\n />\n );\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n\n return (\n <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={I18n.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({ showSlowConnectionWarning: false, readTimeoutMs }, () =>\n this.readRepoAndInstalledInfo(this.state.currentHost),\n );\n } else {\n this.setState({ showSlowConnectionWarning: false });\n }\n }}\n />\n );\n }\n\n async readRepoAndInstalledInfo(currentHost: string, hosts?: CompactHost[] | null, update?: boolean): Promise<void> {\n hosts = hosts || this.state.hosts;\n\n const repository: CompactRepository = await this.socket\n .getCompactRepository(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getRepositoryCompact: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {};\n });\n\n const installed: CompactInstalledInfo = await this.socket\n .getCompactInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getInstalled: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {};\n });\n\n const adapters: Record<string, CompactAdapterInfo> = await this.socket.getCompactAdapters(update).catch(e => {\n window.alert(`Cannot read adapters: ${e}`);\n return {} as Record<string, CompactAdapterInfo>;\n });\n\n if (installed && adapters) {\n Object.keys(adapters).forEach(id => {\n if (installed[id] && adapters[id].iv) {\n installed[id].ignoreVersion = adapters[id].iv;\n }\n });\n }\n\n this.setState({\n repository,\n installed,\n hosts,\n adapters,\n });\n }\n\n logsWorkerChanged = (currentHost: string): void => {\n this.logsWorker?.setCurrentHost(currentHost);\n };\n\n /**\n * Updates the current currentTab in the states\n */\n onHashChanged = (): void => {\n this.setState({ currentTab: Router.getLocation() }, () => this.setCurrentTabTitle());\n };\n\n /**\n * Get the used port\n */\n static getPort(): number {\n let port = parseInt(window.location.port, 10);\n\n if (Number.isNaN(port)) {\n switch (App.getProtocol()) {\n case 'https:':\n port = 443;\n break;\n case 'http:':\n port = 80;\n break;\n default:\n break;\n }\n }\n\n if (!port || port === 3000) {\n port = 8081;\n }\n\n return port;\n }\n\n /**\n * Get the used protocol\n */\n private static getProtocol(): 'http:' | 'https:' {\n return window.location.protocol as 'http:' | 'https:';\n }\n\n /**\n * Get a theme\n */\n private static createTheme(name?: ThemeName): IobTheme {\n return Theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n */\n private static getThemeName(theme: IobTheme): ThemeName {\n return theme.name;\n }\n\n /**\n * Get the theme type\n */\n private static getThemeType(theme: IobTheme): ThemeType {\n return theme.palette.mode;\n }\n\n /** Changes the current theme */\n toggleTheme = (currentThemeName?: ThemeName): void => {\n const themeName = this.state.themeName;\n\n const newThemeName = currentThemeName || Utils.toggleTheme(themeName);\n\n const theme = App.createTheme(newThemeName);\n\n this.setState(\n {\n theme,\n themeName: newThemeName,\n themeType: App.getThemeType(theme),\n },\n () => {\n this.refConfigIframe?.contentWindow?.postMessage('updateTheme', '*');\n },\n );\n };\n\n setCurrentTabTitle(): void {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n setTitle(title: string): void {\n document.title = `${title} - ${this.state.currentHostName || 'ioBroker'}`;\n }\n\n getCurrentTab(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.tab) {\n if (this.state.currentTab.tab === 'tab-adapters') {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n const opened = !small && this.state.drawerState === DrawerStates.opened;\n const closed = small || this.state.drawerState === DrawerStates.closed;\n\n return (\n <Suspense fallback={<Connecting />}>\n <Adapters\n theme={this.state.theme}\n triggerUpdate={this.state.triggerAdapterUpdate}\n key=\"adapters\"\n forceUpdateAdapters={this.state.forceUpdateAdapters}\n adaptersWorker={this.adaptersWorker}\n instancesWorker={this.instancesWorker}\n themeType={this.state.themeType}\n systemConfig={this.state.systemConfig}\n socket={this.socket}\n adminHost={this.state.ownHost}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n lang={I18n.getLanguage()}\n expertMode={this.state.expertMode}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n commandRunning={this.state.commandRunning}\n onSetCommandRunning={commandRunning => this.setState({ commandRunning })}\n menuOpened={opened}\n menuClosed={closed}\n adminGuiConfig={this.adminGuiConfig}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n adminInstance={this.adminInstance}\n currentAdminVersion={this.state.versionAdmin}\n onUpdating={updating => this.setState({ updating })}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-instances') {\n return (\n <Suspense fallback={<Connecting />}>\n <Instances\n key=\"instances\"\n menuPadding={\n this.state.drawerState === DrawerStates.closed\n ? 0\n : this.state.drawerState === DrawerStates.opened\n ? this.state.editMenuList\n ? DRAWER_EDIT_WIDTH\n : DRAWER_FULL_WIDTH\n : DRAWER_COMPACT_WIDTH\n }\n socket={this.socket}\n instancesWorker={this.instancesWorker}\n lang={I18n.getLanguage()}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n repository={this.state.repository}\n hosts={this.state.hosts}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n currentHostName={this.state.currentHostName}\n t={I18n.t}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n width={this.props.width}\n configStored={(value: boolean) => this.allStored(value)}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n inBackgroundCommand={this.state.commandError || this.state.performed}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-intro') {\n return (\n <Suspense fallback={<Connecting />}>\n <Intro\n key=\"intro\"\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n showAlert={(message: string, type?: 'error' | 'warning' | 'info' | 'success') =>\n this.showAlert(message, type)\n }\n socket={this.socket}\n t={I18n.t}\n lang={I18n.getLanguage()}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-logs') {\n return (\n <Suspense fallback={<Connecting />}>\n <Logs\n key=\"logs\"\n t={I18n.t}\n width={this.props.width}\n lang={this.state.lang}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n ready={this.state.ready}\n logsWorker={this.logsWorker}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n hostsWorker={this.hostsWorker}\n clearErrors={() => this.clearLogErrors()}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-files') {\n return (\n <Suspense fallback={<Connecting />}>\n <Files\n key=\"files\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-users') {\n return (\n <Suspense fallback={<Connecting />}>\n <Users\n key=\"users\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-enums') {\n return (\n <Suspense fallback={<Connecting />}>\n <Enums\n key=\"enums\"\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-objects') {\n return (\n <Suspense\n fallback={<Connecting />}\n key=\"objects\"\n >\n <Objects\n t={I18n.t}\n theme={this.state.theme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n objectsWorker={this.objectsWorker}\n lang={I18n.getLanguage()}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-hosts') {\n return (\n <Suspense fallback={<Connecting />}>\n <Hosts\n socket={this.socket}\n lang={I18n.getLanguage()}\n hostsWorker={this.hostsWorker}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n t={I18n.t}\n navigate={Router.doNavigate}\n currentHost={this.state.currentHost}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n systemConfig={this.state.systemConfig}\n showAdaptersWarning={this.showAdaptersWarning}\n adminInstance={this.adminInstance}\n onUpdating={(updating: boolean) => this.setState({ updating })}\n instancesWorker={this.instancesWorker}\n />\n </Suspense>\n );\n }\n const m = this.state.currentTab.tab.match(/^tab-([-\\w]+)(-\\d+)?$/);\n if (m) {\n // /adapter/javascript/tab.html\n return (\n <Suspense fallback={<Connecting />}>\n <CustomTab\n key={this.state.currentTab.tab}\n t={I18n.t}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n instancesWorker={this.instancesWorker}\n tab={this.state.currentTab.tab}\n themeName={this.state.themeName}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n );\n }\n }\n\n return null;\n }\n\n clearLogErrors(): void {\n this.logsWorker.resetErrors();\n this.logsWorker.resetWarnings();\n }\n\n getCurrentDialog(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.dialog) {\n if (this.state.currentTab.dialog === 'system') {\n return this.getSystemSettingsDialog();\n }\n if (this.state.currentTab.dialog === 'discovery') {\n return this.getDiscoveryModal();\n }\n }\n\n return null;\n }\n\n getSystemSettingsDialog(): JSX.Element {\n return (\n <SystemSettingsDialog\n adminGuiConfig={this.adminGuiConfig}\n width={this.props.width}\n currentHost={this.state.currentHost}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n key=\"systemSettings\"\n onClose={async (repoChanged?: boolean) => {\n Router.doNavigate(null);\n // read systemConfig anew\n const systemConfig = await this.socket.getObject('system.config');\n\n if (repoChanged) {\n this.setState({ triggerAdapterUpdate: this.state.triggerAdapterUpdate + 1, systemConfig });\n } else {\n this.setState({ systemConfig });\n }\n }}\n lang={this.state.lang}\n socket={this.socket}\n currentTab={this.state.currentTab}\n expertModeFunc={(value: boolean) => {\n (window._sessionStorage || window.sessionStorage).removeItem('App.expertMode');\n const systemConfig = JSON.parse(JSON.stringify(this.state.systemConfig));\n systemConfig.common.expertMode = value;\n this.setState({ expertMode: value, systemConfig });\n }}\n t={I18n.t}\n />\n );\n }\n\n handleAlertClose(event?: string, reason?: string): void {\n if (reason === 'clickaway') {\n return;\n }\n\n this.setState({ alert: false });\n }\n\n showAlert(alertMessage: string, alertType?: 'error' | 'warning' | 'info' | 'success'): void {\n if (alertType !== 'error' && alertType !== 'warning' && alertType !== 'info' && alertType !== 'success') {\n alertType = 'info';\n }\n\n this.setState({\n alert: true,\n alertType,\n alertMessage,\n });\n }\n\n handleDrawerState(state: 0 | 1 | 2): void {\n (window._localStorage || window.localStorage).setItem('App.drawerState', state.toString());\n this.setState({\n drawerState: state,\n });\n }\n\n static logout(): void {\n if (window.location.port === '3000') {\n window.location.href = `${window.location.protocol}//${window.location.hostname}:8081/logout?dev`;\n } else {\n window.location.href = `./logout?origin=${window.location.pathname}`;\n }\n }\n\n handleNavigation(tab: string): void {\n if (tab) {\n if (this.state.allStored) {\n Router.doNavigate(tab);\n\n this.setState({ currentTab: Router.getLocation() });\n } else {\n this.setState({\n dataNotStoredDialog: true,\n dataNotStoredTab: tab,\n });\n }\n }\n\n if (this.props.width === 'xs' || this.props.width === 'sm') {\n this.handleDrawerState(DrawerStates.closed as 1);\n }\n\n tab = tab || (this.state.currentTab && this.state.currentTab.tab) || '';\n\n this.setTitle(tab.replace('tab-', ''));\n }\n\n allStored(value: boolean): void {\n this.setState({\n allStored: value,\n });\n }\n\n closeDataNotStoredDialog(): void {\n this.setState({ dataNotStoredDialog: false });\n }\n\n confirmDataNotStored(): void {\n this.setState(\n {\n dataNotStoredDialog: false,\n allStored: true,\n },\n () => this.handleNavigation(this.state.dataNotStoredTab),\n );\n }\n\n executeCommand(cmd: string, host?: string, callback?: (exitCode: number) => void): void {\n if (typeof host === 'boolean') {\n callback = host;\n host = null;\n }\n\n if (this.state.performed || this.state.commandError) {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () =>\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n }),\n );\n return;\n }\n console.log(`Execute: ${cmd}`);\n\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n commandHost: host || this.state.currentHost,\n });\n }\n\n closeCmdDialog(cb?: () => void): void {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () => cb && cb(),\n );\n }\n\n renderWizardDialog(): JSX.Element | null {\n if (this.state.wizard) {\n return (\n <WizardDialog\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n host={this.state.currentHost}\n socket={this.socket}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n toggleTheme={this.toggleTheme}\n lang={I18n.getLanguage()}\n onClose={(redirect?: string) => {\n this.setState({ wizard: false, showRedirect: redirect, redirectCountDown: 10 }, () => {\n if (this.state.showRedirect) {\n setInterval(() => {\n if (this.state.redirectCountDown > 0) {\n this.setState({ redirectCountDown: this.state.redirectCountDown - 1 });\n } else {\n window.location.href = this.state.showRedirect;\n }\n }, 1_000);\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n showRedirectDialog(): JSX.Element | null {\n if (this.state.showRedirect) {\n return (\n <Dialog\n open={!0}\n onClose={() => {\n // Ignore. It can be closed only by button\n }}\n >\n <DialogTitle>{I18n.t('Waiting for admin restart...')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {I18n.t('Redirect in %s second(s)', this.state.redirectCountDown)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {window.sidebar ||\n (window.opera && window.print) ||\n // @ts-expect-error ignore\n (window.document.all && window.external?.AddFavorite) ? (\n <Button\n onClick={() => {\n if (window.sidebar) {\n // Firefox\n window.sidebar.addPanel('ioBroker.admin', this.state.showRedirect, '');\n } else if (window.opera && window.print) {\n // Opera\n const elem = document.createElement('a');\n elem.setAttribute('href', this.state.showRedirect);\n elem.setAttribute('title', 'ioBroker.admin');\n elem.setAttribute('rel', 'sidebar');\n elem.click(); // this.title=document.title;\n } else if (document.all) {\n // ie\n // @ts-expect-error ignore\n window.external.AddFavorite(this.state.showRedirect, 'ioBroker.admin');\n }\n }}\n >\n {I18n.t('Bookmark admin')}\n </Button>\n ) : null}\n {this.state.redirectCountDown ? (\n <Button\n variant=\"contained\"\n onClick={() => (window.location.href = this.state.showRedirect)}\n >\n {I18n.t('Go to admin now')}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderCommandDialog(): JSX.Element | null {\n return this.state.cmd ? (\n <CommandDialog\n onSetCommandRunning={(commandRunning: boolean) => this.setState({ commandRunning })}\n onClose={() => this.closeCmdDialog(() => this.setState({ commandRunning: false }))}\n visible={this.state.cmdDialog}\n callback={this.state.callback}\n onInBackground={() => this.setState({ cmdDialog: false })}\n cmd={this.state.cmd}\n errorFunc={() => this.setState({ commandError: true })}\n performed={() => this.setState({ performed: true })}\n inBackground={this.state.commandError || this.state.performed}\n commandError={this.state.commandError}\n socket={this.socket}\n host={this.state.commandHost || this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n />\n ) : null;\n }\n\n renderLoggedUser(): JSX.Element | null {\n if (this.state.user && this.props.width !== 'xs' && this.props.width !== 'sm') {\n return (\n <div>\n {/* @ts-expect-error fixed in js-controller */}\n {this.state.systemConfig.common.siteName ? (\n /* @ts-expect-error fixed in js-controller */\n <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>\n ) : null}\n\n <Box\n component=\"div\"\n title={this.state.user.id}\n sx={{\n ...styles.userBadge,\n ...(this.state.user.invertBackground ? styles.userBackground : undefined),\n }}\n ref={this.refUser}\n >\n {this.state.user.icon ? (\n <Icon\n src={this.state.user.icon}\n style={styles.userIcon}\n />\n ) : (\n <UserIcon style={styles.userIcon} />\n )}\n <div\n ref={this.refUserDiv}\n style={{\n ...styles.userText,\n color: this.state.expireWarningMode ? '#F44' : this.state.user?.color || undefined,\n }}\n >\n {this.state.user.name}\n </div>\n\n {this.state.expireWarningMode ? (\n <IconButton\n onClick={async () => {\n await this.socket.getCurrentSession();\n await this.makePingAuth();\n }}\n >\n <UpdateIcon />\n </IconButton>\n ) : null}\n </Box>\n </div>\n );\n }\n // @ts-expect-error fixed in js-controller\n if (this.props.width !== 'xs' && this.props.width !== 'sm' && this.state.systemConfig.common.siteName) {\n // @ts-expect-error fixed in js-controller\n return <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>;\n }\n return null;\n }\n\n renderAlertSnackbar(): JSX.Element {\n return (\n <Snackbar\n style={styles[`alert_${this.state.alertType}`]}\n open={this.state.alert}\n autoHideDuration={6000}\n onClose={() => this.handleAlertClose()}\n message={this.state.alertMessage}\n />\n );\n }\n\n renderConfirmDialog(): JSX.Element | null {\n /* return <ConfirmDialog\n onClose={() => this.closeDataNotStoredDialog()}\n open={this.state.dataNotStoredDialog}\n header={I18n.t('Please confirm')}\n onConfirm={() => this.confirmDataNotStored()}\n confirmText={I18n.t('Ok')}\n >\n {I18n.t('Some data are not stored. Discard?')}\n </ConfirmDialog>; */\n return this.state.dataNotStoredDialog ? (\n <ConfirmDialog\n title={I18n.t('Please confirm')}\n text={I18n.t('Some data are not stored. Discard?')}\n ok={I18n.t('Ok')}\n cancel={I18n.t('Cancel')}\n onClose={isYes => (isYes ? this.confirmDataNotStored() : this.closeDataNotStoredDialog())}\n />\n ) : null;\n }\n\n renderExpertDialog(): JSX.Element | null {\n if (!this.state.expertModeDialog) {\n return null;\n }\n return (\n <ExpertModeDialog\n onClose={result => {\n if (result === 'openSettings') {\n Router.doNavigate(null, 'system');\n } else if (result) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n this.setState({ expertModeDialog: false, expertMode: !this.state.expertMode });\n } else if (this.state.expertModeDialog) {\n this.setState({ expertModeDialog: false });\n }\n }}\n expertMode={this.state.expertMode}\n />\n );\n }\n\n renderShowGuiSettings(): JSX.Element | null {\n return this.state.showGuiSettings ? (\n <Menu\n anchorEl={this.state.showGuiSettings}\n open={!0}\n onClose={() => this.setState({ showGuiSettings: null })}\n >\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true);\n }}\n >\n {I18n.t('Use settings of other browsers')}\n </MenuItem>\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true, true);\n }}\n >\n {I18n.t('Use settings of this browser')}\n </MenuItem>\n <MenuItem onClick={() => this.setState({ showGuiSettings: null })}>\n <ListItemIcon>\n <CancelIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{I18n.t('Cancel')}</ListItemText>\n </MenuItem>\n </Menu>\n ) : null;\n }\n\n renderToolbar(small: boolean): JSX.Element {\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem('App.expertMode');\n const expertModePermanent =\n !storedExpertMode || (storedExpertMode === 'true') === !!this.state.systemConfig.common.expertMode;\n\n const performedStyle = Utils.getStyle(this.state.theme, styles.performed);\n const sumNotification = this.state.noNotifications.warning + this.state.noNotifications.other;\n\n return (\n <Toolbar>\n <IconButton\n size=\"large\"\n edge=\"start\"\n style={{\n ...styles.menuButton,\n ...(!small && this.state.drawerState !== DrawerStates.closed ? styles.hide : undefined),\n }}\n onClick={() => this.handleDrawerState(DrawerStates.opened as 0)}\n >\n <MenuIcon />\n </IconButton>\n <div style={styles.wrapperButtons}>\n <Tooltip\n title={I18n.t('Notifications')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n disableRipple={!sumNotification}\n style={{ opacity: sumNotification ? 1 : 0.3 }}\n onClick={sumNotification ? () => this.setState({ notificationsDialog: true }) : null}\n >\n <Badge\n badgeContent={this.state.noNotifications.other + this.state.noNotifications.warning}\n color={this.state.noNotifications.warning > 0 ? 'error' : 'secondary'}\n max={99}\n >\n <NotificationsIcon />\n </Badge>\n </IconButton>\n </Tooltip>\n <IsVisible\n name=\"admin.appBar.discovery\"\n config={this.adminGuiConfig}\n >\n {this.state.discoveryAlive && (\n <Tooltip\n title={I18n.t('Discovery devices')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'discovery')}\n >\n <VisibilityIcon />\n </IconButton>\n </Tooltip>\n )}\n </IsVisible>\n <IsVisible\n name=\"admin.appBar.systemSettings\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={I18n.t('System settings')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'system')}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {this.toggleThemePossible ? (\n <IsVisible\n name=\"admin.appBar.toggleTheme\"\n config={this.adminGuiConfig}\n >\n <ToggleThemeMenu\n size=\"large\"\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName as 'dark' | 'light' | 'colored' | 'blue'}\n t={I18n.t}\n />\n </IsVisible>\n ) : null}\n <IsVisible\n name=\"admin.appBar.expertMode\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={`${I18n.t('Toggle expert mode')} ${\n expertModePermanent ? '' : ` (${I18n.t('only in this browser session')})`\n }`}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Badge\n color=\"secondary\"\n variant=\"dot\"\n sx={{ '& .MuiBadge-badge': styles.expertBadge }}\n invisible={expertModePermanent}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n if (!!this.state.systemConfig.common.expertMode === !this.state.expertMode) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else if (\n (window._sessionStorage || window.sessionStorage).getItem(\n 'App.doNotShowExpertDialog',\n ) === 'true'\n ) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else {\n this.setState({ expertModeDialog: true });\n }\n }}\n style={{\n color: this.state.expertMode ? this.state.theme.palette.expert : undefined,\n }}\n color=\"default\"\n >\n <IconExpert\n // glowColor={this.state.theme.palette.secondary.main}\n // active={this.state.expertMode}\n style={{\n ...styles.expertIcon,\n ...(this.state.expertMode ? styles.expertIconActive : undefined),\n }}\n />\n </IconButton>\n </Badge>\n </Tooltip>\n </IsVisible>\n {this.state.expertMode ? (\n <Tooltip\n title={I18n.t('Synchronize admin settings between all opened browser windows')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={e =>\n this.state.guiSettings\n ? this.enableGuiSettings(false)\n : this.setState({ showGuiSettings: e.target as HTMLButtonElement })\n }\n style={{\n color: this.state.guiSettings ? this.state.theme.palette.expert : undefined,\n }}\n >\n {this.state.guiSettings ? <SyncIcon /> : <SyncIconDisabled />}\n </IconButton>\n </Tooltip>\n ) : null}\n <IsVisible\n name=\"admin.appBar.hostSelector\"\n config={this.adminGuiConfig}\n >\n <HostSelectors\n tooltip={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n ? I18n.t('You can change host on Instances, Adapters or Logs pages')\n : undefined\n }\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n socket={this.socket}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n setCurrentHost={(hostName, host) => {\n this.setState(\n {\n currentHostName: hostName,\n currentHost: host,\n },\n async () => {\n this.logsWorkerChanged(host);\n (window._localStorage || window.localStorage).setItem('App.currentHost', host);\n await this.readRepoAndInstalledInfo(host, this.state.hosts);\n // read notifications from host\n const notifications = await this.hostsWorker.getNotifications(host);\n this.handleNewNotifications(notifications);\n },\n );\n }}\n disabled={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n }\n />\n </IsVisible>\n <div style={styles.flexGrow} />\n {this.state.cmd && !this.state.cmdDialog && (\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ cmdDialog: true })}\n >\n <PictureInPictureAltIcon\n style={\n this.state.commandError\n ? styles.errorCmd\n : this.state.performed\n ? performedStyle\n : styles.cmd\n }\n />\n </IconButton>\n )}\n </div>\n\n {this.renderLoggedUser()}\n\n {this.state.drawerState !== DrawerStates.opened &&\n !this.state.expertMode &&\n window.innerWidth > 400 && (\n <Grid\n container\n style={{\n ...(this.state.drawerState !== DrawerStates.opened ? styles.avatarVisible : undefined),\n ...styles.avatarNotVisible,\n }}\n spacing={1}\n alignItems=\"center\"\n >\n {(!this.state.user || this.props.width === 'xs' || this.props.width === 'sm') && (\n <Box\n component=\"div\"\n style={styles.wrapperName}\n sx={{ display: { md: 'inline-block', xs: 'none' } }}\n >\n <Typography>admin</Typography>\n {!this.adminGuiConfig.icon && this.state.versionAdmin && (\n <Typography\n style={{\n ...styles.styleVersion,\n color: this.state.themeType === 'dark' ? '#ffffff80' : '#00000080',\n }}\n >\n v{this.state.versionAdmin}\n </Typography>\n )}\n </Box>\n )}\n <Grid>\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.adminGuiConfig.icon ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={this.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => this.handleNavigation('easy')}\n style={\n this.state.themeName === 'colored' || this.state.themeName === 'blue'\n ? styles.logoWhite\n : undefined\n }\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n </Grid>\n </Grid>\n )}\n </Toolbar>\n );\n }\n\n renderSampleError(): JSX.Element {\n const message = this.state.hasGlobalError.message;\n const stack = this.state.hasGlobalError.stack;\n\n return (\n <div\n style={{\n textAlign: 'center',\n fontSize: 22,\n marginTop: 50,\n height: 'calc(100% - 50px)',\n overflow: 'auto',\n }}\n >\n <h1 style={{ color: '#F00' }}>Error in GUI!</h1>\n Please open the browser console (F12), copy error text from there and create the issue on{' '}\n <a\n href=\"https://github.com/ioBroker/ioBroker.admin/issues\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n github\n </a>\n <br />\n Without this information it is not possible to analyse the error.\n <br />\n It should looks like <br />\n <img\n src=\"img/browserError.png\"\n alt=\"error\"\n />\n <br />\n If in the second line you will see{' '}\n <code\n style={{\n color: '#888',\n fontFamily: 'monospace',\n fontSize: 16,\n }}\n >\n at :3000/static/js/main.chunk.js:36903\n </code>{' '}\n and not the normal file name,\n <br />\n please try to reproduce an error with opened browser console. In this case the special "map"\n files will be loaded and the developers can see the real name of functions and files.\n <div style={{ color: '#F88', fontSize: 14, marginTop: 20 }}>{message}</div>\n <pre\n style={{\n color: '#F88',\n fontSize: 12,\n fontFamily: 'monospace',\n textAlign: 'left',\n marginTop: 20,\n padding: 20,\n }}\n >\n {(stack || '')\n .toString()\n .split('\\n')\n .map((line: string, i: number) => (\n <div key={i}>\n {line}\n <br />\n </div>\n ))}\n </pre>\n </div>\n );\n }\n\n renderEasyMode(): JSX.Element {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div style={{ height: '100%' }}>\n {!this.state.connected && <Connecting />}\n <Suspense fallback={<Connecting />}>\n <EasyMode\n navigate={Router.doNavigate}\n getLocation={Router.getLocation}\n location={this.state.currentTab}\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n width={this.props.width}\n adminInstance={this.adminInstance}\n configs={this.state.easyModeConfigs}\n socket={this.socket}\n configStored={value => this.allStored(value)}\n isFloatComma={this.state.systemConfig?.common.isFloatComma}\n dateFormat={this.state.systemConfig?.common.dateFormat}\n t={I18n.t}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={ref => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n </div>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n render(): JSX.Element {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n\n if (this.state.cloudNotConnected) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div\n style={{\n width: '100%',\n height: '100%',\n textAlign: 'center',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: this.state.themeType === 'dark' ? '#1a1a1a' : '#fafafa',\n color: this.state.themeType === 'dark' ? '#fafafa' : '#1a1a1a',\n }}\n >\n <div style={{ width: 300, height: 100 }}>\n <CircularProgress />\n <div style={{ fontSize: 16 }}>\n {I18n.t('Waiting for connection of ioBroker...')}{' '}\n <span style={{ fontSize: 18 }}>{this.state.cloudReconnect}</span>\n </div>\n </div>\n </div>\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n if (this.state.hasGlobalError) {\n return this.renderSampleError();\n }\n\n if (this.state.login) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Login t={I18n.t} />\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (!this.state.ready && !this.state.updating) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n {window.vendorPrefix === 'PT' ? <LoaderPT themeType={this.state.themeType} /> : null}\n {window.vendorPrefix === 'MV' ? <LoaderMV themeType={this.state.themeType} /> : null}\n {window.vendorPrefix &&\n window.vendorPrefix !== 'PT' &&\n window.vendorPrefix !== 'MV' &&\n window.vendorPrefix !== '@@vendorPrefix@@' ? (\n <LoaderVendor themeType={this.state.themeType} />\n ) : null}\n {!window.vendorPrefix || window.vendorPrefix === '@@vendorPrefix@@' ? (\n <Loader themeType={this.state.themeType} />\n ) : null}\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (this.state.strictEasyMode || this.state.currentTab.tab === 'easy') {\n return this.renderEasyMode();\n }\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <style>\n {`@keyframes myEffect2 {\n 0% {\n opacity: 1;\n transform: translateX(0);\n }\n 100% {\n opacity: 0.7;\n transform: translateX(-2%);\n }\n }\n @keyframes myEffect: {\n 0% {\n opacity: 0.2;\n transform: translateY(0);\n }\n 100% {\n opacity: 1;\n transform: translateY(-10%);\n }\n }\n `}\n </style>\n <Paper\n elevation={0}\n style={styles.root}\n >\n <AppBar\n color=\"default\"\n position=\"fixed\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.appBar,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n !this.state.editMenuList &&\n styles.appBarShift,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n this.state.editMenuList &&\n styles.appBarShiftEdit,\n !small && this.state.drawerState === DrawerStates.compact && styles.appBarShiftCompact,\n )}\n >\n {this.renderToolbar(small)}\n </AppBar>\n <DndProvider backend={!small ? HTML5Backend : TouchBackend}>\n <Drawer\n adminGuiConfig={this.adminGuiConfig}\n state={this.state.drawerState}\n editMenuList={this.state.editMenuList}\n setEditMenuList={(editMenuList: boolean) => this.setState({ editMenuList })}\n systemConfig={this.state.systemConfig}\n handleNavigation={(name: string) => this.handleNavigation(name)}\n onStateChange={(state: 0 | 1 | 2) => this.handleDrawerState(state)}\n onLogout={() => App.logout()}\n currentTab={this.state.currentTab && this.state.currentTab.tab}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n logsWorker={this.logsWorker}\n logoutTitle={I18n.t('Logout')}\n isSecure={this.socket.isSecure}\n versionAdmin={this.state.versionAdmin}\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n expertMode={this.state.expertMode}\n ready={this.state.ready}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n repository={this.state.repository}\n installed={this.state.installed}\n theme={this.state.theme}\n />\n </DndProvider>\n <Paper\n elevation={0}\n square\n id=\"app-paper\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.content,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n !this.state.editMenuList &&\n styles.contentMargin,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n this.state.editMenuList &&\n styles.contentMarginEdit,\n !small && this.state.drawerState !== DrawerStates.opened && styles.contentMarginCompact,\n !small && this.state.drawerState !== DrawerStates.closed && styles.contentShift,\n )}\n >\n {this.getCurrentTab()}\n </Paper>\n {this.renderAlertSnackbar()}\n </Paper>\n {this.renderExpertDialog()}\n {this.getCurrentDialog()}\n {this.renderConfirmDialog()}\n {this.renderCommandDialog()}\n {this.renderWizardDialog()}\n {this.showRedirectDialog()}\n {this.renderSlowConnectionWarning()}\n {this.renderNewsDialog()}\n {this.renderHostWarningDialog()}\n {this.renderNotificationsDialog()}\n {!this.state.connected && !this.state.redirectCountDown && !this.state.updating ? (\n <Connecting />\n ) : null}\n {this.renderShowGuiSettings()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n}\n\nexport default withWidth()(App);\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport * as Sentry from '@sentry/browser';\n\nimport './index.css';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\n\nimport version from './version.json';\nimport { ContextWrapperProvider } from './components/ContextWrapper';\nimport App from './App';\n\ndeclare global {\n interface Window {\n adapterName: string;\n disableDataReporting: boolean | string;\n }\n}\n\nwindow.adapterName = 'admin';\n\nconsole.log(`iobroker.${window.adapterName}@${version.version}`);\n\nconst versionChanged = [\n 'ChunkLoadError', // version was changed\n 'removeChild', // version was changed\n 'DOMException', // version was changed\n];\n\nconst ignoreErrors = [\n 'removeChild', // ignore errors that happen by changing the version\n 'Loading chunk', // ignore errors that happen by changing the version\n 'getWidth', // echarts error\n 'safari-extension', // ignore safari extension errors\n 'this.animation', // echarts error\n 'No connection', // Ignore no connection errors\n 'notConnectedError', // Ignore no connection errors\n 'has no target', // Alias has no target\n 'ResizeObserver', // echarts error\n 'WorkerGlobalScope', // worker error\n 'generateKey', // ignore safari extension errors\n 'The operation is insecure.', // http => https access\n 'SyntaxError: An invalid or illegal string was specified', // No stack and no possibility to detect\n \"Can't find variable: servConn\", // Error from info adapter\n 'LPContentScriptFeatures', // ignore safari extension errors\n 'window.webkit.messageHandlers', // ignore safari extension errors\n 'has no target', // ignore alias errors\n];\n\nif (\n (!window.disableDataReporting || window.disableDataReporting === '@@disableDataReporting@@') &&\n window.location.port !== '3000'\n) {\n Sentry.init({\n dsn: 'https://43643152dab3481db69950ba866ee9d6@sentry.iobroker.net/58',\n release: `iobroker.${window.adapterName}@${version.version}`,\n integrations: [Sentry.dedupeIntegration()],\n beforeSend(event: Sentry.ErrorEvent) {\n // Modify the event here\n if (event?.message && versionChanged.find(error => event.message.includes(error))) {\n window.location.reload();\n } else if (event?.message && ignoreErrors.find(error => event.message.includes(error))) {\n return null;\n }\n return event;\n },\n });\n} else {\n window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {\n const errText = error.toString();\n if (typeof error === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n const message = error.message;\n const stack = error.stack;\n console.error('Try to detect admin version change:');\n console.error(message);\n console.error(JSON.stringify(stack, null, 2));\n window.location.reload();\n return;\n }\n throw error;\n };\n window.onunhandledrejection = (event: PromiseRejectionEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const errText = event.toString();\n if (typeof event === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n console.error(`Try to detect admin version change: ${event.reason}`);\n window.location.reload();\n return;\n }\n if (event instanceof Error) {\n throw event;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n throw new Error(event.toString());\n }\n };\n}\n\nconst container = document.getElementById('root');\nconst root = createRoot(container);\n\nroot.render(\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ContextWrapperProvider>\n <App />\n </ContextWrapperProvider>\n </LocalizationProvider>,\n);\n","import React, { Component, type JSX } from 'react';\n\nimport { amber, blue, red } from '@mui/material/colors';\n\nimport { Grid2, LinearProgress, Paper, Switch, Typography } from '@mui/material';\n\nimport { Router, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils, { type Style } from '../AdminUtils';\n\nconst styles: Record<string, React.CSSProperties> = {\n log: {\n height: 400,\n width: 860,\n padding: 8,\n overflowY: 'auto',\n },\n logNoSpacing: {\n height: '100%',\n width: 'calc(100% - 8px)',\n marginLeft: 8,\n padding: 8,\n overflowY: 'auto',\n },\n error: {\n color: red[500],\n },\n info: {\n color: blue[500],\n },\n warn: {\n color: amber[500],\n },\n};\n\ninterface CommandProps {\n noSpacing?: boolean;\n host: string;\n callback?: (exitCode: number) => void;\n socket: AdminConnection;\n onFinished: (exitCode: number, log: string[]) => void;\n ready: boolean;\n t: Translate;\n inBackground?: boolean;\n commandError?: boolean;\n errorFunc?: (exitCode: number, log: string[]) => void;\n performed?: () => void;\n cmd: string;\n onSetCommandRunning?: (running: boolean) => void;\n showElement?: boolean;\n logsRead?: string[];\n}\n\ninterface CommandState {\n log: string[];\n init: boolean;\n max: number | null;\n value: number | null;\n // progressText: string;\n moreChecked: boolean;\n stopped: boolean;\n activeCmdId?: number;\n // closeOnReady: boolean;\n}\n\nclass Command extends Component<CommandProps, CommandState> {\n private readonly logRef: React.RefObject<HTMLDivElement>;\n\n private static pattern = ['error', 'warn', 'info'];\n\n private readonly regExp: RegExp;\n\n constructor(props: CommandProps) {\n super(props);\n\n this.state = {\n log: [`$ iobroker ${props.cmd || ''}`],\n init: false,\n max: null,\n value: null,\n // progressText: '',\n moreChecked: true,\n stopped: false,\n };\n\n this.logRef = React.createRef();\n\n this.regExp = new RegExp(Command.pattern.join('|'), 'i');\n }\n\n componentDidMount(): void {\n if (this.props.ready && this.props.cmd) {\n console.log(`STARTED: ${this.props.cmd}`);\n this.executeCommand();\n }\n // try {\n // const closeOnReady = JSON.parse((window._localStorage || window.localStorage).getItem('CommandDialog.closeOnReady')) || false;\n // this.setState({ closeOnReady });\n // } catch (error) {\n // this.setState({ closeOnReady: false });\n // }\n }\n\n componentDidUpdate(): void {\n if (!this.state.init && this.props.ready && this.props.cmd) {\n this.executeCommand();\n }\n if (this.props.logsRead && JSON.stringify(this.props.logsRead) !== JSON.stringify(this.state.log)) {\n this.setState({ log: this.props.logsRead });\n }\n this.logRef.current?.scrollIntoView();\n }\n\n executeCommand(): void {\n this.setState({ init: true }, () => this.props.onSetCommandRunning && this.props.onSetCommandRunning(true));\n\n this.props.socket.registerCmdStdoutHandler(this.cmdStdoutHandler.bind(this));\n this.props.socket.registerCmdStderrHandler(this.cmdStderrHandler.bind(this));\n this.props.socket.registerCmdExitHandler(this.cmdExitHandler.bind(this));\n\n const activeCmdId = Math.floor(Math.random() * 0xffffffe) + 1;\n\n this.setState({ activeCmdId });\n\n this.props.socket\n .cmdExec(\n this.props.host.startsWith('system.host.') ? this.props.host : `system.host.${this.props.host}`,\n this.props.cmd,\n activeCmdId,\n )\n .catch(error => console.log(error));\n }\n\n cmdStdoutHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n const upload = text.match(/^upload \\[(\\d+)]/);\n const gotAdmin = !upload ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/admin$/) : null;\n const gotWww = !gotAdmin ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/www$/) : null;\n\n let max = this.state.max;\n let value = null;\n // let progressText = '';\n\n if (upload) {\n max = max || parseInt(upload[1], 10);\n value = parseInt(upload[1], 10);\n } else if (gotAdmin) {\n // upload of admin\n // progressText = this.t('Upload admin started');\n max = null;\n } else if (gotWww) {\n // upload of www\n // progressText = this.t('Upload www started');\n max = null;\n }\n\n this.setState({\n log,\n max,\n value,\n // progressText,\n });\n\n console.log('cmdStdout');\n }\n }\n\n cmdStderrHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n this.setState({ log });\n\n console.log('cmdStderr');\n console.log(id);\n console.log(text);\n }\n }\n\n cmdExitHandler(id: number, exitCode: number): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n if (\n !window.document.hidden &&\n exitCode === 0 &&\n log.length &&\n log[log.length - 1].endsWith('created') &&\n this.props.callback\n ) {\n const newArr = log[log.length - 1].split(' ');\n const adapter = newArr.find(el => el.startsWith('system'));\n if (adapter) {\n // it takes some time to creat the object\n setTimeout(\n _adapter => {\n void this.props.socket.getObject(_adapter).then(obj => {\n AdminUtils.fixAdminUI(obj);\n if (obj && obj.common?.adminUI?.config !== 'none') {\n Router.doNavigate('tab-instances', 'config', _adapter);\n }\n });\n },\n 1000,\n adapter,\n );\n }\n }\n log.push(`${exitCode !== 0 ? 'ERROR: ' : ''}Process exited with code ${exitCode}`);\n\n this.setState({ log, stopped: true }, () => {\n if (this.props.onSetCommandRunning) {\n this.props.onSetCommandRunning(false);\n }\n if (exitCode !== 0 || this.state.log[this.state.log.length - 1].toLowerCase().includes('error')) {\n if (this.props.errorFunc) {\n this.props.errorFunc(exitCode, this.state.log);\n }\n } else {\n if (this.props.performed) {\n this.props.performed();\n }\n this.props.onFinished(exitCode, this.state.log);\n }\n console.log('cmdExit');\n console.log(id);\n console.log(exitCode);\n\n if (typeof this.props.callback === 'function') {\n this.props.callback(exitCode);\n }\n });\n }\n }\n\n colorize(text: string, maxLength?: number): JSX.Element[] | string {\n if (maxLength) {\n text = text.substring(0, maxLength);\n }\n\n if (text.search(this.regExp) !== -1) {\n const result = [];\n\n while (text.search(this.regExp) >= 0) {\n const [match] = text.match(this.regExp);\n const pos = text.search(this.regExp);\n\n if (pos > 0) {\n const part = text.substring(0, pos);\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n\n const part = text.substring(0, match.length);\n if (part) {\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span\n key={result.length}\n style={styles[match.toLowerCase()]}\n >\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n }\n\n if (text) {\n const message = AdminUtils.parseColorMessage(text);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? (message as { original: string; parts: { text: string; style: Style }[] }).parts.map(\n (item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ),\n )\n : message}\n </span>,\n );\n }\n\n return result;\n }\n\n return text;\n }\n\n getLog(): JSX.Element[] {\n return this.state.log.map((value, index) => (\n <Typography\n ref={index === this.state.log.length - 1 ? this.logRef : undefined}\n key={index}\n component=\"p\"\n variant=\"body2\"\n >\n {this.colorize(value)}\n </Typography>\n ));\n }\n\n render(): JSX.Element {\n return (\n <Grid2\n style={this.props.noSpacing ? { height: '100%', width: '100%' } : {}}\n container\n direction=\"column\"\n spacing={this.props.noSpacing ? 0 : 2}\n >\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Grid2>\n {!this.state.stopped && (\n <LinearProgress\n style={this.props.commandError ? { backgroundColor: '#f44336' } : null}\n variant={this.props.inBackground ? 'determinate' : 'indeterminate'}\n value={\n this.state.max && this.state.value\n ? 100 - Math.round((this.state.value / this.state.max) * 100)\n : this.props.commandError\n ? 0\n : 100\n }\n />\n )}\n </Grid2>\n ) : null}\n <div\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: this.props.inBackground ? 'space-between' : 'flex-end',\n }}\n >\n <Typography\n style={\n this.props.inBackground\n ? {\n width: 'calc(100% - 180px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }\n : { display: 'none' }\n }\n component=\"div\"\n >\n {this.colorize(this.state.log[this.state.log.length - 1])}\n </Typography>\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Typography\n component=\"div\"\n style={{ width: 250 }}\n >\n <Grid2\n component=\"label\"\n container\n alignItems=\"center\"\n spacing={1}\n >\n <Grid2>{this.props.t('less')}</Grid2>\n <Grid2>\n <Switch\n checked={this.state.moreChecked}\n onChange={event => this.setState({ moreChecked: event.target.checked })}\n color=\"primary\"\n />\n </Grid2>\n <Grid2>{this.props.t('more')}</Grid2>\n </Grid2>\n </Typography>\n ) : null}\n </div>\n <Grid2 style={this.props.noSpacing ? { height: 'calc(100% - 45px)', width: '100%' } : {}}>\n {this.state.moreChecked && (\n <Paper style={this.props.noSpacing ? styles.logNoSpacing : styles.log}>{this.getLog()}</Paper>\n )}\n </Grid2>\n </Grid2>\n );\n }\n}\n\nexport default Command;\n","import React, { Component, type JSX } from 'react';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nimport type { ThemeType } from '@iobroker/adapter-react-v5';\n\nexport interface EditorProps {\n fontSize?: number;\n value?: string;\n defaultValue?: string;\n mode?: string;\n name?: string;\n onChange?: (newVal: string) => void;\n themeType: ThemeType;\n /** flag that indicates the \"value edit mode\" */\n editValueMode?: boolean;\n error?: boolean;\n style?: React.CSSProperties;\n}\n\nclass Editor extends Component<EditorProps> {\n render(): JSX.Element {\n return (\n <AceEditor\n style={{\n border: '1px solid',\n borderColor: this.props.error ? 'red' : '#00000000',\n minHeight: 200,\n ...this.props.style,\n }}\n mode={this.props.mode || 'json'}\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={this.props.editValueMode}\n showGutter={this.props.editValueMode}\n highlightActiveLine={this.props.editValueMode}\n defaultValue={this.props.defaultValue}\n theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={this.props.value}\n readOnly={!this.props.onChange}\n onChange={newValue => this.props.onChange(newValue)}\n name={this.props.name || 'UNIQUE_ID_OF_DIV1'}\n fontSize={this.props.fontSize || 14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n\n showLineNumbers: this.props.editValueMode,\n tabSize: this.props.editValueMode ? 2 : undefined,\n }}\n editorProps={{ $blockScrolling: true }}\n />\n );\n }\n}\n\nexport default Editor;\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, Button, Menu, MenuItem, Tooltip } from '@mui/material';\n\nimport { type AdminConnection, I18n, Icon, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type HostEvent, type HostAliveEvent } from '@/Workers/HostsWorker';\n\nconst styles: Record<string, any> = {\n imgDiv: {\n '& svg:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '& img:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '@media screen and (max-width: 710px)': {\n '& img,svg': {\n marginRight: 0,\n },\n },\n },\n img: {\n width: 30,\n height: 30,\n margin: 'auto 0',\n position: 'relative',\n marginRight: 10,\n borderRadius: 3,\n background: '#FFFFFF',\n padding: 2,\n },\n notAlive: {\n opacity: 0.3,\n },\n button: {\n maxWidth: 300,\n },\n name: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 710px)': {\n display: 'none',\n },\n },\n width: {\n width: '100%',\n '@media screen and (max-width: 710px)': {\n width: 'auto',\n },\n },\n selector: {\n width: 15,\n display: 'inline-block',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface HostSelectorsProps {\n disabled?: boolean;\n socket: AdminConnection;\n currentHost: string;\n hostsWorker: InstanceType<typeof HostsWorker>;\n expertMode: boolean;\n setCurrentHost: (hostname: string, aliveHost: string) => void;\n tooltip: string;\n themeType?: string;\n}\n\ninterface HostSelectorsState {\n anchorEl: any;\n alive: Record<string, boolean>;\n hosts: CompactHost[];\n}\n\nclass HostSelectors extends Component<HostSelectorsProps, HostSelectorsState> {\n constructor(props: HostSelectorsProps) {\n super(props);\n\n this.state = {\n anchorEl: null,\n alive: {},\n hosts: [],\n };\n }\n\n componentDidMount(): void {\n this.props.socket\n .getCompactHosts(true)\n .then((hosts: CompactHost[]) => {\n this.setState({ hosts }, async () => {\n // request for all host the \"alive\" status\n const alive: Record<string, boolean> = {};\n for (let h = 0; h < hosts.length; h++) {\n const state = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n if (state) {\n alive[hosts[h]._id] = !!state.val;\n } else {\n alive[hosts[h]._id] = false;\n }\n }\n\n // if the current host is not alive, find the first alive host and set it as current\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n setTimeout(() => {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }, 100);\n }\n }\n\n this.setState({ alive }, () => {\n this.props.hostsWorker.registerHandler(this.onHostsObjectChange);\n this.props.hostsWorker.registerAliveHandler(this.onAliveChanged);\n });\n });\n })\n .catch((e: any) => {\n window.alert(`Cannot get hosts: ${e}`);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.onHostsObjectChange);\n this.props.hostsWorker.unregisterAliveHandler(this.onAliveChanged);\n }\n\n onAliveChanged = (events: HostAliveEvent[]): void => {\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n events.forEach(event => {\n if (event.type === 'deleted') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if (!!alive[event.id] !== !!event.alive) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n };\n\n onHostsObjectChange = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n void Promise.all(\n events.map(async event => {\n const host = hosts.find(it => it._id === event.id);\n\n if (event.type === 'deleted' || !event.obj) {\n if (host) {\n const pos = hosts.indexOf(host);\n if (pos !== -1) {\n delete alive[event.id];\n hosts.splice(pos);\n changed = true;\n }\n }\n } else if (host) {\n if (host.common.name !== event.obj.common?.name) {\n host.common.name = event.obj.common?.name || '';\n changed = true;\n }\n if (host.common.color !== event.obj.common?.color) {\n host.common.color = event.obj.common?.color || '';\n changed = true;\n }\n if (host.common.icon !== event.obj.common?.icon) {\n host.common.icon = event.obj.common?.icon || '';\n changed = true;\n }\n } else {\n // new host detected\n changed = true;\n hosts.push({\n _id: event.id,\n common: {\n name: event.obj.common?.name || '',\n color: event.obj.common?.color || '',\n icon: event.obj.common?.icon || '',\n installedVersion: 'ignored',\n },\n native: {\n hardware: {\n networkInterfaces: {},\n },\n },\n });\n\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!state?.val;\n }\n }),\n ).then(() => {\n if (changed) {\n this.setState({ hosts, alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n });\n };\n\n render(): JSX.Element | null {\n if (!this.props.expertMode && this.state.hosts.length < 2) {\n return null;\n }\n let selectedHostObj;\n if (this.state.hosts.length) {\n selectedHostObj = this.state.hosts.find(\n host => host._id === this.props.currentHost || host._id === `system.host.${this.props.currentHost}`,\n );\n }\n\n return (\n <Box>\n <Tooltip\n title={this.props.tooltip || I18n.t('Change current host')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <Button\n color={this.props.themeType === 'dark' ? 'primary' : 'secondary'}\n style={{\n ...styles.button,\n background: selectedHostObj?.common?.color || 'none',\n borderColor: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, false)\n : 'none',\n }}\n variant={this.props.disabled || this.state.hosts.length < 2 ? 'text' : 'outlined'}\n disabled={!!this.props.disabled || this.state.hosts.length < 2}\n aria-haspopup=\"true\"\n onClick={e => this.setState({ anchorEl: e.currentTarget })}\n >\n <Box\n component=\"div\"\n sx={{\n ...styles.width,\n ...(!this.state.alive[this.props.currentHost] ? styles.notAlive : undefined),\n ...styles.imgDiv,\n }}\n style={{\n display: 'flex',\n color: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, true)\n : 'none',\n alignItems: 'center',\n }}\n >\n <Icon\n style={styles.img}\n src={selectedHostObj?.common?.icon || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n sx={styles.name}\n >\n {selectedHostObj?.common?.name}\n </Box>\n </Box>\n </Button>\n </span>\n </Tooltip>\n <Menu\n anchorEl={this.state.anchorEl}\n keepMounted\n open={!!this.state.anchorEl}\n onClose={() => this.setState({ anchorEl: null })}\n >\n {this.state.hosts.map(({ _id, common: { name, icon, color } }, idx) => (\n <MenuItem\n key={_id}\n // button\n disabled={!this.state.alive[_id]}\n selected={_id === this.props.currentHost}\n style={{ background: color || 'inherit' }}\n onClick={() => {\n if (this.props.currentHost !== this.state.hosts[idx]._id) {\n this.props.setCurrentHost(\n this.state.hosts[idx].common.name,\n this.state.hosts[idx]._id,\n );\n }\n this.setState({ anchorEl: null });\n }}\n >\n <Box\n component=\"div\"\n sx={styles.imgDiv}\n style={{\n display: 'flex',\n color: (color && Utils.invertColor(color, true)) || 'inherit',\n alignItems: 'center',\n }}\n >\n <div style={styles.selector}>{_id === this.props.currentHost ? 'ᐅ' : ''}</div>\n <Icon\n style={styles.img}\n src={icon || 'img/no-image.png'}\n />\n {name}\n </Box>\n </MenuItem>\n ))}\n </Menu>\n </Box>\n );\n }\n}\n\nexport default HostSelectors;\n","import { type JSX } from 'react';\n\nfunction getAttr(obj: Record<any, any>, attr: string | string[]): boolean {\n if (!obj) {\n return null;\n }\n if (typeof attr !== 'object') {\n attr = attr.split('.');\n }\n const att = attr.shift();\n const val = obj[att];\n if (!attr.length) {\n return val;\n }\n if (typeof val === 'object') {\n return getAttr(val, attr);\n }\n return null;\n}\n\ninterface IsVisibleProps {\n name?: string;\n config?: Record<string, any>;\n value?: boolean;\n children: JSX.Element | JSX.Element[] | string;\n}\n\nfunction IsVisible(props: IsVisibleProps): JSX.Element | JSX.Element[] | string {\n const { config, children, name, value } = props;\n\n if (value !== undefined) {\n return value === false ? null : children;\n }\n if (!config) {\n return children;\n }\n if (getAttr(config, name) !== false) {\n return children;\n }\n return null;\n}\n\nexport default IsVisible;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport Markdown from 'react-markdown';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress } from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, ArrowDownward as IconArrowDownward } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: {\n backgroundColor: 'background.paper',\n width: '100%',\n height: 'auto',\n display: 'flex',\n '& .markdown': {\n margin: 0,\n p: '10px',\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n },\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n pre: {\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n margin: 0,\n padding: 10,\n width: '100%',\n },\n header1: {\n backgroundColor: 'primary.main',\n color: 'primary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n header2: {\n backgroundColor: 'secondary.main',\n color: 'secondary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n};\n\ninterface LicenseDialogProps {\n /** URL to show license text from */\n url: string;\n /** License type: MIT, Apache, ... */\n licenseType: string;\n /** function called when dialog is closed */\n onClose: (accepted?: boolean) => void;\n}\n\nfunction LicenseDialog({ url, onClose, licenseType }: LicenseDialogProps): JSX.Element {\n const [text, setText] = useState('');\n const [loading, setLoading] = useState(true);\n const [scrolled, setScrolled] = useState(false);\n const preRef = React.useRef<HTMLPreElement>(null);\n const divRef = React.useRef<HTMLDivElement>(null);\n const installTimer = React.useRef<ReturnType<typeof setInterval> | null | undefined>(undefined);\n\n useEffect(() => {\n setLoading(true);\n setText('');\n let _url = url;\n if (_url.startsWith('https://github.com/')) {\n _url = _url.replace('https://github.com/', 'https://raw.githubusercontent.com/').replace('/blob/', '/');\n }\n\n fetch(_url)\n .then(el => el.text())\n .then(txt => {\n setText(txt);\n setLoading(false);\n })\n .catch(() => setLoading(false));\n }, [url]);\n\n useEffect(() => {\n const installOnscroll = (): boolean => {\n const divMarkdown: HTMLDivElement | null = divRef.current?.querySelector('.markdown');\n if (divMarkdown) {\n // install on scroll only if the scrollbar is visible\n if (divMarkdown.scrollHeight <= divMarkdown.clientHeight) {\n return true;\n }\n\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n divMarkdown.onscroll = (event: Event) => {\n const div: HTMLDivElement = event.target as HTMLDivElement;\n // give 10 pixels tolerance for MS-edge\n const _scrolled = div.scrollTop + div.clientHeight >= div.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n };\n return true;\n }\n return false;\n };\n\n if (!loading && text) {\n if (text.startsWith('#')) {\n if (!installOnscroll()) {\n installTimer.current = installTimer.current || setInterval(() => installOnscroll(), 100);\n }\n } else if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n // check in 100 ms the existence of the preRef\n setTimeout(() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n setScrolled(true);\n }\n }, 100);\n }\n }\n\n return () => {\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const _preRef: HTMLPreElement | null = preRef.current;\n\n if (_preRef) {\n const _divMarkdown: HTMLDivElement | null = _preRef.querySelector('.markdown');\n if (_divMarkdown) {\n _divMarkdown.onscroll = null;\n }\n }\n };\n }, [loading, scrolled, text]);\n\n let content: JSX.Element;\n if (!loading && text) {\n if (text.startsWith('#')) {\n content = (\n <Markdown\n className=\"markdown\"\n components={{\n h1: h1Props => (\n <Box\n component=\"h1\"\n sx={styles.header1}\n >\n {h1Props.children}\n </Box>\n ),\n h2: h2Props => (\n <Box\n component=\"h2\"\n sx={styles.header2}\n >\n {h2Props.children}\n </Box>\n ),\n }}\n >\n {text}\n </Markdown>\n );\n } else {\n content = (\n <pre\n style={styles.pre}\n ref={preRef}\n onScroll={() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n const _scrolled =\n preRef.current.scrollTop + preRef.current.clientHeight >=\n preRef.current.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n }\n }}\n >\n {text}\n </pre>\n );\n }\n }\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n {I18n.t('License agreement')}:<span style={{ marginLeft: 16, fontWeight: 'bold' }}>{licenseType}</span>\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n ref={divRef}\n >\n {loading ? <LinearProgress /> : content}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"license-dialog-accept\"\n variant=\"contained\"\n disabled={loading || !scrolled}\n autoFocus\n onClick={() => onClose(true)}\n startIcon={scrolled ? <IconCheck /> : <IconArrowDownward />}\n color=\"primary\"\n >\n {!scrolled ? I18n.t('Read to the end for accept') : I18n.t('Accept')}\n </Button>\n <Button\n id=\"license-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<IconClose />}\n color=\"grey\"\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default LicenseDialog;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport semver from 'semver';\n\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, CardMedia, Typography, Box } from '@mui/material';\n\nimport {\n Info as InfoIcon,\n Warning as WarningIcon,\n Cancel as CancelIcon,\n Check as CheckIcon,\n Public as WorldIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactAdapterInfo } from '@/types';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n m: '20px',\n '& p': {\n fontSize: 18,\n },\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n },\n img: {\n '& .news-admin-dialog-img': {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n },\n img2: {\n width: 70,\n height: 70,\n m: '10px 0',\n borderRadius: '4px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n link: {\n margin: '10px 0',\n },\n};\n\nconst Status = ({ name }: { name: string }): JSX.Element => {\n switch (name) {\n case 'warning':\n return (\n <WarningIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ffca00' }}\n />\n );\n case 'info':\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n case 'danger':\n return (\n <CancelIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ff2f2f' }}\n />\n );\n default:\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n }\n};\n\nfunction checkActive(adapterName: string, instances: Record<string, any>): boolean {\n return !!Object.keys(instances)\n .filter(id => id.startsWith(`adapter.system.${adapterName}.`))\n .find(id => instances[id].enabled);\n}\n\nfunction checkConditions(condition: string, installedVersion: string): boolean {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n }\n if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gte(installedVersion, vers1) && semver.lte(installedVersion, vers2);\n } catch {\n return false;\n }\n }\n return true;\n}\n\ntype DbType = 'file' | 'jsonl' | 'redis';\n\ninterface Context {\n adapters: Record<string, CompactAdapterInfo>;\n instances: ioBroker.InstanceObject[];\n nodeVersion: string;\n npmVersion: string;\n os: string;\n activeRepo: string[] | string;\n uuid?: string;\n lang: ioBroker.Languages;\n /** Current configured database for objects */\n objectsDbType: DbType;\n /** Number of objects in the database */\n noObjects: number;\n}\n\ninterface Message {\n id: string;\n uuid: string;\n 'date-start'?: number | string;\n 'date-end'?: number | string;\n 'node-version'?: string;\n 'npm-version'?: string;\n os?: string;\n repo: string;\n conditions: {\n [adapter: string]: '!installed' | 'active' | '!active';\n };\n title: Record<ioBroker.Languages, string>;\n content: Record<ioBroker.Languages, string>;\n class: 'info' | 'warning' | 'danger';\n /** Name of the FA-icon */\n icon: string;\n created: string;\n /** Link destination */\n link?: string;\n /** Title of the link */\n linkTitle?: ioBroker.StringOrTranslated;\n /** E.g., a base64 encoded image like, data:image/png;base64,iVBORw0KG... */\n img?: 'string';\n /** e.g. >= 15000 to address installations with more than 15k objects */\n 'number-of-objects'?: string;\n /** All object db types which this message is valid for */\n 'objects-db-type'?: DbType[];\n}\n\nexport interface ShowMessage {\n id: string;\n title: string;\n content: string;\n class: 'info' | 'warning' | 'danger';\n icon: string;\n created: string;\n link?: string;\n linkTitle: string;\n img?: string;\n}\n\nexport const checkMessages = (messages: Message[], lastMessageId: string, context: Context): ShowMessage[] => {\n const messagesToShow: ShowMessage[] = [];\n\n try {\n const today = Date.now();\n for (const message of messages) {\n if (!message) {\n continue;\n }\n\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n Object.keys(message.conditions).forEach(key => {\n if (showIt) {\n const adapter = context.adapters[key];\n const condition = message.conditions[key];\n\n if (!adapter && condition !== '!installed') {\n showIt = false;\n } else if (adapter && condition === '!installed') {\n showIt = false;\n } else if (adapter && condition === 'active') {\n showIt = checkActive(key, context.instances);\n } else if (adapter && condition === '!active') {\n showIt = !checkActive(key, context.instances);\n } else if (adapter) {\n showIt = checkConditions(condition, adapter.v);\n }\n }\n });\n }\n\n if (showIt && message['node-version'] && context.nodeVersion) {\n showIt = checkConditions(message['node-version'], context.nodeVersion);\n }\n if (showIt && message['npm-version'] && context.npmVersion) {\n showIt = checkConditions(message['npm-version'], context.npmVersion);\n }\n if (showIt && message.os && context.os) {\n showIt = context.os === message.os;\n }\n if (showIt && message.repo) {\n // If multi-repo\n if (Array.isArray(context.activeRepo)) {\n showIt = context.activeRepo.includes(message.repo);\n } else {\n showIt = context.activeRepo === message.repo;\n }\n }\n if (showIt && message.uuid) {\n if (Array.isArray(message.uuid)) {\n showIt = context.uuid && message.uuid.find(uuid => context.uuid === uuid);\n } else {\n showIt = !!(context.uuid && context.uuid === message.uuid);\n }\n }\n\n if (showIt && message['number-of-objects']) {\n // eslint-disable-next-line no-eval\n showIt = eval(`${context.noObjects} ${message['number-of-objects']}`);\n }\n\n if (showIt && message['objects-db-type']) {\n if (!message['objects-db-type'].includes(context.objectsDbType)) {\n showIt = false;\n }\n }\n\n if (showIt) {\n messagesToShow.push({\n id: message.id,\n title: message.title[context.lang] || message.title.en,\n content: message.content[context.lang] || message.content.en,\n class: message.class,\n icon: message.icon,\n created: message.created,\n link: message.link,\n linkTitle:\n typeof message.linkTitle === 'object'\n ? message.linkTitle[context.lang] || message.linkTitle.en\n : message.linkTitle,\n img: message.img,\n });\n }\n }\n } catch {\n // ignore\n }\n\n return messagesToShow;\n};\n\nfunction NewsAdminDialog({\n newsArr,\n current,\n onSetLastNewsId,\n}: {\n newsArr: ShowMessage[];\n current: string;\n onSetLastNewsId: (id?: string) => void;\n}): JSX.Element {\n const [id, setId] = useState(current);\n const [last, setLast] = useState(false);\n const [indexArr, setIndexArr] = useState(0);\n\n useEffect(() => {\n const item = newsArr.find(el => el.id === id);\n if (item) {\n const index = newsArr.indexOf(item);\n if (index + 1 < newsArr.length) {\n const newId = newsArr[index + 1].id;\n if (newId) {\n setId(newId);\n setIndexArr(index + 1);\n }\n } else {\n onSetLastNewsId();\n }\n } else {\n setId(newsArr[0].id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [last]);\n\n const onClose = (): void => {\n // setOpen(false);\n setLast(!last);\n onSetLastNewsId(id);\n };\n\n const lang = I18n.getLanguage();\n const content = newsArr[indexArr].content.replace(/='([^']*)'/g, '=\"$1\"');\n const title = newsArr[indexArr].title;\n\n const link = newsArr[indexArr].link;\n const linkTitle = newsArr[indexArr].linkTitle;\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <Box\n component=\"div\"\n sx={{ ...styles.blockInfo, ...styles.img }}\n >\n {new Date(newsArr[indexArr].created).toLocaleDateString(lang)}\n <Status name={newsArr[indexArr].class} />\n </Box>\n <DialogTitle>{I18n.t('You have unread news!')}</DialogTitle>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <Box\n component=\"div\"\n sx={styles.pre}\n >\n {newsArr[indexArr]?.img && (\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={newsArr[indexArr].img}\n />\n )}\n <Typography\n variant=\"body2\"\n component=\"p\"\n >\n {Utils.renderTextWithA(content.replace(/\\n/g, '<br />'))}\n </Typography>\n {newsArr[indexArr]?.link && (\n <Button\n variant=\"contained\"\n style={styles.link}\n onClick={() => window.open(newsArr[indexArr].link, '_blank')}\n color=\"primary\"\n >\n {linkTitle || I18n.t('Link')}\n </Button>\n )}\n </Box>\n </Box>\n </DialogContent>\n <DialogActions>\n {link ? (\n <Button\n id=\"news-admin-dialog-more-info\"\n variant=\"contained\"\n onClick={() => {\n const frame = window.open(link, '_blank');\n frame?.focus();\n }}\n color=\"secondary\"\n startIcon={<WorldIcon />}\n >\n {linkTitle || I18n.t('Show more info')}\n </Button>\n ) : null}\n <Button\n id=\"news-admin-dialog-acknowledge\"\n variant=\"contained\"\n autoFocus\n onClick={onClose}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default NewsAdminDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport { Dialog, DialogContent, DialogActions, DialogTitle, DialogContentText, TextField, Button } from '@mui/material';\n\nimport { Close as CloseIcon, AccessTime as TimeIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\nimport { MOBILE_WIDTH } from '@/helpers/MobileDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n buttonLabel: {\n whiteSpace: 'nowrap',\n },\n input: {\n minWidth: 150,\n },\n};\n\ninterface SlowConnectionWarningDialogProps {\n t: Translate;\n readTimeoutMs: number;\n onClose: (readTimeoutMs?: number) => void;\n}\n\ninterface SlowConnectionWarningDialogState {\n readTimeoutSec: number | string;\n}\n\nexport class SlowConnectionWarningDialogClass extends Component<\n SlowConnectionWarningDialogProps,\n SlowConnectionWarningDialogState\n> {\n private readonly mobile: boolean;\n\n constructor(props: SlowConnectionWarningDialogProps) {\n super(props);\n\n this.state = {\n readTimeoutSec: Math.round(\n (props.readTimeoutMs || SlowConnectionWarningDialogClass.getReadTimeoutMs()) / 1000,\n ),\n };\n\n this.mobile = window.innerWidth < MOBILE_WIDTH;\n }\n\n static getReadTimeoutMs(): number {\n return (\n parseInt(((window as any)._localStorage || window.localStorage).getItem('App.readTimeoutMs'), 10) ||\n (AdminConnection.isCloud() ? 40_000 : 15_000)\n );\n }\n\n static saveReadTimeoutMs(readTimeoutMs: number): number {\n if (readTimeoutMs) {\n return ((window as any)._localStorage || window.localStorage).setItem(\n 'App.readTimeoutMs',\n readTimeoutMs.toString(),\n );\n }\n return ((window as any)._localStorage || window.localStorage).removeItem('App.readTimeoutMs');\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{this.props.t('Detected slow connection!')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.props.t('Seems that you have slow connection. Do you want to increase timeout interval?')}\n </DialogContentText>\n <TextField\n variant=\"standard\"\n style={styles.input}\n label={this.props.t('Read timeout')}\n value={this.state.readTimeoutSec}\n onChange={e => this.setState({ readTimeoutSec: e.target.value })}\n type=\"number\"\n slotProps={{ htmlInput: { min: 5, max: 600 } }}\n helperText={this.props.t('in seconds')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n id=\"slow-connection-dialog-minute\"\n className=\"slow-connection-minute\"\n style={styles.buttonLabel}\n variant=\"contained\"\n onClick={() => {\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(60000);\n this.props.onClose(60000);\n }}\n startIcon={<TimeIcon />}\n color=\"grey\"\n >\n {this.mobile ? this.props.t('1 minute') : this.props.t('Set timeout to 1 minute')}\n </Button>\n <Button\n id=\"slow-connection-dialog-ok\"\n className=\"slow-connection-ok\"\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!parseInt(this.state.readTimeoutSec as string, 10)}\n onClick={() => {\n const readTimeoutMs = parseInt(this.state.readTimeoutSec as string, 10) * 1000;\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(readTimeoutMs);\n this.props.onClose(readTimeoutMs);\n }}\n startIcon={<CheckIcon />}\n >\n {this.mobile ? null : this.props.t('Apply')}\n </Button>\n <Button\n id=\"slow-connection-dialog-close\"\n className=\"slow-connection-cancel\"\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default SlowConnectionWarningDialogClass;\n","import React, { Component, type JSX } from 'react';\n\nexport const MOBILE_WIDTH = 800;\n\ninterface MobileDialogState {\n mobile: boolean;\n}\n\nclass MobileDialog<TProps, TState extends MobileDialogState = MobileDialogState> extends Component<TProps, TState> {\n private _resizeHandlerInstalled: boolean;\n\n private _timerOnResize: ReturnType<typeof setTimeout> = null;\n\n static isMobile(): boolean {\n return window.innerWidth < MOBILE_WIDTH;\n }\n\n componentDidMount(): void {\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n if (!this._resizeHandlerInstalled) {\n this._resizeHandlerInstalled = true;\n window.addEventListener('resize', this.__onResize, false);\n }\n }\n\n componentWillUnmount(): void {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n this._timerOnResize = null;\n }\n if (this._resizeHandlerInstalled) {\n window.removeEventListener('resize', this.__onResize, false);\n }\n }\n\n __onResize = (): void => {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n }\n this._timerOnResize = setTimeout(() => {\n this._timerOnResize = null;\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n }, 200);\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n getButtonTitle(icon: JSX.Element, text: string, moreMobileIcon?: JSX.Element): string | JSX.Element | null {\n if (icon && text) {\n if (this.state.mobile) {\n if (moreMobileIcon) {\n return (\n <>\n {icon} & {moreMobileIcon}\n </>\n );\n }\n return icon;\n }\n return (\n <>\n {icon}\n <span style={{ marginLeft: 4 }}>{text}</span>\n </>\n );\n }\n if (icon) {\n return icon;\n }\n if (text) {\n return text;\n }\n return null;\n }\n}\n\nexport default MobileDialog;\n","/**\n * Tests whether the given variable is a real object and not an Array\n *\n * @param it The variable to test\n * @returns true if it is Record<string, any>\n */\nexport function isObject(it: any): it is Record<string, any> {\n // This is necessary because:\n // typeof null === 'object'\n // typeof [] === 'object'\n // [] instanceof Object === true\n return Object.prototype.toString.call(it) === '[object Object]'; // this code is 25% faster than below one\n // return it && typeof it === 'object' && !(it instanceof Array);\n}\n\nexport function isTouchDevice(): boolean {\n return 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\n}\n\n/** Url where controller changelog is reachable */\nexport const CONTROLLER_CHANGELOG_URL = 'https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md';\n\n/** All possible auto upgrade settings */\nexport const AUTO_UPGRADE_SETTINGS: ioBroker.AutoUpgradePolicy[] = ['none', 'patch', 'minor', 'major'];\n\n/** Mapping to make it more understandable which upgrades are allowed */\nexport const AUTO_UPGRADE_OPTIONS_MAPPING: Record<ioBroker.AutoUpgradePolicy, string> = {\n none: 'none',\n patch: 'patch',\n minor: 'patch & minor',\n major: 'patch, minor & major',\n};\n","import React, { Component, type JSX } from 'react';\nimport { LinearProgress } from '@mui/material';\n\nimport { withWidth, type ThemeType, Router } from '@iobroker/adapter-react-v5';\n\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport AdminUtils from '../AdminUtils';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // border: '0 solid #FFF',\n display: 'block',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n // background: 'white',\n color: 'black',\n borderRadius: 4,\n boxShadow:\n '0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%)',\n border: '0px solid #888',\n },\n};\n\nexport async function getHref(\n instancesWorker: InstancesWorker,\n tab: string,\n hostname: string,\n hosts: Record<string, ioBroker.HostObject>,\n adminInstance: string,\n themeType: ThemeType,\n): Promise<string> {\n const instances = await instancesWorker.getInstances();\n let adapter = tab.replace(/^tab-/, '');\n const m = adapter.match(/-(\\d+)$/);\n const instNum: number | null = m ? parseInt(m[1], 10) : null;\n let instance;\n if (instances) {\n if (instNum !== null) {\n adapter = adapter.replace(/-(\\d+)$/, '');\n const name = `system.adapter.${adapter}.${instNum}`;\n instance = Object.keys(instances).find(id => id === name);\n } else {\n const name = `system.adapter.${adapter}.`;\n\n instance = instances && Object.keys(instances).find(id => id.startsWith(name));\n }\n }\n instance = instances && instances[instance];\n AdminUtils.fixAdminUI(instance);\n if (!instance || !instance.common || !instance.common.adminTab) {\n console.error(`Cannot find instance ${tab}`);\n\n return '';\n }\n\n // calculate href\n let href = instance.common.adminTab.link;\n if (!href) {\n if (instance.common.adminUI?.tab === 'materialize') {\n href = `adapter/${adapter}/tab_m.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n } else {\n href = `adapter/${adapter}/tab.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n }\n }\n if (!instance.common.adminTab.singleton && instNum !== null && instNum !== undefined) {\n href += `${href.includes('?') ? '&' : '?'}instance=${instNum}`;\n }\n if (href.includes('%')) {\n let _instNum: number;\n // fix for singletons\n if (instNum === null) {\n _instNum = parseInt(instance._id.split('.').pop(), 10);\n } else {\n _instNum = instNum;\n }\n\n // replace\n const hrefs = AdminUtils.replaceLink(href, adapter, _instNum, {\n hostname,\n // it cannot be void\n instances: instances as Record<string, ioBroker.InstanceObject>,\n hosts,\n adminInstance,\n });\n\n href = hrefs ? hrefs[0]?.url : '';\n }\n // add at the end the instance, as some adapters make bullshit like: window.location.search.slice(-1) || 0;\n href += `${href.includes('?') ? '&' : '?'}newReact=true${instNum !== null && instNum !== undefined ? `&${instNum}` : ''}&react=${themeType}`;\n return href;\n}\n\ninterface CustomTabProps {\n instancesWorker: InstancesWorker;\n tab: string;\n hostname: string;\n hosts: ioBroker.HostObject[];\n adminInstance: string;\n themeName: ThemeType;\n onRegisterIframeRef: (ref: HTMLIFrameElement) => void;\n onUnregisterIframeRef: (ref: HTMLIFrameElement) => void;\n}\n\ninterface CustomTabState {\n href: string;\n}\n\nclass CustomTab extends Component<CustomTabProps, CustomTabState> {\n private refIframe: HTMLIFrameElement | null = null;\n\n private registered: boolean = false;\n\n constructor(props: CustomTabProps) {\n super(props);\n this.state = {\n href: '',\n };\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n for (const host of props.hosts) {\n hosts[host._id] = host;\n }\n\n void getHref(\n this.props.instancesWorker,\n this.props.tab,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeName,\n ).then(href => {\n this.setState({ href });\n // check if href exists\n // fetch(href)\n // .then(() => this.setState({ href }))\n // .catch(() => this.setState({ href: href.includes('tab_m.html') ? href.replace('tab_m.html', 'tab.html') : href.replace('tab.html', 'tab_m.html') }));\n });\n }\n\n componentWillUnmount(): void {\n if (this.registered) {\n this.props.onUnregisterIframeRef(this.refIframe);\n this.registered = false;\n }\n (window.removeEventListener || window.detachEvent)(\n window.removeEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidMount(): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n (window.addEventListener || window.attachEvent)(\n window.addEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidUpdate(/* prevProps, prevState, snapshot */): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n onMessage = (event: MessageEvent & { message: string }): void => {\n if (event.origin !== window.location.origin) {\n return;\n }\n if (event.data === 'close' || event.message === 'close') {\n Router.doNavigate('tab-instances');\n } else if (event.data === 'change' || event.message === 'change') {\n // this.props.configStored(false);\n console.warn('Application sends \"change\" message, but it is not processed yet');\n } else if (event.data === 'nochange' || event.message === 'nochange') {\n // this.props.configStored(true);\n console.warn('Application sends \"nochange\" message, but it is not processed yet');\n } else if (\n (typeof event.data === 'string' && event.data.startsWith('goto:')) ||\n (typeof event.message === 'string' && event.message.startsWith('goto:'))\n ) {\n const [, url] = (event.data || event.message).split(':');\n const [tab, subTab, parameter] = url.split('/');\n Router.doNavigate(tab, subTab, parameter);\n }\n };\n\n render(): JSX.Element {\n if (!this.state.href) {\n return <LinearProgress />;\n }\n\n return (\n <iframe\n ref={el => (this.refIframe = el)}\n title={this.props.tab}\n style={styles.root}\n src={this.state.href}\n onError={e => {\n (e.target as HTMLIFrameElement).onerror = null;\n this.setState({ href: this.state.href.replace('tab_m.html', 'tab.html') });\n }}\n />\n );\n }\n}\n\nexport default withWidth()(CustomTab);\n"],"names":["STYLES","color","backgroundColor","AdminUtils","deepClone","obj","JSON","parse","stringify","formatRam","bytes","GB","Math","floor","MB","text","formatSpeed","mhz","formatBytes","abs","units","u","length","toFixed","getFileExtension","fileName","pos","lastIndexOf","substring","toLowerCase","invertColor","hex","bw","undefined","indexOf","slice","Error","r","parseInt","g","b","finalR","toString","finalG","finalB","padStart","formatSeconds","seconds","t","days","minutesRes","secondsRes","hoursRes","hours","minutes","_replaceLink","link","objects","adapterInstance","attr","placeholder","hosts","hostname","adminInstance","object","replace","native","value","secure","ip","bind","getHostname","includes","console","log","error","ip2int","split","reduce","ipInt","octet","findNetworkAddressOfHost","localIp","_obj$native","_obj$native$hardware","networkInterfaces","hardware","hostIp","networkInterface","Object","values","i","internal","family","match","netmask","address","instanceObj","currentHostname","_objects","_objects$common","common","adminHost","host","warn","_id","replaceLink","adapter","instance","context","_urls","port","instances","placeholders","p","forEach","item","url","protocolVal","protocol","startsWith","_context$instances4","_context$instances4$n","ids","keys","filter","id","enabled","map","find","_context$instances2","_context$instances2$n","_link","_port","push","_context$instances3","_context$instances3$n","_context$instances","_context$instances$na","objectMap","callback","result","key","fixAdminUI","adminUI","changed","materializeTab","adminTab","tab","jsonCustom","supportCustoms","custom","noConfig","config","jsonConfig","materialize","parseColorMessage","m","original","style","code","assign","fontWeight","parts","checkPassword","password","passwordRepeat","PASSWORD_SET","PASSWORD_ERROR_LENGTH","PASSWORD_ERROR_NOT_EQUAL","PASSWORD_ERROR_EMPTY","getDocsLinkForAdapter","options","adapterName","lang","SUPPORTED_DOC_LANGUAGES","updateAvailable","oldVersion","newVersion","semver","getText","word","en","clone","ContextWrapper","createContext","hostsUpdate","adaptersUpdate","repository","installed","ContextWrapperProvider","_ref","children","stateContext","setState","useState","setStateContext","useMemo","prevState","useEffect","jsControllerVersion","version","count","element","installedVersion","_installed","ignoreVersion","_jsx","Provider","styles","message","position","display","width","offline","justifyContent","alignItems","opacity","flexWrap","timestamp","top","right","fontSize","simpleMessage","fontFamily","ml","mb","whiteSpace","NotificationMessage","Component","constructor","props","super","lastAlive","onAliveChanged","state","this","instanceId","alive","val","Date","now","getGui","data","schema","updateData","componentDidMount","contextData","socket","getState","subscribeState","offlineMessage","sendTo","then","renderCustomGui","systemLang","Box","sx","Utils","renderTextWithA","Typography","I18n","LinearProgress","_jsxs","_Fragment","JsonConfigComponent","onError","onChange","_data","onBackEndCommand","command","refresh","onLink","embedded","themeName","themeType","theme","isFloatComma","dateFormat","renderSimpleMessage","render","component","ts","toLocaleString","root","palette","background","paper","height","borderRadius","flexDirection","maxWidth","flex","overflowHidden","overflow","overflowAuto","overflowY","column","headerText","mode","descriptionHeaderText","margin","button","paddingTop","paddingBottom","bottom","zIndex","img2","mr","content","left","backgroundSize","heading","headingTop","classNameBox","textStyle","textOverflow","buttonStyle","Status","severity","isDark","BellIcon","InfoIcon","WarningIcon","TabPanel","_ref2","index","sxBox","role","_ref3","notifications","onClose","ackCallback","notificationManagerInstalled","name","messages","hostDetails","entries","scope","scopeDetails","category","categoryDetails","categories","panel","setPanel","disabled","setDisabled","expanded","setExpanded","autoCollapse","setAutoCollapse","handleChangeAccordion","panelName","_event","isExpanded","black","firstKey","found","Dialog","open","marginLeft","marginRight","Tooltip","title","slotProps","popper","pointerEvents","DialogContent","dividers","AppBar","Tabs","handleChange","newValue","variant","scrollButtons","indicatorColor","textColor","idx","entry","Tab","label","getLanguage","icon","description","nameInst","_currentInstance$comm","_currentInstance$comm2","accKey","currentInstance","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","CardMedia","image","AccordionDetails","msg","linkCommand","target","setTimeout","_url","window","location","hash","href","close","pathname","Button","autoFocus","onClick","startIcon","CheckIcon","CloseIcon","DialogActions","closeButton","grey","hiddenDialog","dialogRoot","CommandDialog","progressText","isError","closeOnReady","_localStorage","localStorage","getItem","scroll","fullWidth","visible","inBackground","onInBackground","DialogTitle","IconButton","size","Command","noSpacing","ready","commandError","errorFunc","performed","cmd","onFinished","onSetCommandRunning","running","FormControlLabel","control","Checkbox","checked","e","setItem","OpenInBrowserIcon","confirmText","funcSet","_","setTabs","tabs","findCard","cards","card","c","cursor","canDrag","setEndDrag","iconJSX","selected","compact","badgeContent","badgeColor","ref","useRef","handlerId","drop","useDrop","accept","collect","monitor","getHandlerId","hover","_ref$current","draggedId","current","overIndexActions","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","hoverClientY","getClientOffset","y","moveCard","atIndex","copyCard","splice","isDragging","drag","preview","useDrag","type","end","getEmptyImage","captureDraggingState","event","preventDefault","textDecoration","primary","main","selectedIcon","compactBadge","pl","noWrap","amber","editMenuList","editListFunc","badgeAdditionalContent","badgeAdditionalColor","DragHandle","ColorPicker","noInputField","ListItemButton","getStyle","Grid2","container","spacing","ListItemIcon","minWidth","Badge","ListItemText","layerStyles","getItemStyles","initialOffset","currentOffset","isSnapToGrid","x","round","snapToGrid","transform","WebkitTransform","default","itemType","useDragLayer","getItemType","getInitialSourceClientOffset","getSourceClientOffset","DrawerItem","timer","anchorEl","setAnchorEl","React","setOpen","placement","setPlacement","el","clearTimeout","currentTarget","prev","EditIcon","Popper","transition","TransitionProps","Fade","timeout","Paper","padding","DRAWER_FULL_WIDTH","DRAWER_EDIT_WIDTH","flexShrink","transitions","create","easing","easeOut","duration","enteringScreen","rootFullWidth","rootEditWidth","rootCompactWidth","overflowX","header","mixins","toolbar","headerCompact","headerLogout","list","logoSize","avatarBlock","marginTop","marginBottom","avatarNotVisible","avatarVisible","styleVersion","alignSelf","editButton","STATES","tabsInfo","order","AppsIcon","StoreIcon","SubtitlesIcon","ViewListIcon","ArtTrackIcon","DvrIcon","ViewHeadlineIcon","SubscriptionsIcon","FlashOnIcon","PersonOutlineIcon","StorageIcon","FilesIcon","Drawer","logsHandlerRegistered","refEditButton","instanceChangedHandler","getTabs","onNotificationsHandler","hostsWorker","getNotifications","calculateWarning","catch","alert","onErrorsUpdates","logErrors","onWarningsUpdates","logWarnings","warning","other","_notifications$host","_notifications$host$r","system","hostNotifications","tabsEditSystemConfig","async","isVisibility","newColor","newTabs","newObjCopy","getSystemConfig","tabsVisible","setSystemConfig","badge","additionalContent","additionalColor","calculateHostUpdates","calculateAdapterUpdates","getDerivedStateFromProps","_repository$jsContro","sort","instancesWorker","registerHandler","registerNotificationHandler","logsWorker","registerErrorCountHandler","registerWarningCountHandler","componentWillUnmount","unregisterHandler","unregisterNotificationHandler","unregisterErrorCountHandler","unregisterWarningCountHandler","componentDidUpdate","isSwipeable","setEditMenuList","update","getCompactInstances","dynamicTabs","singleton","instNum","_instance$adminTab$na","READY_TO_USE","str","toUpperCase","concat","a","getCompactSystemConfig","systemConfig","it","aa","bb","newTabsVisible","_systemConfig","getHeader","handleNavigation","isSecure","adminGuiConfig","lineHeight","src","alt","maxHeight","verticalAlign","Avatar","versionAdmin","onStateChange","ChevronLeftIcon","getNavigationItems","currentTab","_tabsInfo$tab$name","_tabsInfo$tab$name2","_this$badge","_this$badge2","admin","menu","DragWrapper","Icon","newObj","ctrlKey","shiftKey","getHref","focus","SwipeableDrawer","anchor","onOpen","CustomDragLayer","List","onLogout","LogoutIcon","editable","CustomPopper","MaterialDrawer","onMouseEnter","onMouseLeave","contextType","withWidth","connecting","spinner","animation","path","strokeDasharray","strokeDashoffset","transformOrigin","viewBox","xmlns","fill","strokeWidth","strokeLinecap","cx","cy","secondary","form","input","grow","flexGrow","WizardPasswordTab","focusRef","errorPassword","errorPasswordRepeat","createRef","_this$focusRef$curren","noValidate","autoComplete","direction","TextField","readOnly","helperText","htmlInput","onKeyDown","document","getElementById","onDone","Toolbar","IconCheck","de","ru","fr","pt","nl","es","uk","gridDiv","textAlign","languageSelect","licenseDiv","statAccept","statAcceptDiv","statAcceptNote","greenButton","licenseTextDiv","licenseText","WizardLicenseTab","statisticsAccepted","notAgree","diagData","requesting","showStatisticsDialog","readStatistics","getCurrentInstance","settings","getObject","getDiagData","renderStatisticsDialog","Editor","editValueMode","Close","renderNotAgree","DialogContentText","renderLicenseText","lines","LicenseTexts","line","FormControl","InputLabel","IconWorld","Select","setLanguage","MenuItem","IconCancel","SETTINGS_WIDTH","mainGrid","mapGrid","controlItem","controlItemAddress","gridSettings","settingsGrid","CURRENCY","WizardSettingsTab","OSM","tempUnit","currency","country","city","longitude","latitude","firstDayOfWeek","updateMap","positionReady","parseFloat","coords","getPositionForAddress","fetch","encodeURIComponent","json","lat","lon","navigator","geolocation","getCurrentPosition","center","fromLonLat","markerSource","VectorSource","markerStyle","Style","anchorXUnits","anchorYUnits","PinSVG","oMap","Map","layers","Tile","source","LayerVector","view","View","zoom","marker","Feature","geometry","Point","addFeature","on","lonLat","toLonLat","coordinate","getView","getZoom","setGeometry","setView","Autocomplete","freeSolo","inputValue","onInputChange","getOptionLabel","option","renderOption","renderInput","params","endAdornment","InputAdornment","onKeyUp","Fab","GeoIcon","inputLine","WizardAuthSSLTab","auth","FormGroup","FormHelperText","information","WizardPortForwarding","IconCloudPro","IconCloud","WizardAdaptersTab","TOOLBAR_HEIGHT","selectedAdapters","getRepository","repo","activeRepo","Promise","resolve","executeCommand","renderAdapterAccordion","titleLang","borderColor","borderWidth","borderStyle","gap","stopPropagation","extIcon","renderContent","repositoryReceived","IconNext","dialog","tabPanel","fullHeightWithoutToolbar","finishBackground","backgroundImage","WizardFinishImage","backgroundRepeat","backgroundPosition","welcomeBackground","WizardWelcomeImage","playIcon","logo","themeButton","float","finalText","finalLongLogo","WizardDialog","activeStep","namespace","renderWelcome","licenseConfirmed","PlayArrowIcon","renderLicense","language","renderPassword","pass","changePassword","renderSettings","renderAuthentication","renderPortForwarding","renderAdapters","discovery","certPublic","certPrivate","certs","getCertificates","setObject","redirect","Router","doNavigate","renderFinish","LongLogo","fullScreen","ToggleThemeMenu","toggleTheme","Stepper","Step","StepLabel","BaseSystemSettingsDialog","formControl","selectEmpty","MyMapComponent","useMap","addMap","cityTimer","latLongTimer","onMap","saving","Marker","draggable","riseOnHover","addTo","bindPopup","dragend","evt","onMarkerDragend","getCounters","items","countries","elem","shrink","handleChangeCountry","displayEmpty","doChange","onChangeText","onChangeInput","flyTo","setLatLng","cb","onChangeCity","OpenStreetMapProvider","search","query","results","selectId","getSettings","confirm","confirmValue","newData","ll","_latlng","lng","translate","allowText","autocomplete","histories","history","dataAux","repositories","_repo","help","getSelect","multipleRepos","sm","xs","_evt","inputLabel","renderConfirmDialog","ConfirmDialog","selectors","lg","md","siteName","MapContainer","maxZoom","attributionControl","zoomControl","doubleClickZoom","scrollWheelZoom","dragging","easeLinearity","TileLayer","table","buttonPanel","descriptionPanel","border","dragColumn","enableColumn","stableColumn","upgradePolicyColumn","buttonColumn","nameRow","checkboxError","fabButton","tooltip","repoToArray","repos","arrayToRepo","array","SortableHandle","DragHandleIcon","SortableList","SortableContainer","SortableItem","SortableElement","onAdd","onRestore","stable","beta","oldStable","time","oldBeta","newConfig","adapterAutoUpgrade","defaultPolicy","getUpdateDefaultRepo","newRepo","oldTitle","newTitle","findIndex","onSortEnd","oldIndex","newIndex","indexA","indexB","onValueChanged","onDelete","onChangeActiveRepo","showWarning","renderSortableItem","_this$props$repoInfo$","_this$props$dataAux$c","_this$props$dataAux$c2","TableRow","className","TableCell","arr","_error","repoInfo","indeterminate","sysConfig","DeleteIcon","renderSortableList","Table","TableHead","TableBody","helperClass","useDragHandle","lockAxis","renderAutoUpgradePolicy","_this$props$dataAux$c3","_this$props$dataAux$c4","policy","activatedRepos","AUTO_UPGRADE_SETTINGS","AUTO_UPGRADE_OPTIONS_MAPPING","IsVisible","InfoBox","AddIcon","RestoreIcon","TableContainer","uuidGreen","uuidGrey","tableName","tableDate","tableUuid","tableValid","tableVersion","tableUsedIn","tableDiv","tableCommercial","licenseId","fontStyle","onLicensesChanged","licenses","uuid","subscribeObject","unsubscribeObject","requestLicenses","login","decrypt","updateLicenses","renderLicenses","stickyHeader","license","product","toLocaleDateString","validTill","usedBy","invoice","IconRefresh","tableContainer","littleRow","CertificatesDialog","certToArray","certificates","arrayToCert","certText","chClass","cert","detectType","rows","Dropzone","noClick","getRootProps","getInputProps","acceptedFiles","fileRejections","onDragEnter","onDragLeave","onDrop","file","mm","errors","ee","join","reader","FileReader","onload","readAsText","paddingLeft","letsEncrypt","dangerouslySetInnerHTML","__html","email","domains","tableCell","paddingRight","ACLDialog","getTypes","getRights","rts","defaultNewAcl","permBits","bitGroup","bit","getTable","owner","checkboxes","Fragment","handleCheck","colSpan","ownerGroup","ownerType","elemNum","num","users","groups","objectRights","ii","inputProps","ace","set","note","blueGrey","sentData","StatisticsDialog","arguments","handleChangeType","handle","getTypesSelector","diag","Card","gutterBottom","SOME_PASSWORD","minHeight","dialogTitle","SystemSettingsDialog","originalCertificates","originalConfig","originalRepositories","originalLicenses","onChangeDiagType","currentHost","loading","confirmExit","systemCertificates","systemRepositories","systemLicenses","licenseManager","checkFeatureSupported","newState","_repoInfo","getUsers","getGroups","getAdapterInstances","getHistory","onSave","repoChanged","currentPassword","encrypt","expertMode","expertModeFunc","reload","MainSettingsDialog","RepositoriesDialog","LicensesDialog","SSLDialog","getDialogContent","tabsList","MyComponent","onChangedTab","idAux","_e","reason","newTab","onTabChanged","edge","boxShadow","avatar","avatarImg","submit","ioBrokerLink","textTransform","progress","Login","formRef","inProcess","body","loginBackgroundColor","loginBackgroundImage","action","loginLink","motto","loginMotto","loginLogo","loginHideLogo","loginTitle","method","required","CircularProgress","align","Link","rel","pre","textBold","width100","doNotShow","setDoNotShow","IconExpert","BuildIcon","_sessionStorage","sessionStorage","silver","terminal","UpdateIcon","MemoryIcon","ImportExportIcon","PermDeviceInformationIcon","CancelPresentationIcon","CancelIcon","SettingsRemoteIcon","styleDiv","hidden","setValue","dark","_ref4","formatDate","LogsWorker","maxLogs","handlers","promise","connected","logs","newLogs","errorCountHandlers","warningCountHandlers","countErrors","countWarnings","warnings","isSafari","logTimeout","logSize","logHandler","_processLine","objLine","handler","isNew","connectionHandler","isConnected","getLogs","vendor","userAgent","registerLogHandler","registerConnectionHandler","setCurrentHost","enableCountErrors","isEnabled","enableCountWarnings","resetErrors","resetWarnings","lastKey","tt","getTime","from","unshift","shift","oldErrors","oldWarnings","_this$logs","logSizeStr","pop","clearLines","InstancesWorker","forceUpdate","objectChangeHandler","oldObj","getAdapterInstancesResetCache","getInstances","isForceUpdate","doNotRequestAdapters","HostsWorker","aliveHandlers","notificationsHandlers","aliveStates","notificationPromises","notificationTimer","subscribeTs","aliveChangeHandler","endsWith","getHosts","onNotificationHandler","host_","_getNotificationsFromHosts","registerAliveHandler","unregisterAliveHandler","unsubscribeState","hostId","promises","getCompactHosts","pResults","all","AdaptersWorker","repositoryHandlers","repoTimer","getAdaptersResetCache","getInstalledResetCache","getAdapters","adapters","repoChangeHandler","registerRepositoryHandler","unregisterRepositoryHandler","ObjectsWorker","getObjects","doNotUnsubscribe","headerBlock","paperTable","types","checkbox","select","comment","_setValueInObj","setValueInObj","newInstance","setError","setSchema","schemaData","setSchemaData","_newInstance$comment","_newInstance$comment2","objSchema","objValue","add","Array","isArray","inputs","def","newLine","repeat","SettingsIcon","ConfigPanel","onCommandRunning","originalData","err","useStateLocal","defaultValue","headerBlockDisplayItem","activeBlock","pointer","installSuccess","installError","width200","wrapperSwitch","divSwitch","stepper","instanceIcon","instanceWrapper","boxHeight","headCells","numeric","disablePadding","EnhancedTableHead","numSelected","rowCount","onSelectAllClick","headCell","TableSortLabel","buildComment","extended","_discoveryData$native4","_discoveryData$native5","_discoveryData$native6","_discoveryData$native7","_discoveryData$native8","_discoveryData$native9","_discoveryData$native10","defaultLogLevel","step","setStep","listMethods","setListMethods","checkboxChecked","setCheckboxChecked","disableScanner","setDisableScanner","discoveryData","setDiscoveryData","resultList","listChecked","lastSelectionStr","lastSelection","fetchData","dataDiscovery","readOldData","aliveHosts","setAliveHosts","checkSelectHosts","setCheckSelectHosts","hostInstances","setHostInstances","aliveValue","devicesFound","setDevicesFound","devicesProgress","setDevicesProgress","instancesFound","setInstancesFound","scanRunning","setScanRunning","servicesProgress","setServicesProgress","setSelected","installProgress","setInstallProgress","currentInstall","setCurrentInstall","installStatus","setInstallStatus","cmdName","setCmdName","suggested","setSuggested","showAll","setShowAll","showLicenseDialog","setShowLicenseDialog","showInputsDialog","setShowInputsDialog","instancesInputsParams","setInstancesInputsParams","setLogs","finishInstall","setFinishInstall","selectLogsIndex","setSelectLogsIndex","handlerInstall","onSystemDiscoveryChanged","extendObject","checkLicenseAndInputs","objName","_discoveryData$native3","_obj$comment","newInstances","ob","_obj$comment2","licenseUrl","goToNextInstance","status","logsEl","inputsDialog","GenerateInputsModal","licenseDialog","LicenseDialog","licenseType","_obj$comment3","ThemeProvider","VisibilityIcon","alternativeLabel","lastScan","newCheckboxChecked","Switch","_discoveryData$native","_discoveryData$native2","newSelected","n","_el$comment","_el$comment2","ack","advice","_obj$comment4","_repository$obj$commo","_obj$comment5","handleClick","func","selectedIndex","SelectWithIcon","_repository$el$replac","ReportProblemIcon","AssignmentTurnedInIcon","logsRead","showElement","logsSuccess","adapterId","logLevel","logsError","_ref5","ele","NavigateBeforeIcon","dataArray","SearchIcon","LibraryAddIcon","NavigateNextIcon","Adapters","Instances","Intro","Logs","Files","Objects","Users","Enums","CustomTab","Hosts","EasyMode","decodeURIComponent","appBar","sharp","leavingScreen","logoWhite","appBarShift","appBarShiftEdit","appBarShiftCompact","DRAWER_COMPACT_WIDTH","menuButton","hide","_theme$mixins$toolbar","_theme$mixins$toolbar2","_theme$mixins$toolbar3","mt","contentMargin","contentMarginEdit","contentMarginCompact","contentShift","expertIcon","expertIconActive","baseSettingsButton","alert_info","alert_error","alert_success","errorCmd","wrapperButtons","userBadge","userIcon","userText","userBackground","wrapperName","expertBadge","DEFAULT_GUI_SETTINGS_OBJECT","read","write","App","translations","EXPIRE_WARNING_THRESHOLD","refConfigIframe","refUser","refUserDiv","expireInSec","lastExecution","pingAuth","expireInSecInterval","toggleThemePossible","expireText","adaptersWorker","objectsWorker","guiSettings","localStorageTimer","languageSet","newsInstance","localStorageGetItem","localStorageSetItem","localStorageRemoveItem","localStorageSave","prototype","hasOwnProperty","call","sessionStorageGetItem","sessionStorageSetItem","sessionStorageRemoveItem","toggleTranslation","noTranslation","updateHosts","events","elementFind","readRepoAndInstalledInfo","adaptersChangeHandler","onDiscoveryAlive","_name","discoveryAlive","getDiscoveryModal","DiscoveryDialog","handleNewNotifications","noNotifications","instanceDetails","showAdaptersWarning","showHostWarning","onNews","newsFeed","lastNewsId","_news","news","getUuid","info","getHostInfo","objectsDbType","objectsType","noObjects","checkNews","checkMessages","nodeVersion","npmVersion","NPM","os","showNews","stack","showAlert","logsWorkerChanged","_this$logsWorker","onHashChanged","getLocation","setCurrentTabTitle","currentThemeName","newThemeName","createTheme","getThemeType","_this$refConfigIframe","_this$refConfigIframe2","contentWindow","postMessage","enAR","deAR","ruAR","ptAR","nlAR","frAR","itAR","esAR","plAR","ukAR","zhCNAR","enLocal","deLocal","ruLocal","ptLocal","nlLocal","frLocal","itLocal","esLocal","plLocal","ukLocal","zhCNLocal","setTranslations","userLanguage","vendorPrefix","getThemeName","drawerStateStr","drawerState","DrawerStates","defineProperty","get","configNotSaved","allStored","configurable","currentHostName","ownHost","user","waitForRestart","stateChanged","alertType","alertMessage","dataNotStoredDialog","dataNotStoredTab","baseSettingsOpened","unsavedDataInDialog","systemSettingsOpened","cmdDialog","commandHost","commandRunning","wizard","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","showSlowConnectionWarning","expireWarningMode","forceUpdateAdapters","cloudNotConnected","cloudReconnect","showRedirect","redirectCountDown","triggerAdapterUpdate","updating","notificationsDialog","getDerivedStateFromError","hasGlobalError","componentDidCatch","setUnsavedData","hasUnsavedData","mustInvertBackground","invertedColor","getGUISettings","_state","removeItem","enableGuiSettings","ownSettings","addEventListener","setTitle","Connection","admin5only","getPort","autoSubscribes","autoSubscribeLog","onProgress","PROGRESS","CONNECTING","READY","getVersion","versionInfo","closeCmdDialog","_adminObj$native","adminObj","setInterval","onReady","_this$socket$systemCo","_adminObj$native2","_this$socket$systemCo2","isStrict","getIsEasyModeStrict","getEasyMode","strictEasyMode","easyModeConfigs","configs","findCurrentHost","storedExpertMode","_userObj$native","getCurrentUser","userObj","getObjectNameFromObj","invertBackground","makePingAuth","findNewsInstance","_this$socket","_this$adaptersWorker","_this$adaptersWorker2","_this$hostsWorker","removeEventListener","clearInterval","itemHost","_itemHost$common","_newState$hosts$0$com","h","updateExpireIn","formatTime","innerHTML","getCurrentSession","adminAlive","renderNotificationsDialog","_this$state$notificat","_this$state$notificat2","NotificationsDialog","clearNotifications","renderHostWarningDialog","HostWarningDialog","renderNewsDialog","NewsAdminDialog","newsArr","onSetLastNewsId","renderSlowConnectionWarning","SlowConnectionWarningDialog","getCompactRepository","getCompactInstalled","getCompactAdapters","iv","Number","isNaN","getProtocol","Theme","getCurrentTab","small","opened","closed","Suspense","fallback","Connecting","triggerUpdate","menuOpened","menuClosed","currentAdminVersion","onUpdating","menuPadding","configStored","inBackgroundCommand","onRegisterIframeRef","onUnregisterIframeRef","clearErrors","clearLogErrors","navigate","getCurrentDialog","getSystemSettingsDialog","handleAlertClose","handleDrawerState","logout","closeDataNotStoredDialog","confirmDataNotStored","renderWizardDialog","showRedirectDialog","_window$external","sidebar","opera","print","external","AddFavorite","addPanel","createElement","setAttribute","click","renderCommandDialog","renderLoggedUser","_this$state$user","UserIcon","renderAlertSnackbar","Snackbar","autoHideDuration","ok","cancel","isYes","renderExpertDialog","expertModeDialog","ExpertModeDialog","_this$refConfigIframe3","_this$refConfigIframe4","renderShowGuiSettings","showGuiSettings","Menu","renderToolbar","expertModePermanent","performedStyle","sumNotification","MenuIcon","disableRipple","max","NotificationsIcon","invisible","_this$refConfigIframe5","_this$refConfigIframe6","_this$refConfigIframe7","_this$refConfigIframe8","expert","SyncIcon","SyncIconDisabled","HostSelectors","hostName","PictureInPictureAltIcon","innerWidth","Grid","renderSampleError","renderEasyMode","_this$state$systemCon","_this$state$systemCon2","StyledEngineProvider","injectFirst","elevation","DndProvider","backend","TouchBackend","HTML5Backend","logoutTitle","square","LoaderPT","LoaderMV","LoaderVendor","Loader","versionChanged","ignoreErrors","disableDataReporting","onerror","lineno","colno","errText","onunhandledrejection","Sentry","dsn","release","integrations","beforeSend","createRoot","LocalizationProvider","dateAdapter","AdapterDateFns","logNoSpacing","red","blue","logRef","regExp","init","moreChecked","stopped","RegExp","pattern","_this$logRef$current","scrollIntoView","registerCmdStdoutHandler","cmdStdoutHandler","registerCmdStderrHandler","cmdStderrHandler","registerCmdExitHandler","cmdExitHandler","activeCmdId","random","cmdExec","upload","gotAdmin","gotWww","exitCode","_adapter","_obj$common","_obj$common$adminUI","colorize","maxLength","part","getLog","AceEditor","showPrintMargin","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","editorProps","$blockScrolling","imgDiv","img","notAlive","selector","aliveHost","onHostsObjectChange","_event$obj$common","_event$obj$common3","_event$obj$common5","_event$obj$common2","_event$obj$common4","_event$obj$common6","_event$obj$common7","_event$obj$common8","_event$obj$common9","_obj$common2","_obj$common3","_selectedHostObj","_selectedHostObj$comm","_selectedHostObj2","_selectedHostObj2$com","_selectedHostObj3","_selectedHostObj3$com","_selectedHostObj4","_selectedHostObj4$com","_selectedHostObj5","_selectedHostObj5$com","selectedHostObj","keepMounted","getAttr","header1","pr","pb","header2","setText","setLoading","scrolled","setScrolled","preRef","divRef","installTimer","txt","installOnscroll","_divRef$current","divMarkdown","querySelector","scrollHeight","clientHeight","onscroll","div","_scrolled","scrollTop","_preRef","_divMarkdown","Markdown","components","h1","h1Props","h2","h2Props","onScroll","IconArrowDownward","IconClose","blockInfo","checkActive","checkConditions","condition","trim","vers","vers1","vers2","lastMessageId","messagesToShow","today","showIt","conditions","v","eval","class","created","linkTitle","_newsArr$indexArr","_newsArr$indexArr2","setId","last","setLast","indexArr","setIndexArr","newId","frame","WorldIcon","buttonLabel","mobile","readTimeoutSec","MOBILE_WIDTH","AdminConnection","isCloud","saveReadTimeoutMs","min","TimeIcon","MobileDialog","_resizeHandlerInstalled","_timerOnResize","__onResize","isMobile","getButtonTitle","moreMobileIcon","isTouchDevice","maxTouchPoints","msMaxTouchPoints","CONTROLLER_CHANGELOG_URL","none","patch","minor","major","_instance$common$admi","_hrefs$","_instNum","hrefs","refIframe","registered","onMessage","origin","subTab","parameter","detachEvent","_this$refIframe","attachEvent","_this$refIframe2"],"sourceRoot":""}
|