iobroker.admin 7.4.13 → 7.4.15
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 -6
- package/adminWww/asset-manifest.json +23 -26
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/{1809.3970d4d2.chunk.js → 1809.797e6d9a.chunk.js} +3 -3
- package/adminWww/static/js/1809.797e6d9a.chunk.js.map +1 -0
- package/adminWww/static/js/288.b83253b7.chunk.js +2 -0
- package/adminWww/static/js/288.b83253b7.chunk.js.map +1 -0
- package/adminWww/static/js/3849.c8d3a754.chunk.js +2 -0
- package/adminWww/static/js/3849.c8d3a754.chunk.js.map +1 -0
- package/adminWww/static/js/4289.3fbd195d.chunk.js +2 -0
- package/adminWww/static/js/4289.3fbd195d.chunk.js.map +1 -0
- package/adminWww/static/js/471.c7298807.chunk.js +2 -0
- package/adminWww/static/js/471.c7298807.chunk.js.map +1 -0
- package/adminWww/static/js/6603.eaf9efa3.chunk.js +3 -0
- package/adminWww/static/js/6603.eaf9efa3.chunk.js.map +1 -0
- package/adminWww/static/js/{6853.1d96bb1c.chunk.js → 6853.c817c98e.chunk.js} +2 -2
- package/adminWww/static/js/6853.c817c98e.chunk.js.map +1 -0
- package/adminWww/static/js/7424.38cdae41.chunk.js +2 -0
- package/adminWww/static/js/7424.38cdae41.chunk.js.map +1 -0
- package/adminWww/static/js/7435.0f078b05.chunk.js +2 -0
- package/adminWww/static/js/7435.0f078b05.chunk.js.map +1 -0
- package/adminWww/static/js/8222.68da8b63.chunk.js +2 -0
- package/adminWww/static/js/8222.68da8b63.chunk.js.map +1 -0
- package/adminWww/static/js/{main.6be9bde2.js → main.d3c54b8f.js} +2 -2
- package/adminWww/static/js/{main.6be9bde2.js.map → main.d3c54b8f.js.map} +1 -1
- package/io-package.json +15 -15
- package/package.json +4 -4
- package/adminWww/static/js/1809.3970d4d2.chunk.js.map +0 -1
- package/adminWww/static/js/288.492f41ab.chunk.js +0 -2
- package/adminWww/static/js/288.492f41ab.chunk.js.map +0 -1
- package/adminWww/static/js/3849.363dd3ca.chunk.js +0 -2
- package/adminWww/static/js/3849.363dd3ca.chunk.js.map +0 -1
- package/adminWww/static/js/4289.6ac6a4bc.chunk.js +0 -2
- package/adminWww/static/js/4289.6ac6a4bc.chunk.js.map +0 -1
- package/adminWww/static/js/471.8a82d825.chunk.js +0 -2
- package/adminWww/static/js/471.8a82d825.chunk.js.map +0 -1
- package/adminWww/static/js/6603.51b36d23.chunk.js +0 -3
- package/adminWww/static/js/6603.51b36d23.chunk.js.map +0 -1
- package/adminWww/static/js/6853.1d96bb1c.chunk.js.map +0 -1
- package/adminWww/static/js/6858.7b3f28b9.chunk.js +0 -2
- package/adminWww/static/js/6858.7b3f28b9.chunk.js.map +0 -1
- package/adminWww/static/js/7424.a53c0d15.chunk.js +0 -2
- package/adminWww/static/js/7424.a53c0d15.chunk.js.map +0 -1
- package/adminWww/static/js/8222.399b9b24.chunk.js +0 -2
- package/adminWww/static/js/8222.399b9b24.chunk.js.map +0 -1
- package/adminWww/static/media/thread.78489b630e6b27d860ae133d9ccca0a6.svg +0 -4
- package/adminWww/static/media/z-wave.09176b331d7b6b4b101cffaddf3e441a.svg +0 -3
- package/adminWww/static/media/zigbee.0e17b818ea0c78a95e189da4dac70a6e.svg +0 -4
- /package/adminWww/static/js/{1809.3970d4d2.chunk.js.LICENSE.txt → 1809.797e6d9a.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{6603.51b36d23.chunk.js.LICENSE.txt → 6603.eaf9efa3.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/js/288.b83253b7.chunk.js","mappings":"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","sources":["Workers/GenericWorker.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","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/AdminUtils.tsx","helpers/MobileDialog.tsx","helpers/utils.ts","tabs/CustomTab.tsx"],"sourcesContent":["import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/helpers/AdminUtils';\n\nexport type EventType = 'new' | 'changed' | 'deleted';\n\nexport type GetObjectFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? ioBroker.HostObject\n : T extends 'adapter'\n ? ioBroker.AdapterObject\n : T extends 'instance'\n ? ioBroker.InstanceObject\n : T extends 'meta'\n ? ioBroker.MetaObject\n : T extends 'device'\n ? ioBroker.DeviceObject\n : T extends 'channel'\n ? ioBroker.ChannelObject\n : T extends 'state'\n ? ioBroker.StateObject\n : T extends 'folder'\n ? ioBroker.FolderObject\n : T extends 'enum'\n ? ioBroker.EnumObject\n : T extends 'script'\n ? ioBroker.ScriptObject\n : T extends 'group'\n ? ioBroker.GroupObject\n : T extends 'user'\n ? ioBroker.UserObject\n : T extends 'chart'\n ? ioBroker.ChartObject\n : T extends 'schedule'\n ? ioBroker.ScheduleObject\n : ioBroker.Object;\n\ntype GetRootFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? `system.host.${string}`\n : T extends 'adapter'\n ? `system.adapter.${string}` | `system.host.${string}.adapter.${string}`\n : T extends 'instance'\n ? `system.adapter.${string}.${number}`\n : T extends 'enum'\n ? `system.enum.${string}`\n : T extends 'script'\n ? `script.js.${string}`\n : T extends 'group'\n ? `system.group.${string}`\n : T extends 'user'\n ? `system.user.${string}`\n : string;\n\nexport type GenericEvent<T extends ioBroker.ObjectType> = {\n id: GetRootFromType<T>;\n obj?: GetObjectFromType<T>;\n type: EventType;\n oldObj?: GetObjectFromType<T>;\n};\n\nexport class GenericWorker<T extends ioBroker.ObjectType> {\n protected readonly socket: AdminConnection;\n\n protected readonly handlers: ((events: GenericEvent<T>[]) => void)[] = [];\n\n private promise: Promise<null | Record<string, GetObjectFromType<T>>> | null = null;\n\n protected connected: boolean;\n\n protected objects: Record<string, GetObjectFromType<T>> | null = null;\n\n private readonly root: string;\n\n protected readonly objectType: ioBroker.ObjectType;\n\n private forceUpdate: boolean = false;\n\n protected constructor(socket: AdminConnection, root: string, objectType: ioBroker.ObjectType) {\n this.socket = socket;\n this.root = root;\n this.objectType = objectType;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n if (this.connected) {\n this.connectionHandler(true);\n }\n }\n\n protected checkObjectId(id: string, obj: GetObjectFromType<T> | null | undefined): boolean {\n return id.startsWith(`${this.root}.`) && (!obj || obj.type === this.objectType);\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected postProcessing(_id: string, _obj: GetObjectFromType<T> | null | undefined): void {\n // can be overridden in the child class\n }\n\n isForceUpdate(): boolean {\n return this.forceUpdate;\n }\n\n objectChangeHandler = (id: GetRootFromType<T>, obj: GetObjectFromType<T> | null | undefined): void => {\n this.objects = this.objects || {};\n\n // if our object\n if (this.checkObjectId(id, obj)) {\n let type: EventType;\n let oldObj: GetObjectFromType<T> | undefined;\n if (obj) {\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n AdminUtils.fixAdminUI(obj);\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 object\n return;\n }\n\n this.forceUpdate = true;\n\n this.postProcessing(id, obj);\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n getObjects(update?: boolean): Promise<null | Record<string, GetObjectFromType<T>>> {\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjectViewSystem(\n this.objectType,\n this.root ? `${this.root}.` : '',\n this.root ? `${this.root}.\\u9999` : '\\u9999',\n )\n .then(objects => {\n this.objects = objects as Record<string, GetObjectFromType<T>>;\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n Object.keys(this.objects).forEach(id => AdminUtils.fixAdminUI(this.objects[id]));\n }\n\n return this.objects;\n })\n .catch((e: unknown): null => {\n window.alert(`Cannot get objects of type ${this.objectType}, with root \"${this.root}\": ${e as Error}`);\n return null;\n });\n\n return this.promise;\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected connectionPostHandler(_isConnected: boolean): void {}\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.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n })\n .catch(e => window.alert(`Cannot subscribe on object \"${this.root}\": ${e}`));\n }\n this.connectionPostHandler(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n this.connectionPostHandler(false);\n }\n };\n\n registerHandler(cb: (events: GenericEvent<T>[]) => void, doNotRequestObjects?: 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(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n if (!doNotRequestObjects) {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n }\n })\n .catch(e => window.alert(`Cannot subscribe on objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: GenericEvent<T>[]) => 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(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe from objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n destroy(): void {\n this.handlers.forEach(cb => this.unregisterHandler(cb));\n this.socket.unregisterConnectionHandler(this.connectionHandler);\n }\n}\n","import React, { createContext, useEffect, useMemo, useState, type JSX } from 'react';\n\nimport AdminUtils from '@/helpers/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 BackEndCommand,\n type BackEndCommandOpenLink,\n type ConfigItemPanel,\n type ConfigItemTabs,\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 | ConfigItemTabs | 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?.admin?.notification) {\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?.admin?.notification) {\n const notification: NotificationAction = JSON.parse(\n JSON.stringify(this.props.message.contextData?.admin?.notification),\n );\n /** remove the offline message from contextData */\n if (notification.offlineMessage) {\n delete notification.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 notification,\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 const notification: NotificationAction | undefined = this.props.message.contextData?.admin?.notification;\n if (notification) {\n if (!this.state.alive) {\n const offlineMessage: ioBroker.StringOrTranslated | undefined = notification.offlineMessage;\n if (offlineMessage) {\n const text =\n typeof offlineMessage === 'string'\n ? offlineMessage\n : offlineMessage[this.props.socket.systemLang] || 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>) => this.setState({ data })}\n onBackEndCommand={(command?: BackEndCommand) => {\n if (command.schema) {\n this.setState({\n schema: command.schema,\n data: command.data || this.state.data,\n });\n }\n\n if (command.command === 'refresh' || command.refresh) {\n this.getGui();\n }\n if (command.command === 'link') {\n this.props.onLink(command);\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, useEffect } 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 NotificationMessage, { type Message, type Severity } from '../components/NotificationMessage';\nimport type { BackEndCommandGeneric } from '#JC/types';\n\nexport interface BackEndCommandOpenLink extends BackEndCommandGeneric {\n command: 'link';\n /** Link url. Could be relative ('#blabla') or absolute ('https://blabla') */\n url: string;\n /** Target of the link. Default is `_self` for relative and '_blank' for absolute links */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_self' | '_blank' | string;\n /** If GUI should be closed after the link was opened (Only for target='_self') */\n close?: boolean;\n}\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 [panel, setPanel] = useState('');\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n const [messages, setMessages] = useState<MessagesPerScope>({});\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 const notificationManagerInstalled = !!Object.values(instances).find(\n instance => instance.common.name === 'notification-manager',\n );\n\n useEffect(() => {\n const _messages: MessagesPerScope = {};\n let firstKey = '';\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 Object.keys(_messages).map(scope =>\n Object.keys(_messages[scope]).map(name => (firstKey = firstKey || `${scope}--${name}`)),\n );\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 // take the first message in this scope\n const key = Object.keys(_messages[scope])[0];\n if (key) {\n setPanel(`${scope}--${key}`);\n } else {\n setPanel(firstKey);\n }\n }\n } else {\n setPanel(firstKey);\n }\n setMessages(_messages);\n }, [instances, notifications, panel]);\n\n const [currentScope, currentName] = panel.split('--');\n const entry: (Message & { host: string }) | null =\n currentScope && currentName ? messages[currentScope][currentName] : null;\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}\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 {entry ? (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${currentName}`}\n style={{ ...styles.overflowAuto, color: black ? 'black' : undefined }}\n index={panel}\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 = `${panel}--${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 (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n\n return (\n <Accordion\n style={black ? undefined : { backgroundColor: '#c0c0c052' }}\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={(linkCommand: BackEndCommandOpenLink) =>\n onLink(linkCommand, nameInst, onClose)\n }\n />\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n </TabPanel>\n ) : null}\n </Box>\n </DialogContent>\n <DialogActions>\n {currentScope && currentName ? (\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages[currentScope]).length !== 1}\n disabled={disabled.includes(currentName)}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(messages[currentScope][currentName].host, currentName);\n setDisabled([...disabled, currentName]);\n }}\n color={Object.keys(messages[currentScope]).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n ) : null}\n {currentScope && currentName && Object.keys(messages[currentScope]).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(currentName)}\n sx={styles.buttonStyle}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, currentName]);\n ackCallback(messages[currentScope][currentName].host, currentName);\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 style={{ flexGrow: 1 }} />\n <Button\n id=\"notifications-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Close')}\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 '../helpers/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 '@/helpers/AdminUtils';\nimport type { InstancesWorker } from '@/Workers/InstancesWorker';\nimport type { HostsWorker, 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 '../../helpers/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;\nconst _excluded = [\"title\", \"titleId\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgLongLogo(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 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 };","import React, { Component, type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { Marker, type DragEndEvent, type LatLngTuple, type Map } from 'leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\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, GpsFixed } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\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\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 zoom: number;\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 private marker: Marker;\n\n private map: Map;\n\n private cityTimer: ReturnType<typeof setTimeout>;\n\n private latLongTimer: ReturnType<typeof setTimeout>;\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 zoom: 14,\n };\n }\n\n positionReady(position: { coords: { latitude: number; longitude: number } }): void {\n const latitude = parseFloat(position.coords.latitude.toFixed(8));\n const longitude = parseFloat(position.coords.longitude.toFixed(8));\n\n this.setState(\n {\n latitude: isNaN(latitude) ? '' : latitude,\n longitude: isNaN(longitude) ? '' : longitude,\n },\n () => this.changeMapPosition(),\n );\n }\n\n getBrowserCoordinates(): void {\n if (window.navigator.geolocation && (!this.state.longitude || !this.state.latitude)) {\n window.navigator.geolocation.getCurrentPosition(position => this.positionReady(position));\n } else {\n this.changeMapPosition();\n }\n }\n\n async componentDidMount(): Promise<void> {\n const systemConfig = await this.props.socket.getCompactSystemConfig(true);\n this.setState(\n {\n tempUnit: systemConfig.common.tempUnit,\n currency: systemConfig.common.currency,\n dateFormat: systemConfig.common.dateFormat,\n isFloatComma: systemConfig.common.isFloatComma,\n country: systemConfig.common.country,\n city: systemConfig.common.city,\n address: '',\n longitude: systemConfig.common.longitude || '',\n latitude: systemConfig.common.latitude || '',\n firstDayOfWeek: systemConfig.common.firstDayOfWeek || 'monday',\n },\n () => this.getBrowserCoordinates(),\n );\n }\n\n onMap = (map: Map): void => {\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(this.state.latitude !== undefined ? (this.state.latitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 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 onMarkerDragend = (evt: DragEndEvent): void => {\n // ignore changes during saving\n this.setState({ latitude: evt.target._latlng.lat, longitude: evt.target._latlng.lng });\n };\n\n changeMapPosition(noWait?: boolean): void {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(\n () => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n },\n noWait ? 0 : 500,\n );\n }\n\n onChangePosition = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n if (id === 'latitude') {\n this.setState({ latitude: value || '' });\n } else {\n this.setState({ longitude: value || '' });\n }\n\n this.changeMapPosition();\n };\n\n addressToPosition(): void {\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\n .search({ query: `${this.state.country} ${this.state.city}, ${this.state.address}` })\n .then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.setState({ latitude: results[0].y, longitude: results[0].x, zoom: 23 }, () =>\n this.changeMapPosition(true),\n ),\n 1200,\n );\n }\n });\n }, 500);\n }\n\n onChangeAddress = (evt: { target: { value: string } }, id: 'city' | 'address' | 'country'): void => {\n if (id === 'city') {\n this.setState({ city: evt.target.value });\n } else if (id === 'address') {\n this.setState({ address: evt.target.value });\n } else {\n this.setState({ country: evt.target.value });\n }\n\n this.addressToPosition();\n };\n\n render(): JSX.Element {\n const center: LatLngTuple = [\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 0,\n ];\n\n const { zoom } = this.state;\n\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.onChangeAddress(e, 'country')}\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.onChangeAddress(e, 'city')}\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 onChange={e => this.onChangeAddress(e, 'address')}\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.addressToPosition()}\n >\n <GpsFixed />\n </Fab>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Longitude')}\n style={styles.controlItem}\n value={\n this.state.longitude === undefined || this.state.longitude === null\n ? ''\n : this.state.longitude\n }\n onChange={e => this.onChangePosition(e, 'longitude')}\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={\n this.state.latitude === undefined || this.state.latitude === null\n ? ''\n : this.state.latitude\n }\n onChange={e => this.onChangePosition(e, 'latitude')}\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 <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 <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, type DragEndEvent, type LatLngTuple, type Map } from 'leaflet';\n\nimport { DialogConfirm, withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\nimport { type AdminGuiConfig } from '@/types';\n\nimport AdminUtils from '../../helpers/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-cn',\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 renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirm) {\n return (\n <DialogConfirm\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 // ignore changes during saving\n if (!this.props.saving) {\n const ll = JSON.parse(JSON.stringify(evt.target._latlng));\n this.doChange('latitude', ll.lat, () => this.doChange('longitude', ll.lng));\n }\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.renderDialogConfirm()}\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 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 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={!this.props.saving}\n zoomControl={!this.props.saving}\n doubleClickZoom={!this.props.saving}\n scrollWheelZoom={!this.props.saving}\n dragging={!this.props.saving}\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, DialogConfirm, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport IsVisible from '@/components/IsVisible';\nimport { AUTO_UPGRADE_OPTIONS_MAPPING, AUTO_UPGRADE_SETTINGS } from '@/helpers/utils';\nimport AdminUtils from '../../helpers/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\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Repository = Record<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 renderDialogConfirm(): React.JSX.Element {\n if (this.state.confirm) {\n return (\n <DialogConfirm\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 errorName =\n !item.title ||\n item.title.trimStart() !== item.title ||\n (item.title.length < 3 && !!item.title.match(/^\\d+$/));\n\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 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 error={errorName}\n helperText={errorName ? I18n.t('Invalid name') : undefined}\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.renderDialogConfirm()}\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 '../../helpers/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 '@/helpers/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 '@/helpers/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 '@/helpers/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 DialogConfirm,\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, ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport MainSettingsDialog from './SystemSettingsTabs/MainSettingsDialog';\nimport RepositoriesDialog, { type Repository } 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.RepositoryObject;\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 renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <DialogConfirm\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 static ifRepoError(data: ioBrokerObject<{ repositories: Repository }>): boolean {\n if (!data?.native?.repositories) {\n return false;\n }\n const invalidKey = Object.keys(data.native.repositories).find((key: string) => {\n return !key || key.trimStart() !== key || (key.length < 3 && !!key.match(/^\\d+$/));\n });\n return invalidKey !== undefined;\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 let tabError = false;\n if (this.props.currentTab.id === 'tabRepositories') {\n tabError = SystemSettingsDialog.ifRepoError(this.state.systemRepositories);\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 console.log(`get state: ${tabError}`);\n const tabs = tabsList.map(tab => (\n <Tab\n key={tab.title}\n label={this.props.t(tab.title)}\n value={tab.name}\n disabled={tabError && tab.name !== (this.props.currentTab.id || 'tabConfig')}\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.renderDialogConfirm()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!changed || this.state.saving || tabError}\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 '../helpers/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 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: unknown): { logs: LogLineSaved[] | null; logSize: number } => {\n window.alert(`Cannot get logs: ${e as Error}`);\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 { GenericWorker, type EventType, type GenericEvent } from './GenericWorker';\n\nexport type InstanceEventType = EventType;\n\nexport type InstanceEvent = GenericEvent<'instance'>;\n\nexport class InstancesWorker extends GenericWorker<'instance'> {\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'instance');\n }\n}\n","import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport type { FilteredNotificationInformation } from '@iobroker/socket-client';\nimport { GenericWorker, type EventType, type GenericEvent } from './GenericWorker';\n\nexport type HostEventType = EventType;\n\nexport type NotificationAnswer = { result: FilteredNotificationInformation } | null;\n\nexport type HostEvent = GenericEvent<'host'>;\n\nexport interface HostAliveEvent {\n id: `system.host.${string}`;\n alive: boolean;\n type: HostEventType;\n}\n\nexport class HostsWorker extends GenericWorker<'host'> {\n private readonly aliveHandlers: (((events: HostAliveEvent[]) => void) | false)[] = [];\n\n private readonly notificationsHandlers: ((notifications: Record<string, NotificationAnswer>) => void)[] = [];\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 = null;\n\n private subscribeTs: number | undefined;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.host', 'host');\n this.aliveHandlers = [];\n this.notificationsHandlers = [];\n this.notificationPromises = {};\n this.aliveStates = {};\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 connectionPostHandler(isConnected: boolean): void {\n if (isConnected) {\n if (this.aliveHandlers.length) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n } else {\n Object.keys(this.aliveStates).forEach((id: string) => (this.aliveStates[id] = false));\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\n .getState(`${hostId}.alive`)\n .then((state: ioBroker.State | null | undefined): Promise<Record<string, NotificationAnswer | null>> => {\n if (state?.val) {\n return this.socket\n .getNotifications(hostId, '')\n .then((notifications: NotificationAnswer) => ({ [hostId]: notifications || null }))\n .catch((e: unknown): Record<string, NotificationAnswer | null> => {\n console.warn(`Cannot read notifications from \"${hostId}\": ${e as Error}`);\n return { [hostId]: null };\n });\n }\n return Promise.resolve({ [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 { GenericWorker, type EventType, type GenericEvent } from './GenericWorker';\n\nexport type AdapterEventType = EventType;\n\nexport type AdapterEvent = GenericEvent<'adapter'>;\n\nexport class AdaptersWorker extends GenericWorker<'adapter'> {\n private readonly repositoryHandlers: (() => void)[];\n\n private repoTimer: ReturnType<typeof setTimeout> | null;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'adapter');\n this.repositoryHandlers = [];\n }\n\n protected checkObjectId(id: string, obj: ioBroker.AdapterObject | null | undefined): boolean {\n return id.match(/^system\\.adapter\\.[^.]+$/) && (!obj || obj.type === this.objectType);\n }\n\n protected postProcessing(_id: string, _obj: ioBroker.AdapterObject | null | undefined): void {\n this.socket.getAdaptersResetCache();\n this.socket.getInstalledResetCache('');\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 '../helpers/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\nexport 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: Record<string, ioBroker.Object>) => {\n this.objects = objects;\n return this.objects;\n })\n .catch((e: any) => 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: any) => 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: any) => 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: any) => window.alert(`Cannot unsubscribe on object: ${e as Error}`));\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 systemConfig: ioBroker.SystemConfigCommon;\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 systemConfig,\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 oContext={{\n socket,\n themeType,\n theme,\n isFloatComma: true,\n instance: 0,\n dateFormat: 'YYYY.MM.DD',\n forceUpdate: () => {},\n onCommandRunning: () => {},\n adapterName: 'dummy',\n _themeName: themeName,\n systemConfig,\n }}\n data={schemaData}\n themeName={themeName}\n onChange={setSchemaData}\n onError={(attr: string, _error?: string): void =>\n setError({ ...error, [attr]: _error })\n }\n schema={schema as unknown as ConfigItemPanel}\n // all unused properties\n alive\n changed={false}\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 systemConfig: ioBroker.SystemConfigCommon;\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 systemConfig,\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 systemConfig={systemConfig}\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// @mui/icons-material\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 DialogConfirm,\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 dictionary,\n} from '@iobroker/adapter-react-v5';\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 DbType, 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';\nimport type { CompactInstanceInfo } from './dialogs/AdapterUpdateDialog';\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 alignItems: 'center',\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 dataNotStoredDialog: boolean;\n dataNotStoredTab: {\n tab: string;\n subTab?: string;\n param?: string;\n } | null;\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 private _tempAllStored = true;\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 = dictionary;\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._tempAllStored) {\n this._tempAllStored = allStored;\n this.forceUpdate();\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 dataNotStoredDialog: false,\n dataNotStoredTab: null,\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.toString()}, ${e.stack}`);\n this.showAlert(e.toString(), '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: string | Error) => {\n console.error(error);\n let errorStr: string;\n if (error instanceof Error) {\n errorStr = error.message || error.toString();\n } else {\n errorStr = error.toString();\n }\n if (errorStr === 'ioBroker is not connected') {\n if (!this.state.cloudNotConnected) {\n this.showAlert(I18n.t(errorStr), '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(errorStr, 'error');\n }\n },\n }) as unknown as AdminConnection;\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 systemConfig={this.state.systemConfig.common}\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.getObjects();\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.getObjects().then(instances =>\n this.setState({\n showHostWarning: {\n host,\n instances,\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: {\n Platform: string;\n os: string;\n Architecture: string;\n CPUs: number;\n Speed: number;\n Model: string;\n RAM: number;\n 'System uptime': number;\n 'Node.js': string;\n time: number;\n timeOffset: number;\n NPM: string;\n 'adapters count': number;\n 'Disk size': number;\n 'Disk free': number;\n 'Active instances': number;\n location: string;\n Uptime: number;\n } | null = await this.socket.getHostInfo(this.state.currentHost).catch((): null => null);\n\n const instances: Record<string, CompactInstanceInfo> | null = await this.socket\n .getCompactInstances()\n .catch((): null => null);\n\n const objectsDbType: DbType = (await this.socket.getDiagData(this.state.currentHost, 'normal'))\n .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: unknown): CompactRepository => {\n window.alert(`Cannot getRepositoryCompact: ${e as Error}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {} as CompactRepository;\n });\n\n const installed: CompactInstalledInfo = await this.socket\n .getCompactInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch((e: unknown): CompactInstalledInfo => {\n window.alert(`Cannot getInstalled: ${e as Error}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {} as CompactInstalledInfo;\n });\n\n const adapters: Record<string, CompactAdapterInfo> = await this.socket\n .getCompactAdapters(update)\n .catch((e: unknown): Record<string, CompactAdapterInfo> => {\n window.alert(`Cannot read adapters: ${e as Error}`);\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 handleNavigation={this.handleNavigation}\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 | Error, alertType?: 'error' | 'warning' | 'info' | 'success'): void {\n if (alertType !== 'error' && alertType !== 'warning' && alertType !== 'info' && alertType !== 'success') {\n alertType = 'info';\n }\n let alertMessageStr: string;\n if (typeof alertMessage !== 'string') {\n if (alertMessage instanceof Error) {\n alertMessageStr = alertMessage.message || alertMessage.toString();\n } else if (alertMessage === null || alertMessage === undefined) {\n alertMessageStr = 'null';\n } else {\n alertMessageStr = (alertMessage as Error).toString();\n }\n } else {\n alertMessageStr = alertMessage;\n }\n\n this.setState({\n alert: true,\n alertType,\n alertMessage: alertMessageStr,\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, subTab?: string, param?: string): void => {\n if (tab) {\n if (this._tempAllStored) {\n Router.doNavigate(tab, subTab, param);\n\n this.setState({ currentTab: Router.getLocation() });\n } else {\n this.setState({\n dataNotStoredDialog: true,\n dataNotStoredTab: { tab, subTab, param },\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 if (this._tempAllStored !== value) {\n this._tempAllStored = value;\n this.forceUpdate();\n }\n }\n\n closeDataNotStoredDialog(): void {\n this.setState({ dataNotStoredDialog: false });\n }\n\n confirmDataNotStored(): void {\n this._tempAllStored = true;\n this.setState(\n {\n dataNotStoredDialog: false,\n },\n () =>\n this.handleNavigation(\n this.state.dataNotStoredTab?.tab,\n this.state.dataNotStoredTab?.subTab,\n this.state.dataNotStoredTab?.param,\n ),\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 {this.state.systemConfig.common.siteName ? (\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 if (this.props.width !== 'xs' && this.props.width !== 'sm' && this.state.systemConfig.common.siteName) {\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 renderDialogConfirm(): JSX.Element | null {\n if (!this.state.dataNotStoredDialog) {\n return null;\n }\n /* return <DialogConfirm\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 </DialogConfirm>; */\n return (\n <DialogConfirm\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('ra_Some data are not stored. Discard?')}\n ok={I18n.t('ra_Discard')}\n cancel={I18n.t('ra_Cancel')}\n onClose={(isYes: boolean) => (isYes ? this.confirmDataNotStored() : this.closeDataNotStoredDialog())}\n />\n );\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 await 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 > 450 && (\n <Grid\n container\n style={{\n ...styles.avatarNotVisible,\n ...(this.state.drawerState !== DrawerStates.opened ? styles.avatarVisible : undefined),\n }}\n spacing={1}\n alignItems=\"center\"\n >\n {!this.state.user ? (\n <Box\n component=\"div\"\n style={styles.wrapperName}\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 ) : null}\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 handleNavigation={this.handleNavigation}\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={this.handleNavigation}\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.renderDialogConfirm()}\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 if (!error && event) {\n error = event as unknown as Error;\n }\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 if (typeof error === 'string') {\n if (ignoreErrors.find(e => (error as unknown as string).includes(e))) {\n console.error(`Ignore error: ${error}`);\n return;\n }\n throw new Error(error);\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 '../helpers/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/mode-json5';\nimport 'ace-builds/src-min-noconflict/mode-xml';\nimport 'ace-builds/src-min-noconflict/mode-html';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/worker-javascript';\nimport 'ace-builds/src-min-noconflict/worker-xml';\nimport 'ace-builds/src-min-noconflict/worker-html';\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, HostEvent, 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 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 marginLeft: '8px',\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 ReactElement, 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[];\n}\n\nfunction IsVisible(props: IsVisibleProps): ReactElement<any, any> {\n const { config, children, name, value } = props;\n\n if (value !== undefined) {\n return value === false ? null : (children as ReactElement<any, any>);\n }\n if (!config) {\n return children as ReactElement<any, any>;\n }\n if (getAttr(config, name) !== false) {\n return children as ReactElement<any, any>;\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: string): void => {\n setText(txt);\n setLoading(false);\n })\n .catch((): void => 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';\nimport type { CompactInstanceInfo } from '@/dialogs/AdapterUpdateDialog';\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, CompactInstanceInfo>): 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\nexport type DbType = 'file' | 'jsonl' | 'redis';\n\ninterface Context {\n adapters: Record<string, CompactAdapterInfo>;\n instances: Record<string, CompactInstanceInfo>;\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 // bigger(x.x.x), smaller(x.x.x), equals(x.x.x), between(x.x.x, x.x.x)\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n [adapter: string]: '!installed' | 'active' | '!active' | string;\n };\n title: Record<ioBroker.Languages, string>;\n content: Record<ioBroker.Languages, string>;\n class: 'info' | 'warning' | 'danger';\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 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 let andConditions = true;\n if (message.conditions.or === 'true') {\n andConditions = false;\n }\n const adapters = Object.keys(message.conditions).filter(key => key !== 'or');\n let conditionResult = true;\n for (let a = 0; a < adapters.length; a++) {\n const adapter = context.adapters[adapters[a]];\n const condition = message.conditions[adapters[a]];\n if (condition) {\n if (!adapter && condition !== '!installed') {\n conditionResult = false;\n } else if (adapter && condition === '!installed') {\n conditionResult = false;\n } else if (adapter && condition === 'active') {\n conditionResult = checkActive(adapters[a], context.instances);\n } else if (adapter && condition === '!active') {\n conditionResult = !checkActive(adapters[a], context.instances);\n } else if (adapter) {\n conditionResult = checkConditions(condition, adapter.v);\n }\n }\n if (andConditions && !conditionResult) {\n break;\n } else if (!andConditions && conditionResult) {\n break;\n }\n }\n showIt = conditionResult;\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 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 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 isTouchDevice(): boolean {\n return 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\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 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, { 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","/** 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\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\nfunction 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 (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & 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\nfunction 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 = 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// internal use\nfunction _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 = 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/**\n * Convert the template link to string\n *\n * Possible placeholders:\n * `%ip%` - `native.bind` or `native.ip` of this adapter. If it is '0.0.0.0', we are trying to find the host IP that is reachable from the current browser.\n * `%protocol%` - `native.protocol` or `native.secure` of this adapter. The result is 'http' or 'https'.\n * `%s%` - `native.protocol` or `native.secure` of this adapter. The result is '' or 's'. The idea is to use the pattern like \"http%s%://...\"\n * `%instance%` - instance number\n * `%adapterName_nativeAttr%` - Takes the native value `nativeAttr` of all instances of adapterName. This generates many links if more than one instance installed\n * `%adapterName.x_nativeAttr%` - Takes the native value `nativeAttr` of adapterName.x instance\n *\n * @param link pattern for link\n * @param adapter adapter name\n * @param instance adapter instance number\n * @param context Context object\n * @param context.instances Object with all instances\n * @param context.hostname Actual host name\n * @param context.adminInstance Actual admin instance\n * @param context.hosts Object with all hosts\n */\nexport function replaceLink(\n link: string,\n adapter: string,\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 === '0.0.0.0') {\n // Check host\n ip = 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 = 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 === '%s%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: '' | 's';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 's';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = '';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as '' | 's';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%s%', protocol)));\n } else {\n link = link.replace('%s%', 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 = _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 = _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 = _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 = _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\n _urls.push({ url: _link, port: _port, instance: id });\n }\n } else {\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\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 = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\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","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 '@/helpers/AdminUtils';\nimport { replaceLink } from '@/helpers/utils';\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.getObjects();\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 = replaceLink(href, adapter, _instNum, {\n hostname,\n // it cannot be void\n instances: instances,\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":["GenericWorker","constructor","socket","root","objectType","handlers","promise","connected","objects","forceUpdate","objectChangeHandler","id","obj","this","checkObjectId","type","oldObj","AdminUtils","fixAdminUI","JSON","stringify","postProcessing","forEach","cb","connectionHandler","isConnected","length","subscribeObject","concat","then","getObjects","Object","keys","catch","e","window","alert","connectionPostHandler","registerConnectionHandler","startsWith","_id","_obj","isForceUpdate","update","Promise","getObjectViewSystem","_isConnected","registerHandler","doNotRequestObjects","includes","push","unregisterHandler","pos","indexOf","splice","unsubscribeObject","destroy","unregisterConnectionHandler","ContextWrapper","createContext","hostsUpdate","adaptersUpdate","hosts","repository","installed","ContextWrapperProvider","_ref","children","stateContext","setState","useState","setStateContext","useMemo","prevState","_objectSpread","useEffect","jsControllerVersion","version","count","element","updateAvailable","common","installedVersion","_installed","adapter","ignoreVersion","_jsx","Provider","value","styles","message","position","display","width","offline","justifyContent","alignItems","opacity","flexWrap","timestamp","color","top","right","fontSize","simpleMessage","fontFamily","ml","mb","whiteSpace","NotificationMessage","Component","props","super","lastAlive","onAliveChanged","state","instanceId","alive","val","Date","now","getGui","data","schema","updateData","componentDidMount","_this$props$message$c","_this$props$message$c2","contextData","admin","notification","getState","subscribeState","_this$props$message$c3","_this$props$message$c4","_this$props$message$c5","_this$props$message$c6","parse","offlineMessage","sendTo","replace","result","renderCustomGui","_this$props$message$c7","_this$props$message$c8","text","systemLang","en","Box","sx","Utils","renderTextWithA","Typography","I18n","t","LinearProgress","adapterName","instance","split","_jsxs","_Fragment","error","style","JsonConfigComponent","parseInt","onError","onChange","onBackEndCommand","command","refresh","onLink","embedded","themeName","themeType","theme","isFloatComma","dateFormat","renderSimpleMessage","render","component","ts","toLocaleString","backgroundColor","palette","background","paper","height","borderRadius","flexDirection","maxWidth","flex","overflowHidden","overflow","overflowAuto","overflowY","column","headerText","fontWeight","mode","descriptionHeaderText","margin","button","paddingTop","paddingBottom","bottom","zIndex","img2","mr","content","left","backgroundSize","heading","headingTop","classNameBox","p","textStyle","textOverflow","buttonStyle","m","Status","severity","isDark","_objectWithoutProperties","_excluded","BellIcon","InfoIcon","WarningIcon","TabPanel","_ref2","index","sxBox","role","_ref3","notifications","onClose","ackCallback","instances","panel","setPanel","disabled","setDisabled","expanded","setExpanded","autoCollapse","setAutoCollapse","messages","setMessages","handleChangeAccordion","panelName","_event","isExpanded","black","notificationManagerInstalled","values","find","name","_messages","firstKey","host","hostDetails","entries","scope","scopeDetails","category","categoryDetails","categories","map","key","currentScope","currentName","entry","Dialog","open","marginLeft","marginRight","Tooltip","title","slotProps","popper","pointerEvents","DialogContent","dividers","AppBar","Tabs","handleChange","newValue","variant","scrollButtons","indicatorColor","textColor","idx","Tab","label","getLanguage","icon","undefined","description","nameInst","_currentInstance$comm","_currentInstance$comm2","accKey","currentInstance","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","CardMedia","image","AccordionDetails","msg","i","linkCommand","target","url","toString","setTimeout","_url","location","hash","protocol","href","close","pathname","DialogActions","Button","autoFocus","onClick","startIcon","CheckIcon","CloseIcon","flexGrow","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","callback","cmd","onFinished","onSetCommandRunning","running","FormControlLabel","control","Checkbox","checked","setItem","OpenInBrowserIcon","confirmText","funcSet","_","setTabs","tabs","findCard","cards","card","c","cursor","canDrag","setEndDrag","iconJSX","selected","compact","badgeContent","badgeColor","tab","ref","useRef","handlerId","drop","useDrop","accept","collect","monitor","getHandlerId","hover","_ref$current","draggedId","current","overIndexActions","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","hoverClientY","getClientOffset","y","moveCard","atIndex","copyCard","isDragging","drag","preview","useDrag","item","end","getEmptyImage","captureDraggingState","event","preventDefault","textDecoration","primary","main","invertColor","selectedIcon","compactBadge","pl","noWrap","warn","amber","editMenuList","editListFunc","badgeAdditionalContent","badgeAdditionalColor","DragHandle","ColorPicker","noInputField","ListItemButton","getStyle","Grid2","container","spacing","ListItemIcon","minWidth","Badge","ListItemText","layerStyles","getItemStyles","initialOffset","currentOffset","isSnapToGrid","x","Math","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","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","registerNotificationHandler","logsWorker","registerErrorCountHandler","registerWarningCountHandler","componentWillUnmount","unregisterNotificationHandler","unregisterErrorCountHandler","unregisterWarningCountHandler","componentDidUpdate","isSwipeable","setEditMenuList","getCompactInstances","dynamicTabs","adminTab","singleton","instNum","match","_instance$adminTab$na","lang","READY_TO_USE","filter","str","substring","toUpperCase","toLowerCase","a","b","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","menu","DragWrapper","Icon","newObj","ctrlKey","shiftKey","getHref","hostname","adminInstance","console","log","focus","SwipeableDrawer","anchor","onOpen","CustomDragLayer","List","onLogout","LogoutIcon","editable","CustomPopper","MaterialDrawer","onMouseEnter","onMouseLeave","contextType","withWidth","connecting","spinner","animation","path","strokeDasharray","strokeDashoffset","transformOrigin","offset","viewBox","xmlns","fill","strokeWidth","strokeLinecap","cx","cy","r","secondary","form","TOOLBAR_HEIGHT","input","grow","WizardPasswordTab","focusRef","password","passwordRepeat","errorPassword","errorPasswordRepeat","createRef","_this$focusRef$curren","noValidate","autoComplete","direction","TextField","readOnly","helperText","htmlInput","onKeyDown","document","getElementById","checkPassword","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","MyMapComponent","useMap","addMap","SETTINGS_WIDTH","mainGrid","mapGrid","controlItem","controlItemAddress","gridSettings","settingsGrid","CURRENCY","WizardSettingsTab","marker","cityTimer","latLongTimer","onMap","center","parseFloat","latitude","longitude","Marker","draggable","riseOnHover","addTo","bindPopup","on","dragend","evt","onMarkerDragend","_latlng","lat","lng","onChangePosition","changeMapPosition","onChangeAddress","city","address","country","addressToPosition","tempUnit","currency","firstDayOfWeek","zoom","positionReady","coords","toFixed","isNaN","getBrowserCoordinates","navigator","geolocation","getCurrentPosition","noWait","flyTo","setLatLng","OpenStreetMapProvider","search","query","results","Autocomplete","freeSolo","options","inputValue","onInputChange","getOptionLabel","option","renderOption","renderInput","params","endAdornment","InputAdornment","Fab","GpsFixed","MapContainer","maxZoom","attributionControl","zoomControl","doubleClickZoom","scrollWheelZoom","dragging","easeLinearity","TileLayer","inputLine","WizardAuthSSLTab","auth","secure","FormGroup","FormHelperText","information","WizardPortForwarding","IconCloudPro","IconCloud","WizardAdaptersTab","selectedAdapters","getRepository","repo","activeRepo","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","native","renderWelcome","licenseConfirmed","PlayArrowIcon","renderLicense","language","renderPassword","pass","changePassword","renderSettings","assign","renderAuthentication","renderPortForwarding","renderAdapters","discovery","certPublic","certPrivate","certs","getCertificates","setObject","redirect","Router","doNavigate","renderFinish","LongLogo","fullScreen","ToggleThemeMenu","toggleTheme","Stepper","Step","StepLabel","BaseSystemSettingsDialog","formControl","selectEmpty","saving","getCounters","items","countries","elem","shrink","handleChangeCountry","displayEmpty","doChange","onChangeText","onChangeInput","onChangeCity","selectId","getSettings","confirm","confirmValue","newData","clone","ll","translate","allowText","autocomplete","histories","history","objectMap","dataAux","repositories","_repo","help","getSelect","multipleRepos","sm","xs","_evt","inputLabel","renderDialogConfirm","DialogConfirm","selectors","lg","md","siteName","table","buttonPanel","descriptionPanel","border","dragColumn","enableColumn","stableColumn","upgradePolicyColumn","buttonColumn","nameRow","checkboxError","fabButton","tooltip","repoToArray","repos","link","arrayToRepo","array","SortableHandle","DragHandleIcon","SortableList","SortableContainer","SortableItem","SortableElement","onAdd","onRestore","stable","beta","oldStable","json","time","oldBeta","newConfig","adapterAutoUpgrade","defaultPolicy","getUpdateDefaultRepo","newRepo","oldTitle","newTitle","findIndex","onSortEnd","oldIndex","newIndex","onValueChanged","onDelete","onChangeActiveRepo","showWarning","renderSortableItem","_this$props$repoInfo$","_this$props$dataAux$c","_this$props$dataAux$c2","errorName","trimStart","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","requestLicenses","login","decrypt","updateLicenses","renderLicenses","stickyHeader","license","product","toLocaleDateString","validTill","usedBy","invoice","IconRefresh","tableContainer","littleRow","CertificatesDialog","certToArray","certificates","arrayToCert","certText","chClass","cert","detectType","rows","parts","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","config","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","object","getUsers","getGroups","getAdapterInstances","getHistory","onSave","repoChanged","currentPassword","encrypt","expertMode","expertModeFunc","reload","MainSettingsDialog","RepositoriesDialog","LicensesDialog","SSLDialog","getDialogContent","tabsList","MyComponent","onChangedTab","idAux","ifRepoError","_data$native","changed","tabError","_e","reason","newTab","onTabChanged","edge","boxShadow","avatar","avatarImg","submit","ioBrokerLink","textTransform","progress","Login","formRef","inProcess","body","loginBackgroundColor","loginBackgroundImage","action","port","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","_excluded2","hidden","setValue","dark","_ref4","formatDate","LogsWorker","maxLogs","logs","newLogs","errorCountHandlers","warningCountHandlers","countErrors","countWarnings","warnings","isSafari","logTimeout","logSize","logHandler","_processLine","objLine","handler","isNew","getLogs","vendor","userAgent","registerLogHandler","setCurrentHost","enableCountErrors","isEnabled","enableCountWarnings","resetErrors","resetWarnings","lastKey","tt","getTime","from","parseColorMessage","original","unshift","shift","oldErrors","oldWarnings","_this$logs","logSizeStr","pop","clearLines","InstancesWorker","HostsWorker","aliveHandlers","notificationsHandlers","aliveStates","notificationPromises","notificationTimer","subscribeTs","aliveChangeHandler","endsWith","onNotificationHandler","host_","_getNotificationsFromHosts","registerAliveHandler","unregisterAliveHandler","unsubscribeState","hostId","promises","getCompactHosts","pResults","all","AdaptersWorker","repositoryHandlers","repoTimer","repoChangeHandler","getAdaptersResetCache","getInstalledResetCache","registerRepositoryHandler","unregisterRepositoryHandler","ObjectsWorker","doNotUnsubscribe","headerBlock","paperTable","custom","types","checkbox","select","comment","_setValueInObj","attr","setValueInObj","newInstance","setError","setSchema","schemaData","setSchemaData","_newInstance$comment","_newInstance$comment2","objSchema","objValue","add","Array","isArray","inputs","def","newLine","repeat","SettingsIcon","ConfigPanel","oContext","onCommandRunning","_themeName","originalData","err","useStateLocal","defaultValue","_unused","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","instanceObj","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","slice","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","_tempAllStored","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","adapters","nodeVersion","npmVersion","NPM","os","showNews","stack","showAlert","logsWorkerChanged","_this$logsWorker","onHashChanged","getLocation","setCurrentTabTitle","currentThemeName","newThemeName","createTheme","getThemeType","_this$refConfigIframe","_this$refConfigIframe2","contentWindow","postMessage","subTab","param","dataNotStoredDialog","dataNotStoredTab","handleDrawerState","DrawerStates","setTitle","_unused2","dictionary","enLocal","deLocal","ruLocal","ptLocal","nlLocal","frLocal","itLocal","esLocal","plLocal","ukLocal","zhCNLocal","setTranslations","userLanguage","vendorPrefix","getThemeName","drawerStateStr","drawerState","defineProperty","get","configNotSaved","allStored","configurable","currentHostName","ownHost","user","waitForRestart","stateChanged","alertType","alertMessage","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","_unused3","removeItem","enableGuiSettings","enabled","ownSettings","addEventListener","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","errorStr","Error","_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","getProtocol","Theme","getCurrentTab","small","opened","closed","Suspense","fallback","Connecting","triggerUpdate","adminHost","menuOpened","menuClosed","currentAdminVersion","onUpdating","menuPadding","configStored","inBackgroundCommand","onRegisterIframeRef","onUnregisterIframeRef","clearErrors","clearLogErrors","navigate","getCurrentDialog","getSystemSettingsDialog","handleAlertClose","alertMessageStr","logout","closeDataNotStoredDialog","confirmDataNotStored","_this$state$dataNotSt","_this$state$dataNotSt2","_this$state$dataNotSt3","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","source","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","bind","registerCmdStderrHandler","cmdStderrHandler","registerCmdExitHandler","cmdExitHandler","activeCmdId","floor","random","cmdExec","upload","gotAdmin","gotWww","exitCode","_adapter","_obj$common","_obj$common$adminUI","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","hardware","networkInterfaces","_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","fetch","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","semver","vers1","vers2","lastMessageId","context","messagesToShow","today","showIt","conditions","andConditions","or","conditionResult","v","eval","class","created","linkTitle","_unused4","_newsArr$indexArr","_newsArr$indexArr2","setId","last","setLast","indexArr","setIndexArr","newId","frame","WorldIcon","buttonLabel","mobile","readTimeoutSec","MOBILE_WIDTH","AdminConnection","isCloud","saveReadTimeoutMs","min","TimeIcon","STYLES","deepClone","formatRam","bytes","GB","MB","isTouchDevice","maxTouchPoints","msMaxTouchPoints","formatSpeed","mhz","formatBytes","abs","units","u","getFileExtension","fileName","lastIndexOf","hex","bw","g","finalR","finalG","finalB","padStart","formatSeconds","seconds","days","minutesRes","secondsRes","hoursRes","hours","minutes","materializeTab","jsonCustom","supportCustoms","noConfig","jsonConfig","materialize","code","PASSWORD_SET","PASSWORD_ERROR_LENGTH","PASSWORD_ERROR_NOT_EQUAL","PASSWORD_ERROR_EMPTY","getDocsLinkForAdapter","SUPPORTED_DOC_LANGUAGES","oldVersion","newVersion","getText","word","MobileDialog","_resizeHandlerInstalled","_timerOnResize","__onResize","isMobile","getButtonTitle","moreMobileIcon","CONTROLLER_CHANGELOG_URL","none","patch","minor","major","ip2int","ip","reduce","ipInt","octet","getHostname","currentHostname","_objects","_objects$common","localIp","_obj$native","_obj$native$hardware","hostIp","networkInterface","internal","family","netmask","findNetworkAddressOfHost","_replaceLink","adapterInstance","placeholder","replaceLink","_urls","placeholders","protocolVal","_context$instances4","_context$instances4$n","ids","_context$instances2","_context$instances2$n","_link","_port","_context$instances3","_context$instances3$n","_context$instances","_context$instances$na","_instance$common$admi","_hrefs$","_instNum","hrefs","refIframe","registered","onMessage","origin","parameter","detachEvent","_this$refIframe","attachEvent","_this$refIframe2"],"sourceRoot":""}
|