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/6853.c817c98e.chunk.js","mappings":"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","sources":["../../../jsonConfig/src/JsonConfigComponent/ConfigGeneric.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAccordion.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAlive.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAutocomplete.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigAutocompleteSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCRON.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertificateSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertificates.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCertCollection.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCheckLicense.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCheckbox.tsx","../../../jsonConfig/src/JsonConfigComponent/ChipInput.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigChip.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigColor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCoordinates.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigCustom.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigDeviceManager.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFileSelector.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFile.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigFunc.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigIP.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigImageSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigImageUpload.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigInstanceSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigInterface.tsx","../../../jsonConfig/src/JsonConfigComponent/wrapper/Components/CustomModal.tsx","../../../jsonConfig/src/JsonConfigComponent/wrapper/Components/Editor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigJsonEditor.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigLanguage.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigLicense.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigNumber.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigObjectId.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPassword.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPattern.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPort.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigRoom.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSelect.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSelectSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSendto.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSetState.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigSlider.tsx","../../../jsonConfig/src/JsonConfigComponent/Icons.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigState.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticDivider.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticHeader.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticImage.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticInfo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigStaticText.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTable.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigText.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTextSendTo.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTopic.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigUUID.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigUser.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigQrCode.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigPanel.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigDatePicker.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTimePicker.tsx","../../../jsonConfig/src/JsonConfigComponent/ConfigTabs.tsx","../../../jsonConfig/src/JsonConfigComponent/index.tsx","../../../jsonConfig/src/JsonConfig.tsx"],"sourcesContent":["import React, { Component, type JSX } from 'react';\n\nimport { Grid2, Button } from '@mui/material';\n\nimport {\n Info as IconInfo,\n Warning as IconWarning,\n Error as IconError,\n Key as IconAuth,\n Send as IconSend,\n Public as IconWeb,\n Search as IconSearch,\n MenuBook as IconMenuBook,\n Help as IconHelp,\n UploadFile as IconUploadFile,\n Edit as IconEdit,\n Person as IconPerson,\n Group as IconGroup,\n Delete as IconDelete,\n Refresh as IconRefresh,\n Add as IconAdd,\n LinkOff as IconLinkOff,\n Link as LinkIcon,\n Save,\n OpenInNew,\n} from '@mui/icons-material';\n\nimport {\n DialogConfirm,\n Icon,\n Utils,\n I18n,\n type Connection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\nimport type { ConfigIconType, ConfigItemAny, ConfigItemConfirmData, JsonConfigContext } from '#JC/types';\n\nconst DEFAULT_SM_SIZE = window.innerWidth <= 600 ? 12 : undefined;\n\n// because this class is used in react-components, do not include here any foreign files like from '../../helpers/utils.ts'\nexport function isObject(it: any): it is Record<string, any> {\n // This is necessary because:\n // typeof null === 'object'\n // typeof [] === 'object'\n // [] instanceof Object === true\n return Object.prototype.toString.call(it) === '[object Object]'; // this code is 25% faster than below one\n // return it && typeof it === 'object' && !(it instanceof Array);\n}\n\nexport interface DeviceManagerPropsProps {\n /* socket object */\n socket: Connection;\n /* Instance to communicate with device-manager backend, like `adapterName.X` */\n selectedInstance: string; // adapterName.X\n registerHandler?: (handler: null | ((command: string) => void)) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n isFloatComma: boolean;\n dateFormat: string;\n /** Instance to upload images to, like `adapterName.X` */\n uploadImagesToInstance?: string;\n /** Filter devices with this string */\n filter?: string;\n /** If this component is used in GUI with own toolbar. `false` if this list is used with multiple instances and true if only with one (in this case, it will monitor alive itself */\n embedded?: boolean;\n /** If embedded, this text is shown in the toolbar */\n title?: string;\n /** Style of a component that displays all devices */\n style?: React.CSSProperties;\n /** Use small cards for devices */\n smallCards?: boolean;\n}\n\nexport interface ConfigGenericProps {\n oContext: JsonConfigContext;\n alive: boolean;\n arrayIndex?: number;\n attr?: string;\n changed: boolean;\n className?: string;\n style?: Record<string, any>;\n commandRunning?: boolean;\n common: Record<string, any>;\n custom?: boolean;\n customObj?: Record<string, any>;\n data: Record<string, any>;\n disabled?: boolean;\n // filled only by table and represents the obj.native or obj.common.custom['adapter.X'] object\n globalData?: Record<string, any>;\n // filled only by table\n index?: number;\n isParentTab?: boolean;\n onChange: (attrOrData: string | Record<string, any>, val?: any, cb?: () => void, saveConfig?: boolean) => void;\n onError: (attr: string, error?: string) => void;\n originalData: Record<string, any>;\n /** This indicates that the component is the very firsts one - root */\n root?: boolean;\n /** Provided props by the specific component */\n schema: ConfigItemAny;\n /** This item is in the table. Maybe some layouts must be changed */\n table?: boolean;\n themeName: ThemeName;\n}\n\nexport interface ConfigGenericState {\n confirmDialog: boolean;\n confirmNewValue: any;\n confirmAttr: any;\n confirmData: ConfigItemConfirmData | null;\n value?: any;\n confirmDepAttr?: any;\n confirmDepNewValue?: any;\n confirmCallback: null | ((result: boolean) => void);\n}\n\nexport default class ConfigGeneric<\n Props extends ConfigGenericProps = ConfigGenericProps,\n State extends ConfigGenericState = ConfigGenericState,\n> extends Component<Props, State> {\n static DIFFERENT_VALUE = '__different__';\n\n static DIFFERENT_LABEL = 'ra___different__';\n\n static NONE_VALUE = '';\n\n static NONE_LABEL = 'ra_none';\n\n private readonly defaultValue: any;\n\n private isError: any;\n\n private readonly lang: ioBroker.Languages;\n\n private defaultSendToDone?: boolean;\n\n private sendToTimeout?: any;\n\n private noPlaceRequired: any;\n\n constructor(props: Props) {\n super(props);\n\n // @ts-expect-error of course, as we just\n this.state = {\n confirmDialog: false,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n confirmCallback: null,\n } satisfies ConfigGenericState;\n\n this.isError = {};\n\n if (props.schema) {\n if (props.custom) {\n this.defaultValue = props.schema.defaultFunc\n ? this.executeCustom(\n props.schema.defaultFunc,\n props.data,\n props.customObj,\n props.oContext.instanceObj,\n props.arrayIndex,\n props.globalData,\n )\n : props.schema.default;\n } else if (props.schema.type !== 'state') {\n this.defaultValue = props.schema.defaultFunc\n ? this.execute(\n props.schema.defaultFunc,\n props.schema.default,\n props.data,\n props.arrayIndex,\n props.globalData,\n )\n : props.schema.default;\n }\n }\n\n this.lang = I18n.getLanguage();\n }\n\n componentDidMount(): void {\n if (this.props.oContext.registerOnForceUpdate) {\n this.props.oContext.registerOnForceUpdate(this.props.attr, this.onUpdate);\n }\n const LIKE_SELECT = ['select', 'autocomplete', 'autocompleteSendTo'];\n // init default value\n if (this.defaultValue !== undefined) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (\n value === undefined ||\n (LIKE_SELECT.includes(this.props.schema.type) && (value === '' || value === null))\n ) {\n setTimeout(() => {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, this.defaultValue, () =>\n setTimeout(() => this.props.oContext.forceUpdate([this.props.attr], this.props.data), 100),\n );\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, this.defaultValue);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.oContext.forceUpdate([this.props.attr], this.props.data),\n );\n }\n }, 100);\n }\n } else if (this.props.schema.defaultSendTo) {\n this.sendTo();\n }\n }\n\n sendTo(): void {\n if (this.props.alive) {\n this.defaultSendToDone = true;\n let data: any = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr = this.getPattern(this.props.schema.jsonData, null, true);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n } else {\n data = {\n attr: this.props.attr,\n value: ConfigGeneric.getValue(this.props.data, this.props.attr),\n };\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.defaultSendTo,\n data,\n )\n .then((value: any) => {\n if (value !== null && value !== undefined) {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, value, () =>\n this.props.oContext.forceUpdate([this.props.attr], this.props.data),\n );\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, value);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.oContext.forceUpdate([this.props.attr], this.props.data),\n );\n }\n }\n });\n } else {\n this.defaultSendToDone = false;\n if (!this.props.schema.allowSaveWithError) {\n // show error, that instance did not start\n this.onError(\n this.props.attr,\n I18n.t('ra_Instance %s is not alive', this.props.oContext.instance.toString()),\n );\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.props.oContext.registerOnForceUpdate) {\n this.props.oContext.registerOnForceUpdate(this.props.attr);\n }\n if (this.sendToTimeout) {\n clearTimeout(this.sendToTimeout);\n this.sendToTimeout = null;\n }\n }\n\n onUpdate = (data: Record<string, any>): void => {\n const value = ConfigGeneric.getValue(data || this.props.data, this.props.attr) || '';\n if (this.state.value !== value) {\n this.setState({ value });\n } else {\n this.forceUpdate();\n }\n };\n\n /**\n * Extract attribute out of data\n */\n static getValue(data: Record<string, any>, attr: string | string[]): any {\n if (typeof attr === 'string') {\n return ConfigGeneric.getValue(data, attr.split('.'));\n }\n if (attr.length === 1) {\n return data[attr[0]];\n }\n const part = attr.shift();\n\n if (typeof part === 'string' && typeof data[part] === 'object') {\n return ConfigGeneric.getValue(data[part], attr);\n }\n return undefined;\n }\n\n static setValue(data: Record<string, any>, attr: string | string[], value: any): void {\n if (typeof attr === 'string') {\n ConfigGeneric.setValue(data, attr.split('.'), value);\n return;\n }\n if (attr.length === 1) {\n if (value === null) {\n delete data[attr[0]];\n } else {\n data[attr[0]] = value;\n }\n } else {\n const part = attr.shift();\n\n if (typeof part !== 'string') {\n return;\n }\n\n if (!data[part] || typeof data[part] === 'object') {\n data[part] = data[part] || {};\n }\n ConfigGeneric.setValue(data[part], attr, value);\n }\n }\n\n getText(text: ioBroker.StringOrTranslated, noTranslation?: boolean): string {\n if (!text) {\n return '';\n }\n\n if (typeof text === 'string') {\n const strText = noTranslation ? text : I18n.t(text);\n if (strText.includes('${')) {\n return this.getPattern(strText, null, noTranslation);\n }\n return strText;\n }\n\n if (isObject(text)) {\n // todo\n if ((text as any).func) {\n // calculate pattern\n if (typeof (text as any).func === 'object') {\n return this.getPattern((text as any).func[this.lang] || (text as any).func.en || '', null, true);\n }\n return this.getPattern((text as any).func, null, noTranslation);\n }\n\n return text[this.lang] || text.en || '';\n }\n\n return (text as any).toString();\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon: null | JSX.Element = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <DialogConfirm\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon || undefined}\n onClose={isOk =>\n this.setState({ confirmDialog: false }, () => {\n if (isOk) {\n if (this.state.confirmCallback) {\n const callback = this.state.confirmCallback;\n this.setState({ confirmCallback: null }, () => callback(true));\n return;\n }\n\n const data = JSON.parse(JSON.stringify(this.props.data));\n if (this.state.confirmDepAttr) {\n ConfigGeneric.setValue(data, this.state.confirmDepAttr, this.state.confirmDepNewValue);\n }\n\n ConfigGeneric.setValue(data, this.state.confirmAttr, this.state.confirmNewValue);\n this.setState(\n {\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n },\n () => this.props.onChange(data),\n );\n } else {\n const callback = this.state.confirmCallback;\n this.setState(\n {\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n confirmCallback: null,\n },\n () => {\n if (callback) {\n callback(false);\n }\n },\n );\n }\n })\n }\n />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n getIcon(iconSettings?: ConfigIconType | null): JSX.Element | null {\n iconSettings = iconSettings || this.props.schema.icon;\n let icon = null;\n if (iconSettings === 'auth') {\n icon = <IconAuth />;\n } else if (iconSettings === 'send') {\n icon = <IconSend />;\n } else if (iconSettings === 'web') {\n icon = <IconWeb />;\n } else if (iconSettings === 'warning') {\n icon = <IconWarning />;\n } else if (iconSettings === 'error') {\n icon = <IconError />;\n } else if (iconSettings === 'info') {\n icon = <IconInfo />;\n } else if (iconSettings === 'search') {\n icon = <IconSearch />;\n } else if (iconSettings === 'book') {\n icon = <IconMenuBook />;\n } else if (iconSettings === 'help') {\n icon = <IconHelp />;\n } else if (iconSettings === 'upload') {\n icon = <IconUploadFile />;\n } else if (iconSettings === 'edit') {\n icon = <IconEdit />;\n } else if (iconSettings === 'user') {\n icon = <IconPerson />;\n } else if (iconSettings === 'group') {\n icon = <IconGroup />;\n } else if (iconSettings === 'delete') {\n icon = <IconDelete />;\n } else if (iconSettings === 'refresh') {\n icon = <IconRefresh />;\n } else if (iconSettings === 'add') {\n icon = <IconAdd />;\n } else if (iconSettings === 'unpair') {\n icon = <IconLinkOff />;\n } else if (iconSettings === 'pair') {\n icon = <LinkIcon />;\n } else if (iconSettings === 'save') {\n icon = <Save />;\n } else if (iconSettings === 'open') {\n icon = <OpenInNew />;\n } else if (iconSettings) {\n if (iconSettings.endsWith('.png') || iconSettings.endsWith('.svg') || iconSettings.endsWith('.jpg')) {\n // this path is relative to ./adapter/NAME\n if (!iconSettings.startsWith('http://') && !iconSettings.startsWith('https://')) {\n iconSettings = `./adapter/${this.props.oContext.adapterName}/${iconSettings}`;\n }\n }\n\n icon = (\n <Icon\n src={iconSettings}\n style={{ width: 22, height: 22 }}\n />\n );\n }\n\n return icon;\n }\n\n /**\n * Trigger onChange, to activate save button on change\n *\n * @param attr the changed attribute\n * @param newValue new value of the attribute\n */\n // eslint-disable-next-line react/no-unused-class-component-methods\n onChangeAsync(attr: string, newValue: unknown): Promise<void> {\n return new Promise(resolve => {\n const mayBePromise = this.onChange(attr, newValue, resolve);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }\n\n /**\n * Trigger onChange, to activate save button on change\n *\n * @param attr the changed attribute\n * @param newValue new value of the attribute\n * @param cb optional callback function, else returns a Promise\n */\n onChange(attr: string, newValue: unknown, cb?: () => void): Promise<void> {\n // Do not use here deep copy, as it is not JsonConfig\n const data = JSON.parse(JSON.stringify(this.props.data));\n ConfigGeneric.setValue(data, attr, newValue);\n\n if (\n this.props.schema.confirm &&\n this.execute(this.props.schema.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)\n ) {\n return new Promise<void>(resolve => {\n this.setState(\n {\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmData: null,\n },\n () => {\n if (typeof cb === 'function') {\n cb();\n } else {\n resolve();\n }\n },\n );\n });\n }\n // find any inputs with confirmation\n if (this.props.schema.confirmDependsOn) {\n for (let z = 0; z < this.props.schema.confirmDependsOn.length; z++) {\n const dep = this.props.schema.confirmDependsOn[z];\n if (dep.confirm) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n if (\n this.execute(dep.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)\n ) {\n return new Promise<void>(resolve => {\n this.setState(\n {\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmDepNewValue: val,\n confirmDepAttr: dep.attr,\n confirmData: dep.confirm,\n },\n () => {\n if (typeof cb === 'function') {\n cb();\n } else {\n resolve();\n }\n },\n );\n });\n }\n }\n }\n }\n\n const changed: string[] = [];\n if (this.props.schema.onChangeDependsOn) {\n for (let z = 0; z < this.props.schema.onChangeDependsOn.length; z++) {\n const dep = this.props.schema.onChangeDependsOn[z];\n if (dep.onChange) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n let _newValue;\n if (this.props.custom) {\n _newValue = this.executeCustom(\n dep.onChange.calculateFunc,\n data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n } else {\n _newValue = this.execute(\n dep.onChange.calculateFunc,\n val,\n data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n\n if (_newValue !== val) {\n ConfigGeneric.setValue(data, dep.attr, _newValue);\n changed.push(dep.attr);\n }\n }\n }\n }\n\n if (this.props.schema.hiddenDependsOn) {\n for (let z = 0; z < this.props.schema.hiddenDependsOn.length; z++) {\n const dep = this.props.schema.hiddenDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.labelDependsOn) {\n for (let z = 0; z < this.props.schema.labelDependsOn.length; z++) {\n const dep = this.props.schema.labelDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.helpDependsOn) {\n for (let z = 0; z < this.props.schema.helpDependsOn.length; z++) {\n const dep = this.props.schema.helpDependsOn[z];\n if (dep.hidden) {\n changed.push(dep.attr);\n }\n }\n }\n\n if (this.props.schema.onChange && !this.props.schema.onChange.ignoreOwnChanges) {\n const val = ConfigGeneric.getValue(data, this.props.attr);\n\n const newValue_ = this.props.custom\n ? this.executeCustom(\n this.props.schema.onChange.calculateFunc,\n data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : this.execute(\n this.props.schema.onChange.calculateFunc,\n val,\n data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n if (newValue_ !== val) {\n ConfigGeneric.setValue(data, this.props.attr, newValue_);\n }\n }\n\n if (this.props.custom) {\n this.props.onChange(attr, newValue, () => cb && cb());\n\n if (changed?.length) {\n changed.forEach((_attr, i) =>\n setTimeout(() => this.props.onChange(_attr, ConfigGeneric.getValue(data, _attr)), i * 50),\n );\n }\n } else {\n this.props.onChange(data, undefined, () => {\n if (changed.length) {\n this.props.oContext.forceUpdate(changed, data);\n }\n if (cb) {\n cb();\n }\n });\n }\n\n return Promise.resolve();\n }\n\n execute(\n func: string | boolean | Record<string, string>,\n defaultValue: string | number | boolean,\n data: Record<string, any>,\n arrayIndex: number,\n globalData: Record<string, any>,\n ): string | number | boolean {\n let fun: string;\n\n if (isObject(func)) {\n fun = func.func;\n } else if (typeof func === 'string') {\n fun = func;\n } else {\n return func;\n }\n\n if (!fun) {\n return defaultValue;\n }\n try {\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n '_alive',\n '_common',\n '_socket',\n '_instance',\n 'arrayIndex',\n 'globalData',\n '_changed',\n fun.includes('return') ? fun : `return ${fun}`,\n );\n return f(\n data || this.props.data,\n this.props.originalData,\n this.props.oContext.systemConfig,\n this.props.alive,\n this.props.common,\n this.props.oContext.socket,\n this.props.oContext.instance,\n arrayIndex,\n globalData,\n this.props.changed,\n );\n } catch (e) {\n console.error(`Cannot execute ${JSON.stringify(func)}: ${e}`);\n return defaultValue;\n }\n }\n\n executeCustom(\n func: string | boolean | Record<string, string>,\n data: Record<string, any>,\n customObj: Record<string, any>,\n instanceObj: ioBroker.InstanceObject,\n arrayIndex: number,\n globalData: Record<string, any>,\n ): string | boolean | number | null {\n let fun: string;\n\n if (isObject(func)) {\n fun = func.func;\n } else if (typeof func === 'string') {\n fun = func;\n } else {\n return func;\n }\n\n if (!fun) {\n return null;\n }\n try {\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n 'arrayIndex',\n 'globalData',\n '_changed',\n fun.includes('return') ? fun : `return ${fun}`,\n );\n return f(\n data || this.props.data,\n this.props.originalData,\n this.props.oContext.systemConfig,\n instanceObj,\n customObj,\n this.props.oContext.socket,\n arrayIndex,\n globalData,\n this.props.changed,\n );\n } catch (e) {\n console.error(`Cannot execute ${fun}: ${e}`);\n return null;\n }\n }\n\n calculate(schema: Record<string, any>): {\n error: boolean;\n disabled: boolean;\n hidden: boolean;\n defaultValue: null | string | number | boolean;\n } {\n let error: boolean;\n let disabled: boolean;\n let hidden: boolean;\n let defaultValue: null | string | number | boolean;\n\n if (this.props.custom) {\n error = schema.validator\n ? !this.executeCustom(\n schema.validator,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : false;\n if (schema.disabled === true) {\n disabled = true;\n } else {\n disabled = schema.disabled\n ? (this.executeCustom(\n schema.disabled,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n if (schema.hidden === true) {\n hidden = true;\n } else {\n hidden = schema.hidden\n ? (this.executeCustom(\n schema.hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n defaultValue = schema.defaultFunc\n ? this.executeCustom(\n schema.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : schema.default;\n } else {\n error = schema.validator\n ? !this.execute(schema.validator, false, this.props.data, this.props.arrayIndex, this.props.globalData)\n : false;\n if (schema.disabled === true) {\n disabled = true;\n } else {\n disabled = schema.disabled\n ? (this.execute(\n schema.disabled,\n false,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n if (schema.hidden === true) {\n hidden = true;\n } else {\n hidden = schema.hidden\n ? (this.execute(\n schema.hidden,\n false,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n ) as boolean)\n : false;\n }\n defaultValue = schema.defaultFunc\n ? this.execute(\n schema.defaultFunc,\n schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n )\n : schema.default;\n }\n\n return {\n error,\n disabled,\n hidden,\n defaultValue,\n };\n }\n\n onError(attr: string, error?: string): void {\n if (!error) {\n delete this.isError[attr];\n } else {\n this.isError[attr] = error;\n }\n\n if (this.props.onError) {\n this.props.onError(attr, error);\n }\n }\n\n renderItem(_error: unknown, _disabled: boolean, _defaultValue?: unknown): JSX.Element | string | null {\n return this.getText(this.props.schema.label) || this.getText(this.props.schema.text);\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHelp(\n text: ioBroker.StringOrTranslated,\n link: string,\n noTranslation: boolean,\n ): JSX.Element | JSX.Element[] | string {\n if (!link) {\n text = this.getText(text, noTranslation) || '';\n if (\n text &&\n (text.includes('<a ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))\n ) {\n return Utils.renderTextWithA(text);\n }\n return text;\n }\n return (\n <a\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{\n color: this.props.oContext.themeType === 'dark' ? '#a147ff' : '#5b238f',\n textDecoration: 'underline',\n }}\n >\n {this.getText(text, noTranslation)}\n </a>\n );\n }\n\n // we have a problem that a string '{\"password\": \"${password}\"}' cannot contain a double quota inside the string\n // escape it with \\\"\n static escapeString(str: string, data: Record<string, any>): string {\n if (typeof str !== 'string') {\n return '';\n }\n str = str.replace(/`/g, '\\\\`');\n // extract all tokes with ${data.token}\n str = str.replace(/\\${([^}]+)}/g, (_match: string, p1: any) => {\n if (p1 && typeof p1 === 'string' && p1.startsWith('data.')) {\n const value = ConfigGeneric.getValue(data, p1.replace(/^data\\./, ''));\n\n if (typeof value === 'string' && value.includes('\"')) {\n return `\\${${p1}.replace(/\"/g, '\\\\\\\\\"')}`;\n }\n }\n return _match;\n });\n\n return str;\n }\n\n getPattern(pattern: string | { func: string }, data?: Record<string, any>, noTranslation?: boolean): string {\n data = data || this.props.data;\n if (!pattern) {\n return '';\n }\n let patternStr: string;\n if (typeof pattern === 'object') {\n if (pattern.func) {\n patternStr = (pattern as { func: string }).func;\n } else {\n console.log(`Object must be stringified: ${JSON.stringify(pattern)}`);\n patternStr = JSON.stringify(pattern);\n }\n } else {\n patternStr = pattern;\n }\n\n try {\n if (this.props.custom) {\n const f = new Function(\n 'data',\n 'originalData',\n 'arrayIndex',\n 'globalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n '_changed',\n `return \\`${ConfigGeneric.escapeString(patternStr, data)}\\``,\n );\n return f(\n data,\n this.props.originalData,\n this.props.arrayIndex,\n this.props.globalData,\n this.props.oContext.systemConfig,\n this.props.oContext.instanceObj,\n this.props.customObj,\n this.props.oContext.socket,\n this.props.changed,\n );\n }\n\n const f = new Function(\n 'data',\n 'originalData',\n 'arrayIndex',\n 'globalData',\n '_system',\n '_alive',\n '_common',\n '_socket',\n '_changed',\n `return \\`${ConfigGeneric.escapeString(patternStr, data)}\\``,\n );\n const text = f(\n data,\n this.props.originalData,\n this.props.arrayIndex,\n this.props.globalData,\n this.props.oContext.systemConfig,\n this.props.alive,\n this.props.common,\n this.props.oContext.socket,\n this.props.changed,\n );\n if (noTranslation) {\n return text;\n }\n return I18n.t(text);\n } catch (e) {\n console.error(`Cannot execute ${patternStr}: ${e}`);\n return patternStr;\n }\n }\n\n render(): string | JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n // Do not show this component if expert mode is false\n if (this.props.oContext.expertMode === false && schema.expertMode) {\n return null;\n }\n\n if (this.props.alive && this.defaultSendToDone === false) {\n this.sendToTimeout = setTimeout(() => {\n this.sendToTimeout = null;\n this.sendTo();\n }, 200);\n }\n\n const { error, disabled, hidden, defaultValue } = this.calculate(schema);\n\n if (hidden) {\n // Remove all errors if an element is hidden\n if (Object.keys(this.isError).length) {\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n this.isError = {};\n }\n\n if (schema.hideOnlyControl) {\n const item = (\n <Grid2\n size={{\n xs: schema.xs || DEFAULT_SM_SIZE, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0 /* marginRight: 8, */,\n textAlign: 'left',\n ...schema.style,\n ...(this.props.oContext.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n />\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return null;\n }\n // Add error\n if (schema.validatorNoSaveOnError) {\n if (error && !Object.keys(this.isError).length) {\n this.isError = {\n [this.props.attr]: schema.validatorErrorText ? I18n.t(schema.validatorErrorText) : true,\n };\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr, isError[attr])),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n } else if (!error && Object.keys(this.isError).length) {\n setTimeout(\n isError => Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100,\n JSON.parse(JSON.stringify(this.isError)),\n );\n this.isError = {};\n }\n }\n\n const renderedItem = this.renderItem(\n error,\n disabled || this.props.commandRunning || this.props.disabled,\n defaultValue,\n );\n\n if (this.noPlaceRequired) {\n return renderedItem;\n }\n\n const item = (\n <Grid2\n title={this.getText(schema.tooltip)}\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0,\n textAlign: 'left',\n width: schema.type === 'divider' || schema.type === 'header' ? schema.width || '100%' : undefined,\n ...schema.style,\n ...(this.props.oContext.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n >\n {this.props.schema.defaultSendTo && this.props.schema.button ? (\n <Grid2\n container\n style={{ width: '100%' }}\n >\n <Grid2 flex={1}>{renderedItem}</Grid2>\n <Grid2>\n <Button\n disabled={disabled}\n variant=\"outlined\"\n onClick={() => this.sendTo()}\n title={\n this.props.schema.buttonTooltip\n ? this.getText(\n this.props.schema.buttonTooltip,\n this.props.schema.buttonTooltipNoTranslation,\n )\n : I18n.t('ra_Request data by instance')\n }\n >\n {this.getText(this.props.schema.button as ioBroker.StringOrTranslated)}\n </Button>\n </Grid2>\n </Grid2>\n ) : (\n renderedItem\n )}\n </Grid2>\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {this.renderDialogConfirm()}\n {item}\n </>\n );\n }\n if (this.state.confirmDialog) {\n return (\n <>\n {this.renderDialogConfirm()}\n {item}\n </>\n );\n }\n return item;\n }\n}\n","import React, { type JSX } from 'react';\n\nimport {\n FormHelperText,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n IconButton,\n Paper,\n Toolbar,\n Tooltip,\n Typography,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n ArrowUpward as UpIcon,\n ArrowDownward as DownIcon,\n ContentCopy as CopyContentIcon,\n ExpandMore as ExpandMoreIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAccordion, ConfigItemAny, ConfigItemIndexed, ConfigItemPanel } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n accordionSummary: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n }),\n accordionTitle: {\n // fontWeight: 'bold',\n },\n toolbar: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n borderRadius: '3px',\n }),\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface ConfigAccordionProps extends ConfigGenericProps {\n schema: ConfigItemAccordion;\n}\n\ninterface ConfigAccordionState extends ConfigGenericState {\n value: Record<string, any>[];\n activeIndex: number;\n iteration: number;\n}\n\nclass ConfigAccordion extends ConfigGeneric<ConfigAccordionProps, ConfigAccordionState> {\n private typingTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: ConfigAccordionProps) {\n super(props);\n this.props.schema.items = this.props.schema.items || [];\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr) || [];\n\n if (!Array.isArray(value)) {\n value = [];\n }\n\n this.setState({\n value,\n activeIndex: -1,\n iteration: 0,\n });\n }\n\n componentWillUnmount(): void {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n this.typingTimer = null;\n }\n super.componentWillUnmount();\n }\n\n itemAccordion(data: Record<string, any>, idx: number): JSX.Element {\n const { value } = this.state;\n const { schema } = this.props;\n\n const schemaItem: ConfigItemPanel = {\n type: 'panel',\n items: schema.items.reduce(\n (accumulator: Record<string, ConfigItemIndexed>, currentValue: ConfigItemIndexed) => {\n accumulator[currentValue.attr] = currentValue;\n return accumulator;\n },\n {},\n ) as Record<string, ConfigItemAny>,\n style: { marginLeft: '-8px', marginTop: '10px', marginBottom: '10px' },\n };\n\n return (\n <ConfigPanel\n oContext={this.props.oContext}\n index={idx + this.state.iteration}\n arrayIndex={idx}\n changed={this.props.changed}\n globalData={this.props.data}\n common={this.props.common}\n alive={this.props.alive}\n themeName={this.props.themeName}\n data={data}\n custom\n schema={schemaItem}\n originalData={this.props.originalData}\n onChange={(attr: string, valueChange: any): void => {\n const newObj: Record<string, any> = JSON.parse(JSON.stringify(value));\n newObj[idx][attr] = valueChange;\n this.setState({ value: newObj } as ConfigAccordionState, () => this.onChangeWrapper(newObj));\n }}\n onError={(error, attr) => this.onError(error, attr)}\n table={this.props.table}\n />\n );\n }\n\n onDelete = (index: number) => (): void => {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n newValue.splice(index, 1);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n };\n\n onClone = (index: number) => (): void => {\n const newValue = JSON.parse(JSON.stringify(this.state.value)) as Record<string, any>[];\n const cloned = JSON.parse(JSON.stringify(newValue[index]));\n if (typeof this.props.schema.clone === 'string' && typeof cloned[this.props.schema.clone] === 'string') {\n let i = 1;\n let text = cloned[this.props.schema.clone];\n const pattern = text.match(/(\\d+)$/);\n if (pattern) {\n text = text.replace(pattern[0], '');\n i = parseInt(pattern[0], 10) + 1;\n } else {\n text += '_';\n }\n while (newValue.find(it => it[this.props.schema.clone as string] === text + i.toString())) {\n i++;\n }\n cloned[this.props.schema.clone] = `${cloned[this.props.schema.clone]}_${i}`;\n }\n\n newValue.splice(index, 0, cloned);\n\n this.setState(\n {\n value: newValue,\n activeIndex: -1,\n iteration: this.state.iteration + 10000,\n },\n () => this.onChangeWrapper(newValue),\n );\n };\n\n onChangeWrapper = (newValue: any): void => {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n }\n\n this.typingTimer = setTimeout(\n value => {\n this.typingTimer = null;\n\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => this.onError(e));\n }\n },\n 300,\n newValue,\n );\n };\n\n onAdd = (): void => {\n const { schema } = this.props;\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const newItem: Record<string, any> =\n schema.items &&\n schema.items.reduce((accumulator: Record<string, any>, currentValue: ConfigItemIndexed) => {\n let defaultValue;\n if (currentValue.defaultFunc) {\n if (this.props.custom) {\n defaultValue = currentValue.defaultFunc\n ? this.executeCustom(\n currentValue.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n } else {\n defaultValue = currentValue.defaultFunc\n ? this.execute(\n currentValue.defaultFunc,\n this.props.schema.default,\n this.props.data,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n }\n } else {\n defaultValue = currentValue.default === undefined ? null : currentValue.default;\n }\n\n accumulator[currentValue.attr] = defaultValue;\n return accumulator;\n }, {});\n\n newValue.push(newItem);\n\n this.setState({ value: newValue, activeIndex: newValue.length - 1 }, () => this.onChangeWrapper(newValue));\n };\n\n onMoveUp(idx: number): void {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx - 1, 0, item);\n\n const newIndex = this.state.activeIndex - 1;\n this.setState({ value: newValue, activeIndex: newIndex, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n }\n\n onMoveDown(idx: number): void {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx + 1, 0, item);\n\n const newIndex = this.state.activeIndex + 1;\n this.setState({ value: newValue, activeIndex: newIndex, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue),\n );\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element | null {\n const { schema } = this.props;\n const { value } = this.state;\n\n if (!value) {\n return null;\n }\n\n return (\n <Paper>\n {schema.label || !schema.noDelete ? (\n <Toolbar variant=\"dense\">\n {schema.label ? (\n <Typography\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {this.getText(schema.label)}\n </Typography>\n ) : null}\n {!schema.noDelete ? (\n <IconButton\n size=\"small\"\n color=\"primary\"\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n ) : null}\n </Toolbar>\n ) : null}\n {value.map((idx, i) => (\n <Accordion\n key={`${idx as unknown as string}_${i}`}\n expanded={this.state.activeIndex === i}\n onChange={(_e, expanded) => this.setState({ activeIndex: expanded ? i : -1 })}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={Utils.getStyle(this.props.oContext.theme, styles.fullWidth, styles.accordionSummary)}\n >\n <Typography style={styles.accordionTitle}>{idx[schema.titleAttr]}</Typography>\n </AccordionSummary>\n <AccordionDetails\n style={{\n ...schema.style,\n ...(this.props.oContext.themeType ? schema.darkStyle : undefined),\n }}\n >\n {this.itemAccordion(value[i], i)}\n <Toolbar sx={styles.toolbar}>\n {i ? (\n <Tooltip\n title={I18n.t('ra_Move up')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveUp(i)}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )}\n {i < value.length - 1 ? (\n <Tooltip\n title={I18n.t('ra_Move down')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveDown(i)}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )}\n {!schema.noDelete ? (\n <Tooltip\n title={I18n.t('ra_Delete current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onDelete(i)}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n {schema.clone ? (\n <Tooltip\n title={I18n.t('ra_Clone current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onClone(i)}\n >\n <CopyContentIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </Toolbar>\n </AccordionDetails>\n </Accordion>\n ))}\n {!schema.noDelete && value.length > 0 ? (\n <Toolbar\n variant=\"dense\"\n sx={styles.rootTool}\n >\n <IconButton\n size=\"small\"\n color=\"primary\"\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n </Toolbar>\n ) : null}\n {schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </Paper>\n );\n }\n}\n\nexport default ConfigAccordion;\n","import React, { type JSX } from 'react';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemAlive } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n },\n notAlive: {\n color: '#a30000',\n },\n};\n\ninterface ConfigAliveProps extends ConfigGenericProps {\n schema: ConfigItemAlive;\n}\n\ninterface ConfigAliveState extends ConfigGenericState {\n alive?: boolean | null;\n instance?: string;\n}\n\nclass ConfigAlive extends ConfigGeneric<ConfigAliveProps, ConfigAliveState> {\n componentDidMount(): void {\n super.componentDidMount();\n\n const instance = this.getInstance();\n\n void this.props.oContext.socket\n .getState(`${instance}.alive`)\n .then(state => this.setState({ alive: !!(state && state.val), instance }));\n }\n\n getInstance(): string {\n let instance =\n this.props.schema.instance || `${this.props.oContext.adapterName}.${this.props.oContext.instance}`;\n if (instance.includes('${')) {\n instance = this.getPattern(instance, null, true);\n }\n if (instance && !instance.startsWith('system.adapter.')) {\n instance = `system.adapter.${instance}`;\n }\n return instance;\n }\n\n renderItem(): JSX.Element | null {\n if (this.getInstance() !== this.state.instance) {\n setTimeout(() => {\n const instance = this.getInstance();\n if (instance) {\n void this.props.oContext.socket\n .getState(`${instance}.alive`)\n .then(state => this.setState({ alive: !!(state && state.val), instance }));\n } else {\n this.setState({ alive: null, instance });\n }\n }, 200);\n }\n\n if (this.state.alive !== false && this.state.alive !== true) {\n return null;\n }\n\n const instance = this.state.instance.replace(/^system.adapter./, '');\n return (\n <div style={{ ...styles.root, ...(!this.state.alive ? styles.notAlive : undefined) }}>\n {this.state.alive\n ? this.props.schema.textAlive !== undefined\n ? this.props.schema.textAlive\n ? I18n.t(this.props.schema.textAlive, instance)\n : ''\n : I18n.t('ra_Instance %s is alive', instance)\n : this.props.schema.textNotAlive !== undefined\n ? this.props.schema.textNotAlive\n ? I18n.t(this.props.schema.textNotAlive, instance)\n : ''\n : I18n.t('ra_Instance %s is not alive', instance)}\n </div>\n );\n }\n}\n\nexport default ConfigAlive;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAutocomplete, ConfigItemSelectOption } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericState, type ConfigGenericProps } from './ConfigGeneric';\n\nexport interface ConfigAutocompleteProps extends ConfigGenericProps {\n schema: ConfigItemAutocomplete;\n}\n\nexport interface ConfigAutocompleteState extends ConfigGenericState {\n selectOptions: { value: string; label: string }[];\n}\n\nclass ConfigAutocomplete extends ConfigGeneric<ConfigAutocompleteProps, ConfigAutocompleteState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions: { label: string; value: string }[] = this.props.schema.options.map(\n (item: { label: string; value: string } | string) =>\n typeof item === 'string' ? { label: item, value: item } : JSON.parse(JSON.stringify(item)),\n );\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n let item;\n const options: ConfigItemSelectOption[] = JSON.parse(JSON.stringify(this.state.selectOptions));\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find(it => (typeof it === 'object' ? it.value === val : it === val)))\n .forEach(it => options.push({ label: it.toString(), value: it }));\n\n item = { label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE };\n options.unshift(item);\n } else {\n item =\n this.state.value !== null &&\n this.state.value !== undefined &&\n options.find(_item =>\n typeof _item === 'object' ? _item.value == this.state.value : _item == this.state.value,\n ); // let \"==\" be and not ===\n\n if (this.state.value !== null && this.state.value !== undefined && !item && this.props.schema.freeSolo) {\n item = { value: this.state.value, label: this.state.value };\n options.push(item);\n }\n }\n\n return (\n <Autocomplete\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n value={item}\n options={options}\n isOptionEqualToValue={(option, value) => option.value === value.value}\n filterOptions={(options: { value: string; label: string }[], params) => {\n const filtered = options.filter(option => {\n if (params.inputValue === '') {\n return true;\n }\n return (\n option.label.toLowerCase().includes(params.inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(params.inputValue.toLowerCase())\n );\n });\n\n if (this.props.schema.freeSolo && params.inputValue !== '') {\n filtered.push({\n label: params.inputValue,\n value: params.inputValue,\n });\n }\n\n return filtered;\n }}\n // autoComplete\n onInputChange={e => {\n if (!e || !this.props.schema.freeSolo) {\n return;\n }\n\n const val = (e.target as HTMLInputElement).value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n getOptionLabel={option => (typeof option === 'object' ? (option?.label ?? '') : '')}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={disabled}\n />\n )}\n />\n );\n }\n}\n\nexport default ConfigAutocomplete;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAutocompleteSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\nimport type { ConfigAutocompleteState } from './ConfigAutocomplete';\n\ninterface ConfigAutocompleteSendToProps extends ConfigGenericProps {\n schema: ConfigItemAutocompleteSendTo;\n}\n\nclass ConfigAutocompleteSendTo extends ConfigGeneric<ConfigAutocompleteSendToProps, ConfigAutocompleteState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n askInstance(): void {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const selectOptions = this.props.schema.options\n ? this.props.schema.options.map((item: any) =>\n typeof item === 'string' ? { label: item, value: item } : JSON.parse(JSON.stringify(item)),\n )\n : [];\n\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData, null, true);\n try {\n if (typeof dataStr === 'string') {\n data = JSON.parse(dataStr);\n }\n } catch {\n console.error(`Cannot parse json data: ${JSON.stringify(data)}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then((list: unknown) => {\n if (list && Array.isArray(list)) {\n list.forEach(item =>\n selectOptions.push(\n typeof item === 'string'\n ? { label: item, value: item }\n : JSON.parse(JSON.stringify(item)),\n ),\n );\n }\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n });\n } else if (Array.isArray(value)) {\n // if __different\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n getContext(): string {\n const localContext: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(localContext);\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (this.props.alive) {\n const localContext = this.getContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n let item;\n const options: { value: string; label: string }[] = this.state.selectOptions\n ? JSON.parse(JSON.stringify(this.state.selectOptions))\n : [];\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_LABEL;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find((it: any) => it.value === val))\n .forEach(it => options.push({ label: it.toString(), value: it }));\n\n item = { label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE };\n options.unshift(item);\n } else {\n item =\n this.state.value !== null &&\n this.state.value !== undefined &&\n options.find((item: any) => item.value == this.state.value); // let \"==\" be and not ===\n\n if (this.state.value !== null && this.state.value !== undefined && !item && this.props.schema.freeSolo) {\n item = { value: this.state.value, label: this.state.value };\n options.push(item);\n }\n item = item || null;\n }\n\n if (!options.length) {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <Autocomplete\n value={item}\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n options={options}\n isOptionEqualToValue={(option, value) => option.value === value.value}\n filterOptions={(options: { value: string; label: string }[], params) => {\n const filtered = options.filter(option => {\n if (params.inputValue === '') {\n return true;\n }\n return (\n option.label.toLowerCase().includes(params.inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(params.inputValue.toLowerCase())\n );\n });\n\n if (this.props.schema.freeSolo && params.inputValue !== '') {\n filtered.push({\n label: params.inputValue,\n value: params.inputValue,\n });\n }\n\n return filtered;\n }}\n getOptionLabel={(option: { value: string; label: string }): string => option?.label ?? ''}\n onInputChange={e => {\n if (!e || !this.props.schema.freeSolo) {\n return;\n }\n\n const val = (e.target as HTMLInputElement).value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({ value: val }, () => this.onChange(this.props.attr, val));\n }\n }}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={disabled}\n />\n )}\n />\n );\n }\n}\n\nexport default ConfigAutocompleteSendTo;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormControl, Button, TextField } from '@mui/material';\n\nimport { DialogCron, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCRON } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n },\n};\n\ninterface ConfigCRONProps extends ConfigGenericProps {\n schema: ConfigItemCRON;\n}\n\ninterface ConfigCRONState extends ConfigGenericState {\n showDialog?: boolean;\n}\n\nclass ConfigCRON extends ConfigGeneric<ConfigCRONProps, ConfigCRONState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, showDialog: false });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const { schema, attr } = this.props;\n const { value, showDialog } = this.state;\n\n return (\n <FormControl\n style={styles.fullWidth}\n variant=\"standard\"\n >\n {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value ?? ''}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(attr, value_));\n }}\n />\n <Button\n color=\"grey\"\n disabled={disabled}\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showDialog: true })}\n >\n ...\n </Button>\n </div>\n {showDialog ? (\n <DialogCron\n title={I18n.t('ra_Define schedule')}\n simple={schema.simple}\n complex={schema.complex}\n cron={value}\n onClose={() => this.setState({ showDialog: false })}\n cancel={I18n.t('ra_Cancel')}\n ok={I18n.t('ra_Ok')}\n theme={this.props.oContext.theme}\n onOk={value_ =>\n this.setState({ showDialog: false, value: value_ }, () => this.onChange(attr, value_))\n }\n />\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCRON;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select, FormHelperText } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertificateSelect } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCertificateSelectProps extends ConfigGenericProps {\n schema: ConfigItemCertificateSelect;\n}\n\ninterface ConfigCertificateSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: string }[];\n}\n\nclass ConfigCertificateSelect extends ConfigGeneric<ConfigCertificateSelectProps, ConfigCertificateSelectState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n // Important: getCertificates is only available in AdminConnection\n const certificates = await this.props.oContext.socket.getCertificates();\n\n const selectOptions: { label: string; value: string }[] = certificates\n .filter(el => {\n const name = this.props.attr.toLowerCase();\n\n if (name.includes(el.type)) {\n return true;\n }\n if (el.type === 'public' && name.includes('cert')) {\n return true;\n }\n if (el.type === 'private' && (name.includes('priv') || name.includes('key'))) {\n return true;\n }\n return !!(el.type === 'chained' && (name.includes('chain') || name.includes('ca')));\n })\n .map(el => ({ label: el.name, value: el.name }));\n\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n\n this.setState({ value, selectOptions });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(_item => _item.value === this.state.value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation !== false)}\n onChange={e =>\n this.setState({ value: e.target.value }, () => this.onChange(this.props.attr, this.state.value))\n }\n >\n {this.state.selectOptions?.map(item_ => (\n <MenuItem\n key={item_.value}\n value={item_.value}\n style={item_.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item_.label, this.props.schema.noTranslation !== false)}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCertificateSelect;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertificates } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n leWidth: {\n width: 620,\n marginBottom: 10,\n },\n certWidth: {\n width: 200,\n marginRight: 10,\n },\n};\n\ninterface ConfigCertificatesProps extends ConfigGenericProps {\n schema: ConfigItemCertificates;\n}\n\ninterface ConfigCertificatesState extends ConfigGenericState {\n certsPublicOptions?: { label: string; value: string }[];\n certsChainOptions?: { label: string; value: string }[];\n certsPrivateOptions?: { label: string; value: string }[];\n collectionsOptions?: string[];\n}\n\nclass ConfigCertificates extends ConfigGeneric<ConfigCertificatesProps, ConfigCertificatesState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n // Important: getCertificates is only available in AdminConnection\n const certificates = await this.props.oContext.socket.getCertificates();\n const certsPublicOptions: { label: string; value: string }[] = [];\n const certsPrivateOptions: { label: string; value: string }[] = [];\n const certsChainOptions: { label: string; value: string }[] = [];\n\n let collectionsOptions: string[] | null = [];\n const collectionsOptionsObj = await this.props.oContext.socket.getObject('system.certificates');\n if (collectionsOptionsObj?.native?.collections) {\n collectionsOptions = Object.keys(collectionsOptionsObj.native.collections);\n } else {\n collectionsOptions = null;\n }\n\n certificates.forEach(el => {\n if (el.type === 'public') {\n certsPublicOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'private') {\n certsPrivateOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'chained') {\n certsChainOptions.push({ label: el.name, value: el.name });\n } else {\n certsPublicOptions.push({ label: el.name, value: el.name });\n certsPrivateOptions.push({ label: el.name, value: el.name });\n certsChainOptions.push({ label: el.name, value: el.name });\n }\n });\n\n certsPublicOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsPrivateOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsChainOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n\n this.setState({\n certsPublicOptions,\n certsChainOptions,\n certsPrivateOptions,\n collectionsOptions,\n });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.certsPublicOptions || !this.state.certsPrivateOptions || !this.state.certsChainOptions) {\n return null;\n }\n const leCollection = (\n ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false'\n ).toString();\n const certPublic = ConfigGeneric.getValue(this.props.data, this.props.schema.certPublicName || 'certPublic');\n const certPrivate = ConfigGeneric.getValue(this.props.data, this.props.schema.certPrivateName || 'certPrivate');\n const certChained = ConfigGeneric.getValue(this.props.data, this.props.schema.certChainedName || 'certChained');\n\n const itemCertPublic = this.state.certsPublicOptions?.find(item => item.value === certPublic);\n const itemCertPrivate = this.state.certsPrivateOptions?.find(item => item.value === certPrivate);\n const itemCertChained = this.state.certsChainOptions?.find(item => item.value === certChained);\n\n return (\n <div style={styles.fullWidth}>\n {this.state.collectionsOptions ? (\n <FormControl\n style={styles.leWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>Let's encrypt</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={leCollection}\n onChange={e =>\n this.onChange(\n this.props.schema.leCollectionName || 'leCollection',\n e.target.value === 'false'\n ? false\n : e.target.value === 'true'\n ? true\n : e.target.value,\n )\n }\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Do not use let's encrypt\")}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Use all available let's encrypt certificates\")}\n </MenuItem>\n {this.state.collectionsOptions?.map(item => (\n <MenuItem\n key={item}\n value={item}\n >\n {item}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n ) : null}\n {this.state.collectionsOptions ? <br /> : null}\n {this.state.collectionsOptions && leCollection !== 'false' ? (\n <div>{I18n.t('ra_Fallback custom certificates')}</div>\n ) : null}\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Public certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPublic || ''}\n renderValue={() => this.getText(itemCertPublic?.label)}\n onChange={e => this.onChange(this.props.schema.certPublicName || 'certPublic', e.target.value)}\n >\n {this.state.certsPublicOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Private certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPrivate || ''}\n renderValue={() => this.getText(itemCertPrivate?.label)}\n onChange={e =>\n this.onChange(this.props.schema.certPrivateName || 'certPrivate', e.target.value)\n }\n >\n {this.state.certsPrivateOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={styles.certWidth}\n variant=\"standard\"\n >\n <InputLabel shrink>{I18n.t('ra_Chained certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certChained || ''}\n renderValue={() => this.getText(itemCertChained?.label)}\n onChange={e =>\n this.onChange(this.props.schema.certChainedName || 'certChained', e.target.value)\n }\n >\n {this.state.certsChainOptions?.map((item, i) => (\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n );\n }\n}\n\nexport default ConfigCertificates;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormControl, Select, FormHelperText } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCertCollection } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCertCollectionProps extends ConfigGenericProps {\n schema: ConfigItemCertCollection;\n}\n\ninterface ConfigCertCollectionState extends ConfigGenericState {\n collectionsOptions?: string[];\n}\n\ninterface CertCollection {\n /** Source of the certificate */\n from: string;\n key: string;\n cert: string;\n chain: string[];\n domains: string[];\n staging?: boolean;\n tsExpires?: number;\n}\n\nclass ConfigCertCollection extends ConfigGeneric<ConfigCertCollectionProps, ConfigCertCollectionState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n let collectionsOptions: string[];\n const collectionsOptionsObj = await this.props.oContext.socket.getObject('system.certificates');\n if (collectionsOptionsObj?.native?.collections) {\n collectionsOptions = Object.keys(\n collectionsOptionsObj.native.collections as Record<string, CertCollection>,\n );\n } else {\n collectionsOptions = [];\n }\n this.setState({ collectionsOptions });\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.collectionsOptions) {\n return null;\n }\n const leCollection = (\n ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false'\n ).toString();\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={leCollection}\n onChange={e =>\n this.onChange(\n this.props.schema.leCollectionName || 'leCollection',\n e.target.value === 'false' ? false : e.target.value === 'true' ? true : e.target.value,\n )\n }\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Do not use let's encrypt\")}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t(\"ra_Use all available let's encrypt certificates\")}\n </MenuItem>\n {this.state.collectionsOptions?.map(item => (\n <MenuItem\n key={item}\n value={item}\n >\n {item}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCertCollection;\n","import React, { type JSX } from 'react';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n Table,\n TableHead,\n TableCell,\n TableRow,\n TableBody,\n DialogContentText,\n TableContainer,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck, Send as IconSend } from '@mui/icons-material';\n\nimport { DialogConfirm, I18n, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckLicense } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n marginRight: 10,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal',\n },\n errorTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n }),\n okTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n }),\n errorText: (theme: IobTheme): any => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n mb: '30px',\n }),\n};\n\nexport interface 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 json: string;\n}\n\ninterface LicenseResult {\n id: string;\n validName: boolean;\n validUuid: boolean;\n validVersion: boolean;\n validTill: boolean;\n license: License;\n used?: boolean;\n}\n\ninterface ConfigCheckLicenseProps extends ConfigGenericProps {\n schema: ConfigItemCheckLicense;\n fullWidth?: boolean;\n}\n\ninterface ConfigCheckLicenseState extends ConfigGenericState {\n showLicenseData: null | Record<string, any>;\n _error: string;\n result: null | boolean;\n running: boolean;\n foundSuitableLicense: boolean;\n licenseOfflineCheck: boolean;\n showLinkToProfile: boolean;\n allLicenses: null | LicenseResult[];\n askForUpdate: boolean;\n}\n\nclass ConfigCheckLicense extends ConfigGeneric<ConfigCheckLicenseProps, ConfigCheckLicenseState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.setState({\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n allLicenses: null,\n askForUpdate: false,\n showLinkToProfile: false,\n });\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error && !this.state.showLicenseData) {\n let content: string | JSX.Element[] = this.state._error;\n if (this.state.allLicenses) {\n content = [<div key=\"error\">{content}</div>];\n content.push(\n <Button\n key=\"button\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n {I18n.t('iobroker.net')}\n </Button>,\n );\n if (!this.state.allLicenses.length) {\n content.push(<div key=\"text1\">{I18n.t('ra_No one license found in license manager')}</div>);\n content.push(<div key=\"text2\">{I18n.t('ra_Please create license')}</div>);\n } else {\n // license.id,\n // validName,\n // validUuid,\n // validTill,\n // validVersion,\n // license,\n content.push(\n <TableContainer key=\"table\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{I18n.t('ra_Product')}</TableCell>\n <TableCell>{I18n.t('ra_Version')}</TableCell>\n <TableCell>UUID</TableCell>\n <TableCell>{I18n.t('ra_ValidTill')}</TableCell>\n <TableCell>{I18n.t('ra_Commercial')}</TableCell>\n <TableCell>ID</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.allLicenses.map(license => (\n <TableRow key={license.id}>\n <TableCell sx={license.validName ? null : styles.errorText}>\n {license.license.product}\n </TableCell>\n <TableCell sx={license.validVersion ? null : styles.errorText}>\n {license.license.version}\n </TableCell>\n <TableCell sx={license.validUuid ? null : styles.errorText}>\n {license.license.uuid || '--'}\n </TableCell>\n <TableCell sx={license.validTill ? null : styles.errorText}>\n {license.license.validTill &&\n license.license.validTill !== '0000-00-00 00:00:00'\n ? new Date(license.license.validTill).toLocaleDateString()\n : '--'}\n </TableCell>\n <TableCell>\n {license.license.invoice !== 'free'\n ? license.license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.license.invoice\n : '-'}\n </TableCell>\n <TableCell>{license.id}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>,\n );\n }\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"xl\"\n fullWidth={this.props.fullWidth !== undefined ? this.props.fullWidth : true}\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n >\n <DialogTitle>{I18n.t('ra_Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{content}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n color=\"primary\"\n autoFocus\n startIcon={<IconCheck />}\n >\n {I18n.t('ra_Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state.showLicenseData) {\n const pre = [];\n const data = this.state.showLicenseData;\n Object.keys(data).forEach(key => {\n if (data[key] === null || data[key] === undefined) {\n return;\n }\n if (typeof data[key] === 'object') {\n const obj = data[key];\n Object.keys(obj).forEach(key1 => {\n if (obj[key1] !== null && obj[key1] !== undefined) {\n if (typeof obj[key1] === 'object') {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>{key1}:</div>\n {JSON.stringify(obj[key1], null, 2)}\n </div>,\n );\n } else {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>\n {key} -{key1}:\n </div>\n {obj[key1].toString()}\n </div>,\n );\n }\n }\n });\n } else {\n pre.push(\n <div key={key}>\n <div style={styles.licLabel}>{key.replace(/_/g, ' ')}:</div>\n {data[key].toString()}\n </div>,\n );\n }\n });\n pre.push(\n <div key=\"checked\">\n <div style={styles.licLabel}>{I18n.t('ra_Checked')}:</div>\n {this.state.licenseOfflineCheck ? I18n.t('ra_locally') : I18n.t('ra_via internet')}\n </div>,\n );\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <Box\n component=\"span\"\n sx={this.state.result ? styles.okTitle : styles.errorTitle}\n >\n {I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID')}\n </Box>\n </DialogTitle>\n <DialogContent>\n {this.state.showLinkToProfile ? (\n <Button\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n https://iobroker.net\n </Button>\n ) : null}\n {this.state._error ? (\n <Box\n component=\"div\"\n sx={styles.errorText}\n >\n {this.state._error}\n </Box>\n ) : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null, _error: '' })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n static parseJwt(token: string): {\n exp: number;\n iat: number;\n name: string;\n email: string;\n uuid: string;\n version: string;\n invoice: string;\n /** @deprecated use validTill */\n valid_till: string;\n validTill: string;\n [key: string]: string | number;\n } | null {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join(''),\n );\n try {\n return JSON.parse(jsonPayload);\n } catch {\n return null;\n }\n }\n\n static isVersionValid(version: string, rule: string, invoice: string, adapterName: string): boolean {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName: string): Promise<LicenseResult[]> {\n // read if the license manager is supported\n const licenses = await this.props.oContext.socket.getObject('system.licenses');\n const errors: LicenseResult[] = [];\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense: License | null = null;\n const now = Date.now();\n\n let uuid: string;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.oContext.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version: string;\n if (this.props.schema.version) {\n const aObj = await this.props.oContext.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach((license: License) => {\n const validTill =\n !license.validTill ||\n license.validTill === '0000-00-00 00:00:00' ||\n new Date(license.validTill).getTime() > now;\n const parts = (license.product || '').split('.');\n const validName = parts[1] === adapterName || (adapterName === 'vis-2' && parts[1] === 'vis');\n const validUuid = !uuid || !license.uuid || license.uuid === uuid;\n const validVersion = ConfigCheckLicense.isVersionValid(\n version,\n license.version,\n license.invoice,\n adapterName,\n );\n // commercial license has priority over free license\n if (\n (!useLicense || license.invoice !== 'free') &&\n validTill &&\n validName &&\n validUuid &&\n validVersion\n ) {\n useLicense = license;\n }\n errors.push({\n id: license.id,\n validName,\n validUuid,\n validVersion,\n validTill,\n license,\n });\n });\n\n if (useLicense) {\n errors.find(e => e.id === useLicense.id).used = true;\n }\n }\n\n return errors;\n }\n\n async checkLicense(license: string, adapterName: string): Promise<void> {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.oContext.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.oContext.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n const controller = new AbortController();\n let timeout = setTimeout(() => {\n timeout = null;\n controller.abort();\n }, 5000);\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({ json: license, uuid }),\n headers: {\n 'Content-Type': 'text/plain',\n },\n signal: controller.signal,\n });\n if (timeout) {\n clearTimeout(timeout);\n }\n const dataStr = await response.text();\n let data: {\n error?: string;\n validTill?: string;\n /** @deprecated use validTill */\n valid_till?: string;\n name?: string;\n version?: string;\n uuid?: string;\n invoice?: string;\n };\n try {\n data = JSON.parse(dataStr);\n } catch {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data_ = ConfigCheckLicense.parseJwt(license);\n const _error = I18n.t(`ra_${data_.error || data.error || 'Unknown error'}`).replace(/^ra_/, '');\n\n return this.setState({\n _error,\n licenseOfflineCheck: false,\n showLicenseData: data_,\n result: false,\n running: false,\n });\n } catch {\n console.log('Cannot parse license');\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch {\n // ignore\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (\n validTill &&\n validTill !== '0000-00-00 00:00:00' &&\n new Date(validTill).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName || (parts[1] === 'vis' && adapterName === 'vis-2')) {\n // check UUID\n if (uuid && !data.uuid && adapterName === 'vis-2') {\n return this.setState({\n _error: I18n.t('ra_License must be converted', data.uuid),\n showLinkToProfile: true,\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t(\n 'ra_Serial number (UUID) \"%s\" in license is for other device.',\n data.uuid,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: false,\n showLicenseData,\n result: true,\n running: false,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n throw new Error('ra_Invalid answer from server');\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (\n data.valid_till &&\n data.valid_till !== '0000-00-00 00:00:00' &&\n new Date(data.valid_till).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n running: false,\n result: true,\n licenseOfflineCheck: true,\n showLicenseData: data,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch {\n return this.setState({\n _error: I18n.t('ra_Cannot decode license'),\n result: false,\n licenseOfflineCheck: true,\n running: false,\n });\n }\n }\n }\n\n renderAskForUpdate(): JSX.Element | null {\n if (!this.state.askForUpdate) {\n return null;\n }\n return (\n <DialogConfirm\n text={I18n.t(\n 'ra_License not found in license manager. Do you want to read licenses from iobroker.net?',\n )}\n ok={I18n.t('ra_Yes')}\n onClose={async isYes => {\n if (isYes) {\n this.setState({ askForUpdate: false });\n try {\n // updateLicense is available only in AdminConnection\n await this.props.oContext.socket.updateLicenses(null, null);\n } catch (e) {\n window.alert(I18n.t('ra_Cannot read licenses: %s', e));\n return;\n }\n await this._onClick(true);\n } else {\n this.setState({ askForUpdate: false, running: false });\n }\n }}\n />\n );\n }\n\n async _onClick(secondRun?: boolean): Promise<void> {\n const adapterName = this.props.oContext.adapterName === 'vis-2' ? 'vis' : this.props.oContext.adapterName;\n this.setState({ running: true });\n let license;\n let licenses;\n if (this.props.data.useLicenseManager) {\n licenses = await this.findInLicenseManager(adapterName);\n license = licenses.find(li => li.used);\n if (license) {\n license = license.license.json;\n }\n if (!license && !secondRun) {\n // no suitable license found in the license manager\n // should we read all licenses again?\n this.setState({ askForUpdate: true });\n return;\n }\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, adapterName);\n } else if (this.props.data.useLicenseManager) {\n this.setState({\n _error: I18n.t('ra_Suitable license not found in license manager'),\n result: false,\n running: false,\n allLicenses: licenses,\n });\n } else {\n // this case could not happen\n this.setState({\n _error: I18n.t('ra_Please enter the license'),\n result: false,\n running: false,\n });\n }\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || 'outlined'}\n color={this.props.schema.color || 'primary'}\n style={styles.fullWidth}\n disabled={(!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n {this.renderErrorDialog()}\n {this.renderAskForUpdate()}\n </div>\n );\n }\n}\n\nexport default ConfigCheckLicense;\n","import React, { type JSX } from 'react';\n\nimport { FormControlLabel, Checkbox, FormHelperText, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckbox } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCheckboxProps extends ConfigGenericProps {\n schema: ConfigItemCheckbox;\n}\n\nclass ConfigCheckbox extends ConfigGeneric<ConfigCheckboxProps, ConfigGenericState> {\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const isIndeterminate = Array.isArray(value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n <FormControlLabel\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!disabled) {\n const mayByPromise = this.onChange(this.props.attr, !value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }\n }}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!value}\n onChange={e => {\n let mayBePromise: void | Promise<void>;\n if (isIndeterminate) {\n mayBePromise = this.onChange(this.props.attr, true);\n } else {\n mayBePromise = this.onChange(this.props.attr, e.target.checked);\n }\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n disabled={disabled || this.props.schema.readOnly}\n />\n }\n label={this.getText(this.props.schema.label)}\n />\n <FormHelperText style={{ color: 'red' }}>\n {error\n ? this.props.schema.validatorErrorText\n ? I18n.t(this.props.schema.validatorErrorText)\n : I18n.t('ra_Error')\n : null}\n </FormHelperText>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigCheckbox;\n","/**\n * Notice: Some code was adapted from Material-UI's text field.\n * Copyright (c) 2014 Call-Em-All (https://github.com/callemall/material-ui)\n */\nimport React, { type RefObject, type JSX } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Input, OutlinedInput, InputLabel, Chip, FormControl, FormHelperText, Box } from '@mui/material';\nimport FilledInput from '@mui/material/FilledInput/FilledInput';\nimport blue from '@mui/material/colors/blue';\n\nimport { type IobTheme, type ThemeType, Utils } from '@iobroker/adapter-react-v5';\n\nconst variantComponent = {\n standard: Input,\n filled: FilledInput,\n outlined: OutlinedInput,\n};\n\nconst styles: Record<string, any> = (theme: IobTheme): Record<string, any> => {\n const light = theme.palette.mode === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n return {\n root: {},\n inputRoot: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n flex: 1,\n marginTop: 0,\n minWidth: 70,\n '&.mui-variant-outlined,&.mui-variant-filled': {\n boxSizing: 'border-box',\n },\n '&.mui-variant-outlined': {\n paddingTop: '14px',\n },\n '&.mui-variant-filled': {\n paddingTop: '28px',\n },\n },\n input: {\n display: 'inline-block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n appearance: 'none', // Remove border in Safari, doesn't seem to break anything in other browsers\n WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated style).\n float: 'left',\n flex: 1,\n },\n chipContainer: {\n display: 'flex',\n flexFlow: 'row wrap',\n alignItems: 'center',\n cursor: 'text',\n marginBottom: '-2px',\n minHeight: 40,\n },\n outlined: {\n '& input': {\n height: 16,\n paddingTop: '4px',\n paddingBottom: '12px',\n marginTop: '4px',\n marginBottom: '4px',\n },\n },\n standard: {\n marginTop: '18px',\n },\n filled: {\n '& input': {\n height: 22,\n marginBottom: '4px',\n marginTop: '4px',\n paddingTop: 0,\n },\n '$marginDense & input': {\n height: 26,\n },\n },\n labeled: {},\n label: {\n top: 4,\n '&$outlined&:not($labelShrink)': {\n top: 2,\n '$marginDense &': {\n top: 5,\n },\n },\n '&$filled&:not($labelShrink)': {\n top: 15,\n '$marginDense &': {\n top: 20,\n },\n },\n },\n labelShrink: {\n top: 0,\n },\n helperText: {\n marginBottom: -20,\n },\n focused: {},\n disabled: {},\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary[light ? 'dark' : 'light']}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&$focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: `2px solid ${theme.palette.text.primary}`,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: `1px solid ${bottomLineColor}`,\n },\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n },\n },\n error: {\n '&:after': {\n backgroundColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n },\n chip: {\n margin: '0 8px 8px 0',\n float: 'left',\n },\n marginDense: {},\n };\n};\n\nconst keyCodes = {\n BACKSPACE: 8,\n DELETE: 46,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39,\n};\n\ninterface ChipRendererProps {\n value: string;\n isFocused: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n handleClick: () => void;\n handleDelete: () => void;\n style: React.CSSProperties;\n}\n\nexport const defaultChipRenderer = (\n { value, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, style }: ChipRendererProps,\n key: string,\n): JSX.Element => (\n <Chip\n key={key}\n style={{\n ...style,\n pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,\n backgroundColor: isFocused ? blue[300] : undefined,\n }}\n onClick={handleClick}\n onDelete={handleDelete}\n label={value}\n />\n);\n\ninterface ChipInputProps {\n /** Allows duplicate chips if set to true. */\n allowDuplicates?: boolean;\n /** If true, the placeholder will always be visible. */\n alwaysShowPlaceholder?: boolean;\n /** Behavior when the chip input is blurred: `'clear'` clears the input, `'add'` creates a chip and `'ignore'` keeps the input. */\n blurBehavior?: 'clear' | 'add' | 'add-or-clear' | 'ignore';\n /** A function of the type `({ value, text, chip, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, className }, key) => node` that returns a chip based on the given properties. This can be used to customize chip styles. Each item in the `dataSource` array will be passed to `chipRenderer` as arguments `chip`, `value` and `text`. If `dataSource` is an array of objects and `dataSourceConfig` is present, then `value` and `text` will instead correspond to the object values defined in `dataSourceConfig`. If `dataSourceConfig` is not set and `dataSource` is an array of objects, then a custom `chipRenderer` must be set. `chip` is always the raw value from `dataSource`, either an object or a string. */\n chipRenderer?: (props: ChipRendererProps) => JSX.Element;\n /** Whether the input value should be cleared if the `value` prop is changed. */\n clearInputValueOnChange?: boolean;\n /** Data source for auto complete. This should be an array of strings or objects. */\n dataSource?: string[];\n /** The chips to display by default (for uncontrolled mode). */\n defaultValue?: string[];\n /** Whether to use `setTimeout` to delay adding chips in case other input events like `onSelection` need to fire first */\n delayBeforeAdd?: boolean;\n /** Disables the chip input if set to true. */\n disabled?: boolean;\n /** Disable the input underline. Only valid for 'standard' variant */\n disableUnderline?: boolean;\n /** Props to pass through to the `FormHelperText` component. */\n FormHelperTextProps?: Record<string, any>;\n /** If true, the chip input will fill the available width. */\n fullWidth?: boolean;\n /** If true, the input field will always be below the chips and fill the available space. By default, it will try to be beside the chips. */\n fullWidthInput?: boolean;\n /** Helper text that is displayed below the input. */\n helperText?: string | JSX.Element;\n /** Props to pass through to the `InputLabel`. */\n InputLabelProps?: Record<string, any>;\n /** Props to pass through to the `Input`. */\n InputProps?: Record<string, any>;\n /** Use this property to pass a ref callback to the native input component. */\n inputRef?: (el: HTMLInputElement) => void;\n /** The input value (enables controlled mode for the text input if set). */\n inputValue?: string;\n /* The content of the floating label. */\n label?: string | JSX.Element;\n /** The key codes (`KeyboardEvent.keyCode`) used to determine when to create a new chip. */\n newChipKeyCodes?: number[];\n /** The keys (`KeyboardEvent.key`) used to determine when to create a new chip. */\n newChipKeys?: string[];\n /** Callback function that is called when a new chip was added (in controlled mode). */\n onAdd?: (chip: string) => void;\n /** Callback function that is called with the chip to be added and should return true to add the chip or false to prevent the chip from being added without clearing the text input. */\n onBeforeAdd?: (chip: string) => boolean;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n // onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n /** Callback function that is called when the chips change (in uncontrolled mode). */\n onChange?: (chips: string[]) => void;\n /** Callback function that is called when a new chip was removed (in controlled mode). */\n onDelete: (chip: string, i: number) => void;\n /** Callback function that is called when the input changes. */\n onUpdateInput?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** A placeholder that is displayed if the input has no values. */\n placeholder?: string;\n /** Makes the chip input read-only if set to true. */\n readOnly?: boolean;\n /** The chips to display (enables controlled mode if set). */\n value?: string[];\n /** The variant of the Input component */\n variant?: 'outlined' | 'standard' | 'filled';\n className?: string;\n error?: boolean;\n id?: string;\n required?: boolean;\n rootRef?: RefObject<HTMLDivElement>;\n margin?: 'dense' | 'normal' | 'none';\n theme: IobTheme;\n}\n\ninterface ChipInputState {\n chips: string[];\n focusedChip: number | null;\n inputValue: string;\n isFocused: boolean;\n chipsUpdated: boolean;\n prevPropsValue: string[];\n variant: 'outlined' | 'standard' | 'filled';\n}\n\nclass ChipInput extends React.Component<ChipInputProps, ChipInputState> {\n private readonly labelRef: React.RefObject<HTMLLabelElement>;\n\n private labelNode: HTMLLabelElement | null = null;\n\n private readonly input: React.RefObject<HTMLInputElement>;\n\n private readonly newChipKeyCodes: number[];\n\n private readonly newChipKeys: string[];\n\n private actualInput: HTMLInputElement | null = null;\n\n private inputBlurTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private _keyPressed: boolean;\n\n private _preventChipCreation: boolean;\n\n private styles: Record<string, any> = {};\n\n private styleTheme: ThemeType | null = null;\n\n constructor(props: ChipInputProps) {\n super(props);\n this.state = {\n chips: props.defaultValue || [],\n focusedChip: null,\n inputValue: '',\n isFocused: false,\n chipsUpdated: false,\n prevPropsValue: [],\n variant: this.props.variant || 'standard',\n };\n this.newChipKeyCodes = props.newChipKeyCodes || [13];\n this.newChipKeys = props.newChipKeys || ['Enter'];\n\n this.labelRef = React.createRef();\n this.input = React.createRef();\n }\n\n componentDidMount(): void {\n if (this.state.variant === 'outlined') {\n // eslint-disable-next-line react/no-find-dom-node\n this.labelNode = ReactDOM.findDOMNode(this.labelRef.current) as HTMLLabelElement;\n this.forceUpdate();\n }\n }\n\n componentWillUnmount(): void {\n if (this.inputBlurTimeout) {\n clearTimeout(this.inputBlurTimeout);\n }\n }\n\n static getDerivedStateFromProps(props: ChipInputProps, state: ChipInputState): Partial<ChipInputState> | null {\n let newState: Partial<ChipInputState> | null = null;\n\n if (props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value };\n if (props.clearInputValueOnChange) {\n newState.inputValue = '';\n }\n }\n\n // if change detection is only necessary for clearInputValueOnChange\n if (props.clearInputValueOnChange && props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value, inputValue: '' };\n }\n\n if (props.disabled) {\n newState = { ...newState, focusedChip: null };\n }\n\n if (!state.chipsUpdated && props.defaultValue) {\n newState = { ...newState, chips: props.defaultValue };\n }\n\n return newState;\n }\n\n /**\n * Blurs this component.\n */\n // blur() {\n // if (this.input) {\n // this.actualInput.blur();\n // }\n // }\n\n /**\n * Focuses this component.\n */\n focus = (): void => {\n this.actualInput?.focus();\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n this.setState({ isFocused: false });\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n const value = event.target.value;\n let addChipOptions: { clearInputOnFail: boolean };\n switch (this.props.blurBehavior || 'clear') {\n case 'add-or-clear':\n addChipOptions = { clearInputOnFail: true };\n // falls through\n case 'add':\n if (this.props.delayBeforeAdd) {\n // Let's assume that we only want to add the existing content as chip, when\n // another event has not added a chip within 200ms.\n // e.g., onSelection Callback in Autocomplete case\n const numChipsBefore = (this.props.value || this.state.chips).length;\n this.inputBlurTimeout = setTimeout(() => {\n const numChipsAfter = (this.props.value || this.state.chips).length;\n if (numChipsBefore === numChipsAfter) {\n this.handleAddChip(value, addChipOptions);\n } else {\n this.clearInput();\n }\n }, 150);\n } else {\n this.handleAddChip(value, addChipOptions);\n }\n break;\n\n case 'clear':\n this.clearInput();\n break;\n\n default:\n break;\n }\n };\n\n handleInputFocus = (event: React.FocusEvent<HTMLInputElement>): void => {\n this.setState({ isFocused: true });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const { focusedChip } = this.state;\n this._keyPressed = false;\n this._preventChipCreation = false;\n\n if (this.props.onKeyDown) {\n // Needed for arrow controls on a menu in autocomplete scenario\n this.props.onKeyDown(event);\n // Check if the callback marked the event as isDefaultPrevented() and skip further actions\n // enter key, for example, should not always add the current value of the inputField\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n const chips = this.props.value || this.state.chips;\n if (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) {\n const result = this.handleAddChip((event.target as HTMLInputElement).value);\n if (result !== false) {\n event.preventDefault();\n }\n return;\n }\n\n switch (event.keyCode) {\n case keyCodes.BACKSPACE:\n if ((event.target as HTMLInputElement).value === '') {\n if (focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n } else {\n this.setState({ focusedChip: chips.length - 1 });\n }\n }\n break;\n case keyCodes.DELETE:\n if ((event.target as HTMLInputElement).value === '' && focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip <= chips.length - 1) {\n this.setState({ focusedChip });\n }\n }\n break;\n case keyCodes.LEFT_ARROW:\n if (focusedChip === null && (event.target as HTMLInputElement).value === '' && chips.length) {\n this.setState({ focusedChip: chips.length - 1 });\n } else if (focusedChip !== null && focusedChip > 0) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n break;\n case keyCodes.RIGHT_ARROW:\n if (focusedChip !== null && focusedChip < chips.length - 1) {\n this.setState({ focusedChip: focusedChip + 1 });\n } else {\n this.setState({ focusedChip: null });\n }\n break;\n default:\n this.setState({ focusedChip: null });\n break;\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (\n !this._preventChipCreation &&\n (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) &&\n this._keyPressed\n ) {\n this.clearInput();\n } else {\n this.updateInput((event.target as HTMLInputElement).value);\n }\n if (this.props.onKeyUp) {\n this.props.onKeyUp(event);\n }\n };\n\n // handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // this._keyPressed = true;\n // if (this.props.onKeyPress) {\n // this.props.onKeyPress(event);\n // }\n // };\n\n handleUpdateInput = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (this.props.inputValue === null || this.props.inputValue === undefined) {\n this.updateInput(e.target.value);\n }\n\n if (this.props.onUpdateInput) {\n this.props.onUpdateInput(e);\n }\n };\n\n /**\n * Handles adding a chip.\n *\n * @param chip Value of the chip, either a string or an object (if dataSourceConfig is set)\n * @param options Additional options\n * @param options.clearInputOnFail If `true`, and `onBeforeAdd` returns `false`, clear the input\n * @returns True if the chip was added (or at least `onAdd` was called), false if adding the chip was prevented\n */\n handleAddChip(chip: string, options?: { clearInputOnFail: boolean }): boolean {\n if (this.props.onBeforeAdd && !this.props.onBeforeAdd(chip)) {\n this._preventChipCreation = true;\n if (options && options.clearInputOnFail) {\n this.clearInput();\n }\n return false;\n }\n this.clearInput();\n const chips = this.props.value || this.state.chips;\n\n if (chip.trim().length) {\n if (this.props.allowDuplicates || !chips.includes(chip)) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n return false;\n }\n\n handleDeleteChip(chip: string, i: number): void {\n if (!this.props.value) {\n const chips = this.state.chips.slice();\n const changed = chips.splice(i, 1); // remove the chip at index i\n if (changed) {\n let focusedChip = this.state.focusedChip;\n if (this.state.focusedChip === i) {\n focusedChip = null;\n } else if (this.state.focusedChip > i) {\n focusedChip = this.state.focusedChip - 1;\n }\n this.updateChips(chips, { focusedChip });\n }\n } else if (this.props.onDelete) {\n this.props.onDelete(chip, i);\n }\n }\n\n updateChips(chips: string[], additionalUpdates = {}): void {\n this.setState({ chips, chipsUpdated: true, ...additionalUpdates });\n if (this.props.onChange) {\n this.props.onChange(chips);\n }\n }\n\n /**\n * Clears the text field for adding new chips.\n * This only works in uncontrolled input mode, i.e., if the inputValue prop is not used.\n */\n clearInput(): void {\n this.updateInput('');\n }\n\n updateInput(value: string): void {\n this.setState({ inputValue: value });\n }\n\n /**\n * Set the reference to the actual input, that is the input of the Input.\n *\n * @param ref - The reference\n */\n setActualInputRef = (ref: HTMLInputElement): void => {\n this.actualInput = ref;\n if (this.props.inputRef) {\n this.props.inputRef(ref);\n }\n };\n\n render(): JSX.Element {\n const {\n alwaysShowPlaceholder,\n chipRenderer = defaultChipRenderer,\n className,\n disabled,\n disableUnderline,\n error,\n FormHelperTextProps,\n fullWidth,\n fullWidthInput,\n helperText,\n id,\n InputProps = {},\n InputLabelProps = {},\n inputValue,\n label,\n placeholder,\n readOnly,\n required,\n rootRef,\n value,\n margin,\n } = this.props;\n const variant = this.state.variant;\n\n if (this.styleTheme !== this.props.theme.palette.mode) {\n this.styleTheme = this.props.theme.palette.mode;\n this.styles = Utils.getStyle(this.props.theme, styles);\n }\n\n let chips = value || this.state.chips || [];\n if (!Array.isArray(chips)) {\n chips = ((chips as string) || '')\n .toString()\n .split(/[,\\s]+/)\n .map((c: string) => c.trim());\n }\n const actualInputValue = inputValue ?? this.state.inputValue;\n\n const hasInput = (this.props.value || actualInputValue).length || actualInputValue.length;\n const shrinkFloatingLabel =\n typeof InputLabelProps.shrink === 'boolean'\n ? InputLabelProps.shrink\n : label !== null && (hasInput || this.state.isFocused || chips.length);\n\n const chipComponents = chips.map((chip, i) =>\n chipRenderer(\n {\n value: chip,\n isDisabled: !!disabled,\n isReadOnly: readOnly,\n isFocused: this.state.focusedChip === i,\n handleClick: () => this.setState({ focusedChip: i }),\n handleDelete: () => this.handleDeleteChip(chip, i),\n style: this.styles.chip,\n },\n i.toString(),\n ),\n );\n\n const InputMore: { notched?: boolean; labelWidth?: number; startAdornment?: JSX.Element[] } = {};\n if (variant === 'outlined') {\n InputMore.notched = !!shrinkFloatingLabel;\n InputMore.labelWidth = (shrinkFloatingLabel && this.labelNode && this.labelNode.offsetWidth) || 0;\n }\n\n if (variant !== 'standard') {\n InputMore.startAdornment = chipComponents;\n } else {\n InputProps.disableUnderline = true;\n }\n\n const InputComponent = variantComponent[variant];\n\n return (\n <FormControl\n ref={rootRef}\n fullWidth={fullWidth}\n className={className}\n sx={{ ...this.styles.root, ...(margin === 'dense' ? this.styles.marginDense : {}) }}\n error={error}\n required={chips.length > 0 ? undefined : required}\n onClick={this.focus}\n disabled={disabled}\n variant={variant}\n component=\"div\"\n margin={margin}\n >\n {label && (\n <InputLabel\n htmlFor={id}\n sx={{\n '&.MuiInputLabel-root': this.styles.label,\n '&.MuiInputLabel-shrink': this.styles.labelShrink,\n }}\n shrink={!!shrinkFloatingLabel}\n focused={this.state.isFocused}\n variant={variant}\n ref={this.labelRef}\n required={required}\n component=\"label\"\n {...InputLabelProps}\n >\n {label}\n </InputLabel>\n )}\n <Box\n component=\"div\"\n id=\"input-chip-container\"\n sx={{\n ...this.styles[variant],\n ...this.styles.chipContainer,\n ...(this.state.isFocused ? this.styles.focused : undefined),\n ...(!disableUnderline && variant === 'standard' ? this.styles.underline : undefined),\n ...(disabled ? this.styles.disabled : undefined),\n ...(label ? this.styles.labeled : undefined),\n ...(error ? this.styles.error : undefined),\n }}\n >\n {variant === 'standard' && chipComponents}\n <InputComponent\n ref={this.input}\n className={`mui-variant-${this.styles[variant]} ${label ? 'mui-chip-with-label' : 'mui-chip-no-label'}`}\n sx={{\n '&.MuiInputBase-input': { ...this.styles.input, ...this.styles[variant] },\n '&.MuiInputBase-root': { ...this.styles.inputRoot },\n }}\n id={id}\n value={actualInputValue}\n onChange={this.handleUpdateInput}\n onKeyDown={this.handleKeyDown}\n // onKeyPress={this.handleKeyPress}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n inputRef={this.setActualInputRef}\n disabled={disabled}\n fullWidth={fullWidthInput}\n placeholder={\n (!hasInput && (shrinkFloatingLabel || label === null || label === undefined)) ||\n alwaysShowPlaceholder\n ? placeholder\n : null\n }\n readOnly={readOnly}\n {...InputProps}\n {...InputMore}\n />\n </Box>\n {helperText && (\n <FormHelperText\n {...FormHelperTextProps}\n className={FormHelperTextProps?.className}\n style={this.styles.helperText}\n >\n {helperText}\n </FormHelperText>\n )}\n </FormControl>\n );\n }\n}\n\nexport default ChipInput;\n","import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl } from '@mui/material';\n\nimport type { ConfigItemChip } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ChipInput from './ChipInput';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\ninterface ConfigChipProps extends ConfigGenericProps {\n schema: ConfigItemChip;\n}\n\nclass ConfigChip extends ConfigGeneric<ConfigChipProps, ConfigGenericState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr);\n if (this.props.schema.delimiter && typeof value === 'string') {\n const parts = value\n .split(this.props.schema.delimiter)\n .map(a => a.trim())\n .filter(a => a);\n this.setState({ value: parts });\n } else {\n this.setState({ value: value || [] });\n }\n }\n\n renderItem(error: string, disabled: boolean): JSX.Element | null {\n const { attr, schema } = this.props;\n const { value } = this.state;\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <ChipInput\n value={value}\n disabled={!!disabled}\n label={this.getText(schema.label)}\n error={!!error}\n onAdd={chip => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.push(chip);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n theme={this.props.oContext.theme}\n onDelete={(_chip, index) => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.splice(index, 1);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n />\n <FormHelperText>{I18n.t('ra_Press ENTER Key to add new item')}</FormHelperText>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigChip;\n","import React, { type JSX } from 'react';\nimport { ChromePicker, type ColorResult } from 'react-color';\n\nimport { IconButton, TextField, Dialog } from '@mui/material';\n\nimport { Close as ClearIcon } from '@mui/icons-material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigColorProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigColorState extends ConfigGenericState {\n showColorDialog?: boolean;\n colorDialogValue?: string;\n}\n\nclass ConfigColor extends ConfigGeneric<ConfigColorProps, ConfigColorState> {\n renderColorDialog(): JSX.Element | null {\n return (\n !!this.state.showColorDialog && (\n <Dialog\n onClose={() => this.setState({ showColorDialog: false })}\n open={this.state.showColorDialog}\n >\n <ChromePicker\n color={this.state.colorDialogValue}\n onChange={(color: ColorResult) =>\n this.setState({ colorDialogValue: color.hex }, () =>\n this.onChange(this.props.attr, this.state.colorDialogValue),\n )\n }\n />\n </Dialog>\n )\n );\n }\n\n renderItem(_error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n let textColor = Utils.isUseBright(value, null);\n if (textColor === null) {\n textColor = undefined;\n }\n return (\n <>\n {this.renderColorDialog()}\n <TextField\n variant=\"standard\"\n disabled={!!disabled}\n style={{ minWidth: 100, width: 'calc(100% - 8px)' }}\n label={this.getText(this.props.schema.label)}\n value={value || ''}\n onClick={() =>\n !this.props.schema.readOnly &&\n this.setState({ showColorDialog: true, colorDialogValue: value || '' })\n }\n onChange={e => {\n const color = e.target.value;\n const mayBePromise = this.onChange(this.props.attr, color);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n slotProps={{\n htmlInput: {\n style: {\n // paddingLeft: noPadding ? 0 : 8,\n backgroundColor: value,\n color: textColor ? '#FFF' : '#000',\n },\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment:\n !this.props.schema.readOnly && value && !this.props.schema.noClearButton ? (\n <IconButton\n size=\"small\"\n onClick={e => {\n e.stopPropagation();\n const mayBePromise = this.onChange(this.props.attr, '');\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n >\n <ClearIcon />\n </IconButton>\n ) : undefined,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n />\n </>\n );\n }\n}\n\nexport default ConfigColor;\n","import React, { type JSX } from 'react';\n\nimport { TextField, Fab, FormControlLabel, Checkbox } from '@mui/material';\n\nimport { GpsFixed as IconGpsFixed, LocationOn as IconLocationOn } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCoordinates } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n width: {\n width: 'calc(100% - 85px)',\n },\n width50: {\n width: 120,\n marginRight: 5,\n },\n};\n\ninterface ConfigCoordinatesProps extends ConfigGenericProps {\n schema: ConfigItemCoordinates;\n}\n\ninterface ConfigCoordinatesState extends ConfigGenericState {\n useSystem?: boolean;\n longitude?: string | number;\n latitude?: string | number;\n}\n\nclass ConfigCoordinates extends ConfigGeneric<ConfigCoordinatesProps, ConfigCoordinatesState> {\n componentDidMount(): void {\n super.componentDidMount();\n\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n\n const newState: Partial<ConfigCoordinatesState> = {};\n if (this.props.schema.useSystemName) {\n newState.useSystem = !!ConfigGeneric.getValue(this.props.data, this.props.schema.useSystemName);\n }\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n newState.longitude = ConfigGeneric.getValue(this.props.data, this.props.schema.longitudeName);\n newState.latitude = ConfigGeneric.getValue(this.props.data, this.props.schema.latitudeName);\n if (!newState.longitude && !newState.latitude && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n } else {\n const value_ = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value_ && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n }\n if (Object.keys(newState).length) {\n setTimeout(() => this.setState(newState as ConfigCoordinatesState), 50);\n }\n }\n\n async getSystemCoordinates(): Promise<void> {\n const obj = await this.props.oContext.socket.getCompactSystemConfig();\n if (obj?.common && (obj.common.longitude || obj.common.latitude)) {\n window.alert(I18n.t('ra_Used system settings'));\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState(\n {\n longitude: obj.common.longitude,\n latitude: obj.common.latitude,\n },\n async () => {\n await this.onChange(this.props.schema.longitudeName, obj.common.longitude);\n await this.onChange(this.props.schema.latitudeName, obj.common.latitude);\n },\n );\n } else {\n const value = obj.common.latitude + (this.props.schema.divider || ',') + obj.common.longitude;\n this.setState(\n {\n value,\n },\n () => {\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n },\n );\n }\n } else {\n window.alert(\n I18n.t(\n 'ra_Cannot determine position: System settings are empty and GPS detection is disabled in browser',\n ),\n );\n }\n }\n\n getCoordinates(): void {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async (position: GeolocationPosition): Promise<void> => {\n if (position?.coords) {\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState(\n {\n longitude: position.coords.longitude,\n latitude: position.coords.latitude,\n },\n async () => {\n await this.onChange(\n this.props.schema.longitudeName,\n position.coords.longitude || '',\n );\n await this.onChange(this.props.schema.latitudeName, position.coords.latitude || '');\n },\n );\n } else {\n const value =\n position.coords.latitude +\n (this.props.schema.divider || ',') +\n position.coords.longitude;\n this.setState({ value }, () => {\n const mayByPromise = this.onChange(this.props.attr, value);\n if (mayByPromise instanceof Promise) {\n mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }\n } else {\n await this.getSystemCoordinates();\n }\n },\n async (error: GeolocationPositionError): Promise<void> => {\n console.error(`Cannot determine coordinates from browser: ${error.message}`);\n await this.getSystemCoordinates();\n },\n );\n } else {\n void this.getSystemCoordinates().catch(e => {\n console.error(`Cannot determine coordinates: ${e}`);\n });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <>\n {this.props.schema.useSystemName ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.useSystem}\n onChange={e => {\n const useSystem = e.target.checked;\n if (useSystem) {\n void this.getSystemCoordinates().catch(e =>\n console.error(`Cannot determine coordinates: ${e}`),\n );\n }\n this.setState({ useSystem }, () =>\n this.onChange(this.props.schema.useSystemName, useSystem),\n );\n }}\n />\n }\n label={I18n.t('ra_Use system settings for position')}\n />\n ) : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width50}\n value={this.state.longitude ?? ''}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const longitude = e.target.value;\n this.setState({ longitude }, () => {\n const mayBePromise = this.onChange(\n this.props.schema.longitudeName,\n (longitude || '').trim(),\n );\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n });\n }}\n label={I18n.t('ra_Longitude')}\n />\n ) : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width50}\n value={this.state.latitude ?? ''}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const latitude = e.target.value;\n this.setState({ latitude }, () =>\n this.onChange(this.props.schema.latitudeName, (latitude || '').trim()),\n );\n }}\n label={I18n.t('ra_Latitude')}\n />\n ) : null}\n {!this.props.schema.longitudeName || !this.props.schema.latitudeName ? (\n <TextField\n variant=\"standard\"\n style={styles.width}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.state.useSystem,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n ) : null}\n {!this.state.useSystem ? (\n <Fab\n size=\"small\"\n onClick={() => this.getCoordinates()}\n title={I18n.t('ra_Take browser position')}\n style={{ marginRight: 4 }}\n >\n <IconLocationOn />\n </Fab>\n ) : null}\n {!this.state.useSystem ? (\n <Fab\n size=\"small\"\n onClick={() => this.getSystemCoordinates()}\n title={I18n.t('ra_Take position from system settings')}\n >\n <IconGpsFixed />\n </Fab>\n ) : null}\n </>\n );\n }\n}\n\nexport default ConfigCoordinates;\n","import React, { type JSX } from 'react';\nimport { Grid2, LinearProgress } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemCustom } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from '#JC/JsonConfigComponent/ConfigGeneric';\n\nconst getOrLoadRemote = (\n remote: string,\n shareScope: string,\n remoteFallbackUrl?: string,\n): Promise<{ get: (module: string) => () => Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> }> =>\n new Promise((resolve, reject) => {\n // check if remote exists on the global `window`object\n if (!(window as any)[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote: HTMLScriptElement = document.querySelector(`script[data-webpack=\"${remote}\"]`);\n // when remote is loaded.\n const onload = async (): Promise<void> => {\n // check if it was initialized\n if ((window as any)[remote]) {\n if (!(window as any)[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n // @ts-expect-error it is a trick and must be so\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use a default share scope object passed in manually\n await (window as any)[remote].init(shareScope);\n } else {\n // otherwise, init share scope as usual\n // @ts-expect-error it is a trick and must be so\n await (window as any)[remote].init((__webpack_share_scopes__ as any)[shareScope]);\n }\n // mark remote as initialized\n (window as any)[remote].__initialized = true;\n }\n } else {\n console.error(`Cannot load ${remote}`);\n reject(new Error(`Cannot load ${remote}`));\n return;\n }\n // resolve promise so marking remote as loaded\n resolve((window as any)[remote]);\n };\n\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(new Error(`Cannot Find Remote ${remote} to inject`));\n }\n } else {\n // remote already instantiated, resolve\n resolve((window as any)[remote]);\n }\n });\n\nfunction loadComponent(\n remote: string,\n sharedScope: string,\n module: string,\n url: string,\n): () => Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> {\n return async (): Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> => {\n const container = await getOrLoadRemote(remote, sharedScope, url);\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const factory = await container.get(module);\n return factory();\n };\n}\n\ninterface ConfigCustomProps extends ConfigGenericProps {\n schema: ConfigItemCustom;\n}\n\ninterface ConfigCustomState extends ConfigGenericState {\n Component: React.FC<ConfigGenericProps> | null;\n error: string;\n}\n\nexport default class ConfigCustom extends ConfigGeneric<ConfigCustomProps, ConfigCustomState> {\n static runningLoads: Record<string, Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }>> = {};\n\n constructor(props: ConfigCustomProps) {\n super(props);\n // schema.url - location of Widget\n // schema.name - Component name\n // schema.i18n - i18n\n\n Object.assign(this.state, {\n Component: null,\n error: '',\n });\n }\n\n // load component dynamically\n async componentDidMount(): Promise<void> {\n if (!this.props.schema.url) {\n console.error('URL is empty. Cannot load custom component!');\n this.setState({ error: 'URL is empty. Cannot load custom component!' });\n return;\n }\n\n let url;\n /*\n if (this.props.schema.url.startsWith('http:') || this.props.schema.url.startsWith('https:')) {\n url = this.props.schema.url;\n } else\n */\n if (this.props.schema.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${this.props.schema.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${this.props.oContext.adapterName}/${this.props.schema.url}`;\n }\n const [uniqueName, fileToLoad, ...componentNameParts] = this.props.schema.name.split('/');\n const componentName = componentNameParts.join('/');\n if (!url) {\n console.error(\n 'Cannot find URL for custom component! Please define \"url\" as \"custom/customComponents.js\" in the schema',\n );\n return;\n }\n if (!uniqueName || !fileToLoad || !componentName) {\n console.error(\n 'Invalid format of \"name\"! Please define \"name\" as \"ConfigCustomBackItUpSet/Components/AdapterExist\" in the schema',\n );\n return;\n }\n let setPromise: Promise<{ default: Record<string, React.FC<ConfigGenericProps>> }> | undefined =\n ConfigCustom.runningLoads[`${url}!${fileToLoad}`];\n\n if (!(setPromise instanceof Promise)) {\n let i18nPromise: Promise<void> | undefined;\n if (this.props.schema.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL: string;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n i18nPromise = fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => {\n if (lang !== 'en') {\n // try to load English\n fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(err => console.log(`Cannot load i18n \"${file}\": ${err}`));\n return;\n }\n console.log(`Cannot load i18n \"${file}\": ${error}`);\n });\n } else if (this.props.schema.i18n && typeof this.props.schema.i18n === 'object') {\n try {\n I18n.extendTranslations(this.props.schema.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n try {\n console.log(uniqueName, fileToLoad, componentName);\n setPromise = loadComponent(uniqueName, 'default', `./${fileToLoad}`, url)();\n if (i18nPromise instanceof Promise) {\n setPromise = Promise.all([setPromise, i18nPromise]).then(result => result[0]);\n }\n // remember promise\n ConfigCustom.runningLoads[`${url}!${fileToLoad}`] = setPromise;\n } catch (error) {\n this.setState({ error: `Cannot import from ${this.props.schema.url}: ${error}` });\n }\n }\n\n try {\n const component: Record<string, React.FC<ConfigGenericProps>> = (await setPromise).default;\n\n if (!component?.[componentName]) {\n const keys = Object.keys(component || {});\n console.error('URL is empty. Cannot load custom component!');\n this.setState({\n error: `Component ${this.props.schema.name} not found in ${this.props.schema.url}. Found: ${keys.join(', ')}`,\n });\n } else {\n this.setState({ Component: component[componentName] });\n }\n } catch (error) {\n this.setState({ error: `Cannot import from ${this.props.schema.url}: ${error}` });\n }\n }\n\n render(): JSX.Element {\n const CustomComponent: React.FC<ConfigGenericProps> = this.state.Component;\n const schema = this.props.schema || ({} as ConfigItemCustom);\n\n let item = CustomComponent ? (\n <CustomComponent\n {...this.props}\n // @ts-expect-error BF (2024-12-18) Remove after the 7.4 will be mainstream. All following lines\n socket={this.props.oContext.socket}\n theme={this.props.oContext.theme}\n themeType={this.props.oContext.themeType}\n instance={this.props.oContext.instance}\n adapterName={this.props.oContext.adapterName}\n systemConfig={this.props.oContext.systemConfig}\n forceUpdate={this.props.oContext.forceUpdate}\n />\n ) : this.state.error ? (\n <div>{this.state.error}</div>\n ) : (\n <LinearProgress />\n );\n\n // If any widths are defined\n if (schema.xs || schema.sm || schema.md || schema.lg || schema.xl) {\n item = (\n <Grid2\n size={{\n xs: schema.xs || 12,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n style={{\n marginBottom: 0,\n textAlign: 'left',\n ...schema.style,\n ...(this.props.oContext.themeType === 'dark' ? schema.darkStyle : {}),\n }}\n >\n {item}\n </Grid2>\n );\n }\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n\n return item;\n }\n}\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemDeviceManager } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigDeviceManagerProps extends ConfigGenericProps {\n schema: ConfigItemDeviceManager;\n}\n\nclass ConfigDeviceManager extends ConfigGeneric<ConfigDeviceManagerProps, ConfigGenericState> {\n renderItem(): JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n if (this.props.oContext.DeviceManager) {\n const DeviceManager = this.props.oContext.DeviceManager;\n return (\n <DeviceManager\n uploadImagesToInstance={`${this.props.oContext.adapterName}.${this.props.oContext.instance}`}\n title={this.getText(this.props.schema.label)}\n socket={this.props.oContext.socket}\n selectedInstance={`${this.props.oContext.adapterName}.${this.props.oContext.instance}`}\n themeName={this.props.themeName}\n themeType={this.props.oContext.themeType}\n isFloatComma={this.props.oContext.isFloatComma}\n dateFormat={this.props.oContext.dateFormat}\n />\n );\n }\n\n return <div>DeviceManager not found</div>;\n }\n}\n\nexport default ConfigDeviceManager;\n","import React, { type JSX } from 'react';\nimport Dropzone, { type DropzoneRef } from 'react-dropzone';\n\nimport {\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n IconButton,\n ListItemText,\n ListItemIcon,\n} from '@mui/material';\n\nimport {\n Refresh as IconRefresh,\n UploadFile as IconUpload,\n Delete as IconDelete,\n PlayArrow as IconPlay,\n MusicNote as IconAudio,\n Videocam as IconVideo,\n Article as IconText,\n Code as IconCode,\n} from '@mui/icons-material';\nimport { UploadFile as UploadIcon } from '@mui/icons-material';\n\nimport { DialogConfirm, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFileSelector } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n fullWidthOneButton: {\n width: 'calc(100% - 42px)',\n },\n fullWidthTwoButtons: {\n width: 'calc(100% - 84px)',\n },\n fullWidthThreeButtons: {\n width: 'calc(100% - 126x)',\n },\n dropZone: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n },\n dropZoneEmpty: {},\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)',\n },\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex',\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default',\n },\n error: {\n border: '2px solid red',\n },\n deleteButton: {},\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n },\n};\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp', 'gif', 'apng', 'avif', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\ninterface ConfigFileSelectorProps extends ConfigGenericProps {\n schema: ConfigItemFileSelector;\n}\n\ninterface ConfigFileSelectorState extends ConfigGenericState {\n uploadFile?: boolean | 'dragging';\n uploadError?: boolean;\n files?: { name: string; size: string }[];\n deleteFile?: string;\n}\n\nclass ConfigFileSelector extends ConfigGeneric<ConfigFileSelectorProps, ConfigFileSelectorState> {\n private readonly dropzoneRef: React.RefObject<DropzoneRef>;\n\n private readonly imagePrefix: string;\n\n private objectID: string;\n\n private path: string;\n\n constructor(props: ConfigFileSelectorProps) {\n super(props);\n this.dropzoneRef = React.createRef();\n this.imagePrefix = this.props.oContext.imagePrefix === undefined ? './files' : this.props.oContext.imagePrefix;\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n this.objectID = (this.props.schema.objectID || '0_userdata.0').replace(\n '%INSTANCE%',\n (this.props.oContext.instance || 0).toString(),\n );\n this.path = this.props.schema.upload;\n if (this.path) {\n if (this.path === '/') {\n this.path = '';\n } else if (!this.path.endsWith('/')) {\n this.path = `${this.path}/`;\n }\n }\n\n // read files\n void this.updateFiles().then(() => {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n });\n }\n\n updateFiles(): Promise<void> {\n return this.readFiles(this.props.schema.pattern).then(files => this.setState({ files }));\n }\n\n async readFolder(\n folderName: string,\n files: { name: string; size: string }[],\n filter: string,\n ): Promise<{ name: string; size: string }[]> {\n try {\n const dirFiles = await this.props.oContext.socket.readDir(\n this.objectID,\n folderName.replace(/^\\//, '') || null,\n );\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n if (file.isDir) {\n // read it\n await this.readFolder(`${folderName + file.file}/`, files, filter);\n } else {\n let ok = false;\n if (filter === '*.*' && file.file.includes('.')) {\n ok = true;\n } else if (!filter || filter === '*') {\n ok = true;\n } else if (filter === '.*' && file.file.startsWith('.')) {\n ok = true;\n } else {\n const regExp = new RegExp(`^${filter.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*')}$`);\n ok = regExp.test(file.file);\n }\n\n if (ok) {\n files.push({\n name: folderName + file.file,\n size: file.stats ? Utils.formatBytes(file.stats.size) : '--',\n });\n }\n }\n }\n } catch (e) {\n console.error(`Cannot read \"${folderName}\": ${e}`);\n }\n\n return files;\n }\n\n async readFiles(pattern: string): Promise<{ name: string; size: string }[]> {\n const files: { name: string; size: string }[] = [];\n pattern = pattern || this.props.schema.pattern;\n if (!pattern) {\n pattern = '**/*.*';\n }\n let filter;\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n filter = pattern;\n } else {\n filter = pattern.substring(pos + 1);\n }\n\n if (pattern.startsWith('**')) {\n // read all folders\n await this.readFolder('/', files, filter);\n } else {\n const pos_ = pattern.lastIndexOf('/');\n if (pos_ === -1) {\n await this.readFolder('/', files, filter);\n } else {\n const folder = pattern.substring(0, pos_ + 1);\n await this.readFolder(folder, files, filter);\n }\n }\n\n return files;\n }\n\n onDrop(acceptedFiles: File[]): void {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n const maxSize = this.props.schema.maxSize || 2 * 1024 * 1024;\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = `image/${file.name.split('.').pop().toLowerCase()}`;\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n window.alert(I18n.t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n return;\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result as ArrayBufferLike).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n '',\n ),\n )}`;\n\n this.props.oContext.socket\n .writeFile64(this.objectID, this.path + file.name, base64)\n .then(() => this.updateFiles())\n .catch(e => window.alert(`Cannot upload file: ${e}`));\n };\n reader.readAsArrayBuffer(file);\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (!this.state.deleteFile) {\n return null;\n }\n return (\n <DialogConfirm\n title={I18n.t('ra_Are you sure?')}\n text={I18n.t('ra_File will be deleted')}\n ok={I18n.t('ra_Delete')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isOk => {\n const deleteFile = this.state.deleteFile;\n this.setState({ deleteFile: '' }, () => {\n if (isOk) {\n this.props.oContext.socket\n .deleteFile(this.objectID, deleteFile)\n .then(() => this.updateFiles())\n .catch(e => window.alert(`Cannot delete file: ${e}`));\n }\n });\n }}\n />\n );\n }\n\n static base64ToArrayBuffer(base64: string): ArrayBufferLike {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n loadFile(): Promise<{ file: string; mimeType: string }> {\n return this.props.oContext.socket.readFile(this.objectID, this.state.value, true);\n }\n\n play(): void {\n void this.loadFile().then(data => {\n if (typeof AudioContext !== 'undefined') {\n const oContext = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n void oContext.decodeAudioData(\n buf,\n (buffer: AudioBuffer): void => {\n const source = oContext.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(oContext.destination); // connect the source to the oContext's destination (the speakers)\n source.start(0);\n },\n (err: DOMException): void => window.alert(`Cannot play: ${err.message}`),\n );\n }\n });\n }\n\n getFileIcon(item: { value: string; label: string; extension?: string }): JSX.Element | null {\n if (!item?.extension) {\n return null;\n }\n if (IMAGE_EXT.includes(item.extension)) {\n return (\n <div\n style={{\n ...styles.selectedImage,\n backgroundImage: `url(${this.imagePrefix}/${this.objectID}/${item.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n />\n );\n }\n if (AUDIO_EXT.includes(item.extension)) {\n return <IconAudio />;\n }\n if (DOC_EXT.includes(item.extension)) {\n return <IconText />;\n }\n if (VIDEO_EXT.includes(item.extension)) {\n return <IconVideo />;\n }\n if (JS_EXT.includes(item.extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.files) {\n return null;\n }\n const folders: string[] = [];\n if (!this.props.schema.withFolder) {\n this.state.files.forEach(file => {\n const pos = file.name.lastIndexOf('/');\n if (pos === -1) {\n if (!folders.includes('/')) {\n folders.push('/');\n }\n } else {\n const folder = file.name.substring(0, pos + 1);\n if (!folders.includes(folder)) {\n folders.push(folder);\n }\n }\n });\n }\n\n const selectOptions: { value: string; label: string; extension?: string }[] = this.state.files.map(file => ({\n value: file.name,\n label:\n !this.props.schema.withFolder && folders.length === 1\n ? `${file.name.substring(folders[0].length)}`\n : `${file.name}${this.props.schema.noSize ? '' : `(${file.size})`}`,\n extension: file.name.toLowerCase().split('.').pop(),\n }));\n\n if (!this.props.schema.noNone) {\n selectOptions.unshift({ label: I18n.t('ra_none'), value: '' });\n }\n\n const item: { value: string; label: string; extension?: string } = selectOptions.find(\n _item => _item.value === this.state.value,\n );\n\n let buttons = 0;\n\n if (this.props.schema.upload) {\n buttons++;\n }\n if (this.props.schema.refresh) {\n buttons++;\n }\n const play =\n this.state.value &&\n (this.state.value.endsWith('.mp3') ||\n this.state.value.endsWith('.ogg') ||\n this.state.value.endsWith('.wav'));\n // show play button\n if (play) {\n buttons++;\n }\n\n const element = (\n <div style={styles.fullWidth}>\n <FormControl\n variant=\"standard\"\n style={{ width: `calc(100% - ${buttons * 42}px)` }}\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => (\n <>\n {this.getFileIcon(item)}\n <span>{item?.label || ''}</span>\n </>\n )}\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n >\n <ListItemIcon>{this.getFileIcon(it)}</ListItemIcon>\n <ListItemText>{it.label}</ListItemText>\n {this.props.schema.delete && item.value ? (\n <IconButton\n style={styles.deleteButton}\n size=\"small\"\n onClick={() => this.setState({ deleteFile: item.value })}\n >\n <IconDelete />\n </IconButton>\n ) : null}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n {this.props.schema.refresh && (\n <IconButton onClick={() => this.updateFiles()}>\n <IconRefresh />\n </IconButton>\n )}\n {this.props.schema.upload && (\n <IconButton onClick={() => this.dropzoneRef.current?.open()}>\n <IconUpload />\n </IconButton>\n )}\n {play && (\n <IconButton\n style={{ color: '#00FF00' }}\n onClick={() => this.play()}\n >\n <IconPlay />\n </IconButton>\n )}\n </div>\n );\n\n if (!this.props.schema.upload) {\n return (\n <>\n {element}\n {this.renderDeleteDialog()}\n </>\n );\n }\n let accept: Record<string, string[]> = { '*/*': [] };\n if (this.props.schema.fileTypes === 'image') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg', '.gif', '.apng', '.avif', '.webp'],\n };\n } else if (this.props.schema.fileTypes === 'audio') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4'],\n };\n } else if (this.props.schema.fileTypes === 'text') {\n accept = {\n 'text/plain': ['.txt'],\n };\n }\n if (this.props.schema.pattern) {\n const last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\\./, '');\n if (\n last === 'png' ||\n last === 'jpg' ||\n last === 'svg' ||\n last === 'gif' ||\n last === 'apng' ||\n last === 'avif' ||\n last === 'webp'\n ) {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg', '.gif', '.apng', '.avif', '.webp'],\n };\n } else if (last === 'mp3' || last === 'ogg' || last === 'wav') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4'],\n };\n } else if (last === 'ics') {\n accept = {\n 'text/calendar': ['.ics'],\n };\n } else if (last === 'txt') {\n accept = {\n 'text/plain': ['.txt'],\n };\n } else if (last === 'pem') {\n accept = {\n 'text/plain': ['.pem'],\n };\n } else {\n accept = {\n '*/*': [`.${last}`],\n };\n }\n }\n\n return (\n <Dropzone\n ref={this.dropzoneRef}\n multiple={false}\n accept={accept}\n noKeyboard\n noClick\n maxSize={this.props.schema.maxSize || 2 * 1024 * 1024}\n onDragEnter={() => {\n this.setState({ uploadFile: 'dragging' });\n }}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert(\n (errors &&\n errors[0] &&\n errors[0].errors &&\n errors[0].errors[0] &&\n errors[0].errors[0].message) ||\n I18n.t('Cannot upload'),\n );\n } else {\n this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n ...(disabled ? styles.disabledOpacity : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n {this.state.uploadFile === 'dragging' ? (\n <div\n style={{\n ...styles.uploadCenterDiv,\n ...(this.state.uploadError ? styles.error : undefined),\n }}\n >\n <div style={styles.uploadCenterTextAndIcon}>\n <UploadIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? I18n.t('ra_Drop file here')\n : I18n.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </div>\n ) : null}\n {element}\n {this.renderDeleteDialog()}\n </div>\n )}\n </Dropzone>\n );\n }\n}\n\nexport default ConfigFileSelector;\n","import React, { type JSX } from 'react';\n\nimport { Button, TextField, IconButton } from '@mui/material';\n\nimport {\n Article as IconText,\n Code as IconCode,\n PlayArrow as IconPlay,\n Videocam as IconVideo,\n} from '@mui/icons-material';\n\nimport { DialogSelectFile } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFile } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigFileSelector from './ConfigFileSelector';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n fullWidthOneButton: {\n width: 'calc(100% - 69px)',\n marginRight: 4,\n },\n fullWidthIcon: {\n width: 'calc(100% - 119px)',\n marginRight: 4,\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n },\n};\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp', 'gif', 'apng', 'avif', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\ninterface ConfigFileProps extends ConfigGenericProps {\n schema: ConfigItemFile;\n}\n\ninterface ConfigFileState extends ConfigGenericState {\n showFileBrowser?: boolean;\n}\n\nclass ConfigFile extends ConfigGeneric<ConfigFileProps, ConfigFileState> {\n private imagePrefix = '../..';\n\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.imagePrefix = this.props.oContext.imagePrefix === undefined ? './files' : this.props.oContext.imagePrefix;\n this.setState({ value: value ?? '' });\n }\n\n static getDerivedStateFromProps(props: ConfigFileProps, state: ConfigFileState): Partial<ConfigFileState> | null {\n const value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n value === null ||\n value === undefined ||\n value.toString().trim() !== (state.value || '').toString().trim()\n ) {\n return { value: value ?? '' };\n }\n return null;\n }\n\n loadFile(): Promise<{ file: string; mimeType: string } | null> {\n const pos = this.state.value.indexOf('/');\n if (pos !== -1) {\n const adapter = this.state.value.substring(0, pos);\n const path = this.state.value.substring(pos + 1);\n return this.props.oContext.socket.readFile(adapter, path, true);\n }\n\n return Promise.resolve(null);\n }\n\n play(): void {\n void this.loadFile().then(data => {\n if (typeof AudioContext !== 'undefined' && data?.file) {\n const oContext = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n void oContext.decodeAudioData(\n buf,\n (buffer: AudioBuffer): void => {\n const source = oContext.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sounds to play\n source.connect(oContext.destination); // connect the source to the oContext's destination (the speakers)\n source.start(0);\n },\n (err: DOMException): void => window.alert(`Cannot play: ${err.message}`),\n );\n }\n });\n }\n\n getIcon(): JSX.Element | null {\n const extension = this.state.value.split('.').pop().toLowerCase();\n if (IMAGE_EXT.includes(extension)) {\n return (\n <div\n style={{\n ...styles.selectedImage,\n backgroundImage: `url(${this.imagePrefix}/${this.state.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n />\n );\n }\n if (AUDIO_EXT.includes(extension)) {\n return (\n <IconButton\n style={{ color: '#00FF00' }}\n onClick={() => this.play()}\n >\n <IconPlay />\n </IconButton>\n );\n }\n if (DOC_EXT.includes(extension)) {\n return <IconText />;\n }\n if (VIDEO_EXT.includes(extension)) {\n return <IconVideo />;\n }\n if (JS_EXT.includes(extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderFileBrowser(): JSX.Element | null {\n if (!this.state.showFileBrowser) {\n return null;\n }\n return (\n <DialogSelectFile\n imagePrefix={this.props.oContext.imagePrefix}\n socket={this.props.oContext.socket}\n selected={this.state.value}\n onClose={() => this.setState({ showFileBrowser: false })}\n onOk={_value => {\n const value = Array.isArray(_value) ? _value[0] : _value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()),\n );\n }}\n selectOnlyFolders={this.props.schema.selectOnlyFolders}\n allowUpload={this.props.schema.allowUpload}\n allowDownload={this.props.schema.allowDownload}\n allowCreateFolder={this.props.schema.allowCreateFolder}\n allowView={this.props.schema.allowView}\n showToolbar={this.props.schema.showToolbar}\n limitPath={this.props.schema.limitPath}\n theme={this.props.oContext.theme}\n />\n );\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const icon = this.getIcon();\n\n return (\n <div style={styles.fullWidth}>\n {icon}\n <TextField\n variant=\"standard\"\n style={icon ? styles.fullWidthIcon : styles.fullWidthOneButton}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: !!this.props.schema.disableEdit,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(\n this.props.attr,\n this.props.schema.trim === false ? value : (value || '').trim(),\n ),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n <Button\n disabled={disabled}\n variant=\"outlined\"\n onClick={() => this.setState({ showFileBrowser: true })}\n >\n ...\n </Button>\n {this.renderFileBrowser()}\n </div>\n );\n }\n}\n\nexport default ConfigFile;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { TextWithIcon, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemFunc } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigFuncProps extends ConfigGenericProps {\n schema: ConfigItemFunc;\n}\n\ninterface ConfigFuncState extends ConfigGenericState {\n selectOptions?: { value: string; label: string; obj?: ioBroker.EnumObject }[];\n}\n\nclass ConfigFunc extends ConfigGeneric<ConfigFuncProps, ConfigFuncState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n void this.props.oContext.socket.getEnums('functions').then(enums => {\n const selectOptions: { value: string; label: string }[] = Object.keys(enums).map(id => ({\n value: this.props.schema.short ? id.replace('enum.functions.', '') : id,\n label: this.getText(enums[id].common.name),\n obj: enums[id],\n }));\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\n this.setState({ value, selectOptions });\n });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() =>\n item ? (\n item.obj ? (\n <TextWithIcon\n value={item.obj}\n themeType={this.props.oContext.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n item.label\n )\n ) : (\n ''\n )\n }\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.obj ? (\n <TextWithIcon\n value={it.obj}\n themeType={this.props.oContext.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n it.label\n )}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigFunc;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, FormHelperText, MenuItem, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemIP } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigIPProps extends ConfigGenericProps {\n schema: ConfigItemIP;\n}\n\ninterface ConfigIPState extends ConfigGenericState {\n ips?: { name: string; address: string; family: string; internal?: boolean }[];\n}\n\nclass ConfigIP extends ConfigGeneric<ConfigIPProps, ConfigIPState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.oContext.socket\n .getHostByIp(this.props.common.host)\n .then(ips => {\n // [{name, address, family}]\n if (!this.props.schema.listenOnAllPorts) {\n ips = ips.filter(item => item.address !== '0.0.0.0' && item.address !== '::');\n }\n if (this.props.schema.onlyIp4) {\n ips = ips.filter(item => item.family === 'ipv4');\n } else if (this.props.schema.onlyIp6) {\n ips = ips.filter(item => item.family === 'ipv6');\n }\n if (this.props.schema.noInternal) {\n ips = ips.filter(item => !item.internal);\n }\n ips.forEach(item => {\n if (item.address === '0.0.0.0') {\n item.name = `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`;\n } else if (item.address === '::') {\n item.name = `[IPv6] :: - ${I18n.t('ra_Listen on all IPs')}`;\n }\n });\n this.setState({ ips });\n })\n .catch(e => console.error(e));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const item = this.state.ips?.find(it => it.address === value);\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.state.ips && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.ips ? (\n <TextField\n fullWidth\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => item?.name || val}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.ips?.map((it, i) => (\n <MenuItem\n key={i}\n value={it.address}\n >\n {it.name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigIP;\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemImageSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigImageSendToProps extends ConfigGenericProps {\n schema: ConfigItemImageSendTo;\n}\n\ninterface ConfigImageSendToState extends ConfigGenericState {\n image?: string;\n}\n\nclass ConfigImageSendTo extends ConfigGeneric<ConfigImageSendToProps, ConfigImageSendToState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n componentDidMount(): void {\n super.componentDidMount();\n\n this.askInstance();\n }\n\n askInstance(): void {\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData, null, true);\n if (dataStr) {\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${JSON.stringify(data)}`);\n }\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then(image => this.setState({ image: image || '' }));\n }\n }\n\n getContext(): string {\n const localContext: Record<string, any> = {};\n\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n\n return JSON.stringify(localContext);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (this.props.alive) {\n const localContext = this.getContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.image === undefined) {\n return null;\n }\n\n return (\n <img\n alt=\"dynamic content\"\n src={this.state.image}\n style={{ width: this.props.schema.width || '100%', height: this.props.schema.height }}\n />\n );\n }\n}\n\nexport default ConfigImageSendTo;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormHelperText, FormControl } from '@mui/material';\n\nimport { UploadImage } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemImageUpload } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigImageUploadProps extends ConfigGenericProps {\n schema: ConfigItemImageUpload;\n}\n\ninterface ConfigImageUploadState extends ConfigGenericState {\n image?: string;\n oContext?: string;\n}\n\nclass ConfigImageUpload extends ConfigGeneric<ConfigImageUploadProps, ConfigImageUploadState> {\n private index: number;\n\n constructor(props: ConfigImageUploadProps) {\n super(props);\n this.index = Date.now();\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n\n if (this.props.schema.base64) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n } else {\n void this.props.oContext.socket\n .fileExists(`${this.props.oContext.adapterName}.${this.props.oContext.instance}`, this.props.attr)\n .then(exist => exist && this.loadImage());\n }\n }\n\n _getUrl(update?: boolean): string {\n if (update) {\n this.index = Date.now();\n }\n let url = `files/${this.props.oContext.adapterName}.${this.props.oContext.instance}/${this.props.attr}?t=${this.index}`;\n if (window.location.port === '3000') {\n url = `${window.location.protocol}//${window.location.hostname}:8081/${url}`;\n }\n\n return url;\n }\n\n loadImage(): void {\n void fetch(this._getUrl())\n .then(res => res.blob())\n .then(blob => {\n const reader = new FileReader();\n reader.onload = () => {\n this.setState({ value: reader.result });\n };\n reader.readAsDataURL(blob);\n })\n .catch(e => console.error(e));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <UploadImage\n error={!!error}\n disabled={disabled}\n accept={this.props.schema.accept}\n crop={this.props.schema.crop}\n maxSize={this.props.schema.maxSize || 256 * 1024}\n icon={this.state.value || undefined}\n removeIconFunc={() =>\n this.setState({ value: null }, () => {\n if (this.props.schema.base64) {\n const mayBePromise = this.onChange(this.props.attr, this.state.value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n } else {\n // delete file to /instance/attr\n void this.props.oContext.socket\n .deleteFile(`${this.props.oContext.adapterName}.${this.props.oContext.instance}`, this.props.attr)\n .catch(e => console.error(e));\n }\n })\n }\n onChange={base64 =>\n this.setState({ value: base64 }, () => {\n if (this.props.schema.base64) {\n const mayBePromise = this.onChange(this.props.attr, this.state.value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n } else if (base64.startsWith('data')) {\n base64 = base64.split(',')[1];\n }\n // upload file to /instance/attr\n this.props.oContext.socket\n .writeFile64(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.attr,\n base64,\n )\n .catch(e => console.error(e));\n })\n }\n />\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigImageUpload;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemInstanceSelect } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 20,\n height: 20,\n marginRight: 4,\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemInstanceSelect;\n}\n\ninterface ConfigInstanceSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: string; icon?: string }[];\n}\n\nclass ConfigInstanceSelect extends ConfigGeneric<ConfigInstanceSelectProps, ConfigInstanceSelectState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n let adapter = this.props.schema.adapter;\n if (adapter === '_dataSources') {\n adapter = undefined;\n }\n\n void this.props.oContext.socket\n .getAdapterInstances(adapter, true)\n .then(async instances => {\n if (this.props.schema.adapter === '_dataSources') {\n // get only \"data-sources\", like history, sql, influx\n instances = instances.filter(instance => instance?.common?.getHistory);\n } else if (this.props.schema.adapter) {\n instances = instances.filter(instance =>\n instance?._id.startsWith(`system.adapter.${this.props.schema.adapter}.`),\n );\n } else if (this.props.schema.adapters && Array.isArray(this.props.schema.adapters)) {\n instances = instances.filter(instance =>\n this.props.schema.adapters.includes(instance?.common?.name),\n );\n }\n\n if (this.props.schema.onlyEnabled) {\n instances = instances.filter(instance => instance?.common?.enabled);\n }\n\n const selectOptions: { label: string; value: string; icon?: string }[] = instances.map(instance => ({\n value: this.props.schema.long\n ? instance._id\n : this.props.schema.short\n ? instance._id.split('.').pop()\n : instance._id.replace(/^system\\.adapter\\./, ''),\n label: `${instance.common.name} [${instance._id.replace(/^system\\.adapter\\./, '')}]`,\n icon: `adapter/${instance.common.name}/${instance.common.icon}`,\n }));\n\n selectOptions.sort((a, b) => {\n if (a.value > b.value) {\n return 1;\n }\n if (a.value < b.value) {\n return -1;\n }\n return 0;\n });\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n if (this.props.schema.all) {\n selectOptions.unshift({ label: I18n.t('sch_all'), value: '*' });\n }\n\n this.setState({ value: value || '', selectOptions });\n\n await this.props.oContext.socket.subscribeObject(\n `system.adapter.${adapter ? `${adapter}.` : ''}*`,\n this.onInstancesUpdate,\n );\n })\n .catch(e => console.error(`Cannot get instances: ${e}`));\n }\n\n componentWillUnmount(): void {\n void this.props.oContext.socket.unsubscribeObject('system.adapter.*', this.onInstancesUpdate).then(() => {});\n super.componentWillUnmount();\n }\n\n onInstancesUpdate = (id: string, obj?: ioBroker.Object | null): void => {\n if (!id.match(/^system\\.adapter\\.[-_a-z\\d]+\\.\\d+$/)) {\n return;\n }\n const _id = this.props.schema.long\n ? id\n : this.props.schema.short\n ? id.split('.').pop()\n : id.replace(/^system\\.adapter\\./, '');\n const index = this.state.selectOptions.findIndex(item => item.value === _id);\n if (!obj) {\n // deleted\n if (index !== -1) {\n const selectOptions: { label: string; value: string; icon?: string }[] = JSON.parse(\n JSON.stringify(this.state.selectOptions),\n );\n\n const newState: Partial<ConfigInstanceSelectState> = {};\n if (this.state.value === selectOptions[index].value) {\n newState.value = ConfigGeneric.NONE_VALUE;\n }\n selectOptions.splice(index, 1);\n newState.selectOptions = selectOptions;\n\n this.setState(newState as ConfigInstanceSelectState);\n }\n } else {\n if (this.props.schema.adapter === '_dataSources' && (!obj.common || !obj.common.getHistory)) {\n return;\n }\n\n if (index === -1) {\n const selectOptions: { label: string; value: string; icon?: string }[] = JSON.parse(\n JSON.stringify(this.state.selectOptions),\n );\n const name =\n typeof obj.common.name === 'object'\n ? obj.common.name[I18n.getLanguage()] || obj.common.name.en\n : obj.common.name;\n selectOptions.push({\n value: this.props.schema.long\n ? obj._id\n : this.props.schema.short\n ? obj._id.split('.').pop()\n : obj._id.replace(/^system\\.adapter\\./, ''),\n label: `${name} [${obj._id.replace(/^system\\.adapter\\./, '')}]`,\n icon: `adapter/${name}/${obj.common.icon}`,\n });\n selectOptions.sort((a, b) => (a.label > b.label ? 1 : a.label < b.label ? -1 : 0));\n this.setState({ selectOptions });\n }\n }\n };\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n fullWidth\n key={this.props.attr}\n variant=\"standard\"\n >\n {this.props.schema.label ? (\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={() => (\n <span style={{ display: 'flex' }}>\n {item?.icon ? (\n <img\n src={`./${item.icon}`}\n alt={item.value}\n style={styles.icon}\n />\n ) : null}\n {this.getText(item?.label, true)}\n </span>\n )}\n onChange={e =>\n this.setState({ value: e.target.value }, () => this.onChange(this.props.attr, this.state.value))\n }\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.icon ? (\n <img\n src={`./${it.icon}`}\n alt={it.value}\n style={styles.icon}\n />\n ) : null}\n {this.getText(it.label, true)}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigInstanceSelect;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, FormHelperText, MenuItem, FormControl, Select } from '@mui/material';\n\nimport type { ConfigItemInterface } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface NetworkInterfaceBase {\n address: string;\n netmask: string;\n mac: string;\n internal: boolean;\n cidr: string | null;\n}\ninterface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase {\n family: 'IPv4';\n scopeid?: undefined;\n}\ninterface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase {\n family: 'IPv6';\n scopeid: number;\n}\ntype NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6;\n\nconst styles: Record<string, React.CSSProperties> = {\n address: {\n fontSize: 'smaller',\n opacity: 0.5,\n marginLeft: 8,\n },\n};\n\ninterface ConfigInterfaceProps extends ConfigGenericProps {\n schema: ConfigItemInterface;\n}\n\ninterface ConfigInterfaceState extends ConfigGenericState {\n interfaces?: { value: string; address: string }[];\n}\n\nclass ConfigInterface extends ConfigGeneric<ConfigInterfaceProps, ConfigInterfaceState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.oContext.socket\n .getObject(`system.host.${this.props.common.host}`)\n .then(obj => {\n const interfaces: { value: string; address: string }[] = [];\n if (obj?.native?.hardware?.networkInterfaces) {\n const list = obj.native.hardware.networkInterfaces;\n Object.keys(list).forEach(inter => {\n if (this.props.schema.ignoreInternal && !list[inter].find(_ip => !_ip.internal)) {\n return;\n }\n if (\n this.props.schema.ignoreLoopback &&\n list[inter].find(_ip => _ip.address === '127.0.0.1' || _ip.address === '::1')\n ) {\n return;\n }\n\n // find ipv4 address\n let ip: NetworkInterfaceInfo = list[inter].find(_ip => _ip.family === 'IPv4');\n ip = ip || list[inter].find(_ip => _ip.family === 'IPv6');\n interfaces.push({ value: inter, address: ip.address });\n });\n }\n\n this.setState({ interfaces });\n })\n .catch(e => window.alert(`Cannot read interfaces: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const item = this.state.interfaces?.find(it => it.value === value);\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.state.interfaces?.length && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.interfaces?.length ? (\n <TextField\n fullWidth\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => {\n if (item) {\n return (\n <span>\n {item.value}\n <span style={styles.address}>{item.address}</span>\n </span>\n );\n }\n return val;\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.interfaces.map((it, i) => (\n <MenuItem\n key={i}\n value={it.value}\n >\n <span>\n {it.value}\n <span style={styles.address}>{it.address}</span>\n </span>\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigInterface;\n","import React, { type JSX, useEffect, useState } from 'react';\n\nimport { Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Button } from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, React.CSSProperties> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: {\n color: 'primary.main',\n },\n};\n\ninterface CustomModalProps {\n toggleTranslation?: () => void;\n noTranslation?: boolean;\n title: string;\n fullWidth?: boolean;\n help?: string;\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false;\n progress?: boolean;\n icon?: any;\n applyDisabled?: boolean;\n applyButton?: boolean;\n onClose: () => void;\n children: JSX.Element | JSX.Element[] | string | string[] | undefined | null;\n titleButtonApply?: string;\n titleButtonClose?: string;\n onApply: (value: string) => void;\n textInput?: boolean;\n defaultValue?: string;\n overflowHidden?: boolean;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n applyDisabled,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon = null;\n\n if (icon) {\n Icon = icon;\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? styles.languageButtonActive : {}) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n sx={{ ...(overflowHidden ? styles.overflowHidden : {}), ...styles.content }}\n style={{ paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"outlined\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {applyButton !== false && (\n <Button\n startIcon={<CheckIcon />}\n disabled={progress || (applyDisabled && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={() => onClose && onClose()}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","import React, { type JSX } from 'react';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nconst styles: Record<string, React.CSSProperties> = {\n jsonError: {\n border: '1px solid red',\n minHeight: 200,\n },\n jsonNoError: {\n border: '1px solid #00000000',\n minHeight: 200,\n },\n};\n\ninterface EditorProps {\n fontSize?: number;\n value?: string;\n defaultValue?: string;\n mode?: 'json' | 'css' | 'html';\n name: string;\n onChange: (newValue: string) => void;\n themeType: string;\n editValueMode?: boolean; // flag that indicates the \"value edit mode\"\n error?: boolean;\n}\n\nfunction Editor(props: EditorProps): JSX.Element {\n return (\n <AceEditor\n style={props.error === true ? styles.jsonError : props.error === false ? styles.jsonNoError : undefined}\n mode={props.mode || 'json'}\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={props.editValueMode}\n showGutter={props.editValueMode}\n highlightActiveLine={props.editValueMode}\n defaultValue={props.defaultValue}\n theme={props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={props.value}\n readOnly={!props.onChange}\n onChange={newValue => props.onChange(newValue)}\n name={props.name || 'UNIQUE_ID_OF_DIV1'}\n fontSize={props.fontSize || 14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n\n showLineNumbers: props.editValueMode,\n tabSize: props.editValueMode ? 2 : undefined,\n }}\n editorProps={{ $blockScrolling: true }}\n />\n );\n}\n\nexport default Editor;\n","import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl, Button } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemJsonEditor } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport CustomModal from './wrapper/Components/CustomModal';\nimport Editor from './wrapper/Components/Editor';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n // marginLeft: 4,\n minWidth: 48,\n },\n wrapper: {\n width: 'calc(100vw - 40px)',\n height: 'calc(100vh - 188px)',\n },\n};\n\ninterface ConfigJsonEditorProps extends ConfigGenericProps {\n schema: ConfigItemJsonEditor;\n}\n\ninterface ConfigJsonEditorState extends ConfigGenericState {\n initialized?: boolean;\n showSelectId?: boolean;\n jsonError?: boolean;\n}\n\nclass ConfigJsonEditor extends ConfigGeneric<ConfigJsonEditorProps, ConfigJsonEditorState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || {};\n this.setState({ value, initialized: true, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson !== false) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.initialized) {\n return null;\n }\n\n const { schema, data, attr } = this.props;\n const { value, showSelectId } = this.state;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <div style={styles.flex}>\n <Button\n color=\"grey\"\n disabled={disabled}\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n {I18n.t('ra_JSON editor')}\n </Button>\n </div>\n {showSelectId ? (\n <CustomModal\n title={this.getText(schema.label)}\n overflowHidden\n onClose={() =>\n this.setState({ showSelectId: false, value: ConfigGeneric.getValue(data, attr) || {} })\n }\n onApply={() => this.setState({ showSelectId: false }, () => this.onChange(attr, value))}\n >\n <div style={{ ...styles.wrapper, ...(this.state.jsonError ? {} : undefined) }}>\n <Editor\n value={typeof value === 'object' ? JSON.stringify(value) : value}\n onChange={newValue =>\n this.setState({ value: newValue, jsonError: this.validateJson(newValue) })\n }\n name=\"ConfigJsonEditor\"\n themeType={this.props.oContext.themeType}\n />\n </div>\n </CustomModal>\n ) : null}\n {schema.help || this.state.jsonError ? (\n <FormHelperText>\n {this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigJsonEditor;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemLanguage } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst LANGUAGES = [\n {\n value: 'en',\n label: 'English',\n },\n {\n value: 'de',\n label: 'Deutsch',\n },\n {\n value: 'ru',\n label: 'русский',\n },\n {\n value: 'pt',\n label: 'Portugues',\n },\n {\n value: 'nl',\n label: 'Nederlands',\n },\n {\n value: 'fr',\n label: 'français',\n },\n {\n value: 'it',\n label: 'Italiano',\n },\n {\n value: 'es',\n label: 'Espanol',\n },\n {\n value: 'pl',\n label: 'Polski',\n },\n {\n value: 'uk',\n label: 'Український',\n },\n {\n value: 'zh-cn',\n label: '简体中文',\n },\n] as const;\n\ninterface LanguageSelectOption {\n /** Value to save */\n value: string;\n /** Label to show */\n label: string;\n}\n\ninterface ConfigLanguageProps extends ConfigGenericProps {\n schema: ConfigItemLanguage;\n}\n\ninterface ConfigLanguageState extends ConfigGenericState {\n selectOptions: LanguageSelectOption[];\n}\n\nclass ConfigLanguage extends ConfigGeneric<ConfigLanguageProps, ConfigLanguageState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const languages: LanguageSelectOption[] = [...LANGUAGES];\n if (this.props.schema.system) {\n languages.unshift({ value: '', label: I18n.t('ra_System language') });\n } else {\n languages.unshift({ value: '', label: I18n.t('ra_none') });\n }\n\n this.setState({\n value: this.props.schema.system ? value || '' : value || I18n.getLanguage(),\n selectOptions: languages,\n });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(\n it => it.value === this.state.value || (!it.value && !this.state.value),\n );\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={disabled}\n value={this.state.value || '_'}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n let { value } = e.target;\n if (value === '_') {\n value = '';\n }\n\n this.setState({ value }, () => {\n const mayBePromise = this.onChange(this.props.attr, value);\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(err => console.error(err));\n }\n if (this.props.schema.changeGuiLanguage) {\n if (value) {\n if (value === I18n.getLanguage()) {\n return;\n }\n I18n.setLanguage(value);\n if (this.props.oContext.changeLanguage) {\n this.props.oContext.changeLanguage();\n }\n } else {\n void this.props.oContext.socket\n .getSystemConfig()\n .then((systemConfig: ioBroker.SystemConfigObject) => {\n if (systemConfig.common.language === I18n.getLanguage()) {\n return;\n }\n if (systemConfig.common.language) {\n I18n.setLanguage(systemConfig.common.language);\n if (this.props.oContext.changeLanguage) {\n this.props.oContext.changeLanguage();\n }\n }\n })\n .catch(e => console.error(`Cannot read system config: ${e}`));\n }\n }\n });\n }}\n >\n {this.state.selectOptions?.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n >\n {it.label}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigLanguage;\n","import React, { type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LinearProgress,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\nimport { Check, Close } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemLicense } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigLicenseProps extends ConfigGenericProps {\n schema: ConfigItemLicense;\n}\n\ninterface ConfigLicenseState extends ConfigGenericState {\n showLicenseDialog?: boolean;\n licenseChecked?: boolean;\n license?: string;\n loading?: boolean;\n error?: boolean;\n scrolledDown?: boolean;\n}\n\nclass ConfigLicense extends ConfigGeneric<ConfigLicenseProps, ConfigLicenseState> {\n private readonly scrollRef: React.RefObject<HTMLDivElement | HTMLPreElement>;\n\n constructor(props: ConfigLicenseProps) {\n super(props);\n this.scrollRef = React.createRef();\n }\n\n scrolledDown(): boolean {\n if (!this.scrollRef.current) {\n return false;\n }\n return (\n this.scrollRef.current.offsetHeight + this.scrollRef.current.scrollTop >=\n this.scrollRef.current.scrollHeight\n );\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n if (!ConfigGeneric.getValue(this.props.data, this.props.attr)) {\n if (this.props.schema.licenseUrl) {\n this.setState({ showLicenseDialog: true, loading: true, scrolledDown: false });\n\n fetch(this.props.schema.licenseUrl)\n .then(res => res.text())\n .then(text => this.setState({ license: text, loading: false }))\n .catch(e =>\n this.setState({\n license: e.toString(),\n loading: false,\n error: true,\n scrolledDown: false,\n }),\n );\n } else {\n this.setState({ showLicenseDialog: true, scrolledDown: false });\n }\n setTimeout(() => {\n // install scroll handler\n if (this.scrollRef.current) {\n const scrolledDown = this.scrolledDown();\n if (!scrolledDown) {\n this.scrollRef.current.addEventListener('scroll', () => {\n if (!this.state.scrolledDown && this.scrolledDown()) {\n this.setState({ scrolledDown: true });\n }\n });\n } else {\n this.setState({ scrolledDown: true });\n }\n }\n }, 1000);\n }\n }\n\n renderItem(_error: string, disabled: boolean /*, defaultValue */): JSX.Element | null {\n if (!this.state.showLicenseDialog) {\n return null;\n }\n\n return (\n <Dialog\n maxWidth=\"lg\"\n open={!0}\n onClose={(e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.setState({ showLicenseDialog: false });\n }\n }}\n >\n <DialogTitle>\n {this.props.schema.title ? I18n.t(this.props.schema.title) : I18n.t('ra_License agreement')}\n </DialogTitle>\n <DialogContent>\n {this.props.schema.licenseUrl ? (\n <>\n {this.state.loading ? <LinearProgress /> : null}\n <pre\n ref={this.scrollRef as React.RefObject<HTMLPreElement>}\n style={{\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n fontSize: 14,\n }}\n >\n {this.state.license}\n </pre>\n </>\n ) : null}\n {!this.props.schema.licenseUrl && this.props.schema.texts ? (\n <div\n ref={this.scrollRef as React.RefObject<HTMLDivElement>}\n style={{\n width: '100%',\n height: '100%',\n overflowY: 'auto',\n fontSize: 14,\n }}\n >\n {this.props.schema.texts.map((text, i) =>\n this.props.schema.noTranslation ? <p key={i}>{text}</p> : <p key={i}>{I18n.t(text)}</p>,\n )}\n </div>\n ) : null}\n </DialogContent>\n <DialogActions>\n {this.props.schema.checkBox ? (\n <FormControlLabel\n control={\n <Checkbox\n disabled={disabled}\n checked={!!this.state.licenseChecked}\n onClick={() => this.setState({ licenseChecked: !this.state.licenseChecked })}\n />\n }\n label={I18n.t(this.props.schema.checkBox)}\n />\n ) : null}\n <Button\n disabled={\n disabled ||\n this.state.loading ||\n this.state.error ||\n (this.props.schema.checkBox && !this.state.licenseChecked) ||\n !this.state.scrolledDown\n }\n onClick={() => {\n this.setState({ showLicenseDialog: false });\n const mayBePromise = this.onChange(this.props.attr, true);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n color=\"primary\"\n variant=\"contained\"\n startIcon={<Check />}\n >\n {this.props.schema.agreeText\n ? I18n.t(this.props.schema.agreeText)\n : I18n.t('ra_Accept license')}\n </Button>\n <Button\n onClick={() => {\n this.setState({ showLicenseDialog: false });\n setTimeout(() => this.setState({ showLicenseDialog: true }), 2000);\n }}\n color=\"grey\"\n variant=\"contained\"\n startIcon={<Close />}\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ConfigLicense;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemNumber } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n control: {\n flexDirection: 'row',\n width: '100%',\n },\n};\n\ninterface ConfigNumberProps extends ConfigGenericProps {\n schema: ConfigItemNumber;\n}\n\ninterface ConfigNumberState extends ConfigGenericState {\n _value: string;\n oldValue: string | null;\n}\n\nclass ConfigNumber extends ConfigGeneric<ConfigNumberProps, ConfigNumberState> {\n private updateTimeout?: ReturnType<typeof setTimeout>;\n\n componentDidMount(): void {\n super.componentDidMount();\n let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (_value === null || _value === undefined) {\n _value = '';\n }\n\n if (Array.isArray(_value) && this.props.oContext.multiEdit) {\n _value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ _value, oldValue: _value });\n return;\n }\n\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n }\n\n static getDerivedStateFromProps(\n props: ConfigNumberProps,\n state: ConfigNumberState,\n ): Partial<ConfigNumberState> | null {\n if (\n (props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (props.oContext.multiEdit && state._value === ConfigGeneric.DIFFERENT_VALUE) {\n return { _value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n if (\n _value === null ||\n _value === undefined ||\n state.oldValue === null ||\n state.oldValue === undefined ||\n (_value.toString() !== parseFloat(state._value).toString() &&\n _value.toString() !== state.oldValue.toString())\n ) {\n return { _value };\n }\n\n return null;\n }\n\n checkValue(value: string): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n value = value.toString().trim();\n const f = value === '' ? 0 : parseFloat(value);\n\n if (value !== '' && Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n if (value !== '' && window.isFinite(f)) {\n if (this.props.schema.min !== undefined && f < this.props.schema.min) {\n return 'ra_Too small';\n }\n if (this.props.schema.max !== undefined && f > this.props.schema.max) {\n return 'ra_Too big';\n }\n if (value === '' || value === '-' || Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n return null;\n }\n\n return 'ra_Not a number';\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element | null {\n const isIndeterminate = Array.isArray(this.state._value) || this.state._value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = undefined;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = undefined;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: number | null | undefined) => a || a === 0)\n .map((item: number) => ({ label: item.toString(), value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n freeSolo\n value={arr[0]}\n // @ts-expect-error needs investigation if this really has no effect\n getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value: (typeof arr)[number]) => {\n const mayBePromise = this.onChange(this.props.attr, value?.value, () => {\n this.setState({ _value: value?.value, oldValue: this.state._value });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n }}\n options={arr}\n getOptionLabel={(option: (typeof arr)[number]) => option.label}\n renderInput={params => (\n <TextField\n {...params}\n label={this.getText(this.props.schema.label)}\n variant=\"standard\"\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment: this.props.schema.unit\n ? this.getText(this.props.schema.unit, this.props.schema.noTranslation)\n : undefined,\n },\n }}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={!!disabled}\n />\n )}\n />\n );\n }\n if (!error && this.state._value !== null && this.state._value !== undefined && this.state._value) {\n error = this.checkValue(this.state._value);\n if (error) {\n error = I18n.t(error as string);\n }\n }\n\n return (\n <FormControl\n variant=\"standard\"\n style={styles.control}\n >\n <TextField\n variant=\"standard\"\n type=\"number\"\n fullWidth\n slotProps={{\n htmlInput: {\n min: this.props.schema.min,\n max: this.props.schema.max,\n step: this.props.schema.step,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment: this.props.schema.unit\n ? this.getText(this.props.schema.unit, this.props.schema.noTranslation)\n : undefined,\n },\n }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n onChange={e => {\n const _value = e.target.value; // value is always a string and it is validly formatted\n const _error = this.checkValue(_value);\n if (_error) {\n this.onError(this.props.attr, I18n.t(_error));\n } else {\n this.onError(this.props.attr); // clear error\n }\n\n this.setState({ _value, oldValue: this.state._value }, () =>\n this.onChange(this.props.attr, parseFloat(_value)),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n error && typeof error === 'string'\n ? error\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n </FormControl>\n );\n }\n}\n\nexport default ConfigNumber;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormControl, Button, TextField } from '@mui/material';\n\nimport { DialogSelectID } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemObjectId } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n },\n};\n\ninterface ConfigObjectIdProps extends ConfigGenericProps {\n schema: ConfigItemObjectId;\n}\n\ninterface ConfigObjectIdState extends ConfigGenericState {\n showSelectId?: boolean;\n initialized?: boolean;\n}\n\nclass ConfigObjectId extends ConfigGeneric<ConfigObjectIdProps, ConfigObjectIdState> {\n componentDidMount(): void {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, initialized: true });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.initialized) {\n return null;\n }\n const socket = this.props.oContext.socket;\n const { schema, attr } = this.props;\n const { value, showSelectId } = this.state;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(attr, value_));\n }}\n />\n <Button\n color=\"grey\"\n disabled={disabled}\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n ...\n </Button>\n </div>\n {showSelectId ? (\n <DialogSelectID\n imagePrefix={\n this.props.oContext.imagePrefix === undefined ? '../..' : this.props.oContext.imagePrefix\n }\n dialogName={`admin.${this.props.oContext.adapterName}`}\n filterFunc={schema.filterFunc}\n themeType={this.props.oContext.themeType}\n theme={this.props.oContext.theme}\n types={schema.types ? (Array.isArray(schema.types) ? schema.types : [schema.types]) : undefined}\n customFilter={schema.customFilter}\n filters={schema.filters}\n socket={socket}\n selected={value}\n root={schema.root}\n onClose={() => this.setState({ showSelectId: false })}\n onOk={value_ =>\n this.setState({ showSelectId: false, value: value_ }, () => this.onChange(attr, value_))\n }\n />\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigObjectId;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton, InputAdornment } from '@mui/material';\n\nimport { Visibility, VisibilityOff } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemPassword } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n display: 'inline-block',\n },\n halfWidth1: {\n width: 'calc(50% - 5px)',\n display: 'inline-block',\n marginRight: 8,\n },\n halfWidth2: {\n width: 'calc(50% - 5px)',\n display: 'inline-block',\n },\n};\n\nconst PASSWORD_PLACEHOLDER = '____ppp____';\n\ninterface ConfigPasswordProps extends ConfigGenericProps {\n schema: ConfigItemPassword;\n}\n\ninterface ConfigPasswordState extends ConfigGenericState {\n _notEqual?: boolean;\n _repeat?: string;\n _visible?: boolean;\n}\n\nclass ConfigPassword extends ConfigGeneric<ConfigPasswordProps, ConfigPasswordState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({\n _repeat: value ? PASSWORD_PLACEHOLDER : '',\n _visible: false,\n value: value ? PASSWORD_PLACEHOLDER : '',\n _notEqual: false,\n });\n }\n\n onChangePassword(password?: string, repeatPassword?: string): void {\n if (password === undefined) {\n password = this.state.value;\n }\n if (repeatPassword === undefined) {\n repeatPassword = this.state._repeat;\n }\n const _notEqual = !!this.props.schema.repeat && repeatPassword !== password;\n this.setState({ value: password, _repeat: repeatPassword, _notEqual }, () => {\n if (_notEqual) {\n this.onError(this.props.attr, I18n.t('ra_Passwords are not equal!'));\n } else {\n this.onError(this.props.attr); // clear error\n const mayBePromise = this.onChange(this.props.attr, password);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => this.onError(this.props.attr, e));\n }\n }\n });\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (this.state._notEqual === undefined) {\n return null;\n }\n\n const password = (\n <TextField\n variant=\"standard\"\n fullWidth\n type={this.state._visible && this.state.value !== PASSWORD_PLACEHOLDER ? 'text' : 'password'}\n value={this.state.value}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(e.target.value)}\n label={this.getText(this.props.schema.label)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n endAdornment:\n this.state.value &&\n this.state.value !== PASSWORD_PLACEHOLDER &&\n this.props.schema.visible &&\n !disabled &&\n !this.props.schema.readOnly ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n tabIndex={-1}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({ _visible: !this.state._visible });\n }}\n edge=\"end\"\n >\n {this.state._visible ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ) : undefined,\n },\n htmlInput: {\n autoComplete: 'new-password',\n form: { autoComplete: 'off' },\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n helperText={\n this.state._notEqual\n ? I18n.t('ra_Passwords are not equal!')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n\n if (this.props.schema.repeat && !this.props.schema.readOnly) {\n const passwordRepeat = !this.state._visible ? (\n <TextField\n variant=\"standard\"\n fullWidth\n type=\"password\"\n value={this.state._repeat}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(undefined, e.target.value)}\n label={`${this.getText(this.props.schema.label)} (${I18n.t('ra_repeat')})`}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'new-password',\n form: { autoComplete: 'off' },\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n helperText={\n this.state._notEqual\n ? I18n.t('ra_Passwords are not equal!')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n ) : null;\n\n return (\n <div style={styles.fullWidth}>\n <div style={styles.halfWidth1}>{password}</div>\n <div style={styles.halfWidth2}>{passwordRepeat}</div>\n </div>\n );\n }\n return password;\n }\n}\n\nexport default ConfigPassword;\n","import React, { type JSX } from 'react';\n\nimport { IconButton, TextField } from '@mui/material';\n\nimport { I18n, IconCopy, Utils } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemPattern } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigPatternProps extends ConfigGenericProps {\n schema: ConfigItemPattern;\n}\n\nclass ConfigPattern extends ConfigGeneric<ConfigPatternProps, ConfigGenericState> {\n renderItem(_error: unknown, disabled: boolean): JSX.Element | null {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n disabled={!!disabled}\n slotProps={{\n input: {\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(\n this.getPattern(\n this.props.schema.pattern,\n null,\n this.props.schema.noTranslation,\n ),\n );\n window.alert(I18n.t('ra_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n },\n }}\n value={this.getPattern(this.props.schema.pattern, null, true)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n\nexport default ConfigPattern;\n","import React, { type JSX } from 'react';\n\nimport { TextField } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemPort } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n warning: {\n '& .Mui-error': {\n color: 'orange',\n },\n },\n};\n\ninterface Port {\n name: string;\n port: number;\n bind: string;\n v6bind: string;\n enabled: boolean;\n}\n\ninterface ConfigPortProps extends ConfigGenericProps {\n schema: ConfigItemPort;\n}\n\ninterface ConfigPortState extends ConfigGenericState {\n _value: string;\n oldValue: string | null;\n ports: Port[];\n}\n\nclass ConfigPort extends ConfigGeneric<ConfigPortProps, ConfigPortState> {\n private updateTimeout?: ReturnType<typeof setTimeout>;\n\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (_value === null || _value === undefined) {\n _value = '';\n }\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n\n // read all instances\n const instances: ioBroker.InstanceObject[] = await this.props.oContext.socket.getAdapterInstances();\n\n const ownId = `system.adapter.${this.props.oContext.adapterName}.${this.props.oContext.instance}`;\n const instanceObj: ioBroker.InstanceObject = (await this.props.oContext.socket.getObject(\n ownId,\n )) as ioBroker.InstanceObject;\n const ownHostname = instanceObj?.common.host;\n\n const ports: Port[] = [];\n instances.forEach(instance => {\n // ignore own instance and instances on another host\n if (!instance || instance._id === ownId || instance.common.host !== ownHostname) {\n return;\n }\n // check port only if bind attribute is present too\n if (!instance.native?.bind) {\n return;\n }\n\n // if let's encrypt is enabled and update is enabled, then add port to check\n if (instance?.native && instance.native.secure && instance.native.leEnabled && instance.native.leUpdate) {\n const port = parseInt(instance.native.leCheckPort || instance.native.lePort, 10);\n if (port) {\n ports.push({\n name: `${instance._id.replace('system.adapter.', '')} (LE)`,\n port,\n v6bind: instance.native.bind.includes(':') ? instance.native.bind : instance.native.v6bind,\n bind: instance.native.bind,\n enabled: !!instance.common?.enabled,\n });\n }\n }\n\n const port = parseInt(instance?.native?.port, 10);\n if (port) {\n ports.push({\n name: instance._id.replace('system.adapter.', ''),\n bind: instance.native.bind,\n v6bind: instance.native.bind.includes(':') ? instance.native.bind : instance.native.v6bind,\n port,\n enabled: !!instance.common?.enabled,\n });\n }\n });\n this.setState({ ports });\n }\n\n static getDerivedStateFromProps(props: ConfigPortProps, state: ConfigPortState): Partial<ConfigPortState> | null {\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n _value === null ||\n _value === undefined ||\n state.oldValue === null ||\n state.oldValue === undefined ||\n (_value.toString() !== parseInt(state._value, 10).toString() &&\n _value.toString() !== state.oldValue.toString())\n ) {\n return { _value };\n }\n\n return null;\n }\n\n checkValue(value: string): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n const min = this.props.schema.min === undefined ? 20 : this.props.schema.min;\n const max = this.props.schema.max || 0xffff;\n\n value = value.toString().trim();\n const f = value === '' ? 0 : parseInt(value, 10);\n\n if (value !== '' && Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n if (value !== '' && window.isFinite(Number(value))) {\n if (f < min) {\n return 'ra_Too small';\n }\n if (f > max) {\n return 'ra_Too big';\n }\n if (value === '' || value === '-' || Number.isNaN(f)) {\n return 'ra_Not a number';\n }\n\n return null;\n }\n\n return 'ra_Not a number';\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = undefined;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = undefined;\n }\n\n const min = this.props.schema.min === undefined ? 20 : this.props.schema.min;\n const max = this.props.schema.max || 0xffff;\n\n let warning;\n if (this.state.ports) {\n const num = parseInt(this.state._value, 10);\n\n if (num) {\n // filter ports only with the same bind address\n // todo: IPv6 (v6bind or '::/0')\n const ports = this.state.ports.filter(\n item =>\n !this.props.data.bind ||\n this.props.data.bind === item.bind ||\n this.props.data.bind === '0.0.0.0' ||\n item.bind === '0.0.0.0',\n );\n\n let idx = ports.findIndex(item => item.port === num && item.enabled);\n if (idx !== -1) {\n error = I18n.t('ra_Port is already used by %s', this.state.ports[idx].name);\n } else {\n idx = ports.findIndex(item => item.port === num && !item.enabled);\n if (idx !== -1) {\n warning = true;\n error = I18n.t('ra_Port could be used by %s', this.state.ports[idx].name);\n }\n }\n }\n }\n\n if (!error && this.state._value !== null && this.state._value !== undefined) {\n error = this.checkValue(this.state._value);\n if (typeof error === 'string') {\n error = I18n.t(error);\n }\n }\n\n return (\n <TextField\n variant=\"standard\"\n type=\"number\"\n fullWidth\n slotProps={{\n htmlInput: {\n min,\n max,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n sx={warning ? styles.warning : undefined}\n onChange={e => {\n const _value = Number(e.target.value.toString().replace(/[^0-9]/g, '')).toString();\n const _error = this.checkValue(_value);\n if (_error) {\n this.onError(this.props.attr, I18n.t(_error));\n } else {\n this.onError(this.props.attr); // clear error\n }\n\n this.setState({ _value, oldValue: this.state._value }, () => {\n if (_value.trim() === parseInt(_value, 10).toString()) {\n const maybePromise = this.onChange(this.props.attr, parseInt(_value, 10) || 0);\n if (maybePromise instanceof Promise) {\n maybePromise.catch(err => {\n console.error(`Cannot set value for ${this.props.attr}: ${err}`);\n });\n }\n }\n });\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n error && typeof error === 'string'\n ? error\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigPort;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { TextWithIcon, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemRoom } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigRoomProps extends ConfigGenericProps {\n schema: ConfigItemRoom;\n}\n\ninterface ConfigRoomState extends ConfigGenericState {\n selectOptions?: { value: string; label: string; obj?: ioBroker.EnumObject }[];\n}\n\nclass ConfigRoom extends ConfigGeneric<ConfigRoomProps, ConfigRoomState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n void this.props.oContext.socket\n .getEnums('rooms')\n .then(enums => {\n const selectOptions: { value: string; label: string; obj?: ioBroker.EnumObject }[] = Object.keys(\n enums,\n ).map(id => ({\n value: this.props.schema.short ? id.replace('enum.rooms.', '') : id,\n label: this.getText(enums[id].common.name),\n obj: enums[id],\n }));\n\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\n this.setState({ value, selectOptions });\n })\n .catch(e => console.error(`Cannot get enums: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(it => it.value === this.state.value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() =>\n item ? (\n item.obj ? (\n <TextWithIcon\n value={item.obj}\n themeType={this.props.oContext.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n item.label\n )\n ) : (\n ''\n )\n }\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value),\n );\n }}\n >\n {this.state.selectOptions.map(it => (\n <MenuItem\n key={it.value}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {it.obj ? (\n <TextWithIcon\n value={it.obj}\n themeType={this.props.oContext.themeType}\n lang={I18n.getLanguage()}\n />\n ) : (\n it.label\n )}\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigRoom;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, FormHelperText, FormControl, Select, MenuItem, ListSubheader } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSelect, ConfigItemSelectOption } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n noMargin: {\n '&>div': {\n marginTop: 0,\n },\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemSelect;\n}\n\ninterface ConfigInstanceSelectState extends ConfigGenericState {\n selectOptions?: { label: string; value: number | string; group?: boolean; hidden?: string | boolean }[];\n}\n\nclass ConfigSelect extends ConfigGeneric<ConfigInstanceSelectProps, ConfigInstanceSelectState> {\n private initialValue: string | string[] = '';\n\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions: {\n label: string;\n value: number | string;\n group?: boolean;\n hidden?: string | boolean;\n }[] = [];\n\n (this.props.schema.options || []).forEach(item => {\n // if optgroup\n const groupItem: {\n items: ConfigItemSelectOption[];\n label: ioBroker.StringOrTranslated;\n value?: number | string;\n hidden?: string | boolean;\n } = item as {\n items: ConfigItemSelectOption[];\n label: ioBroker.StringOrTranslated;\n value?: number | string;\n hidden?: string | boolean;\n };\n if (Array.isArray(groupItem.items)) {\n selectOptions.push({ label: this.getText(item.label), value: item.value, group: true });\n groupItem.items.forEach(it =>\n selectOptions.push({\n label: this.getText(it.label),\n value: it.value,\n hidden: it.hidden,\n }),\n );\n } else {\n selectOptions.push({\n label: this.getText(item.label),\n value: item.value,\n hidden: item.hidden,\n });\n }\n });\n\n // if __different\n if (Array.isArray(value)) {\n this.initialValue = [...value];\n selectOptions.unshift({\n label: I18n.t(ConfigGeneric.DIFFERENT_LABEL),\n value: ConfigGeneric.DIFFERENT_VALUE,\n });\n this.setState({ value: ConfigGeneric.DIFFERENT_VALUE, selectOptions });\n } else {\n this.setState({ value, selectOptions });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const selectOptions = (this.state.selectOptions || []).filter(item => {\n // if optgroup or no hidden function\n if (!item.hidden) {\n return true;\n }\n\n if (this.props.custom) {\n return !this.executeCustom(\n item.hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n return !this.execute(\n item.hidden,\n this.props.schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n });\n\n const item = selectOptions.find(it => it.value == this.state.value); // let \"==\" be and not ===\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n sx={this.props.table !== undefined && styles.noMargin}\n id={`jsonSelect_${this.props.attr}_${this.props.index || this.props.index === 0 ? this.props.index : ''}`}\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n this.setState({ value: e.target.value === '_' ? '' : e.target.value }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.state.value === ConfigGeneric.DIFFERENT_VALUE) {\n mayBePromise = this.onChange(this.props.attr, this.initialValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, this.state.value);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n >\n {selectOptions.map((it, i) => {\n if (it.group) {\n return (\n <ListSubheader key={i}>\n {this.getText(it.label, this.props.schema.noTranslation)}\n </ListSubheader>\n );\n }\n return (\n <MenuItem\n key={i}\n value={it.value}\n style={it.value === ConfigGeneric.DIFFERENT_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(it.label, this.props.schema.noTranslation)}\n </MenuItem>\n );\n })}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigSelect;\n","import React, { type JSX } from 'react';\n\nimport {\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n TextField,\n CircularProgress,\n ListItemText,\n Checkbox,\n Chip,\n Box,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSelectSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n menuPaper: {\n maxHeight: 800,\n },\n};\n\n/*\nto use this option, your adapter must implement listUart message\n\nadapter.on('message', obj => {\n if (obj) {\n switch (obj.command) {\n case 'command':\n if (obj.callback) {\n try {\n const serialport = require('serialport');\n if (serialport) {\n // read all found serial ports\n serialport.list()\n .then(ports => {\n adapter.log.info('List of port: ' + JSON.stringify(ports));\n adapter.sendTo(obj.from, obj.command, ports.map(item =>\n ({label: item.path, value: item.path})), obj.callback);\n })\n .catch(e => {\n adapter.sendTo(obj.from, obj.command, [], obj.callback);\n adapter.log.error(e)\n });\n } else {\n adapter.log.warn('Module serialport is not available');\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n } catch (e) {\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n }\n\n break;\n }\n }\n});\n */\n\ninterface ConfigSelectSendToProps extends ConfigGenericProps {\n schema: ConfigItemSelectSendTo;\n}\n\ninterface ConfigSelectSendToState extends ConfigGenericState {\n list?: { label: string; value: string; hidden?: boolean }[];\n running?: boolean;\n}\n\nclass ConfigSelectSendTo extends ConfigGeneric<ConfigSelectSendToProps, ConfigSelectSendToState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n askInstance(): void {\n if (this.props.alive) {\n let data: Record<string, any> | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData, null, true);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n this.setState({ running: true }, () => {\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then(list => this.setState({ list, running: false }))\n .catch(e => {\n console.error(`Cannot send command: ${e}`);\n });\n });\n } else {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n this.setState({ value, running: false });\n }\n }\n\n getContext(): string {\n const localContext: Record<string, any> = {};\n\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n\n return JSON.stringify(localContext);\n }\n\n _getValue(): string | string[] {\n let value =\n this.state.value === null || this.state.value === undefined\n ? ConfigGeneric.getValue(this.props.data, this.props.attr)\n : this.state.value;\n\n if (this.props.schema.multiple) {\n if (typeof value === 'string') {\n value = [value];\n } else if (value === null || value === undefined) {\n value = [];\n }\n }\n\n return value;\n }\n\n renderItem(error: unknown, disabled: boolean /* , defaultValue */): JSX.Element | string {\n if (this.props.alive) {\n const localContext = this.getContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n const value = this._getValue();\n\n if (!this.props.alive || (!this.state.running && !this.state.list?.length)) {\n if (this.props.schema.multiple || this.props.schema.manual === false) {\n return I18n.t('ra_Cannot retrieve options, as instance is offline');\n }\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={!!disabled}\n onChange={e => {\n const value_ = e.target.value;\n this.setState({ value: value_ }, () => this.onChange(this.props.attr, (value_ || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n slotProps={{\n input: {\n endAdornment:\n this.state.value && !this.props.schema.noClearButton ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.setState({ value: '' }, () => this.onChange(this.props.attr, ''))\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n );\n }\n\n if (this.state.running) {\n return <CircularProgress size=\"24\" />;\n }\n\n const selectOptions = this.state.list.filter(item => {\n if (!item.hidden) {\n return true;\n }\n if (this.props.custom) {\n return !this.executeCustom(\n item.hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.arrayIndex,\n this.props.globalData,\n );\n }\n return !this.execute(\n item.hidden,\n this.props.schema.default,\n this.props.data,\n this.props.arrayIndex,\n this.props.globalData,\n );\n });\n\n const item = selectOptions.find(it => it.value === value);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n multiple={this.props.schema.multiple}\n disabled={!!disabled}\n // MenuProps={this.props.schema.multiple ? { classes: { paper: this.props.classes.menuPaper } } : undefined}\n sx={{\n '&.MuiSelect-paper': this.props.schema.multiple ? styles.menuPaper : undefined,\n }}\n value={value}\n renderValue={(val: string | string[]) =>\n this.props.schema.multiple ? (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {(val as string[]).map((v: string) => {\n const it = selectOptions.find(_item => _item.value === v);\n if (it || this.props.schema.showAllValues !== false) {\n const label = it?.label || v;\n return (\n <Chip\n key={v}\n label={label}\n />\n );\n }\n return null;\n })}\n </Box>\n ) : (\n item?.label || val\n )\n }\n onChange={e => {\n const mayBePromise = this.onChange(this.props.attr, e.target.value);\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n >\n {selectOptions.map((it, i) => (\n <MenuItem\n key={i}\n value={it.value}\n >\n {this.props.schema.multiple ? (\n <Checkbox\n checked={value.includes(it.value)}\n onClick={() => {\n const _value = JSON.parse(JSON.stringify(this._getValue()));\n const pos = value.indexOf(it.value);\n if (pos !== -1) {\n _value.splice(pos, 1);\n } else {\n _value.push(it.value);\n _value.sort();\n }\n this.setState({ value: _value }, () => this.onChange(this.props.attr, _value));\n }}\n />\n ) : null}\n <ListItemText primary={it.label} />\n </MenuItem>\n ))}\n </Select>\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigSelectSendTo;\n","import React, { type JSX } from 'react';\n\nimport { Button, CircularProgress } from '@mui/material';\n\nimport { Warning as IconWarning, Error as IconError, Info as IconInfo } from '@mui/icons-material';\n\nimport { DialogConfirm, DialogError, DialogMessage, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\n// copied from iobroker.admin/src-rx/src/Utils.js\nfunction findNetworkAddressOfHost(obj: Record<string, any>, localIp: string): string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp: string | undefined;\n\n // check ipv4 addresses\n Object.keys(networkInterfaces).forEach(inter =>\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\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 ip4 and not docker or wsl\n if (\n ip.family === 'IPv4' &&\n !ip.address.startsWith('172') &&\n (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))\n ) {\n // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\n 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\n // check ipv6 addresses\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter =>\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\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 (\n ip.family === 'IPv6' &&\n (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))\n ) {\n // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\n 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 }\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\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 Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach((ip: Record<string, any>) => {\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n });\n });\n }\n\n return hostIp;\n}\n\ninterface ConfigSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigSendToState extends ConfigGenericState {\n _error: string;\n _message: string;\n hostname: string;\n running?: boolean;\n}\n\nclass ConfigSendto extends ConfigGeneric<ConfigSendToProps, ConfigSendToState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n let hostname = window.location.hostname;\n if (this.props.schema.openUrl) {\n // read admin host\n const adminInstance = await this.props.oContext.socket.getCurrentInstance();\n const instanceObj = await this.props.oContext.socket.getObject(\n `system.adapter.${adminInstance}` as ioBroker.ObjectIDs.Instance,\n );\n\n if (instanceObj) {\n const hostObj = await this.props.oContext.socket.getObject(`system.host.${instanceObj?.common?.host}`);\n if (hostObj) {\n const ip = findNetworkAddressOfHost(hostObj, window.location.hostname);\n if (ip) {\n hostname = `${ip}:${window.location.port}`;\n } else {\n console.warn(\n `Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`,\n );\n return;\n }\n }\n }\n }\n\n await new Promise<void>(resolve => {\n this.setState({ _error: '', _message: '', hostname }, resolve);\n });\n\n if (this.props.schema.onLoaded) {\n this._onClick();\n }\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error) {\n return (\n <DialogError\n text={this.state._error}\n onClose={() => this.setState({ _error: '' })}\n />\n );\n }\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state._message) {\n return (\n <DialogMessage\n text={this.state._message}\n onClose={() => this.setState({ _message: '' })}\n />\n );\n }\n return null;\n }\n\n _onClick(): void {\n this.props.oContext.onCommandRunning(true);\n this.setState({ running: true });\n\n const _origin = `${window.location.protocol}//${window.location.host}${window.location.pathname.replace(/\\/index\\.html$/, '')}`;\n const _originIp = `${window.location.protocol}//${this.state.hostname.split(':').length > 3 ? `[${this.state.hostname}]` : this.state.hostname}${window.location.pathname.replace(/\\/index\\.html$/, '')}`;\n\n let data: Record<string, any> = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr = this.getPattern(this.props.schema.jsonData, {\n _origin,\n _originIp,\n ...this.props.data,\n }, true);\n\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n if (data === undefined) {\n data = null;\n }\n if (this.props.schema.openUrl && !data) {\n data = {\n _origin,\n _originIp,\n };\n }\n let timeout: ReturnType<typeof setTimeout> | undefined;\n if (this.props.schema.timeout) {\n timeout = setTimeout(\n () => {\n this.props.oContext.onCommandRunning(false);\n this.setState({ _error: I18n.t('ra_Request timed out'), running: false });\n },\n parseInt(this.props.schema.timeout as any as string, 10) || 10000,\n );\n }\n\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then(async (response: Record<string, any>) => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n if (response?.error) {\n if (this.props.schema.error && this.props.schema.error[response.error]) {\n let error = this.getText(this.props.schema.error[response.error]);\n if (response.args) {\n response.args.forEach((arg: string) => (error = error.replace('%s', arg)));\n }\n this.setState({ _error: error });\n } else {\n this.setState({ _error: response.error ? I18n.t(response.error) : I18n.t('ra_Error') });\n }\n } else {\n if (response?.command) {\n // If backend requested to refresh the config\n if (this.props.oContext.onBackEndCommand) {\n this.props.oContext.onBackEndCommand(response.command);\n }\n return;\n }\n if (response?.reloadBrowser && this.props.schema.reloadBrowser) {\n window.location.reload();\n } else if (response?.openUrl && this.props.schema.openUrl) {\n window.open(response.openUrl, response.window || this.props.schema.window || '_blank');\n } else if (\n response?.result &&\n this.props.schema.result &&\n this.props.schema.result[response.result]\n ) {\n let text = this.getText(this.props.schema.result[response.result]);\n if (response.args) {\n response.args.forEach((arg: string) => (text = text.replace('%s', arg)));\n }\n window.alert(text);\n }\n\n if (response?.native && this.props.schema.useNative) {\n for (const [attr, val] of Object.entries(response.native)) {\n await this.onChangeAsync(attr, val);\n }\n\n setTimeout(\n () => this.props.oContext.forceUpdate(Object.keys(response.native), this.props.data),\n 300,\n );\n } else if (response?.result) {\n window.alert(\n typeof response.result === 'object' ? JSON.stringify(response.result) : response.result,\n );\n } else {\n window.alert(I18n.t('ra_Ok'));\n }\n\n if (response?.saveConfig) {\n this.props.onChange(null, null, null, true);\n }\n }\n })\n .catch((e: any) => {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n this.setState({ _error: this.getText(this.props.schema.error[e.toString()]) });\n } else {\n this.setState({ _error: I18n.t(e.toString()) || I18n.t('ra_Error') });\n }\n })\n .then(() => {\n this.props.oContext.onCommandRunning(false);\n this.setState({ running: false });\n });\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <DialogConfirm\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon || undefined}\n onClose={isOk => this.setState({ confirmDialog: false }, () => isOk && this._onClick())}\n />\n );\n }\n\n renderItem(error: Error | undefined, disabled: boolean): JSX.Element {\n const icon = this.getIcon();\n\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={{ ...styles.fullWidth, ...(this.props.schema.controlStyle || undefined) }}\n disabled={disabled || !this.props.alive}\n startIcon={icon}\n title={\n this.props.alive\n ? this.getText(this.props.schema.title) || ''\n : I18n.t('ra_Instance is not alive')\n }\n onClick={() => {\n if (this.props.schema.confirm) {\n this.setState({ confirmDialog: true });\n } else {\n this._onClick();\n }\n }}\n >\n {this.props.schema.showProcess && this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n {this.renderErrorDialog()}\n {this.renderMessageDialog()}\n </div>\n );\n }\n}\n\nexport default ConfigSendto;\n","import React, { type JSX } from 'react';\n\nimport { Button } from '@mui/material';\n\nimport { Warning as IconWarning, Error as IconError, Info as IconInfo } from '@mui/icons-material';\n\nimport { DialogConfirm, Icon, I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemSetState } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemSetState;\n}\n\nclass ConfigSetState extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n async _onClick(): Promise<void> {\n let val = this.props.schema.val;\n if (typeof val === 'string' && val.includes('${')) {\n val = this.getPattern(val, null, true);\n const obj = await this.props.oContext.socket.getObject(this.props.schema.id);\n if (obj?.common?.type === 'number') {\n val = parseFloat(val);\n } else if (obj?.common?.type === 'boolean') {\n // @ts-expect-error val could be anything\n val = val === 'true' || val === true || val === '1' || val === 1;\n }\n }\n\n const id = (this.props.schema.id || '').replace(/%INSTANCE%/g, (this.props.oContext.instance || 0).toString());\n\n try {\n await this.props.oContext.socket.setState(id, { val, ack: !!this.props.schema.ack });\n if (this.props.schema.okText) {\n window.alert(this.getText(this.props.schema.okText));\n }\n } catch (e) {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n window.alert(this.getText(this.props.schema.error[e.toString()]));\n } else {\n window.alert(I18n.t(e.toString()) || I18n.t('ra_Error'));\n }\n }\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return (\n <DialogConfirm\n title={this.getText(confirm.title) || I18n.t('ra_Please confirm')}\n text={this.getText(confirm.text)}\n ok={this.getText(confirm.ok) || I18n.t('ra_Ok')}\n cancel={this.getText(confirm.cancel) || I18n.t('ra_Cancel')}\n icon={icon}\n onClose={isOk => this.setState({ confirmDialog: false }, () => isOk && this._onClick())}\n />\n );\n }\n\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n return (\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={styles.fullWidth}\n disabled={disabled}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({ confirmDialog: true });\n } else {\n await this._onClick();\n }\n }}\n >\n {this.props.schema.icon ? (\n <Icon\n src={this.props.schema.icon}\n style={styles.icon}\n />\n ) : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n );\n }\n}\n\nexport default ConfigSetState;\n","import React, { type JSX } from 'react';\n\nimport { Box, Typography, Slider } from '@mui/material';\n\nimport type { ConfigItemSlider } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n slider: {\n marginLeft: 10,\n marginRight: 10,\n width: 'calc(100% - 20px)',\n },\n};\n\ninterface ConfigSliderProps extends ConfigGenericProps {\n schema: ConfigItemSlider;\n}\n\ninterface ConfigSliderState extends ConfigGenericState {\n _value: number;\n}\n\nclass ConfigSlider extends ConfigGeneric<ConfigSliderProps, ConfigSliderState> {\n componentDidMount(): void {\n super.componentDidMount();\n const _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ _value });\n }\n\n static getDerivedStateFromProps(\n props: ConfigSliderProps,\n state: ConfigSliderState,\n ): Partial<ConfigSliderState> | null {\n if (\n (props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (\n _value === null ||\n _value === undefined ||\n _value.toString() !== parseFloat(state._value as any as string).toString()\n ) {\n return { _value };\n }\n\n return null;\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const min = this.props.schema.min || 0;\n const max = this.props.schema.max || 100;\n const unit = this.props.schema.unit\n ? this.getText(this.props.schema.unit, this.props.schema.noTranslation)\n : '';\n\n const marks = [\n { value: min, label: min + unit },\n { value: max, label: max + unit },\n ];\n\n return (\n <Box style={styles.fullWidth}>\n {this.props.schema.label ? (\n <Typography gutterBottom>{this.getText(this.props.schema.label)}</Typography>\n ) : null}\n <Slider\n style={styles.slider}\n value={this.state._value}\n getAriaValueText={value => value + unit}\n step={this.props.schema.step || (max - min) / 100}\n valueLabelDisplay=\"auto\"\n marks={marks}\n min={min}\n max={max}\n disabled={!!disabled}\n onChange={e => {\n const _value = (e.target as HTMLInputElement).value as any as number;\n this.setState({ _value }, () => this.onChange(this.props.attr, _value));\n }}\n />\n {this.props.schema.help ? (\n <Typography>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </Typography>\n ) : null}\n </Box>\n );\n }\n}\n\nexport default ConfigSlider;\n","import React, { type JSX } from 'react';\n\nimport {\n Add,\n Delete,\n Edit,\n Refresh,\n Search,\n Wifi,\n WifiOff,\n Visibility,\n LinkOff,\n Link as LinkIcon,\n NotListedLocation,\n PlayArrow,\n Stop,\n FastForward,\n FastRewind,\n Pause,\n Lightbulb,\n Power,\n Fluorescent,\n WbIncandescent,\n Settings,\n Group,\n Person,\n QrCode,\n} from '@mui/icons-material';\n\nexport default function getIconByName(name: string, style?: React.CSSProperties): JSX.Element | null {\n if (name === 'edit' || name === 'rename') {\n return <Edit style={style} />;\n }\n if (name === 'delete') {\n return <Delete style={style} />;\n }\n if (name === 'refresh') {\n return <Refresh style={style} />;\n }\n if (name === 'newDevice' || name === 'new' || name === 'add') {\n return <Add style={style} />;\n }\n if (name === 'discover' || name === 'search') {\n return <Search style={style} />;\n }\n if (name === 'unpairDevice' || name === 'unpair') {\n return <LinkOff style={style} />;\n }\n if (name === 'pairDevice' || name === 'pair') {\n return <LinkIcon style={style} />;\n }\n if (name === 'identify') {\n return <NotListedLocation style={style} />;\n }\n if (name === 'play') {\n return <PlayArrow style={style} />;\n }\n if (name === 'stop') {\n return <Stop style={style} />;\n }\n if (name === 'pause') {\n return <Pause style={style} />;\n }\n if (name === 'forward' || name === 'next') {\n return <FastForward style={style} />;\n }\n if (name === 'rewind' || name === 'previous') {\n return <FastRewind style={style} />;\n }\n if (name === 'lamp' || name === 'light') {\n return <Lightbulb style={style} />;\n }\n if (name === 'backlight') {\n return <Fluorescent style={style} />;\n }\n if (name === 'dimmer') {\n return <WbIncandescent style={style} />;\n }\n if (name === 'socket') {\n return <Power style={style} />;\n }\n if (name === 'settings') {\n return <Settings style={style} />;\n }\n if (name === 'users' || name === 'group') {\n return <Group style={style} />;\n }\n if (name === 'user') {\n return <Person style={style} />;\n }\n if (name === 'qrcode') {\n return <QrCode style={style} />;\n }\n if (name === 'connection') {\n return <Wifi style={style} />;\n }\n if (name === 'no-connection') {\n return <WifiOff style={style} />;\n }\n if (name === 'visible') {\n return <Visibility style={style} />;\n }\n return null;\n}\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton, Button, Switch, Slider, Box } from '@mui/material';\n\nimport { I18n, Icon, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemState } from '#JC/types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nfunction valueBlinkOnce(theme: IobTheme, color?: string | boolean): any {\n if (typeof color === 'string') {\n return {\n '@keyframes newStateAnimationOnceColor': {\n '0%': {\n color,\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n },\n },\n animation: 'newStateAnimationOnceColor 2s ease-in-out',\n };\n }\n return {\n '@keyframes newStateAnimationOnce': {\n '0%': {\n color: '#00f900',\n },\n '80%': {\n color: theme.palette.mode === 'dark' ? '#518851' : '#008000',\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n },\n },\n animation: 'newStateAnimationOnce 2s ease-in-out',\n };\n}\n\ninterface ConfigStateProps extends ConfigGenericProps {\n schema: ConfigItemState;\n}\n\ninterface ConfigStateState extends ConfigGenericState {\n stateValue?: string | number | boolean | null;\n controlType?: string;\n obj?: ioBroker.Object | null;\n}\n\nclass ConfigState extends ConfigGeneric<ConfigStateProps, ConfigStateState> {\n controlTimeout: ReturnType<typeof setTimeout> | null = null;\n\n delayedUpdate: { timer: ReturnType<typeof setTimeout> | null; value: string | boolean | number | null } = {\n timer: null,\n value: null,\n };\n\n getObjectID(): string {\n if (this.props.schema.foreign) {\n return this.props.schema.oid;\n }\n return `${this.props.schema.system ? 'system.adapter.' : ''}${this.props.oContext.adapterName}.${this.props.oContext.instance}.${this.props.schema.oid}`;\n }\n\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const obj: ioBroker.StateObject = (await this.props.oContext.socket.getObject(\n this.getObjectID(),\n )) as ioBroker.StateObject;\n const controlType = this.props.schema.control || this.detectType(obj);\n\n const state = await this.props.oContext.socket.getState(this.getObjectID());\n\n this.setState({ stateValue: state ? state.val : null, controlType, obj }, async () => {\n await this.props.oContext.socket.subscribeState(this.getObjectID(), this.onStateChanged);\n });\n }\n\n componentWillUnmount(): void {\n super.componentWillUnmount();\n this.props.oContext.socket.unsubscribeState(this.getObjectID(), this.onStateChanged);\n if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n this.controlTimeout = null;\n this.props.oContext.socket\n .setState(this.getObjectID(), this.state.stateValue, false)\n .catch(e => console.error(`Cannot control value: ${e}`));\n }\n }\n\n onStateChanged = (_id: string, state: ioBroker.State | null | undefined): void => {\n let val = state ? state.val : null;\n if (this.state.controlType === 'button' || this.state.controlType === 'switch') {\n val = !!val;\n if (this.state.stateValue !== val) {\n this.setState({ stateValue: val });\n }\n } else if (val !== null && (this.state.controlType === 'slider' || this.state.controlType === 'number')) {\n val = parseFloat(val as unknown as string);\n console.log(`${Date.now()} Received new value: ${val}`);\n if (val !== this.state.stateValue) {\n if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n this.delayedUpdate.value = val;\n this.delayedUpdate.timer = setTimeout(() => {\n this.setState({ stateValue: this.delayedUpdate.value });\n }, 500);\n } else if (this.delayedUpdate.timer) {\n clearTimeout(this.delayedUpdate.timer);\n this.delayedUpdate.timer = null;\n }\n } else if (this.state.stateValue.toString() !== val.toString()) {\n this.setState({ stateValue: val });\n }\n };\n\n detectType(obj: ioBroker.StateObject): 'button' | 'switch' | 'slider' | 'input' | 'text' {\n obj = obj || ({} as ioBroker.StateObject);\n obj.common = obj.common || ({} as ioBroker.StateCommon);\n\n // read object\n if (obj.common.type === 'boolean') {\n if (this.props.schema.controlled !== false) {\n if (obj.common.read === false || this.props.schema.controlled === true) {\n return 'button';\n }\n if (obj.common.write || this.props.schema.controlled === true) {\n return 'switch';\n }\n }\n\n return 'text';\n }\n\n if (obj.common.type === 'number' && this.props.schema.controlled !== false) {\n if (obj.common.write || this.props.schema.controlled === true) {\n if (obj.common.max !== undefined) {\n return 'slider';\n }\n return 'input';\n }\n return 'text';\n }\n\n if (obj.common.write && this.props.schema.controlled !== false) {\n return 'input';\n }\n\n return 'text';\n }\n\n renderItem(_error: string, disabled: boolean/*, defaultValue */): JSX.Element {\n if (!this.state.obj) {\n return null;\n }\n\n let content: JSX.Element;\n\n if (this.state.controlType === 'button') {\n let icon: JSX.Element | null = null;\n if (this.props.schema.falseImage) {\n icon = getIconByName(this.props.schema.falseImage);\n }\n\n const text = this.getText(\n this.props.schema.falseText || this.props.schema.label,\n this.props.schema.noTranslation,\n );\n\n if (!text && icon) {\n content = (\n <IconButton\n style={this.props.schema.falseTextStyle}\n disabled={!!this.props.schema.readOnly}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.oContext.socket.setState(this.getObjectID(), true, false);\n }\n },\n });\n } else {\n await this.props.oContext.socket.setState(this.getObjectID(), true, false);\n }\n }}\n >\n {icon}\n </IconButton>\n );\n } else {\n content = (\n <Button\n variant={this.props.schema.variant || 'contained'}\n startIcon={icon}\n style={this.props.schema.falseTextStyle}\n disabled={disabled || !!this.props.schema.readOnly}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.oContext.socket.setState(this.getObjectID(), true, false);\n }\n },\n });\n } else {\n await this.props.oContext.socket.setState(this.getObjectID(), true, false);\n }\n }}\n >\n {text || this.getObjectID().split('.').pop()}\n </Button>\n );\n }\n } else if (this.state.controlType === 'input') {\n content = (\n <TextField\n style={{ width: '100%' }}\n value={this.state.stateValue}\n variant=\"standard\"\n slotProps={{\n input: {\n endAdornment:\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) ||\n this.state.obj.common.unit ||\n undefined,\n },\n htmlInput: {\n readOnly: !!this.props.schema.readOnly,\n },\n }}\n onChange={e => {\n this.setState({ stateValue: e.target.value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n this.controlTimeout = null;\n await this.props.oContext.socket.setState(this.getObjectID(), this.state.stateValue, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n } else if (this.state.obj.common.type === 'number') {\n const min = this.props.schema.min === undefined ? this.state.obj.common.min || 0 : this.props.schema.min;\n const max =\n this.props.schema.max === undefined\n ? this.state.obj.common.max === undefined\n ? 100\n : this.state.obj.common.max\n : this.props.schema.max;\n const step =\n this.props.schema.step === undefined ? this.state.obj.common.step || 1 : this.props.schema.step;\n\n content = (\n <TextField\n variant=\"standard\"\n style={{ width: '100%' }}\n value={this.state.stateValue}\n type=\"number\"\n slotProps={{\n htmlInput: { min, max, step, readOnly: !!this.props.schema.readOnly },\n input: {\n endAdornment:\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) ||\n this.state.obj.common.unit ||\n undefined,\n },\n }}\n onChange={e => {\n this.setState({ stateValue: e.target.value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n this.controlTimeout = null;\n const val = parseFloat(this.state.stateValue as unknown as string);\n await this.props.oContext.socket.setState(this.getObjectID(), val, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n label={this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n } else {\n let fontSize: number | undefined;\n if (this.props.schema.size === 'normal') {\n fontSize = 16;\n } else if (this.props.schema.size === 'large') {\n fontSize = 20;\n } else if (typeof this.props.schema.size === 'number') {\n fontSize = this.props.schema.size;\n }\n let label = this.getText(this.props.schema.label, this.props.schema.noTranslation);\n\n const divStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: fontSize || '1rem',\n gap: 8,\n };\n\n if (!this.props.schema.narrow) {\n divStyle.width = '100%';\n divStyle.justifyContent = 'space-between';\n }\n\n if (label.trim()) {\n if (!label.trim().endsWith(':') && this.props.schema.addColon) {\n label = `${label.trim()}:`;\n }\n }\n\n let blinkStyle: React.CSSProperties | undefined;\n if (this.props.schema.blinkOnUpdate) {\n blinkStyle = valueBlinkOnce(this.props.oContext.theme, this.props.schema.blinkOnUpdate);\n }\n\n let labelIcon: React.JSX.Element | undefined;\n if (this.props.schema.labelIcon) {\n labelIcon = (\n <Icon\n src={this.props.schema.labelIcon}\n style={{ marginRight: 4 }}\n />\n );\n }\n\n let labelControl: React.JSX.Element | undefined;\n if (label && labelIcon) {\n labelControl = (\n <div style={{ whiteSpace: 'nowrap' }}>\n {labelIcon}\n {label}\n </div>\n );\n } else if (label) {\n labelControl = <div style={{ whiteSpace: 'nowrap' }}>{label}</div>;\n } else if (labelIcon) {\n labelControl = labelIcon;\n }\n\n if (this.state.controlType === 'switch') {\n let iconFalse: JSX.Element | null = null;\n const textFalse = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n iconFalse = getIconByName(this.props.schema.falseImage, textFalse ? { marginLeft: 8 } : undefined);\n }\n let iconTrue: JSX.Element | null = null;\n const textTrue = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n iconTrue = getIconByName(this.props.schema.trueImage, textTrue ? { marginRight: 8 } : undefined);\n }\n\n content = (\n <Switch\n checked={!!this.state.stateValue}\n disabled={!!this.props.schema.readOnly}\n onChange={async () => {\n if (this.props.schema.confirm) {\n this.setState({\n confirmDialog: true,\n confirmCallback: async (result: boolean) => {\n if (result) {\n await this.props.oContext.socket.setState(\n this.getObjectID(),\n !this.state.stateValue,\n false,\n );\n }\n },\n });\n } else {\n await this.props.oContext.socket.setState(this.getObjectID(), !this.state.stateValue, false);\n }\n }}\n />\n );\n\n if (textFalse || iconFalse || textTrue || iconTrue) {\n content = (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: 14 }}>\n <span style={this.props.schema.falseTextStyle}>\n {textFalse}\n {iconFalse}\n </span>\n {content}\n <span style={this.props.schema.trueTextStyle}>\n {iconTrue}\n {textTrue}\n </span>\n </div>\n );\n }\n\n if (labelControl) {\n content = (\n <div style={divStyle}>\n {labelControl}\n {content}\n </div>\n );\n }\n } else if (this.state.controlType === 'slider') {\n let iconFalse: JSX.Element | null = null;\n const textFalse = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n iconFalse = getIconByName(this.props.schema.falseImage, textFalse ? { marginLeft: 8 } : undefined);\n }\n let iconTrue: JSX.Element | null = null;\n const textTrue = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n iconTrue = getIconByName(this.props.schema.trueImage, textTrue ? { marginRight: 8 } : undefined);\n }\n\n const min =\n this.props.schema.min === undefined ? this.state.obj.common.min || 0 : this.props.schema.min;\n const max =\n this.props.schema.max === undefined\n ? this.state.obj.common.max === undefined\n ? 100\n : this.state.obj.common.max\n : this.props.schema.max;\n const step =\n this.props.schema.step === undefined ? this.state.obj.common.step || 1 : this.props.schema.step;\n\n content = (\n <Slider\n style={{ width: '100%', flexGrow: 1 }}\n min={min}\n max={max}\n disabled={!!this.props.schema.readOnly}\n step={step}\n value={this.state.stateValue as number}\n valueLabelDisplay=\"auto\"\n valueLabelFormat={(value: number) =>\n `${value}${this.getText(this.props.schema.unit, this.props.schema.noTranslation) || this.state.obj.common.unit || ''}`\n }\n onChange={(_e: Event, value: number) => {\n this.setState({ stateValue: value }, (): void => {\n if (this.controlTimeout) {\n clearTimeout(this.controlTimeout);\n }\n this.controlTimeout = setTimeout(async () => {\n console.log(`${Date.now()} Send new value: ${this.state.stateValue}`);\n this.controlTimeout = null;\n await this.props.oContext.socket.setState(this.getObjectID(), this.state.stateValue, false);\n }, this.props.schema.controlDelay || 0);\n });\n }}\n />\n );\n\n if (textFalse || iconFalse || textTrue || iconTrue) {\n content = (\n <div\n style={{\n display: 'flex',\n width: '100%',\n flexGrow: 1,\n alignItems: 'center',\n }}\n >\n <span style={{ marginRight: 16, ...this.props.schema.falseTextStyle }}>\n {textFalse}\n {iconFalse}\n </span>\n {content}\n <span style={{ marginLeft: 16, ...this.props.schema.trueTextStyle }}>\n {iconTrue}\n {textTrue}\n </span>\n </div>\n );\n }\n if (labelControl) {\n content = (\n <div style={divStyle}>\n {labelControl}\n {content}\n </div>\n );\n }\n } else if (this.state.obj.common.type === 'boolean') {\n let icon: JSX.Element | null = null;\n let text: string;\n let style: React.CSSProperties | undefined;\n if (!this.state.stateValue) {\n text = this.getText(this.props.schema.falseText, this.props.schema.noTranslation);\n if (this.props.schema.falseImage) {\n icon = getIconByName(this.props.schema.falseImage, text ? { marginLeft: 8 } : undefined);\n }\n style = this.props.schema.falseTextStyle;\n } else {\n text = this.getText(this.props.schema.trueText, this.props.schema.noTranslation);\n if (this.props.schema.trueImage) {\n icon = getIconByName(this.props.schema.falseImage, text ? { marginRight: 8 } : undefined);\n }\n style = this.props.schema.trueTextStyle;\n }\n style = Object.assign(divStyle, style);\n\n content = (\n <div style={style}>\n {labelControl}\n <Box\n style={{ display: 'flex', alignItems: 'center', gap: 8 }}\n sx={blinkStyle}\n key={this.props.schema.blinkOnUpdate ? text : undefined}\n >\n {icon}\n {text || (this.state.stateValue ? I18n.t('ra_true') : I18n.t('ra_false'))}\n </Box>\n </div>\n );\n } else {\n // text or HTML\n const unit =\n this.getText(this.props.schema.unit, this.props.schema.noTranslation) || this.state.obj.common.unit;\n\n let value;\n let key: string;\n if (this.state.controlType === 'html') {\n key = (this.state.stateValue || '').toString();\n value = <span dangerouslySetInnerHTML={{ __html: this.state.stateValue as string }} />;\n } else if (this.state.stateValue === null) {\n value = 'null';\n key = value;\n } else if (this.state.stateValue === undefined) {\n value = 'undefined';\n key = value;\n } else {\n value = this.state.stateValue.toString();\n key = value;\n }\n\n content = (\n <div style={divStyle}>\n {labelControl}\n <div style={{ display: 'flex', alignItems: 'baseline', gap: 4 }}>\n <Box\n sx={blinkStyle}\n key={this.props.schema.blinkOnUpdate ? key : undefined}\n >\n {value}\n </Box>\n {unit ? <span style={{ opacity: 0.7, fontSize: 'smaller' }}>{unit}</span> : null}\n </div>\n </div>\n );\n }\n }\n\n return content;\n }\n}\n\nexport default ConfigState;\n","import React, { type JSX } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticDivider } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: {\n fullWidth: (theme: IobTheme) => React.CSSProperties;\n primary: (theme: IobTheme) => React.CSSProperties;\n secondary: (theme: IobTheme) => React.CSSProperties;\n} = {\n fullWidth: (theme: IobTheme): React.CSSProperties => ({\n width: '100%',\n backgroundColor: theme.palette.mode === 'dark' ? '#FFF' : '#000',\n borderStyle: 'hidden',\n }),\n primary: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.primary.main,\n }),\n secondary: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticDivider;\n}\n\nclass ConfigStaticDivider extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(): JSX.Element {\n return (\n <Box\n component=\"hr\"\n sx={Utils.getStyle(\n this.props.oContext.theme,\n styles.fullWidth,\n this.props.schema.color === 'primary'\n ? styles.primary\n : this.props.schema.color === 'secondary'\n ? styles.secondary\n : {\n backgroundColor:\n this.props.schema.color || (this.props.oContext.themeType === 'dark' ? '#333' : '#ddd'),\n },\n {\n height: this.props.schema.color ? this.props.schema.height || 2 : this.props.schema.height || 1,\n },\n )}\n />\n );\n }\n}\n\nexport default ConfigStaticDivider;\n","import React, { type JSX } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport type { IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticHeader } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n header: (theme: IobTheme): React.CSSProperties => ({\n width: '100%',\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n padding: '4px !important',\n borderRadius: '3px',\n marginBlockEnd: 0,\n marginBlockStart: 0,\n }),\n};\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticHeader;\n}\n\nclass ConfigStaticHeader extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(/* error: string, disabled: boolean, defaultValue */): JSX.Element {\n let component: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' = 'h5';\n switch ((this.props.schema.size || 5).toString()) {\n case '1':\n component = 'h1';\n break;\n\n case '2':\n component = 'h2';\n break;\n\n case '3':\n component = 'h3';\n break;\n\n case '4':\n component = 'h4';\n break;\n\n case '5':\n default:\n component = 'h5';\n break;\n }\n return (\n <Box\n component={component}\n sx={styles.header}\n >\n {this.getText(this.props.schema.label || this.props.schema.text, this.props.schema.noTranslation)}\n </Box>\n );\n }\n}\n\nexport default ConfigStaticHeader;\n","import React, { type JSX } from 'react';\n\nimport type { ConfigItemStaticImage } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigInstanceSelectProps extends ConfigGenericProps {\n schema: ConfigItemStaticImage;\n}\n\nclass ConfigStaticImage extends ConfigGeneric<ConfigInstanceSelectProps, ConfigGenericState> {\n renderItem(/* error: string, disabled: boolean, defaultValue */): JSX.Element {\n let src = this.props.schema.src;\n if (\n src &&\n !src.startsWith('.') &&\n !src.startsWith('http') &&\n !src.startsWith(`adapter/${this.props.oContext.adapterName}/`) &&\n !src.startsWith(`./adapter/${this.props.oContext.adapterName}/`)\n ) {\n src = `adapter/${this.props.oContext.adapterName}/${src}`;\n }\n\n return (\n <img\n src={src}\n style={{ cursor: this.props.schema.href ? 'pointer' : undefined, width: '100%', height: '100%' }}\n onClick={\n this.props.schema.href\n ? () => this.props.schema.href && window.open(this.props.schema.href, '_blank')\n : null\n }\n alt=\"\"\n />\n );\n }\n}\n\nexport default ConfigStaticImage;\n","import React, { type JSX } from 'react';\n\nimport { Box, Checkbox } from '@mui/material';\nimport { ContentCopy } from '@mui/icons-material';\nimport { I18n, Icon, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticInfo } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nfunction valueBlinkOnce(theme: IobTheme, force: boolean, color?: string | boolean): any {\n if (typeof color === 'string') {\n return {\n '@keyframes newValueAnimationOnceColor': {\n '0%': {\n color: force ? `${color} !important` : color,\n },\n '100%': {\n color:\n theme.palette.mode === 'dark'\n ? force\n ? '#fff !important'\n : '#fff'\n : force\n ? '#000 !important'\n : '#000',\n },\n },\n animation: 'newValueAnimationOnceColor 2s ease-in-out',\n };\n }\n return {\n '@keyframes newValueAnimationOnce': {\n '0%': {\n color: force ? `#00f900 !important` : '#00f900',\n },\n '80%': {\n color:\n theme.palette.mode === 'dark'\n ? force\n ? `#518851 !important`\n : '#518851'\n : force\n ? `#008000 !important`\n : '#008000',\n },\n '100%': {\n color:\n theme.palette.mode === 'dark'\n ? force\n ? '#fff !important'\n : '#fff'\n : force\n ? '#000 !important'\n : '#000',\n },\n },\n animation: 'newValueAnimationOnce 2s ease-in-out',\n };\n}\n\nfunction valueBlink(theme: IobTheme, color?: string | boolean): any {\n if (typeof color === 'string') {\n return {\n '@keyframes blinkAnimationColor': {\n '0%': {\n color,\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n },\n },\n animation: 'blinkAnimationColor 2s ease-in-out infinite',\n };\n }\n return {\n '@keyframes blinkAnimation': {\n '0%': {\n color: '#00f900',\n },\n '80%': {\n color: theme.palette.mode === 'dark' ? '#518851' : '#008000',\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n },\n },\n animation: 'blinkAnimation 2s ease-in-out infinite',\n };\n}\n\nconst styles: Record<string, any> = {\n label: {\n fontWeight: 'bold',\n whiteSpace: 'nowrap',\n },\n valueImage: {\n maxHeight: '100%',\n },\n valueAndUnit: {\n display: 'flex',\n gap: 4,\n alignItems: 'baseline',\n },\n value: {},\n unit: {\n fontSize: 'smaller',\n opacity: 0.7,\n },\n};\n\ninterface ConfigStaticInfoProps extends ConfigGenericProps {\n schema: ConfigItemStaticInfo;\n}\n\nclass ConfigStaticInfo extends ConfigGeneric<ConfigStaticInfoProps, ConfigGenericState> {\n renderItem(_error: string): JSX.Element {\n let label: string | JSX.Element | JSX.Element[] = this.getText(\n this.props.schema.text || this.props.schema.label,\n this.props.schema.noTranslation,\n );\n if (this.props.schema.addColon && typeof label === 'string' && !label.trim().endsWith(':')) {\n label = `${label.trim()}:`;\n }\n\n if (\n label &&\n (label.includes('<a ') || label.includes('<br') || label.includes('<b>') || label.includes('<i>'))\n ) {\n label = Utils.renderTextWithA(label);\n }\n let fontSize: number | undefined;\n if (this.props.schema.size === 'normal') {\n fontSize = 16;\n } else if (this.props.schema.size === 'large') {\n fontSize = 20;\n } else if (typeof this.props.schema.size === 'number') {\n fontSize = this.props.schema.size;\n }\n\n const divStyle: React.CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n fontSize,\n };\n\n if (this.props.schema.narrow) {\n divStyle.gap = 8;\n } else {\n divStyle.justifyContent = 'space-between';\n }\n\n let value: React.JSX.Element;\n let valueTxt: string;\n if (this.props.schema.data && typeof this.props.schema.data === 'object' && this.props.schema.data.en) {\n valueTxt = this.getText(this.props.schema.data);\n } else if (\n typeof this.props.schema.data === 'object' ||\n this.props.schema.data === undefined ||\n this.props.schema.data === null\n ) {\n valueTxt = JSON.stringify(this.props.schema.data);\n } else if (typeof this.props.schema.data === 'number') {\n valueTxt = this.props.schema.data.toString();\n if (this.props.oContext.isFloatComma) {\n valueTxt = valueTxt.replace('.', ',');\n }\n } else if (!this.props.schema.booleanAsCheckbox || typeof this.props.schema.data !== 'boolean') {\n valueTxt = this.props.schema.data.toString();\n }\n let multiLine = false;\n\n if (this.props.schema.booleanAsCheckbox && typeof this.props.schema.data === 'boolean') {\n value = (\n <Checkbox\n checked={!!value}\n disabled\n size={\n this.props.schema.size === 'small'\n ? 'small'\n : this.props.schema.size === 'large'\n ? 'large'\n : undefined\n }\n />\n );\n } else if (valueTxt.startsWith('data:image/')) {\n value = (\n <div style={{ ...styles.value, ...styles.valueImage, ...(this.props.schema.styleValue || undefined) }}>\n <Icon src={valueTxt} />\n </div>\n );\n } else {\n const valStyle: React.CSSProperties = { ...styles.value, ...(this.props.schema.styleValue || undefined) };\n if (this.props.schema.html) {\n value = (\n <div\n style={valStyle}\n dangerouslySetInnerHTML={{ __html: valueTxt }}\n />\n );\n } else {\n if (Array.isArray(this.props.schema.data)) {\n multiLine = true;\n value = (\n <div style={valStyle}>\n {this.props.schema.data.map((it, i) => (\n <div key={i}>\n {typeof it === 'object' || it === null || it === undefined\n ? JSON.stringify(it)\n : it}\n </div>\n ))}\n </div>\n );\n } else {\n if (valueTxt.includes('\\n')) {\n multiLine = true;\n value = <div style={valStyle}>{Utils.renderTextWithA(valueTxt)}</div>;\n } else {\n value = <div style={valStyle}>{valueTxt}</div>;\n }\n }\n }\n }\n\n if (this.props.schema.blinkOnUpdate && this.props.schema.blink) {\n const style1 = valueBlinkOnce(this.props.oContext.theme, true, this.props.schema.blinkOnUpdate);\n const style2 = valueBlink(this.props.oContext.theme, this.props.schema.blink);\n value = (\n <Box\n key={valueTxt}\n sx={{ ...style1, ...style2 }}\n >\n {value}\n </Box>\n );\n } else if (this.props.schema.blinkOnUpdate) {\n const style = valueBlinkOnce(this.props.oContext.theme, false, this.props.schema.blinkOnUpdate);\n value = (\n <Box\n key={valueTxt}\n sx={style}\n >\n {value}\n </Box>\n );\n } else if (this.props.schema.blink) {\n const style = valueBlink(this.props.oContext.theme, this.props.schema.blink);\n value = <Box sx={style}>{value}</Box>;\n }\n\n if (this.props.schema.unit) {\n value = (\n <div style={styles.valueAndUnit}>\n {value}\n <div style={{ ...styles.unit, ...(this.props.schema.styleUnit || undefined) }}>\n {this.getText(this.props.schema.unit, this.props.schema.noTranslation)}\n </div>\n </div>\n );\n }\n\n let labelIcon: React.JSX.Element | undefined;\n if (this.props.schema.labelIcon) {\n labelIcon = (\n <Icon\n src={this.props.schema.labelIcon}\n style={{ marginRight: 4 }}\n />\n );\n }\n let copyButton: React.JSX.Element | undefined;\n if (this.props.schema.copyToClipboard) {\n copyButton = (\n <ContentCopy\n className=\"staticCopyButton\"\n style={{\n position: 'absolute',\n top: 'calc(50% - 12px)',\n right: 0,\n cursor: 'pointer',\n }}\n onClick={() => {\n Utils.copyToClipboard(valueTxt);\n window.alert(I18n.t('ra_Copied'));\n }}\n />\n );\n }\n\n const boxStyle: Record<string, any> = {\n '& .staticCopyButton': {\n display: 'none',\n },\n '& .staticCopyButton:action': {\n transform: 'scale(0.9)',\n },\n '&:hover .staticCopyButton': {\n display: 'block',\n },\n };\n if (this.props.schema.highlight) {\n boxStyle['&:hover'] = {\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#51515180' : '#b8b8b880',\n };\n }\n if (multiLine) {\n divStyle.alignItems = 'top';\n }\n\n return (\n <Box\n component=\"div\"\n style={divStyle}\n sx={boxStyle}\n >\n <div style={{ ...styles.label, ...(this.props.schema.styleLabel || undefined) }}>\n {labelIcon}\n {label}\n </div>\n {value}\n {copyButton}\n </Box>\n );\n }\n}\n\nexport default ConfigStaticInfo;\n","import React, { type JSX } from 'react';\n\nimport { Box, Button } from '@mui/material';\n\nimport { type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemStaticText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n height: '100%',\n width: '100%',\n },\n link: (theme: IobTheme): React.CSSProperties => ({\n textDecoration: 'underline',\n color: theme.palette.mode === 'dark' ? '#4dabf5' : '#254e72',\n cursor: 'pointer',\n }),\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction onLink(href: string, target: '_blank' | '_self' | string, instanceId: string): void {\n let _target;\n let url = '';\n if (!href) {\n url = `#tab-instances/config/${instanceId}`;\n _target = target || '_self';\n } else if (href.toString().startsWith('#')) {\n _target = target || '_self';\n url = href;\n } else if (href.toString().startsWith('/')) {\n _target = target || '_self';\n url = href;\n } else if (href.startsWith('http://') || href.startsWith('https://')) {\n _target = target || '_blank';\n url = href;\n } else {\n url = `#tab-instances/config/${instanceId}/${href}`;\n _target = 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 } 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\ninterface ConfigStaticTextProps extends ConfigGenericProps {\n schema: ConfigItemStaticText;\n}\n\nclass ConfigStaticText extends ConfigGeneric<ConfigStaticTextProps, ConfigGenericState> {\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n if (this.props.schema.button) {\n const icon = this.getIcon();\n return (\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n style={{ ...styles.fullWidth, ...(this.props.schema.controlStyle || undefined) }}\n disabled={disabled}\n startIcon={icon}\n onClick={\n this.props.schema.href\n ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href\n ? this.getText(this.props.schema.href, true)\n : null;\n if (href) {\n if (this.props.oContext.onBackEndCommand) {\n this.props.oContext.onBackEndCommand({\n command: 'link',\n url: href,\n target: this.props.schema.target,\n close: this.props.schema.close,\n });\n } else {\n onLink(\n href,\n this.props.schema.target,\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n }\n }\n }\n : null\n }\n >\n {this.getText(this.props.schema.text || this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n );\n }\n let text: string | JSX.Element | JSX.Element[] = this.getText(\n this.props.schema.text || this.props.schema.label,\n this.props.schema.noTranslation,\n );\n if (text && (text.includes('<a ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))) {\n text = Utils.renderTextWithA(text);\n }\n\n return (\n <Box\n component=\"span\"\n style={{ ...(this.props.schema.controlStyle || undefined) }}\n sx={this.props.schema.href ? styles.link : undefined}\n onClick={\n this.props.schema.href\n ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href ? this.getText(this.props.schema.href, true) : null;\n if (href) {\n if (this.props.oContext.onBackEndCommand) {\n this.props.oContext.onBackEndCommand({\n command: 'link',\n url: href,\n target: this.props.schema.target || '_blank',\n close: this.props.schema.close,\n });\n } else {\n onLink(\n href,\n this.props.schema.target || '_blank',\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n }\n }\n }\n : null\n }\n >\n {text}\n </Box>\n );\n }\n}\n\nexport default ConfigStaticText;\n","import React, { createRef, type JSX, type RefObject } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Button,\n Card,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid2,\n IconButton,\n InputAdornment,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n TextField,\n Toolbar,\n Tooltip,\n Typography,\n FormHelperText,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n Close as CloseIcon,\n ArrowUpward as UpIcon,\n ArrowDownward as DownIcon,\n FilterAlt as IconFilterOn,\n FilterAltOff as IconFilterOff,\n ContentCopy as CopyContentIcon,\n Download as ExportIcon,\n Warning as ErrorIcon,\n UploadFile as ImportIcon,\n Close as IconClose,\n ExpandMore as ExpandMoreIcon,\n} from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemTableIndexed, ConfigItemPanel, ConfigItemTable } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst MAX_SIZE = 1024 * 1024; // 1MB\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n root: {\n width: '100%',\n },\n paper: {\n width: '100%',\n marginBottom: 16,\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n },\n headerText: {\n width: '100%',\n },\n table: {\n minWidth: 750,\n },\n visuallyHidden: {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 20,\n width: 1,\n },\n label: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n // highlight: (theme: IobTheme): React.CSSProperties => (theme.palette.mode === 'light'\n // ? {\n // color: theme.palette.secondary.main,\n // // backgroundColor: lighten(theme.palette.secondary.light, 0.85),\n // }\n // : {\n // color: theme.palette.text.primary,\n // backgroundColor: theme.palette.secondary.dark,\n // }),\n title: {\n flex: '1 1 100%',\n },\n rootTool: {\n paddingLeft: 16,\n paddingRight: 8,\n },\n silver: {\n opacity: 0.2,\n },\n flex: {\n display: 'flex',\n alignItems: 'baseline',\n },\n filteredOut: {\n padding: 10,\n display: 'flex',\n textAlign: 'center',\n },\n buttonEmpty: {\n width: 34,\n display: 'inline-block',\n },\n buttonCell: {\n whiteSpace: 'nowrap',\n },\n\n dropZone: {\n width: '100%',\n height: 100,\n position: 'relative',\n },\n dropZoneEmpty: {},\n uploadDiv: {\n position: 'relative',\n width: '100%',\n minHeight: 300,\n opacity: 0.9,\n marginTop: 30,\n cursor: 'pointer',\n outline: 'none',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)',\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: 'calc(100% - 10px)',\n height: 'calc(100% - 10px)',\n minHeight: 300,\n position: 'relative',\n display: 'flex',\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n error: {\n border: '2px solid red',\n boxSizing: 'border-box',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nfunction objectToArray(\n object: Record<string, any>,\n nameOfFirstAttr: string,\n nameOfSecondAttr?: string,\n): Record<string, any>[] {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const array: Record<string, any>[] = [];\n Object.keys(object).forEach(key => {\n const item: Record<string, any> = {};\n item[nameOfFirstAttr] = key;\n\n if (nameOfSecondAttr) {\n item[nameOfSecondAttr] = object[key];\n array.push(item);\n } else {\n array.push(Object.assign(item, object[key]));\n }\n });\n\n return array;\n}\n\nfunction arrayToObject(\n array: Record<string, any>[],\n nameOfFirstAttr: string,\n nameOfSecondAttr?: string,\n): Record<string, any> {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const object: Record<string, any> = {};\n\n array.forEach((row: Record<string, any>) => {\n let key = row[nameOfFirstAttr];\n if (key === null || key === undefined) {\n key = '';\n }\n delete row[nameOfFirstAttr];\n\n if (nameOfSecondAttr) {\n object[key] = row[nameOfSecondAttr];\n } else {\n object[key] = row;\n }\n });\n\n return object;\n}\n\ninterface ConfigTableProps extends ConfigGenericProps {\n schema: ConfigItemTable;\n}\n\ninterface ConfigTableState extends ConfigGenericState {\n value: Record<string, any>[];\n visibleValue: number[] | null;\n orderBy: string;\n order: 'asc' | 'desc';\n iteration: number;\n filterOn: string[];\n errorMessage: string;\n showImportDialog: boolean;\n showTypeOfImportDialog: Record<string, any>[] | false;\n instanceObj: ioBroker.InstanceObject;\n customObj: Record<string, any>;\n uploadFile: boolean | 'dragging';\n icon: boolean;\n width: number;\n}\n\nfunction encrypt(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\nfunction decrypt(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\nclass ConfigTable extends ConfigGeneric<ConfigTableProps, ConfigTableState> {\n private readonly filterRefs: Record<string, RefObject<HTMLInputElement>>;\n\n private typingTimer: ReturnType<typeof setTimeout> | null = null;\n\n private resizeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private secret: string = 'Zgfr56gFe87jJOM';\n\n private readonly refDiv: React.RefObject<HTMLDivElement>;\n\n constructor(props: ConfigTableProps) {\n super(props);\n this.filterRefs = {};\n this.props.schema.items = this.props.schema.items || [];\n this.props.schema.items.forEach((el: ConfigItemTableIndexed) => {\n if (el.filter) {\n this.filterRefs[el.attr] = createRef();\n }\n });\n\n this.refDiv = React.createRef();\n }\n\n /**\n * React lifecycle hook, called once as component is mounted\n */\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n const _value: Record<string, any>[] | Record<string, any> =\n ConfigGeneric.getValue(this.props.data, this.props.attr) || [];\n let value: Record<string, any>[];\n\n // if the list is given as an object\n if (this.props.schema.objKeyName) {\n value = objectToArray(\n _value as Record<string, any>,\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n } else {\n value = _value as Record<string, any>[];\n }\n\n if (!Array.isArray(value)) {\n value = [];\n }\n\n if (this.props.schema.encryptedAttributes) {\n const systemConfig = await this.props.oContext.socket.getCompactSystemConfig();\n this.secret = systemConfig?.native.secret || this.secret;\n\n _value.forEach((el: Record<string, any>) => {\n this.props.schema.encryptedAttributes.forEach((attr: string) => {\n if (el[attr]) {\n el[attr] = decrypt(this.secret, el[attr]);\n }\n });\n });\n }\n\n this.setState(\n {\n value,\n visibleValue: null,\n orderBy: /* this.props.schema.items.length ? this.props.schema.items[0].attr : */ '',\n order: 'asc',\n iteration: 0,\n filterOn: [],\n width: 0,\n },\n () => this.validateUniqueProps(),\n );\n }\n\n componentWillUnmount(): void {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n this.typingTimer = null;\n }\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n }\n super.componentWillUnmount();\n }\n\n itemTable(attrItem: string, data: Record<string, any>, idx: number): JSX.Element | null {\n const { schema } = this.props;\n const schemaForAttribute =\n schema.items && schema.items.find((el: ConfigItemTableIndexed) => el.attr === attrItem);\n\n if (!schemaForAttribute) {\n return null;\n }\n\n const schemaItem = {\n items: {\n [attrItem]: schemaForAttribute,\n },\n };\n\n return (\n <ConfigPanel\n oContext={this.props.oContext}\n alive={this.props.alive}\n arrayIndex={idx}\n changed={this.props.changed}\n common={this.props.common}\n custom\n data={data}\n globalData={this.props.data}\n index={idx + this.state.iteration}\n onChange={(attr: string, valueChange: any) => {\n const newObj: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n newObj[idx][attr] = valueChange;\n this.setState({ value: newObj }, () => {\n this.validateUniqueProps();\n this.onChangeWrapper(newObj, true);\n });\n }}\n onError={(error: string, attr?: string) => this.onError(error, attr)}\n originalData={this.props.originalData}\n schema={schemaItem as ConfigItemPanel}\n table\n themeName={this.props.themeName}\n />\n );\n }\n\n /**\n * Validate that columns configured in `uniqueColumns` have unique values\n */\n validateUniqueProps(): void {\n if (!this.props.schema.uniqueColumns) {\n return;\n }\n\n for (const uniqueCol of this.props.schema.uniqueColumns) {\n const allVals: (string | number)[] = [];\n const found = this.state.value.find(entry => {\n const val = entry[uniqueCol];\n if (allVals.includes(val)) {\n this.onError(uniqueCol, 'is not unique');\n this.setState({\n errorMessage: I18n.t('Non-allowed duplicate entry \"%s\" in column \"%s\"', val, uniqueCol),\n });\n return true;\n }\n allVals.push(val);\n return false;\n });\n\n if (!found) {\n this.onError(uniqueCol, null);\n this.setState({ errorMessage: '' });\n }\n }\n }\n\n static descendingComparator(a: Record<string, any>, b: Record<string, any>, orderBy: string): number {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n }\n if (b[orderBy] > a[orderBy]) {\n return 1;\n }\n return 0;\n }\n\n static getComparator(\n order: 'desc' | 'asc',\n orderBy: string,\n ): (a: Record<string, any>, b: Record<string, any>) => number {\n return order === 'desc'\n ? (a: Record<string, any>, b: Record<string, any>) => ConfigTable.descendingComparator(a, b, orderBy)\n : (a: Record<string, any>, b: Record<string, any>) => -ConfigTable.descendingComparator(a, b, orderBy);\n }\n\n static getFilterValue(el: React.RefObject<HTMLInputElement>): string {\n return (el?.current?.children[0]?.children[0] as HTMLInputElement)?.value;\n }\n\n static setFilterValue(el: React.RefObject<HTMLInputElement>, filterValue: string): string {\n return ((el.current.children[0].children[0] as HTMLInputElement).value = filterValue);\n }\n\n handleRequestSort = (property: string, orderCheck: boolean = false): void => {\n const { order, orderBy } = this.state;\n //if (orderBy || 'asc') {\n const isAsc = orderBy === property && order === 'asc';\n const newOrder = orderCheck ? order : isAsc ? 'desc' : 'asc';\n const newValue = this.stableSort(newOrder, property);\n this.setState(\n { value: newValue, order: newOrder, orderBy: property, iteration: this.state.iteration + 10000 },\n () => this.applyFilter(false, newValue),\n );\n //}\n };\n\n stableSort = (order: 'desc' | 'asc', orderBy: string): Record<string, any>[] => {\n const { value } = this.state;\n const comparator = ConfigTable.getComparator(order, orderBy);\n const stabilizedThis = value.map((el, index) => ({ el, index }));\n\n stabilizedThis.sort((a, b) => {\n const order_ = comparator(a.el, b.el);\n if (order_ !== 0) {\n return order_;\n }\n return a.index - b.index;\n });\n\n return stabilizedThis.map(el => el.el);\n };\n\n renderShowHideFilter(headCell: ConfigItemTableIndexed): React.JSX.Element | null {\n if (!headCell.filter) {\n return null;\n }\n return (\n <IconButton\n title={I18n.t('ra_Show/hide filter input')}\n size=\"small\"\n onClick={() => {\n const filterOn = [...this.state.filterOn];\n const pos = this.state.filterOn.indexOf(headCell.attr);\n if (pos === -1) {\n filterOn.push(headCell.attr);\n } else {\n filterOn.splice(pos, 1);\n }\n this.setState({ filterOn }, () => {\n if (pos && ConfigTable.getFilterValue(this.filterRefs[headCell.attr])) {\n ConfigTable.setFilterValue(this.filterRefs[headCell.attr], '');\n this.applyFilter();\n }\n });\n }}\n >\n {this.state.filterOn.includes(headCell.attr) ? <IconFilterOff /> : <IconFilterOn />}\n </IconButton>\n );\n }\n\n renderImportExportButtons(schema: ConfigItemTable): React.JSX.Element {\n return (\n <>\n {!schema.noDelete && schema.import ? (\n <Tooltip\n title={I18n.t('ra_Import data from %s file', 'CSV')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ showImportDialog: true })}\n >\n <ImportIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n {schema.export ? (\n <Tooltip\n title={I18n.t('ra_Export data to %s file', 'CSV')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onExport()}\n >\n <ExportIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n <IconButton\n disabled\n size=\"small\"\n >\n <DeleteIcon />\n </IconButton>\n </>\n );\n }\n\n renderAddButton(doAnyFilterSet: boolean): React.JSX.Element {\n return (\n <Tooltip\n title={doAnyFilterSet ? I18n.t('ra_Cannot add items with set filter') : I18n.t('ra_Add row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n size=\"small\"\n color=\"primary\"\n disabled={!!doAnyFilterSet && !this.props.schema.allowAddByFilter}\n onClick={this.onAdd}\n >\n <AddIcon />\n </IconButton>\n </span>\n </Tooltip>\n );\n }\n\n enhancedTableHead(buttonsWidth: number, doAnyFilterSet: boolean): JSX.Element {\n const { schema } = this.props;\n const { order, orderBy } = this.state;\n return (\n <TableHead>\n <TableRow>\n {schema.items?.map((headCell: ConfigItemTableIndexed, i: number) =>\n this.renderOneFilter({\n schema,\n style: { width: headCell.width },\n showAddButton: !i && !schema.noDelete,\n headCell,\n order,\n orderBy,\n index: i,\n doAnyFilterSet,\n }),\n )}\n {!schema.noDelete && (\n <TableCell\n style={{\n paddingLeft: 20,\n paddingRight: 20,\n width: buttonsWidth,\n textAlign: 'right',\n }}\n padding=\"checkbox\"\n >\n {this.renderImportExportButtons(schema)}\n </TableCell>\n )}\n </TableRow>\n </TableHead>\n );\n }\n\n onDelete = (index: number) => (): void => {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n newValue.splice(index, 1);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10_000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n };\n\n onExport(): void {\n const { schema } = this.props;\n const { value } = this.state;\n const cols = schema.items.map((it: ConfigItemTableIndexed) => it.attr);\n const lines = [cols.join(';')];\n value.forEach(row => {\n const line: string[] = [];\n schema.items.forEach((it: ConfigItemTableIndexed) => {\n if (row[it.attr]?.includes(';')) {\n line.push(`\"${row[it.attr]}\"`);\n } else {\n line.push(row[it.attr] === undefined || row[it.attr] === null ? '' : row[it.attr]);\n }\n });\n lines.push(line.join(';'));\n });\n const el = document.createElement('a');\n el.setAttribute('href', `data:text/csv;charset=utf-8,${encodeURIComponent(lines.join('\\n'))}`);\n const now = new Date();\n el.setAttribute(\n 'download',\n `${now.getFullYear()}_${(now.getMonth() + 1).toString().padStart(2, '0')}_${now.getDate().toString().padStart(2, '0')}_${this.props.oContext.adapterName}.${this.props.oContext.instance}_${this.props.attr}.csv`,\n );\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n onImport(text: string): void {\n const lines = text.split('\\n').map((line: string) => line.replace('\\r', '').trim());\n // the first line is header\n const { schema } = this.props;\n\n const header = lines\n .shift()\n .split(';')\n .filter(it => it && schema.items.find((it2: ConfigItemTableIndexed) => it2.attr === it));\n\n const values: Record<string, any>[] = [];\n lines.forEach((line: string) => {\n const parts: string[] = line.split(';');\n const obj: Record<string, string | number | boolean> = {};\n for (let p = 0; p < parts.length; p++) {\n let value = parts[p];\n if (value.startsWith('\"')) {\n value = value.substring(1);\n while (p < parts.length && !value.endsWith('\"')) {\n value += `;${parts[++p]}`;\n }\n value = value.substring(0, value.length - 1);\n }\n\n let val: string | number | boolean = value;\n\n if (value === 'true') {\n val = true;\n } else if (value === 'false') {\n val = false;\n } else if (window.isFinite(value as any as number)) {\n const attr = this.props.schema.items.find((it: ConfigItemTableIndexed) => it.attr === header[p]);\n if (attr && attr.type === 'number') {\n // if a type of attribute is a \"number\"\n val = parseFloat(value);\n } else {\n val = value;\n }\n } else {\n val = value;\n }\n\n obj[header[p]] = val;\n }\n values.push(obj);\n });\n\n if (values.length) {\n if (this.state.value?.length) {\n this.setState({ showTypeOfImportDialog: values, showImportDialog: false });\n } else {\n this.setState({ value: values, showImportDialog: false });\n }\n } else {\n window.alert('ra_No data found in file');\n }\n }\n\n onClone = (index: number) => (): void => {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const cloned: Record<string, any> = JSON.parse(JSON.stringify(newValue[index]));\n if (typeof this.props.schema.clone === 'string' && typeof cloned[this.props.schema.clone] === 'string') {\n let i = 1;\n let text = cloned[this.props.schema.clone];\n const pattern = text.match(/(\\d+)$/);\n if (pattern) {\n text = text.replace(pattern[0], '');\n i = parseInt(pattern[0], 10) + 1;\n } else {\n text += '_';\n }\n while (\n newValue.find(\n (it: Record<string, any>) => it[this.props.schema.clone as string] === text + i.toString(),\n )\n ) {\n i++;\n }\n cloned[this.props.schema.clone] = `${cloned[this.props.schema.clone]}_${i}`;\n }\n\n newValue.splice(index, 0, cloned);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n };\n\n onChangeWrapper = (newValue: Record<string, any>[], updateVisible?: boolean): void => {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n }\n\n this.typingTimer = setTimeout(\n (value, _updateVisible) => {\n this.typingTimer = null;\n\n let mayBePromise: Promise<void> | void;\n if (this.props.schema.encryptedAttributes) {\n const _value = JSON.parse(JSON.stringify(value));\n _value.forEach((el: Record<string, any>) => {\n this.props.schema.encryptedAttributes.forEach((attr: string) => {\n if (el[attr]) {\n el[attr] = encrypt(this.secret, el[attr]);\n }\n });\n });\n\n if (this.props.schema.objKeyName) {\n const objValue = arrayToObject(\n _value,\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n mayBePromise = this.onChange(this.props.attr, objValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, _value);\n }\n } else if (this.props.schema.objKeyName) {\n const objValue = arrayToObject(\n JSON.parse(JSON.stringify(value)),\n this.props.schema.objKeyName,\n this.props.schema.objValueName,\n );\n mayBePromise = this.onChange(this.props.attr, objValue);\n } else {\n mayBePromise = this.onChange(this.props.attr, value);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot save: ${e}`));\n }\n if (_updateVisible) {\n this.applyFilter(false, value);\n this.handleRequestSort(this.state.orderBy, true);\n }\n },\n 300,\n newValue,\n updateVisible,\n );\n };\n\n onAdd = (): void => {\n const { schema } = this.props;\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const newItem = schema.items?.reduce(\n (accumulator: Record<string, any>, currentValue: ConfigItemTableIndexed) => {\n let defaultValue;\n if (currentValue.defaultFunc) {\n if (this.props.custom) {\n defaultValue = currentValue.defaultFunc\n ? this.executeCustom(\n currentValue.defaultFunc,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n } else {\n defaultValue = currentValue.defaultFunc\n ? this.execute(\n currentValue.defaultFunc,\n this.props.schema.default,\n this.props.data,\n newValue.length,\n this.props.data,\n )\n : this.props.schema.default;\n }\n } else {\n defaultValue = currentValue.default === undefined ? null : currentValue.default;\n }\n\n accumulator[currentValue.attr] = defaultValue;\n return accumulator;\n },\n {},\n );\n\n newValue.push(newItem);\n\n this.setState({ value: newValue }, () => this.applyFilter(false, null, () => this.onChangeWrapper(newValue)));\n };\n\n isAnyFilterSet(): boolean {\n return !!Object.keys(this.filterRefs).find(attr => ConfigTable.getFilterValue(this.filterRefs[attr]));\n }\n\n applyFilter = (clear?: boolean, value?: Record<string, any>[], cb?: () => void): void => {\n value = value || this.state.value;\n let visibleValue = value.map((_, i) => i);\n Object.keys(this.filterRefs).forEach(attr => {\n let valueInputRef = ConfigTable.getFilterValue(this.filterRefs[attr]);\n if (!clear && valueInputRef) {\n valueInputRef = valueInputRef.toLowerCase();\n visibleValue = visibleValue.filter(\n idx => value[idx] && value[idx][attr] && value[idx][attr].toLowerCase().includes(valueInputRef),\n );\n } else if (this.filterRefs[attr].current) {\n ConfigTable.setFilterValue(this.filterRefs[attr], '');\n }\n });\n\n if (visibleValue.length === value.length) {\n visibleValue = null;\n }\n\n if (visibleValue === null && this.state.visibleValue === null) {\n if (cb) {\n cb();\n }\n return;\n }\n\n if (JSON.stringify(visibleValue) !== JSON.stringify(this.state.visibleValue)) {\n this.setState({ visibleValue }, () => cb && cb());\n } else if (cb) {\n cb();\n }\n };\n\n onMoveUp(idx: number): void {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx - 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n }\n\n onMoveDown(idx: number): void {\n const newValue: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx + 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () => this.onChangeWrapper(newValue)),\n );\n }\n\n onDrop(acceptedFiles: File[]): void {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n if (file.size > MAX_SIZE) {\n window.alert(I18n.t('ra_File is too big. Max %sk allowed. Try use SVG.', Math.round(MAX_SIZE / 1024)));\n return;\n }\n const text = new Uint8Array(reader.result as ArrayBufferLike).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n '',\n );\n\n this.onImport(text);\n };\n reader.readAsArrayBuffer(file);\n }\n\n showTypeOfImportDialog(): JSX.Element | null {\n if (!this.state.showTypeOfImportDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showTypeOfImportDialog: false })}\n maxWidth=\"md\"\n >\n <DialogTitle>{I18n.t('ra_Append or replace?')}</DialogTitle>\n <DialogContent>\n {I18n.t('ra_Append %s entries or replace existing?', this.state.showTypeOfImportDialog.length)}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n autoFocus\n onClick={() => {\n const value: Record<string, any>[] = JSON.parse(JSON.stringify(this.state.value));\n\n (this.state.showTypeOfImportDialog as Record<string, any>[]).forEach(\n (obj: Record<string, any>) => value.push(obj),\n );\n\n this.setState(\n {\n value,\n iteration: this.state.iteration + 10000,\n showTypeOfImportDialog: false,\n },\n () => this.applyFilter(false, null, () => this.onChangeWrapper(value)),\n );\n }}\n >\n {I18n.t('ra_Append')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n autoFocus\n onClick={() => {\n const value: Record<string, any>[] = this.state.showTypeOfImportDialog as Record<\n string,\n any\n >[];\n this.setState(\n {\n value,\n iteration: this.state.iteration + 10000,\n showTypeOfImportDialog: false,\n },\n () => this.applyFilter(false, null, () => this.onChangeWrapper(value)),\n );\n }}\n >\n {I18n.t('ra_Replace')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n showImportDialog(): JSX.Element | null {\n if (!this.state.showImportDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showImportDialog: false })}\n sx={{\n '& .MuiDialog-paper': {\n minHeight: 500,\n },\n }}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>{I18n.t('ra_Import from %s', 'CSV')}</DialogTitle>\n <DialogContent>\n <Dropzone\n multiple={false}\n accept={{ 'text/csv': ['.csv'] }}\n maxSize={MAX_SIZE}\n onDragEnter={() => this.setState({ uploadFile: 'dragging' })}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert(\n (errors &&\n errors[0] &&\n errors[0].errors &&\n errors[0].errors[0] &&\n errors[0].errors[0].message) ||\n I18n.t('ra_Cannot upload'),\n );\n } else {\n this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n ...styles.dropZone,\n ...(!this.state.icon ? styles.dropZoneEmpty : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n <div style={styles.uploadCenterDiv}>\n <div style={styles.uploadCenterTextAndIcon}>\n <ImportIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? I18n.t('ra_Drop file here')\n : I18n.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </Dropzone>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showImportDialog: false })}\n color=\"primary\"\n startIcon={<IconClose />}\n >\n {I18n.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderOneFilter(props: {\n schema: ConfigItemTable;\n doAnyFilterSet: boolean;\n headCell: ConfigItemTableIndexed;\n index: number;\n orderBy: string;\n order: 'asc' | 'desc';\n showAddButton: boolean;\n style: React.CSSProperties;\n }): React.JSX.Element {\n return (\n <TableCell\n key={`${props.headCell.attr}_${props.index}`}\n style={props.style}\n align=\"left\"\n sortDirection={props.orderBy === props.headCell.attr ? props.order : false}\n >\n <div\n style={{\n ...styles.flex,\n ...(props.schema.showFirstAddOnTop ? { flexDirection: 'column' } : undefined),\n }}\n >\n {props.showAddButton ? this.renderAddButton(props.doAnyFilterSet) : null}\n {props.headCell.sort && (\n <TableSortLabel\n active\n style={props.orderBy !== props.headCell.attr ? styles.silver : undefined}\n direction={props.orderBy === props.headCell.attr ? props.order : 'asc'}\n onClick={() => this.handleRequestSort(props.headCell.attr)}\n />\n )}\n {props.headCell.filter && this.state.filterOn.includes(props.headCell.attr) ? (\n <TextField\n variant=\"standard\"\n ref={this.filterRefs[props.headCell.attr]}\n onChange={() => this.applyFilter()}\n title={I18n.t('ra_You can filter entries by entering here some text')}\n slotProps={{\n input: {\n endAdornment: ConfigTable.getFilterValue(this.filterRefs[props.headCell.attr]) && (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n ConfigTable.setFilterValue(\n this.filterRefs[props.headCell.attr],\n '',\n );\n this.applyFilter();\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n fullWidth\n placeholder={this.getText(props.headCell.title)}\n />\n ) : (\n <span style={styles.headerText}>{this.getText(props.headCell.title)}</span>\n )}\n {this.renderShowHideFilter(props.headCell)}\n </div>\n </TableCell>\n );\n }\n\n enhancedFilterCard(): JSX.Element {\n const { schema } = this.props;\n const { order, orderBy } = this.state;\n let tdStyle: React.CSSProperties | undefined;\n if (this.props.schema.compact) {\n tdStyle = { paddingTop: 1, paddingBottom: 1 };\n }\n\n return (\n <Grid2\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n >\n <Card>\n <Paper style={styles.paper}>\n <Accordion style={styles.paper}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>{I18n.t('ra_Filter and Data Actions')}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Table>\n <TableBody>\n {schema.items?.map(\n (headCell: ConfigItemTableIndexed, i: number): React.JSX.Element => (\n <TableRow key={`${headCell.attr}_${i}`}>\n {this.renderOneFilter({\n schema,\n style: tdStyle,\n showAddButton: false,\n headCell,\n order,\n orderBy,\n index: i,\n doAnyFilterSet: false,\n })}\n </TableRow>\n ),\n )}\n <TableRow>\n <TableCell\n align=\"left\"\n style={tdStyle}\n >\n <span style={styles.headerText}>{I18n.t('ra_Actions')}</span>\n </TableCell>\n <TableCell style={tdStyle}>\n {this.renderImportExportButtons(schema)}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </AccordionDetails>\n </Accordion>\n </Paper>\n </Card>\n </Grid2>\n );\n }\n\n enhancedBottomCard(): JSX.Element {\n const { schema } = this.props;\n let tdStyle: React.CSSProperties | undefined;\n if (this.props.schema.compact) {\n tdStyle = { paddingTop: 1, paddingBottom: 1 };\n }\n const doAnyFilterSet = this.isAnyFilterSet();\n return (\n <Grid2\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n >\n <Card>\n <Paper style={styles.paper}>\n <Table>\n <TableBody>\n <TableRow>\n <TableCell\n colSpan={schema.items.length + 1}\n style={tdStyle}\n >\n {this.renderAddButton(doAnyFilterSet)}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </Paper>\n </Card>\n </Grid2>\n );\n }\n\n renderCards(): JSX.Element | null {\n const { schema } = this.props;\n let { visibleValue } = this.state;\n let tdStyle: React.CSSProperties | undefined;\n if (this.props.schema.compact) {\n tdStyle = { paddingTop: 1, paddingBottom: 1 };\n }\n visibleValue = visibleValue || this.state.value.map((_, i) => i);\n\n const doAnyFilterSet = this.isAnyFilterSet();\n\n return (\n <Grid2 container>\n {this.showImportDialog()}\n {this.showTypeOfImportDialog()}\n {this.enhancedFilterCard()}\n {visibleValue.map((idx, i) => (\n <Grid2\n key={`${idx}_${i}`}\n size={{\n xs: schema.xs || 12, // if xs is not defined, take the full width\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n >\n <Card>\n <Paper style={styles.paper}>\n <Table>\n <TableBody>\n {schema.items?.map((headCell: ConfigItemTableIndexed) => (\n <TableRow key={`${headCell.attr}_${idx}`}>\n <TableCell\n align=\"left\"\n style={tdStyle}\n >\n <span style={styles.headerText}>\n {this.getText(headCell.title)}\n </span>\n </TableCell>\n <TableCell\n align=\"left\"\n style={tdStyle}\n >\n {this.itemTable(headCell.attr, this.state.value[idx], idx)}\n </TableCell>\n </TableRow>\n ))}\n <TableRow>\n <TableCell\n align=\"left\"\n style={tdStyle}\n >\n <span style={styles.headerText}>{this.getText('Actions')}</span>\n </TableCell>\n <TableCell\n align=\"left\"\n style={tdStyle}\n >\n {!doAnyFilterSet && !this.state.orderBy ? (\n <Tooltip\n title={I18n.t('ra_Move up')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveUp(idx)}\n disabled={i === 0}\n >\n <UpIcon />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {!doAnyFilterSet && !this.state.orderBy ? (\n <Tooltip\n title={I18n.t('ra_Move down')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveDown(idx)}\n disabled={i === visibleValue.length - 1}\n >\n <DownIcon />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n <Tooltip\n title={I18n.t('ra_Delete current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onDelete(idx)}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n {this.props.schema.clone ? (\n <Tooltip\n title={I18n.t('ra_Clone current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onClone(idx)}\n >\n <CopyContentIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </Paper>\n </Card>\n </Grid2>\n ))}\n {this.enhancedBottomCard()}\n </Grid2>\n );\n }\n\n renderTable(): JSX.Element | null {\n const { schema } = this.props;\n let { visibleValue } = this.state;\n\n visibleValue = visibleValue || this.state.value.map((_, i) => i);\n\n const doAnyFilterSet = this.isAnyFilterSet();\n\n let tdStyle: React.CSSProperties | undefined;\n if (this.props.schema.compact) {\n tdStyle = { paddingTop: 1, paddingBottom: 1 };\n }\n\n return (\n <Paper style={styles.paper}>\n {this.showImportDialog()}\n {this.showTypeOfImportDialog()}\n {schema.label ? (\n <div style={styles.label}>\n <Toolbar\n variant=\"dense\"\n style={styles.rootTool}\n >\n <Typography\n style={styles.title}\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {this.getText(schema.label)}\n </Typography>\n </Toolbar>\n </div>\n ) : null}\n <TableContainer>\n <Table\n style={styles.table}\n size=\"small\"\n >\n {this.enhancedTableHead(!doAnyFilterSet && !this.state.orderBy ? 120 : 64, doAnyFilterSet)}\n <TableBody>\n {visibleValue.map((idx, i) => (\n <TableRow\n hover\n key={`${idx}_${i}`}\n >\n {schema.items?.map((headCell: ConfigItemTableIndexed) => (\n <TableCell\n key={`${headCell.attr}_${idx}`}\n align=\"left\"\n style={tdStyle}\n >\n {this.itemTable(headCell.attr, this.state.value[idx], idx)}\n </TableCell>\n ))}\n {!schema.noDelete && (\n <TableCell\n align=\"left\"\n style={{ ...tdStyle, ...styles.buttonCell }}\n >\n {!doAnyFilterSet && !this.state.orderBy ? (\n i ? (\n <Tooltip\n title={I18n.t('ra_Move up')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveUp(idx)}\n >\n <UpIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )\n ) : null}\n {!doAnyFilterSet && !this.state.orderBy ? (\n i < visibleValue.length - 1 ? (\n <Tooltip\n title={I18n.t('ra_Move down')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.onMoveDown(idx)}\n >\n <DownIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={styles.buttonEmpty} />\n )\n ) : null}\n <Tooltip\n title={I18n.t('ra_Delete current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onDelete(idx)}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n {this.props.schema.clone ? (\n <Tooltip\n title={I18n.t('ra_Clone current row')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={this.onClone(idx)}\n >\n <CopyContentIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </TableCell>\n )}\n </TableRow>\n ))}\n {!schema.noDelete && visibleValue.length >= (schema.showSecondAddAt || 5) ? (\n <TableRow>\n <TableCell\n colSpan={schema.items.length + 1}\n style={{ ...tdStyle }}\n >\n {this.renderAddButton(doAnyFilterSet)}\n </TableCell>\n </TableRow>\n ) : null}\n </TableBody>\n </Table>\n {!visibleValue.length && this.state.value.length ? (\n <div style={styles.filteredOut}>\n <Typography\n style={styles.title}\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {I18n.t('ra_All items are filtered out')}\n <IconButton\n size=\"small\"\n onClick={() => this.applyFilter(true)}\n >\n <CloseIcon />\n </IconButton>\n </Typography>\n </div>\n ) : null}\n </TableContainer>\n {schema.help ? (\n <FormHelperText style={{ paddingLeft: 16 }}>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n {this.state.errorMessage ? (\n <div style={{ display: 'flex', padding: '5px' }}>\n <ErrorIcon color=\"error\" />\n <span style={{ color: 'red', alignSelf: 'center' }}>{this.state.errorMessage}</span>\n </div>\n ) : null}\n </Paper>\n );\n }\n\n componentDidUpdate(): void {\n if (this.refDiv.current?.clientWidth && this.refDiv.current.clientWidth !== this.state.width) {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.resizeTimeout = null;\n this.setState({ width: this.refDiv.current?.clientWidth });\n }, 50);\n }\n }\n\n getCurrentBreakpoint(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' {\n if (!this.state.width) {\n return 'md';\n }\n if (this.state.width < 600) {\n return 'xs';\n }\n if (this.state.width < 900) {\n return 'sm';\n }\n if (this.state.width < 1200) {\n return 'md';\n }\n if (this.state.width < 1536) {\n return 'lg';\n }\n return 'xl';\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element | null {\n const { schema } = this.props;\n\n if (!this.state.value || !Array.isArray(this.state.value)) {\n return null;\n }\n\n const currentBreakpoint = this.getCurrentBreakpoint();\n let content: React.JSX.Element;\n\n if (currentBreakpoint && (schema.useCardFor || ['xs']).includes(currentBreakpoint)) {\n content = this.renderCards();\n } else {\n content = this.renderTable();\n }\n\n return (\n <div\n ref={this.refDiv}\n style={{ width: '100%' }}\n >\n {content}\n </div>\n );\n }\n}\n\nexport default ConfigTable;\n","import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, TextareaAutosize, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n label: {\n width: '100%',\n fontSize: 14,\n marginBottom: 2,\n },\n helper: {\n width: '100%',\n fontSize: 12,\n },\n error: {\n width: '100%',\n fontSize: 12,\n color: '#FF0000',\n },\n};\n\ninterface ConfigTextProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigTextState extends ConfigGenericState {\n oldValue?: string;\n jsonError?: boolean;\n}\n\nclass ConfigText extends ConfigGeneric<ConfigTextProps, ConfigTextState> {\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n componentDidMount(): void {\n super.componentDidMount();\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (Array.isArray(value) && this.props.oContext.multiEdit) {\n value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ value, oldValue: value, jsonError: false });\n return;\n }\n\n this.setState({ value, oldValue: value, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n static getDerivedStateFromProps(props: ConfigTextProps, state: ConfigTextState): Partial<ConfigTextState> | null {\n if (props.oContext.multiEdit && state.value === ConfigGeneric.DIFFERENT_VALUE) {\n return { value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n let value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (value !== null && value !== undefined) {\n value = value.toString();\n }\n\n if (value === null || value === undefined || (value !== state.value && value !== state.oldValue)) {\n return { value };\n }\n return null;\n }\n\n renderItem(error?: boolean, disabled?: boolean): JSX.Element {\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.props.schema.time) {\n // show read-only time\n\n let time = '';\n if (typeof this.state.value === 'number') {\n // If the value is a number, it is a timestamp.\n if (this.state.value && this.state.value < 946659600000) {\n // If the value is less than 2000-01-01, it is a timestamp in seconds.\n time = new Date(this.state.value * 1000).toLocaleString();\n } else {\n time = new Date(this.state.value).toLocaleString();\n }\n } else if (typeof this.state.value === 'string') {\n // If the value is a string, it is a date string.\n time = new Date(this.state.value).toLocaleString();\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={time}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n readOnly: true,\n },\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: any) => a || a === 0)\n .map((item: any) => ({ label: item.toString() || '', value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n value={arr[0]}\n // getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) => {\n const val = value ? value.value : '';\n const mayBePromise = this.onChange(this.props.attr, val, () => {\n this.setState({ value: val, oldValue: val, jsonError: this.validateJson(value) });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n disabled={!!disabled}\n />\n )}\n />\n );\n }\n\n let actionButton: React.JSX.Element | undefined;\n let actionButtonStyle: React.CSSProperties | undefined;\n if ((this.props.schema.readOnly || disabled) && this.props.schema.copyToClipboard) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n style={actionButtonStyle}\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.value);\n window.alert(I18n.t('ra_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n );\n } else if (!this.props.schema.readOnly && !disabled && this.state.value && !this.props.schema.noClearButton) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n style={actionButtonStyle}\n size=\"small\"\n onClick={() =>\n this.setState({ value: '', oldValue: this.state.value }, () =>\n this.onChange(this.props.attr, ''),\n )\n }\n >\n <CloseIcon />\n </IconButton>\n );\n if (this.props.schema.minRows <= 1) {\n actionButton = <InputAdornment position=\"end\">{actionButton}</InputAdornment>;\n }\n }\n\n if (this.props.schema.minRows > 1) {\n const helper = this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n );\n return (\n <div style={{ width: '100%', position: 'relative' }}>\n {this.props.schema.label ? (\n <div style={styles.label}>{this.getText(this.props.schema.label)}</div>\n ) : null}\n <TextareaAutosize\n // variant=\"standard\"\n style={{\n width: '100%',\n resize: 'vertical',\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#363636' : '#cccccc',\n color: this.props.oContext.themeType === 'dark' ? '#fff' : '#111',\n }}\n minRows={this.props.schema.minRows}\n maxRows={this.props.schema.maxRows}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n disabled={!!disabled}\n readOnly={this.props.schema.readOnly || false}\n onChange={e => {\n const value = e.target.value;\n this.setState(\n { value, oldValue: this.state.value, jsonError: this.validateJson(value) },\n () => this.onChange(this.props.attr, value || ''),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n />\n {helper || error || this.state.jsonError ? (\n <div style={error ? styles.error : styles.helper}>\n {error || (this.state.jsonError ? I18n.t('ra_Invalid JSON') : helper)}\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment: actionButton,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n\n this.setState({ value, oldValue: this.state.value, jsonError: this.validateJson(value) }, () =>\n this.onChange(this.props.attr, value),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigText;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { I18n, Icon, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '#JC/types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\ninterface ConfigTextSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigTextSendToState extends ConfigGenericState {\n text?: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\ninterface Response {\n text: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\nclass ConfigTextSendTo extends ConfigGeneric<ConfigTextSendToProps, ConfigTextSendToState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n askInstance(): void {\n if (this.props.alive) {\n let data: Record<string, any> | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = this.getPattern(this.props.schema.jsonData, null, true);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n void this.props.oContext.socket\n .sendTo(\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n this.props.schema.command || 'send',\n data,\n )\n .then(result => {\n if (typeof result === 'object') {\n const _data: Response = result;\n this.setState({\n text: _data.text || '',\n style: _data.style,\n icon: _data.icon,\n iconStyle: _data.iconStyle,\n });\n } else if (typeof result === 'string') {\n this.setState({ text: result || '' });\n }\n })\n .catch(e => console.error(`Cannot send command: ${e}`));\n }\n }\n\n getLocalContext(): string {\n const localContext: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(localContext);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (this.props.alive) {\n const localContext = this.getLocalContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.text === undefined) {\n return null;\n }\n\n let icon: JSX.Element | null = null;\n if (this.state.icon) {\n icon = getIconByName(this.state.icon, {\n marginRight: this.state.text ? 8 : undefined,\n ...(this.state.iconStyle || undefined),\n });\n if (!icon) {\n icon = (\n <Icon\n src={this.state.icon}\n style={{ marginRight: this.state.text ? 8 : undefined, ...(this.state.iconStyle || undefined) }}\n />\n );\n }\n }\n\n if (this.props.schema.container === 'text') {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n input: {\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.text);\n window.alert(I18n.t('ra_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n },\n }}\n value={this.state.text}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <div style={{ ...styles.fullWidth, ...(this.state.style || undefined) }}>\n {icon}\n {this.props.schema.container === 'html' ? (\n <span dangerouslySetInnerHTML={{ __html: this.state.text || '' }} />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n}\n\nexport default ConfigTextSendTo;\n","import React, { type JSX } from 'react';\n\nimport { TextField } from '@mui/material';\n\nimport type { ConfigItemTopic } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nfunction convertID2Topic(id: string, namespace: string): string {\n let topic;\n if (namespace && id.substring(0, namespace.length) === namespace) {\n topic = id.substring(namespace.length + 1);\n } else {\n topic = id;\n }\n topic = topic.replace(/\\./g, '/').replace(/_/g, ' ');\n return topic;\n}\n\ninterface ConfigTopicProps extends ConfigGenericProps {\n schema: ConfigItemTopic;\n}\n\nclass ConfigTopic extends ConfigGeneric<ConfigTopicProps, ConfigGenericState> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value && this.props.customObj?._id) {\n const topic = convertID2Topic(\n this.props.customObj._id,\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n this.setState({ value: topic });\n } else {\n this.setState({ value: value || '' });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n value={this.state.value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, value));\n }}\n />\n );\n }\n}\n\nexport default ConfigTopic;\n","import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { ContentCopy as IconCopy } from '@mui/icons-material';\n\nimport { Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUUID } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigUUIDProps extends ConfigGenericProps {\n schema: ConfigItemUUID;\n}\n\ninterface ConfigUUIDState extends ConfigGenericState {\n uuid?: string;\n}\n\nclass ConfigUUID extends ConfigGeneric<ConfigUUIDProps, ConfigUUIDState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n\n const uuidObj = await this.props.oContext.socket.getObject('system.meta.uuid');\n this.setState({ uuid: uuidObj?.native?.uuid || 'unknown' });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: { readOnly: true },\n input: {\n endAdornment: (\n <IconButton\n onClick={() => {\n Utils.copyToClipboard(this.state.uuid);\n window.alert(I18n.t('ra_Copied %s', this.state.uuid));\n }}\n >\n <IconCopy />\n </IconButton>\n ),\n },\n }}\n value={this.state.uuid || ''}\n label={this.getText(this.props.schema.label) || I18n.t('ra_Serial number (UUID)')}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n\nexport default ConfigUUID;\n","import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { Icon, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUser } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 16,\n height: 16,\n marginRight: 8,\n },\n};\n\ninterface ConfigUserProps extends ConfigGenericProps {\n schema: ConfigItemUser;\n}\n\ninterface ConfigUserState extends ConfigGenericState {\n users: Record<string, { color?: string; icon?: string; name: string }>;\n}\n\nclass ConfigUser extends ConfigGeneric<ConfigUserProps, ConfigUserState> {\n componentDidMount(): void {\n super.componentDidMount();\n this.props.oContext.socket\n .getUsers()\n .then(users => {\n const _users: Record<string, { color?: string; icon?: string; name: string }> = {};\n const lang = I18n.getLanguage();\n\n if (this.props.schema.short) {\n users.forEach(\n user =>\n (_users[user._id] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n } else {\n users.forEach(\n user =>\n (_users[user._id.replace(/^system\\.user\\./, '')] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n }\n\n this.setState({ users: _users });\n })\n .catch(e => console.error(`Cannot get users: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.state.users && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.users ? (\n <TextField\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => (\n <span>\n {this.state.users && this.state.users[val]?.icon ? (\n <Icon\n src={this.state.users && this.state.users[val]?.icon}\n style={styles.icon}\n />\n ) : null}\n {(this.state.users && this.state.users[val]?.name) || val || ''}\n </span>\n )}\n style={{\n color: (this.state.users && this.state.users[value]?.color) || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users && this.state.users[value]?.color,\n this.props.oContext.themeType,\n ),\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.users &&\n Object.keys(this.state.users).map(id => (\n <MenuItem\n style={{\n color: this.state.users[id].color || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users[id].color,\n this.props.oContext.themeType,\n ),\n }}\n key={id}\n value={id}\n >\n {this.state.users[id].icon ? (\n <Icon\n src={this.state.users[id].icon}\n style={styles.icon}\n />\n ) : null}\n {this.state.users[id].name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigUser;\n","import React, { type JSX } from 'react';\n\nimport type QRCode from 'react-qr-code';\nimport type { ConfigItemQrCode } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigQrCodeProps extends ConfigGenericProps {\n schema: ConfigItemQrCode;\n}\n\ninterface ConfigQrCodeState extends ConfigGenericState {\n QRCode: typeof QRCode | null;\n}\n\nclass ConfigQrCode extends ConfigGeneric<ConfigQrCodeProps, ConfigQrCodeState> {\n async componentDidMount(): Promise<void> {\n super.componentDidMount();\n // lazy load of qrcode\n const module = await import('react-qr-code');\n this.setState({ QRCode: module.default });\n }\n\n renderItem(): JSX.Element | null {\n const QRCodeComponent = this.state.QRCode;\n if (!QRCodeComponent) {\n return null;\n }\n return (\n <QRCodeComponent\n value={this.props.schema.data}\n size={this.props.schema.size}\n fgColor={this.props.schema.fgColor}\n bgColor={this.props.schema.bgColor}\n level={this.props.schema.level}\n />\n );\n }\n}\n\nexport default ConfigQrCode;\n","import React, { type JSX } from 'react';\n\nimport { Grid2, Accordion, AccordionSummary, AccordionDetails, Typography, Box } from '@mui/material';\n\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';\n\nimport { type AdminConnection, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemPanel } from '#JC/types';\n\nimport ConfigGeneric, { type ConfigGenericState, type ConfigGenericProps } from './ConfigGeneric';\nimport ConfigAccordion from './ConfigAccordion';\nimport ConfigAlive from './ConfigAlive';\nimport ConfigAutocomplete from './ConfigAutocomplete';\nimport ConfigAutocompleteSendTo from './ConfigAutocompleteSendTo';\nimport ConfigCRON from './ConfigCRON';\nimport ConfigCertificateSelect from './ConfigCertificateSelect';\nimport ConfigCertificates from './ConfigCertificates';\nimport ConfigCertCollection from './ConfigCertCollection';\nimport ConfigCheckLicense from './ConfigCheckLicense';\nimport ConfigCheckbox from './ConfigCheckbox';\nimport ConfigChip from './ConfigChip';\nimport ConfigColor from './ConfigColor';\nimport ConfigCoordinates from './ConfigCoordinates';\nimport ConfigCustom from './ConfigCustom';\nimport ConfigDatePicker from './ConfigDatePicker';\nimport ConfigDeviceManager from './ConfigDeviceManager';\nimport ConfigFile from './ConfigFile';\nimport ConfigFileSelector from './ConfigFileSelector';\nimport ConfigFunc from './ConfigFunc';\nimport ConfigIP from './ConfigIP';\nimport ConfigImageSendTo from './ConfigImageSendTo';\nimport ConfigImageUpload from './ConfigImageUpload';\nimport ConfigInstanceSelect from './ConfigInstanceSelect';\nimport ConfigInterface from './ConfigInterface';\nimport ConfigJsonEditor from './ConfigJsonEditor';\nimport ConfigLanguage from './ConfigLanguage';\nimport ConfigLicense from './ConfigLicense';\nimport ConfigNumber from './ConfigNumber';\nimport ConfigObjectId from './ConfigObjectId';\nimport ConfigPassword from './ConfigPassword';\nimport ConfigPattern from './ConfigPattern';\nimport ConfigPort from './ConfigPort';\nimport ConfigRoom from './ConfigRoom';\nimport ConfigSelect from './ConfigSelect';\nimport ConfigSelectSendTo from './ConfigSelectSendTo';\nimport ConfigSendTo from './ConfigSendto';\nimport ConfigSetState from './ConfigSetState';\nimport ConfigSlider from './ConfigSlider';\nimport ConfigState from './ConfigState';\nimport ConfigStaticDivider from './ConfigStaticDivider';\nimport ConfigStaticHeader from './ConfigStaticHeader';\nimport ConfigStaticImage from './ConfigStaticImage';\nimport ConfigStaticInfo from './ConfigStaticInfo';\nimport ConfigStaticText from './ConfigStaticText';\nimport ConfigTable from './ConfigTable';\nimport ConfigText from './ConfigText';\nimport ConfigTextSendTo from './ConfigTextSendTo';\nimport ConfigTimePicker from './ConfigTimePicker';\nimport ConfigTopic from './ConfigTopic';\nimport ConfigUUID from './ConfigUUID';\nimport ConfigUser from './ConfigUser';\nimport ConfigQrCode from './ConfigQrCode';\n\nconst components: Record<string, typeof ConfigGeneric<any, any>> = {\n accordion: ConfigAccordion,\n alive: ConfigAlive,\n autocomplete: ConfigAutocomplete,\n autocompleteSendTo: ConfigAutocompleteSendTo,\n certCollection: ConfigCertCollection,\n certificate: ConfigCertificateSelect,\n certificates: ConfigCertificates,\n checkbox: ConfigCheckbox,\n checkLicense: ConfigCheckLicense,\n chip: ConfigChip, // deprecated. Use \"chips\"\n chips: ConfigChip,\n color: ConfigColor,\n coordinates: ConfigCoordinates,\n cron: ConfigCRON,\n custom: ConfigCustom,\n datePicker: ConfigDatePicker,\n deviceManager: ConfigDeviceManager,\n divider: ConfigStaticDivider,\n file: ConfigFile,\n fileSelector: ConfigFileSelector,\n func: ConfigFunc,\n header: ConfigStaticHeader,\n image: ConfigImageUpload,\n imageSendTo: ConfigImageSendTo,\n instance: ConfigInstanceSelect,\n interface: ConfigInterface,\n ip: ConfigIP,\n jsonEditor: ConfigJsonEditor,\n language: ConfigLanguage,\n license: ConfigLicense,\n number: ConfigNumber,\n objectId: ConfigObjectId,\n password: ConfigPassword,\n pattern: ConfigPattern,\n port: ConfigPort,\n qrCode: ConfigQrCode,\n room: ConfigRoom,\n select: ConfigSelect,\n selectSendTo: ConfigSelectSendTo,\n // @deprecated Use \"sendTo\"\n sendto: ConfigSendTo,\n sendTo: ConfigSendTo,\n setState: ConfigSetState,\n slider: ConfigSlider,\n state: ConfigState,\n staticImage: ConfigStaticImage,\n staticInfo: ConfigStaticInfo,\n staticLink: ConfigStaticText,\n staticText: ConfigStaticText,\n table: ConfigTable,\n text: ConfigText,\n textSendTo: ConfigTextSendTo,\n timePicker: ConfigTimePicker,\n topic: ConfigTopic,\n uuid: ConfigUUID,\n user: ConfigUser,\n};\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n // height: '100%',\n },\n paper: {\n margin: 1,\n width: 'auto !important',\n overflowY: 'auto',\n paddingBottom: 1,\n },\n paperWithIcons: {\n height: 'calc(100vh - 259px) !important',\n },\n paperWithoutIcons: {\n height: 'calc(100vh - 235px) !important',\n },\n padding: {\n padding: '10px',\n },\n heading: {},\n primary: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.mode === 'dark' ? 'inherit' : '#FFF',\n }),\n secondary: (theme: IobTheme): React.CSSProperties => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ConfigPanelProps extends ConfigGenericProps {\n schema: ConfigItemPanel;\n withIcons?: boolean;\n}\ninterface ConfigPanelState extends ConfigGenericState {\n expanded?: boolean;\n}\n\nclass ConfigPanel extends ConfigGeneric<ConfigPanelProps, ConfigPanelState> {\n componentDidMount(): void {\n super.componentDidMount();\n if (this.props.schema && this.props.schema.collapsable) {\n this.setState({\n expanded:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.oContext.adapterName}.${this.props.attr}`,\n ) === 'true',\n });\n }\n }\n\n renderItems(items: Record<string, any>, disabled: boolean): JSX.Element[] | null {\n return items\n ? Object.keys(items).map(attr => {\n if (this.props.oContext.multiEdit && items[attr].noMultiEdit) {\n return null;\n }\n\n const type = items[attr].type || 'panel';\n let ItemComponent: typeof ConfigGeneric<ConfigGenericProps, any>;\n let socket: string | AdminConnection = 'Use this.props.oContext.socket!';\n if (type === 'custom') {\n // name\n // url\n if (items[attr].url) {\n ItemComponent = ConfigCustom;\n } else if (this.props.oContext.customs && this.props.oContext.customs[items[attr].component]) {\n ItemComponent = this.props.oContext.customs[items[attr].component];\n } else {\n console.error(`Cannot find custom component: ${items[attr].component}`);\n ItemComponent = ConfigGeneric;\n }\n socket = this.props.oContext.socket;\n } else if (type === 'panel') {\n ItemComponent = ConfigPanel;\n } else {\n ItemComponent = components[type] || ConfigGeneric;\n }\n\n return (\n <ItemComponent\n // @ts-expect-error Temporary work-around, till all custom components will not migrate to oContext\n socket={socket}\n globalData={this.props.globalData}\n oContext={this.props.oContext}\n key={`${attr}_${this.props.index === undefined ? '' : this.props.index}`}\n index={this.props.index}\n changed={this.props.changed}\n arrayIndex={this.props.arrayIndex}\n commandRunning={this.props.commandRunning}\n style={styles.panel}\n common={this.props.common}\n alive={this.props.alive}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n onError={this.props.onError}\n onChange={this.props.onChange}\n disabled={disabled}\n customObj={this.props.customObj}\n custom={this.props.custom}\n schema={items[attr]}\n attr={attr}\n table={this.props.table}\n />\n );\n })\n : null;\n }\n\n render(): JSX.Element | null {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n const { disabled, hidden } = this.calculate(schema);\n\n const items = this.props.schema.items;\n const schemaStyle = this.props.schema.style || {};\n\n if (hidden) {\n if (schema.hideOnlyControl) {\n const item = (\n <Grid2\n size={{\n xs: schema.xs || undefined,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n sx={Utils.getStyle(\n this.props.oContext.theme,\n { marginBottom: 0, textAlign: 'left' /* marginRight: 8, */ },\n schemaStyle,\n this.props.oContext.themeType === 'dark' && schema.darkStyle,\n )}\n />\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return null;\n }\n\n if (this.props.table) {\n return this.renderItems(items, disabled) as any as JSX.Element;\n }\n\n if (this.props.custom) {\n return (\n <Grid2\n key={`${this.props.attr}_${this.props.index}`}\n container\n style={styles.fullWidth}\n columnSpacing={2}\n rowSpacing={1}\n sx={schemaStyle}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n );\n }\n\n let content;\n if (schema.collapsable) {\n content = (\n <Accordion\n key={`${this.props.attr}_${this.props.index}`}\n style={styles.fullWidth}\n expanded={!!this.state.expanded}\n onChange={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.oContext.adapterName}.${this.props.attr}`,\n this.state.expanded ? 'false' : 'true',\n );\n this.setState({ expanded: !this.state.expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={Utils.getStyle(\n this.props.oContext.theme,\n schemaStyle,\n this.props.oContext.themeType && schema.darkStyle,\n schema.color === 'primary'\n ? styles.primary\n : schema.color === 'secondary' && styles.secondary,\n { width: '100%' },\n )}\n >\n <Typography style={styles.heading}>{this.getText(schema.label)}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n columnSpacing={2}\n rowSpacing={1}\n sx={{ ...schemaStyle, width: '100%', padding: '10px' }}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n } else {\n content = (\n <Box\n component=\"div\"\n key={`${this.props.attr}_${this.props.index}`}\n className={this.props.className}\n sx={Utils.getStyle(\n this.props.oContext.theme,\n this.props.style,\n schemaStyle,\n { width: '100%' },\n this.props.isParentTab && styles.paper,\n this.props.isParentTab &&\n (this.props.withIcons ? styles.paperWithIcons : styles.paperWithoutIcons),\n )}\n >\n <Grid2\n container\n columnSpacing={2}\n rowSpacing={1}\n sx={Utils.getStyle(\n this.props.oContext.theme,\n { width: '100%' },\n this.props.isParentTab && styles.padding,\n this.props.schema.innerStyle,\n )}\n >\n {this.renderItems(items, disabled)}\n </Grid2>\n </Box>\n );\n }\n\n if (!this.props.isParentTab) {\n const item = (\n <Grid2\n title={this.getText(schema.tooltip)}\n size={{\n xs: schema.xs || undefined,\n sm: schema.sm || undefined,\n md: schema.md || undefined,\n lg: schema.lg || undefined,\n xl: schema.xl || undefined,\n }}\n sx={{ marginBottom: 0, /* marginRight: 8, */ textAlign: 'left', ...schemaStyle }}\n >\n {content}\n </Grid2>\n );\n\n if (schema.newLine) {\n return (\n <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>\n );\n }\n return item;\n }\n return content;\n }\n}\n\nexport default ConfigPanel;\n","import React, { type JSX } from 'react';\n\nimport { DatePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemDatePicker } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigDatePickerProps extends ConfigGenericProps {\n schema: ConfigItemDatePicker;\n}\n\nexport default class ConfigDatePicker extends ConfigGeneric<ConfigDatePickerProps> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <DatePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n format={this.props.oContext.systemConfig.dateFormat.toLowerCase().replace('mm', 'MM')}\n disabled={!!disabled}\n value={this.state.value as never}\n onChange={value => {\n this.setState({ value }, () => this.onChange(this.props.attr, this.state.value));\n }}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { TimePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemTimePicker } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigTimePickerProps extends ConfigGenericProps {\n schema: ConfigItemTimePicker;\n dialogName?: string;\n}\n\nexport default class ConfigTimePicker extends ConfigGeneric<ConfigTimePickerProps> {\n componentDidMount(): void {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean): JSX.Element {\n // the format could be 'HH:mm:ss' or 'HH:mm'\n const shortFormat = this.props.schema.returnFormat !== 'HH:mm:ss';\n\n const value: never = new Date(Date.parse(`Thu, 01 Jan 1970 ${this.state.value || '00:00:00'}`)) as never;\n\n return (\n <TimePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n ampm={this.props.oContext.systemConfig.dateFormat.includes('/')}\n timeSteps={\n this.props.schema.timeSteps || this.props.schema.timesteps || { hours: 1, minutes: 5, seconds: 5 }\n }\n format={this.props.schema.format || 'HH:mm:ss'}\n disabled={!!disabled}\n value={value}\n onChange={(newValue: Date) => {\n let strValue: string;\n strValue =\n (newValue as any) instanceof Date\n ? newValue.toTimeString().split(' ')[0]\n : newValue.toTimeString();\n if (shortFormat) {\n strValue = strValue.split(':').slice(0, 2).join(':');\n }\n\n this.setState({ value: strValue }, () => this.onChange(this.props.attr, this.state.value));\n }}\n views={this.props.schema.views || ['hours', 'minutes', 'seconds']}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Tabs, Tab, IconButton, Toolbar, Menu, MenuItem, ListItemIcon } from '@mui/material';\nimport { Menu as MenuIcon } from '@mui/icons-material';\n\nimport type { ConfigItemTabs } from '#JC/types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabs: {\n height: '100%',\n width: '100%',\n },\n panel: {\n width: '100%',\n display: 'block',\n },\n panelWithIcons: {\n height: 'calc(100% - 72px)',\n },\n panelWithoutIcons: {\n height: 'calc(100% - 48px)',\n },\n};\n\ninterface ConfigTabsProps extends ConfigGenericProps {\n schema: ConfigItemTabs;\n dialogName?: string;\n}\n\ninterface ConfigTabsState extends ConfigGenericState {\n tab?: string;\n width: number;\n openMenu: HTMLButtonElement | null;\n}\n\nclass ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState> {\n private resizeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private readonly refDiv: React.RefObject<HTMLDivElement>;\n\n constructor(props: ConfigTabsProps) {\n super(props);\n let tab: string | undefined;\n\n if (this.props.root) {\n // read the path from hash\n // #tab-instances/config/system.adapter.ping.0/<TAB-NAME-OR-INDEX>\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n if (tabS && tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (tabS && Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n\n // install on hash change handler\n window.addEventListener('hashchange', this.onHashTabsChanged, false);\n }\n }\n\n if (tab === undefined) {\n tab =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n ) || Object.keys(this.props.schema.items)[0];\n if (!Object.keys(this.props.schema.items).includes(tab)) {\n tab = Object.keys(this.props.schema.items)[0];\n }\n }\n this.refDiv = React.createRef();\n\n Object.assign(this.state, { tab, width: 0, openMenu: null });\n }\n\n componentWillUnmount(): void {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n }\n window.removeEventListener('hashchange', this.onHashTabsChanged, false);\n super.componentWillUnmount();\n }\n\n onHashTabsChanged = (): void => {\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length > 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n let tab;\n if (tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n if (tab !== undefined && tab !== this.state.tab) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab });\n }\n }\n };\n\n getCurrentBreakpoint(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' {\n if (!this.state.width) {\n return 'md';\n }\n if (this.state.width < 600) {\n return 'xs';\n }\n if (this.state.width < 900) {\n return 'sm';\n }\n if (this.state.width < 1200) {\n return 'md';\n }\n if (this.state.width < 1536) {\n return 'lg';\n }\n return 'xl';\n }\n\n componentDidUpdate(): void {\n if (this.refDiv.current?.clientWidth && this.refDiv.current.clientWidth !== this.state.width) {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.resizeTimeout = null;\n this.setState({ width: this.refDiv.current?.clientWidth });\n }, 50);\n }\n }\n\n onMenuChange(tab: string): void {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab }, () => {\n if (this.props.root) {\n const hash = (window.location.hash || '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n hash[3] = this.state.tab;\n window.location.hash = hash.join('/');\n }\n }\n });\n }\n\n render(): JSX.Element {\n const items = this.props.schema.items;\n let withIcons = false;\n const elements: { icon: React.JSX.Element | null; label: string; name: string; disabled: boolean }[] = [];\n\n Object.keys(items).map(name => {\n let disabled: boolean;\n if (this.props.custom) {\n const hidden = this.executeCustom(\n items[name].hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n );\n if (hidden) {\n return;\n }\n disabled = this.executeCustom(\n items[name].disabled,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n } else {\n const hidden: boolean = this.execute(\n items[name].hidden,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n if (hidden) {\n return;\n }\n disabled = this.execute(\n items[name].disabled,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n }\n const icon = this.getIcon(items[name].icon);\n withIcons = withIcons || !!icon;\n elements.push({ icon, disabled, label: this.getText(items[name].label), name });\n });\n\n const currentBreakpoint = this.getCurrentBreakpoint();\n let tabs: React.JSX.Element;\n if (currentBreakpoint === 'xs' || currentBreakpoint === 'sm') {\n tabs = (\n <Toolbar\n style={{\n width: '100%',\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#222' : '#DDD',\n }}\n variant=\"dense\"\n >\n <IconButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) =>\n this.setState({ openMenu: event.currentTarget })\n }\n >\n <MenuIcon />\n </IconButton>\n {this.state.openMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.openMenu}\n onClose={() => this.setState({ openMenu: null })}\n >\n {elements.map(el => {\n return (\n <MenuItem\n disabled={el.disabled}\n key={el.name}\n onClick={() => {\n this.setState({ openMenu: null }, () => this.onMenuChange(el.name));\n }}\n selected={el.name === this.state.tab}\n >\n {withIcons ? <ListItemIcon>{el.icon}</ListItemIcon> : null}\n {el.label}\n </MenuItem>\n );\n })}\n </Menu>\n ) : null}\n </Toolbar>\n );\n } else {\n tabs = (\n <Tabs\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n style={this.props.schema.tabsStyle}\n value={this.state.tab}\n onChange={(_e, tab: string): void => this.onMenuChange(tab)}\n >\n {elements.map(el => {\n return (\n <Tab\n id={el.name}\n wrapped\n disabled={el.disabled}\n key={el.name}\n value={el.name}\n iconPosition={this.props.schema.iconPosition || 'start'}\n icon={el.icon}\n label={el.label}\n />\n );\n })}\n </Tabs>\n );\n }\n\n return (\n <div\n style={styles.tabs}\n ref={this.refDiv}\n >\n {tabs}\n <ConfigPanel\n oContext={this.props.oContext}\n isParentTab\n changed={this.props.changed}\n key={this.state.tab}\n index={1001}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n commandRunning={this.props.commandRunning}\n style={{\n ...styles.panel,\n ...(withIcons ? styles.panelWithIcons : styles.panelWithoutIcons),\n }}\n common={this.props.common}\n alive={this.props.alive}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n onChange={this.props.onChange}\n onError={this.props.onError}\n customObj={this.props.customObj}\n custom={this.props.custom}\n schema={items[this.state.tab]}\n table={this.props.table}\n withIcons={withIcons}\n />\n </div>\n );\n }\n}\n\nexport default ConfigTabs;\n","import React, { Component, type JSX } from 'react';\n\nimport { LinearProgress } from '@mui/material';\n\nimport { type AdminConnection, I18n, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { BackEndCommand, ConfigItemPanel, ConfigItemTabs, JsonConfigContext } from '#JC/types';\nimport type ConfigGeneric from '#JC/JsonConfigComponent/ConfigGeneric';\nimport { type DeviceManagerPropsProps } from '#JC/JsonConfigComponent/ConfigGeneric';\nimport ConfigTabs from './ConfigTabs';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n height: '100%',\n },\n};\n\ninterface JsonConfigComponentProps {\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n adapterName: string;\n instance: number;\n isFloatComma: boolean;\n dateFormat: string;\n imagePrefix?: string;\n schema: ConfigItemTabs | ConfigItemPanel;\n common?: Record<string, any>;\n data: Record<string, any>;\n updateData?: number;\n onError: (error: boolean) => void;\n onChange?: (data: Record<string, any>, changed: boolean, saveConfig: boolean) => void;\n /** Backend request to refresh data */\n onBackEndCommand?: (command?: BackEndCommand) => void;\n custom?: boolean;\n onValueChange?: (attr: string, value: any, saveConfig: boolean) => void;\n embedded?: boolean;\n multiEdit?: boolean;\n instanceObj?: ioBroker.InstanceObject;\n customObj?: ioBroker.Object;\n customs?: Record<string, typeof ConfigGeneric>;\n DeviceManager?: React.FC<DeviceManagerPropsProps>;\n style?: React.CSSProperties;\n theme: IobTheme;\n expertMode?: boolean;\n}\n\ninterface JsonConfigComponentState {\n originalData: string;\n changed: boolean;\n errors: Record<string, string>;\n systemConfig: ioBroker.SystemConfigCommon | null;\n updateData?: number;\n alive: boolean;\n commandRunning: boolean;\n schema: ConfigItemTabs | ConfigItemPanel;\n}\n\nexport class JsonConfigComponent extends Component<JsonConfigComponentProps, JsonConfigComponentState> {\n private readonly forceUpdateHandlers: Record<string, (data: any) => void>;\n\n private errorTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private errorCached: Record<string, string> | null = null;\n\n private oContext: JsonConfigContext;\n\n constructor(props: JsonConfigComponentProps) {\n super(props);\n\n this.state = {\n originalData: JSON.stringify(this.props.data),\n changed: false,\n errors: {},\n updateData: this.props.updateData || 0,\n systemConfig: null,\n alive: false,\n commandRunning: false,\n schema: JSON.parse(JSON.stringify(this.props.schema)),\n };\n\n this.forceUpdateHandlers = {};\n\n this.buildDependencies(this.state.schema);\n\n this.readData();\n }\n\n static getDerivedStateFromProps(\n props: JsonConfigComponentProps,\n state: JsonConfigComponentState,\n ): Partial<JsonConfigComponentState> | null {\n if (props.updateData !== state.updateData) {\n return {\n updateData: props.updateData,\n originalData: JSON.stringify(props.data),\n schema: JSON.parse(JSON.stringify(props.schema)),\n };\n }\n return null;\n }\n\n static async loadI18n(\n socket: AdminConnection,\n i18n: boolean | string | Record<string, Record<ioBroker.Languages, string>>,\n adapterName: string,\n ): Promise<string> {\n if (i18n === true || (i18n && typeof i18n === 'string')) {\n const lang = I18n.getLanguage();\n const path = typeof i18n === 'string' ? i18n : 'i18n';\n let exists = await socket.fileExists(`${adapterName}.admin`, `${path}/${lang}.json`);\n let fileName;\n if (exists) {\n fileName = `${path}/${lang}.json`;\n } else {\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/${lang}/translations.json`);\n if (exists) {\n fileName = `${path}/${lang}/translations.json`;\n } else if (lang !== 'en') {\n // fallback to english\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/en.json`);\n if (exists) {\n fileName = `${path}/en.json`;\n } else {\n exists = await socket.fileExists(`${adapterName}.admin`, `${path}/en/translations.json`);\n if (exists) {\n fileName = `${path}/en/translations.json`;\n }\n }\n }\n }\n\n if (fileName) {\n const jsonFile = await socket.readFile(`${adapterName}.admin`, fileName);\n let jsonStr: string;\n if (jsonFile.file !== undefined) {\n jsonStr = jsonFile.file;\n } else {\n // @ts-expect-error deprecated\n jsonStr = jsonFile;\n }\n\n try {\n const json = JSON.parse(jsonStr);\n // apply file to I18n\n I18n.extendTranslations(json, lang);\n } catch (e) {\n console.error(`Cannot parse language file \"${adapterName}.admin/${fileName}: ${e}`);\n return '';\n }\n return fileName;\n }\n console.warn(`Cannot find i18n for ${adapterName} / ${fileName}`);\n return '';\n }\n if (i18n && typeof i18n === 'object') {\n I18n.extendTranslations(i18n);\n return '';\n }\n return '';\n }\n\n onCommandRunning = (commandRunning: boolean): void => this.setState({ commandRunning });\n\n readData(): void {\n void this.props.socket\n .getCompactSystemConfig()\n .then(systemConfig =>\n this.props.socket\n .getState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`)\n .then(state =>\n this.setState({ systemConfig: systemConfig.common, alive: !!(state && state.val) }, () => {\n this.updateContext(true);\n if (!this.props.custom) {\n void this.props.socket.subscribeState(\n `system.adapter.${this.props.adapterName}.${this.props.instance}.alive`,\n this.onAlive,\n );\n }\n }),\n ),\n )\n .catch(e => console.error(`Cannot read system config: ${e}`));\n }\n\n onAlive = (_id: string, state?: ioBroker.State | null): void => {\n if (!!state?.val !== this.state.alive) {\n this.setState({ alive: !!state?.val });\n }\n };\n\n onChange = (attrOrData: string | Record<string, any>, value: any, cb?: () => void, saveConfig?: boolean): void => {\n if (this.props.onValueChange) {\n this.props.onValueChange(attrOrData as string, value, saveConfig);\n if (cb) {\n cb();\n }\n } else if (attrOrData && this.props.onChange) {\n const newState: Partial<JsonConfigComponentState> = {\n changed: JSON.stringify(attrOrData) !== this.state.originalData,\n };\n\n this.setState(newState as JsonConfigComponentState, () => {\n this.props.onChange(attrOrData as Record<string, any>, newState.changed, saveConfig);\n if (cb) {\n cb();\n }\n });\n } else if (saveConfig) {\n this.props.onChange(null, null, saveConfig);\n }\n };\n\n onError = (attr: string, error?: string): void => {\n this.errorCached = this.errorCached || JSON.parse(JSON.stringify(this.state.errors));\n const errors = this.errorCached;\n if (error) {\n errors[attr] = error;\n } else {\n delete errors[attr];\n }\n\n if (this.errorTimeout) {\n clearTimeout(this.errorTimeout);\n }\n if (JSON.stringify(errors) !== JSON.stringify(this.state.errors)) {\n this.errorTimeout = setTimeout(\n () =>\n this.setState({ errors: this.errorCached }, () => {\n this.errorTimeout = null;\n this.errorCached = null;\n this.props.onError(!!Object.keys(this.state.errors).length);\n }),\n 50,\n );\n } else {\n this.errorCached = null;\n }\n };\n\n flatten(schema: Record<string, any>, _list?: Record<string, any>): Record<string, any> {\n _list = _list || {};\n if (schema.items) {\n Object.keys(schema.items).forEach(attr => {\n _list[attr] = schema.items[attr];\n this.flatten(schema.items[attr], _list);\n });\n }\n\n return _list;\n }\n\n buildDependencies(schema: ConfigItemTabs | ConfigItemPanel): void {\n const attrs = this.flatten(schema as Record<string, any>);\n Object.keys(attrs).forEach(attr => {\n if (attrs[attr].confirm?.alsoDependsOn) {\n attrs[attr].confirm?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].confirmDependsOn = attrs[dep].confirmDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n if (depObj.confirm) {\n depObj.confirm.cancel = 'Undo';\n }\n\n attrs[dep].confirmDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].onChange?.alsoDependsOn) {\n attrs[attr].onChange?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].onChangeDependsOn = attrs[dep].onChangeDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].onChangeDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].hidden?.alsoDependsOn) {\n attrs[attr].hidden?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].hiddenDependsOn = attrs[dep].hiddenDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].hiddenDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].label?.alsoDependsOn) {\n attrs[attr].label?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].labelDependsOn = attrs[dep].labelDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].labelDependsOn.push(depObj);\n }\n });\n }\n\n if (attrs[attr].help?.alsoDependsOn) {\n attrs[attr].help?.alsoDependsOn.forEach((dep: string) => {\n if (!attrs[dep]) {\n console.error(`[JsonConfigComponent] Attribute ${dep} does not exist!`);\n if (dep.startsWith('data.')) {\n console.warn(\n `[JsonConfigComponent] please use \"${dep.replace(/^data\\./, '')}\" instead of \"${dep}\"`,\n );\n }\n } else {\n attrs[dep].helpDependsOn = attrs[dep].helpDependsOn || [];\n\n const depObj = { ...attrs[attr], attr };\n\n attrs[dep].helpDependsOn.push(depObj);\n }\n });\n }\n });\n }\n\n updateContext(forceUpdate?: boolean): void {\n this.oContext = {\n DeviceManager: this.props.DeviceManager,\n adapterName: this.props.adapterName,\n changeLanguage: this.changeLanguage,\n common: this.props.common,\n customs: this.props.customs,\n dateFormat: this.props.dateFormat,\n embedded: this.props.embedded,\n expertMode: this.props.expertMode,\n forceUpdate: this.forceAttrUpdate,\n imagePrefix: this.props.imagePrefix,\n instance: this.props.instance,\n instanceObj: this.props.instanceObj,\n isFloatComma: this.props.isFloatComma,\n multiEdit: this.props.multiEdit,\n onBackEndCommand: this.props.onBackEndCommand,\n onCommandRunning: this.onCommandRunning,\n onValueChange: this.props.onValueChange,\n registerOnForceUpdate: this.registerOnForceUpdate,\n socket: this.props.socket,\n systemConfig: this.state.systemConfig,\n theme: this.props.theme,\n // could be changed dynamically\n themeType: this.props.themeType,\n _themeName: this.props.themeName,\n updateData: this.state.updateData,\n } as JsonConfigContext;\n\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n renderItem(item: ConfigItemTabs | ConfigItemPanel): JSX.Element | null {\n if (item.type === 'tabs') {\n return (\n <ConfigTabs\n oContext={this.oContext}\n alive={this.state.alive}\n changed={this.state.changed}\n commandRunning={this.state.commandRunning}\n common={this.props.common}\n custom={this.props.custom}\n customObj={this.props.customObj}\n data={this.props.data}\n onChange={this.onChange}\n onError={(attr, error) => this.onError(attr, error)}\n originalData={JSON.parse(this.state.originalData)}\n root\n schema={item}\n themeName={this.props.themeName}\n />\n );\n }\n if (\n item.type === 'panel' ||\n // @ts-expect-error type could be empty\n !item.type\n ) {\n return (\n <ConfigPanel\n oContext={this.oContext}\n alive={this.state.alive}\n changed={this.state.changed}\n commandRunning={this.state.commandRunning}\n common={this.props.common}\n custom={this.props.custom}\n customObj={this.props.customObj}\n data={this.props.data}\n index={1000}\n isParentTab={!this.props.embedded}\n onChange={this.onChange}\n onError={(attr, error) => this.onError(attr, error)}\n originalData={JSON.parse(this.state.originalData)}\n root\n schema={item}\n themeName={this.props.themeName}\n />\n );\n }\n console.error(`Unknown item type in root: ${JSON.stringify(item)}`);\n\n return null;\n }\n\n changeLanguage = (): void => {\n this.forceUpdate();\n };\n\n forceAttrUpdate = (attr: string | string[], data: any): void => {\n if (Array.isArray(attr)) {\n attr.forEach(a => this.forceUpdateHandlers[a] && this.forceUpdateHandlers[a](data));\n } else if (this.forceUpdateHandlers[attr]) {\n this.forceUpdateHandlers[attr](data);\n }\n };\n\n registerOnForceUpdate = (attr: string, cb?: ((data: any) => void) | null): void => {\n if (cb) {\n this.forceUpdateHandlers[attr] = cb;\n } else if (this.forceUpdateHandlers[attr]) {\n delete this.forceUpdateHandlers[attr];\n }\n };\n\n render(): JSX.Element {\n if (!this.state.systemConfig || !this.oContext) {\n return <LinearProgress />;\n }\n\n if (this.oContext._themeName !== this.props.themeName) {\n this.oContext._themeName = this.props.themeName;\n setTimeout(() => this.updateContext(true), 0);\n }\n\n return (\n <div\n style={{\n ...(!this.props.embedded ? styles.root : undefined),\n ...this.props.style,\n ...this.state.schema.style,\n }}\n >\n {this.renderItem(this.state.schema)}\n </div>\n );\n }\n}\n\nexport default JsonConfigComponent;\n","import React from 'react';\nimport JSON5 from 'json5';\nimport MD5 from 'crypto-js/md5';\n\nimport { Fab, Tooltip, LinearProgress } from '@mui/material';\nimport { Publish as PublishIcon } from '@mui/icons-material';\n\nimport {\n I18n,\n Router,\n SaveCloseButtons,\n Theme,\n DialogConfirm,\n type AdminConnection,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n Utils,\n} from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemAny, ConfigItemPanel, ConfigItemTabs } from '#JC/types';\nimport ConfigGeneric, { type DeviceManagerPropsProps } from './JsonConfigComponent/ConfigGeneric';\nimport JsonConfigComponent from './JsonConfigComponent';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n },\n scroll: {\n height: 'calc(100% - 48px)',\n overflowY: 'auto',\n },\n exportImportButtons: {\n position: 'absolute',\n top: 5,\n right: 0,\n zIndex: 3,\n },\n button: {\n marginRight: '5px',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\n/**\n * Decrypt the password/value with given key\n *\n * @param key - Secret key\n * @param value - value to decrypt\n */\nfunction decryptLegacy(key: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Encrypt the password/value with given key\n *\n * @param key - Secret key\n * @param value - value to encrypt\n */\nfunction encryptLegacy(key: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n}\n\n/**\n * Decrypt the password/value with given key\n * Usage:\n * ```js\n * function load(settings, onChange) {\n * if (settings.password) {\n * settings.password = decrypt(systemSecret, settings.password);\n * // same as\n * settings.password = decrypt(settings.password);\n * }\n * // ...\n * }\n * ```\n *\n * @param key - Secret key\n * @param value - value to decrypt\n */\nfunction decrypt(key: string, value: string): string {\n if (typeof value !== 'string') {\n return value;\n }\n\n // if not encrypted as aes-192 or key not a valid 48-digit hex -> fallback\n if (!value.startsWith('$/aes-192-cbc:') || !/^[0-9a-f]{48}$/.test(key)) {\n return decryptLegacy(key, value);\n }\n\n // algorithm:iv:encryptedValue\n const textParts = value.split(':', 3);\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const iv = window.CryptoJS.enc.Hex.parse(textParts[1]);\n\n const cipherParams = window.CryptoJS.lib.CipherParams.create({\n ciphertext: window.CryptoJS.enc.Hex.parse(textParts[2]),\n });\n\n const decryptedBinary = window.CryptoJS.AES.decrypt(cipherParams, _key, { iv });\n\n return window.CryptoJS.enc.Utf8.stringify(decryptedBinary);\n}\n\n/**\n * Encrypt the password/value with given key\n * Usage:\n * ```\n * function save(callback) {\n * ...\n * if (obj.password) {\n * obj.password = encrypt(systemSecret, obj.password);\n * // same as\n * obj.password = decrypt(obj.password);\n * }\n * ...\n * }\n * ```\n *\n * @param key - Secret key\n * @param value - value to encrypt\n * @param _iv - optional initial vector for tests\n */\nfunction encrypt(key: string, value: string, _iv?: string): string {\n if (typeof value !== 'string') {\n return value;\n }\n\n if (!/^[0-9a-f]{48}$/.test(key)) {\n // key length is not matching for AES-192-CBC or key is no valid hex - fallback to old encryption\n return encryptLegacy(key, value);\n }\n\n let iv;\n if (_iv) {\n iv = window.CryptoJS.enc.Hex.parse(_iv);\n } else {\n iv = window.CryptoJS.lib.WordArray.random(128 / 8);\n }\n\n const _key = window.CryptoJS.enc.Hex.parse(key);\n const encrypted = window.CryptoJS.AES.encrypt(value, _key, { iv }).ciphertext;\n\n return `$/aes-192-cbc:${window.CryptoJS.enc.Hex.stringify(iv)}:${encrypted}`;\n}\n\nfunction loadScript(src: string, id: string): ((this: GlobalEventHandlers, ev: Event) => any) | null | Promise<void> {\n if (!id || !document.getElementById(id)) {\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('id', id);\n script.onload = resolve as unknown as (this: GlobalEventHandlers, ev: Event) => any;\n script.src = src;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n }\n return document.getElementById(id)?.onload;\n}\n\ninterface BufferObject {\n type: 'Buffer';\n data: Buffer;\n}\n\ninterface JsonConfigProps {\n adapterName: string;\n instance: number;\n isFloatComma: boolean;\n dateFormat: string;\n secret?: string;\n socket: AdminConnection;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n expertMode?: boolean;\n /** Translate method */\n t: typeof I18n.t;\n configStored: (notChanged: boolean) => void;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n DeviceManager?: React.FC<DeviceManagerPropsProps>;\n}\n\ninterface JsonConfigState {\n schema?: ConfigItemPanel | ConfigItemTabs;\n data?: Record<string, unknown>;\n originalData?: Record<string, unknown>;\n updateData: number;\n common?: ioBroker.InstanceCommon;\n changed: boolean;\n confirmDialog: boolean;\n theme: IobTheme;\n saveConfigDialog: boolean;\n hash: string;\n error?: boolean;\n}\n\nclass JsonConfig extends Router<JsonConfigProps, JsonConfigState> {\n private fileSubscribed: string[] = [];\n\n private fileLangSubscribed = '';\n\n private secret: string;\n\n constructor(props: JsonConfigProps) {\n super(props);\n\n this.state = {\n updateData: 0,\n changed: false,\n confirmDialog: false,\n theme: Theme(props.themeName), // buttons require special theme\n saveConfigDialog: false,\n hash: '_',\n };\n\n this.secret = props.secret || '';\n\n void this.getInstanceObject().then(obj =>\n this.getConfigFile().then(schema =>\n // load language\n JsonConfigComponent.loadI18n(this.props.socket, schema?.i18n, this.props.adapterName).then(\n (langFileName: string) => {\n if (langFileName) {\n // subscribe on changes\n if (!this.fileLangSubscribed) {\n this.fileLangSubscribed = langFileName;\n void this.props.socket.subscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileLangSubscribed,\n this.onFileChange,\n );\n }\n }\n\n if (obj) {\n this.setState({\n schema,\n data: obj.native,\n common: obj.common,\n hash: MD5(JSON.stringify(schema)).toString(),\n });\n } else {\n window.alert(\n `Instance system.adapter.${this.props.adapterName}.${this.props.instance} not found!`,\n );\n }\n },\n ),\n ),\n );\n }\n\n componentWillUnmount(): void {\n super.componentWillUnmount();\n if (this.fileSubscribed.length) {\n this.props.socket.unsubscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileSubscribed,\n this.onFileChange,\n );\n this.fileSubscribed = [];\n }\n if (this.fileLangSubscribed) {\n this.props.socket.unsubscribeFiles(\n `${this.props.adapterName}.admin`,\n this.fileLangSubscribed,\n this.onFileChange,\n );\n this.fileLangSubscribed = '';\n }\n }\n\n private handleFileSelect = (evt: Record<string, any>): void => {\n const f = evt.target.files[0];\n if (f) {\n const r = new FileReader();\n r.onload = (e: ProgressEvent<FileReader>): void => {\n if (!e.target) {\n return;\n }\n\n const contents = e.target.result as string;\n try {\n const data = JSON.parse(contents);\n this.setState({ data, changed: JSON.stringify(data) !== JSON.stringify(this.state.originalData) });\n } catch {\n window.alert(I18n.t('[JsonConfig] Failed to parse JSON file'));\n }\n };\n r.readAsText(f);\n } else {\n window.alert(I18n.t('[JsonConfig] Failed to open JSON File'));\n }\n };\n\n getExportImportButtons(): JSX.Element {\n return (\n <div style={styles.exportImportButtons}>\n <Tooltip\n title={this.props.t('Import settings from JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Fab\n size=\"small\"\n sx={{ '&.MuiFab-root': styles.button }}\n onClick={() => {\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n input.setAttribute('id', 'files');\n // @ts-expect-error check\n input.setAttribute('opacity', 0);\n input.addEventListener('change', e => this.handleFileSelect(e), false);\n input.click();\n }}\n >\n <PublishIcon />\n </Fab>\n </Tooltip>\n <Tooltip\n title={this.props.t('Export setting to JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Fab\n size=\"small\"\n sx={{ '&.MuiFab-root': styles.button }}\n onClick={() => {\n if (!this.state.data) {\n return;\n }\n\n Utils.generateFile(\n `${this.props.adapterName}.${this.props.instance}.json`,\n this.state.data,\n );\n }}\n >\n <PublishIcon style={{ transform: 'rotate(180deg)' }} />\n </Fab>\n </Tooltip>\n </div>\n );\n }\n\n onFileChange = async (id: string, fileName: string, size: number): Promise<void> => {\n if (id === `${this.props.adapterName}.admin` && size) {\n if (fileName === this.fileLangSubscribed) {\n try {\n await JsonConfigComponent.loadI18n(\n this.props.socket,\n this.state.schema?.i18n,\n this.props.adapterName,\n );\n this.setState({ hash: `${this.state.hash}1` });\n } catch {\n // ignore errors\n }\n } else if (this.fileSubscribed.includes(fileName)) {\n try {\n const schema = await this.getConfigFile(this.fileSubscribed[0]);\n this.setState({ schema, hash: MD5(JSON.stringify(schema)).toString() });\n } catch {\n // ignore errors\n }\n }\n }\n };\n\n async getInstanceObject(): Promise<ioBroker.InstanceObject | null> {\n try {\n const obj = await this.props.socket.getObject(\n `system.adapter.${this.props.adapterName}.${this.props.instance}`,\n );\n // decode all native attributes listed in obj.encryptedNative\n if (Array.isArray(obj.encryptedNative)) {\n if (!this.secret) {\n const systemConfig = await this.props.socket.getSystemConfig();\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n this.secret = systemConfig.native.secret;\n }\n obj.encryptedNative?.forEach(attr => {\n if (obj.native[attr]) {\n obj.native[attr] = decrypt(this.secret, obj.native[attr]);\n }\n });\n return obj;\n }\n return obj;\n } catch (e) {\n window.alert(`[JsonConfig] Cannot read instance object: ${e}`);\n }\n return null;\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\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) =>\n this.setState({ confirmDialog: false }, () => isYes && Router.doNavigate(null))\n }\n />\n );\n }\n\n async scanForInclude(json: Record<string, any>, filePaths: string[]): Promise<Record<string, any>> {\n if (typeof json['#include'] === 'string') {\n // load file\n const data = await this._getConfigFile(json['#include'], [...filePaths]);\n delete json['#include'];\n if (data) {\n // merge data\n json = { ...json, ...data };\n }\n return json;\n }\n const keys = Object.keys(json);\n for (let k = 0; k < keys.length; k++) {\n if (json[keys[k]] && typeof json[keys[k]] === 'object') {\n json[keys[k]] = await this.scanForInclude(json[keys[k]], filePaths);\n }\n }\n return json;\n }\n\n async getConfigFile(fileName?: string): Promise<ConfigItemPanel | ConfigItemTabs> {\n return this._getConfigFile(fileName);\n }\n\n async _getConfigFile(fileName?: string, _filePaths?: string[]): Promise<ConfigItemPanel | ConfigItemTabs> {\n fileName = fileName || 'jsonConfig.json5';\n _filePaths = _filePaths || [];\n\n if (_filePaths.includes(fileName)) {\n window.alert(`[JsonConfig] Circular reference in file: ${fileName} => ${_filePaths.join(' => ')}`);\n return null;\n }\n _filePaths.push(fileName);\n\n try {\n const exist = await this.props.socket.fileExists(`${this.props.adapterName}.admin`, fileName);\n if (!exist) {\n fileName = 'jsonConfig.json';\n }\n const data: {\n file: string;\n mimeType: string;\n } = await this.props.socket.readFile(`${this.props.adapterName}.admin`, fileName);\n let content = '';\n let file: string | BufferObject = '';\n\n if (data.file !== undefined) {\n file = data.file;\n }\n\n if (typeof file === 'string') {\n content = file;\n // @ts-expect-error revisit\n } else if (file.type === 'Buffer') {\n let binary = '';\n // @ts-expect-error revisit\n const bytes = new Uint8Array(file.data);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n content = binary;\n }\n\n // subscribe on changes\n if (!this.fileSubscribed.includes(fileName)) {\n this.fileSubscribed.push(fileName);\n await this.props.socket.subscribeFiles(`${this.props.adapterName}.admin`, fileName, this.onFileChange);\n }\n\n try {\n // detect #include attr\n return (await this.scanForInclude(JSON5.parse(content), _filePaths)) as\n | ConfigItemPanel\n | ConfigItemTabs;\n } catch (e) {\n window.alert('[JsonConfig] Cannot parse json5 config!');\n console.log(e);\n }\n } catch (e1) {\n if (!this.state.schema) {\n window.alert(`[JsonConfig] Cannot read file \"${fileName}: ${e1}`);\n }\n }\n return null;\n }\n\n renderSaveConfigDialog(): JSX.Element | null {\n if (!this.state.saveConfigDialog) {\n return null;\n }\n return (\n <DialogConfirm\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('Save configuration?')}\n ok={I18n.t('ra_Save')}\n cancel={I18n.t('ra_Cancel')}\n onClose={(isYes: boolean) =>\n this.setState({ saveConfigDialog: false }, () => isYes && this.onSave(true))\n }\n />\n );\n }\n\n findAttr(attr: string, schema?: ConfigItemPanel | ConfigItemTabs): ConfigItemAny | null {\n schema = schema || this.state.schema;\n if (schema?.items) {\n if (attr in schema.items) {\n return schema.items[attr];\n }\n for (const _item of Object.values(schema.items)) {\n const item = this.findAttr(attr, _item as ConfigItemPanel | ConfigItemTabs);\n if (item) {\n return item;\n }\n }\n }\n\n return null;\n }\n\n // this function is called recursively and trims all text fields, that must be trimmed\n postProcessing(data: Record<string, unknown>, attr: string, schema: ConfigItemAny): void {\n schema = schema || this.state.schema;\n if (!data) {\n // should not happen\n console.error(`Data is empty in postProcessing: ${attr}, ${JSON.stringify(schema)}`);\n return;\n }\n\n const dataAttr = data[attr];\n\n if ((schema as ConfigItemTabs).items) {\n if (schema.type === 'table') {\n const table = dataAttr;\n\n if (!Array.isArray(table)) {\n return;\n }\n\n for (const entry of table) {\n for (const tItem of schema.items) {\n this.postProcessing(entry, tItem.attr, tItem as ConfigItemAny);\n }\n }\n } else {\n for (const [_attr, item] of Object.entries((schema as ConfigItemTabs).items)) {\n if (\n (item as any).type === 'panel' ||\n (item as any).type === 'tabs' ||\n (item as any).type === 'accordion'\n ) {\n return;\n }\n this.postProcessing(data, _attr, item);\n }\n }\n } else if (attr && typeof dataAttr === 'string') {\n // postprocessing\n if (schema.type === 'text') {\n if (schema.trim !== false) {\n data[attr] = dataAttr.trim();\n }\n } else if (schema.type === 'ip') {\n // should not happen\n data[attr] = dataAttr.trim();\n } else if (schema.type === 'number') {\n const dataVal = parseFloat(dataAttr.toString().replace(',', '.'));\n\n if (schema.min !== undefined && dataVal < schema.min) {\n data[attr] = schema.min;\n } else if (schema.max !== undefined && dataVal > schema.max) {\n data[attr] = schema.max;\n } else {\n data[attr] = dataVal;\n }\n } else if (schema.type === 'port') {\n const dataVal = parseInt(dataAttr.toString(), 10);\n if (schema.min !== undefined && dataVal < schema.min) {\n data[attr] = schema.min;\n } else if (schema.max !== undefined && dataVal > schema.max) {\n data[attr] = schema.max;\n }\n if (data[attr] !== 0 && dataVal < 20) {\n data[attr] = 20;\n } else if (dataVal > 0xffff) {\n data[attr] = 0xffff;\n } else {\n data[attr] = dataVal;\n }\n } else if (schema.type === 'checkbox') {\n // should not happen\n data[attr] =\n data[attr] === true ||\n data[attr] === 'true' ||\n data[attr] === 'on' ||\n data[attr] === 1 ||\n data[attr] === '1';\n }\n }\n }\n\n async onSave(doSave: boolean, close?: boolean): Promise<void> {\n if (doSave) {\n const obj = await this.getInstanceObject();\n\n if (!obj) {\n console.error('Something went wrong: may be no connection?');\n window.alert('Something went wrong: may be no connection?');\n return;\n }\n\n if (!this.state.data || !this.state.schema) {\n return;\n }\n\n const doNotSaveAttributes: Record<string, any> = {};\n\n for (const attr of Object.keys(this.state.data)) {\n const item = this.findAttr(attr);\n if ((!item || !item.doNotSave || item.type === 'state') && !attr.startsWith('_')) {\n ConfigGeneric.setValue(obj.native, attr, this.state.data[attr]);\n } else {\n ConfigGeneric.setValue(obj.native, attr, null);\n doNotSaveAttributes[attr] = this.state.data[attr];\n }\n }\n\n try {\n const encryptedObj = JSON.parse(JSON.stringify(obj));\n // encode all native attributes listed in obj.encryptedNative\n if (Array.isArray(encryptedObj.encryptedNative)) {\n await loadScript('../../lib/js/crypto-js/crypto-js.js', 'crypto-js');\n\n for (const attr of encryptedObj.encryptedNative) {\n if (encryptedObj.native[attr]) {\n encryptedObj.native[attr] = encrypt(this.secret, encryptedObj.native[attr]);\n }\n }\n }\n\n await this.props.socket.setObject(encryptedObj._id, encryptedObj);\n } catch (e) {\n window.alert(`[JsonConfig] Cannot set object: ${e}`);\n }\n\n /** We want to preserve the doNotSaveAttributes too, just not save it */\n const nativeWithNonSaved = { ...obj.native, ...doNotSaveAttributes };\n console.log(nativeWithNonSaved);\n\n this.setState(\n {\n changed: false,\n data: nativeWithNonSaved,\n updateData: this.state.updateData + 1,\n originalData: nativeWithNonSaved,\n },\n () => close && Router.doNavigate(null),\n );\n } else if (this.state.changed) {\n this.setState({ confirmDialog: true });\n } else {\n Router.doNavigate(null);\n }\n }\n\n componentDidUpdate(_prevProps: JsonConfigProps, prevState: JsonConfigState): void {\n if (prevState.changed !== this.state.changed) {\n this.props.configStored(!this.state.changed);\n }\n }\n\n /**\n * Validate the JSON config once on mount\n */\n async componentDidMount(): Promise<void> {\n const link = `${window.location.protocol}//${window.location.host}${window.location.pathname}validate_config/${this.props.adapterName}`;\n console.log(`fetch ${link}`);\n await fetch(link);\n }\n\n render(): JSX.Element {\n if (!this.state.data || !this.state.schema) {\n return <LinearProgress />;\n }\n\n return (\n <div style={styles.root}>\n {this.renderDialogConfirm()}\n {this.getExportImportButtons()}\n {this.renderSaveConfigDialog()}\n <JsonConfigComponent\n key={this.state.hash}\n style={styles.scroll}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n schema={this.state.schema}\n common={this.state.common}\n expertMode={this.props.expertMode}\n data={this.state.data}\n updateData={this.state.updateData}\n onError={error => this.setState({ error })}\n onChange={(data, changed, saveConfigDialog) => {\n if (saveConfigDialog && this.state.error) {\n window.alert(I18n.t('Cannot save configuration because of error in configuration'));\n saveConfigDialog = false;\n }\n if (saveConfigDialog && !this.state.changed && !changed) {\n saveConfigDialog = false;\n }\n if (data) {\n this.setState({ data, changed, saveConfigDialog });\n } else if (saveConfigDialog !== undefined) {\n this.setState({ saveConfigDialog });\n }\n }}\n DeviceManager={this.props.DeviceManager}\n theme={this.state.theme}\n />\n <SaveCloseButtons\n isIFrame={false}\n dense\n paddingLeft={0}\n newReact\n theme={this.state.theme}\n noTextOnButtons={\n this.props.width === 'xs' || this.props.width === 'sm' || this.props.width === 'md'\n }\n changed={!!(this.state.error || this.state.changed)}\n error={!!this.state.error}\n onSave={(close: boolean) => this.onSave(true, close)}\n onClose={() => this.onSave(false)}\n />\n </div>\n );\n }\n}\n\nexport default JsonConfig;\n"],"names":["DEFAULT_SM_SIZE","window","innerWidth","undefined","isObject","it","Object","prototype","toString","call","ConfigGeneric","Component","constructor","props","super","defaultValue","isError","lang","defaultSendToDone","sendToTimeout","noPlaceRequired","onUpdate","data","value","getValue","this","attr","state","setState","forceUpdate","confirmDialog","confirmNewValue","confirmAttr","confirmData","confirmCallback","schema","custom","defaultFunc","executeCustom","customObj","oContext","instanceObj","arrayIndex","globalData","default","type","execute","I18n","getLanguage","componentDidMount","registerOnForceUpdate","LIKE_SELECT","includes","setTimeout","onChange","setValue","defaultSendTo","sendTo","alive","jsonData","dataStr","getPattern","JSON","parse","_unused","console","error","concat","socket","adapterName","instance","then","allowSaveWithError","onError","t","componentWillUnmount","clearTimeout","split","length","part","shift","getText","text","noTranslation","strText","func","en","renderDialogConfirm","confirm","icon","_jsx","IconWarning","IconError","IconInfo","DialogConfirm","title","ok","cancel","onClose","isOk","callback","stringify","confirmDepAttr","confirmDepNewValue","getIcon","iconSettings","IconAuth","IconSend","IconWeb","IconSearch","IconMenuBook","IconHelp","IconUploadFile","IconEdit","IconPerson","IconGroup","IconDelete","IconRefresh","IconAdd","IconLinkOff","LinkIcon","Save","OpenInNew","endsWith","startsWith","Icon","src","style","width","height","onChangeAsync","newValue","Promise","resolve","mayBePromise","catch","e","cb","condition","confirmDependsOn","z","dep","val","changed","onChangeDependsOn","_newValue","calculateFunc","push","hiddenDependsOn","hidden","labelDependsOn","helpDependsOn","ignoreOwnChanges","newValue_","forEach","_attr","i","fun","Function","f","originalData","systemConfig","common","calculate","disabled","validator","renderItem","_error","_disabled","_defaultValue","label","renderHelp","link","href","target","rel","color","themeType","textDecoration","children","Utils","renderTextWithA","escapeString","str","replace","_match","p1","pattern","patternStr","log","render","expertMode","keys","hideOnlyControl","item","Grid2","size","xs","sm","md","lg","xl","_objectSpread","marginBottom","textAlign","darkStyle","newLine","_jsxs","_Fragment","flexBasis","validatorNoSaveOnError","validatorErrorText","renderedItem","commandRunning","tooltip","button","container","flex","Button","variant","onClick","buttonTooltip","buttonTooltipNoTranslation","DIFFERENT_VALUE","DIFFERENT_LABEL","NONE_VALUE","NONE_LABEL","styles","fullWidth","accordionSummary","theme","backgroundColor","palette","mode","accordionTitle","toolbar","borderRadius","pointerEvents","typingTimer","onDelete","index","splice","iteration","onChangeWrapper","onClone","cloned","clone","match","parseInt","find","activeIndex","mayByPromise","onAdd","newItem","items","reduce","accumulator","currentValue","Array","isArray","itemAccordion","idx","schemaItem","marginLeft","marginTop","ConfigPanel","themeName","valueChange","newObj","table","onMoveUp","newIndex","onMoveDown","Paper","noDelete","Toolbar","Typography","id","component","IconButton","AddIcon","map","Accordion","expanded","_e","AccordionSummary","expandIcon","ExpandMoreIcon","sx","getStyle","titleAttr","AccordionDetails","Tooltip","slotProps","popper","UpIcon","buttonEmpty","DownIcon","DeleteIcon","CopyContentIcon","rootTool","help","FormHelperText","helpLink","root","notAlive","getInstance","getState","textAlive","textNotAlive","selectOptions","options","unshift","filter","_item","freeSolo","Autocomplete","isOptionEqualToValue","option","filterOptions","params","filtered","inputValue","toLowerCase","onInputChange","_","getOptionLabel","_option$label","renderInput","TextField","placeholder","helperText","arguments","initialized","localContext","askInstance","command","list","getContext","alsoDependsOn","htmlInput","maxLength","max","trim","display","minWidth","showDialog","FormControl","InputLabel","shrink","value_","DialogCron","simple","complex","cron","onOk","getCertificates","el","name","_this$state$selectOpt","_this$state$selectOpt2","Select","displayEmpty","renderValue","item_","MenuItem","opacity","leWidth","certWidth","marginRight","_collectionsOptionsOb","certificates","certsPublicOptions","certsPrivateOptions","certsChainOptions","collectionsOptions","collectionsOptionsObj","getObject","native","collections","_this$state$certsPubl","_this$state$certsPriv","_this$state$certsChai","_this$state$collectio","_this$state$certsPubl2","_this$state$certsPriv2","_this$state$certsChai2","leCollection","leCollectionName","certPublic","certPublicName","certPrivate","certPrivateName","certChained","certChainedName","itemCertPublic","itemCertPrivate","itemCertChained","fontWeight","licLabel","textTransform","licValue","errorTitle","okTitle","errorText","mb","ConfigCheckLicense","running","showLicenseData","foundSuitableLicense","licenseOfflineCheck","result","allLicenses","askForUpdate","showLinkToProfile","renderErrorDialog","content","open","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","license","validName","product","validVersion","version","validUuid","uuid","validTill","Date","toLocaleDateString","invoice","Dialog","maxWidth","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","startIcon","IconCheck","renderMessageDialog","pre","key","obj","key1","Box","parseJwt","token","base64","jsonPayload","decodeURIComponent","atob","c","charCodeAt","slice","join","isVersionValid","rule","major","substring","findInLicenseManager","_licenses$native","_licenses$native$lice","licenses","errors","useLicense","now","_uuidObj$native","uuidObj","_aObj$common","aObj","getTime","parts","used","checkLicense","_uuidObj$native2","_aObj$common2","controller","AbortController","timeout","abort","_data","response","fetch","method","body","json","headers","signal","_unused2","_unused4","valid_till","toLocaleString","Error","data_","_unused3","_error$response","status","_unused5","renderAskForUpdate","async","isYes","updateLicenses","alert","_onClick","secondRun","useLicenseManager","li","CircularProgress","isIndeterminate","FormControlLabel","preventDefault","stopPropagation","control","Checkbox","indeterminate","checked","readOnly","variantComponent","standard","Input","filled","FilledInput","outlined","OutlinedInput","light","bottomLineColor","inputRoot","flexWrap","boxSizing","paddingTop","input","textOverflow","overflow","whiteSpace","appearance","WebkitTapHighlightColor","float","chipContainer","flexFlow","alignItems","cursor","minHeight","paddingBottom","labeled","top","labelShrink","focused","underline","borderBottom","primary","left","bottom","position","right","transform","transition","transitions","create","duration","shorter","easing","easeOut","borderBottomColor","main","borderBottomStyle","chip","margin","marginDense","keyCodes","defaultChipRenderer","_ref","isFocused","isDisabled","isReadOnly","handleClick","handleDelete","Chip","blue","ChipInput","React","labelRef","labelNode","newChipKeyCodes","newChipKeys","actualInput","inputBlurTimeout","_keyPressed","_preventChipCreation","styleTheme","focus","_this$actualInput","focusedChip","handleInputBlur","event","onBlur","addChipOptions","blurBehavior","clearInputOnFail","delayBeforeAdd","numChipsBefore","chips","numChipsAfter","handleAddChip","clearInput","handleInputFocus","onFocus","handleKeyDown","onKeyDown","isDefaultPrevented","keyCode","handleDeleteChip","handleKeyUp","updateInput","onKeyUp","handleUpdateInput","onUpdateInput","setActualInputRef","ref","inputRef","chipsUpdated","prevPropsValue","ReactDOM","current","getDerivedStateFromProps","newState","clearInputValueOnChange","onBeforeAdd","allowDuplicates","updateChips","additionalUpdates","alwaysShowPlaceholder","chipRenderer","className","disableUnderline","FormHelperTextProps","fullWidthInput","InputProps","InputLabelProps","required","rootRef","actualInputValue","hasInput","shrinkFloatingLabel","chipComponents","InputMore","notched","labelWidth","offsetWidth","startAdornment","InputComponent","htmlFor","delimiter","a","_chip","renderColorDialog","showColorDialog","ChromePicker","colorDialogValue","hex","textColor","isUseBright","endAdornment","noClearButton","ClearIcon","inputLabel","width50","useSystemName","useSystem","longitudeName","latitudeName","longitude","latitude","autoInit","getCoordinates","getSystemCoordinates","getCompactSystemConfig","divider","navigator","geolocation","getCurrentPosition","coords","message","_this$state$longitude","_this$state$latitude","Fab","IconLocationOn","IconGpsFixed","loadComponent","remote","sharedScope","module","url","getOrLoadRemote","shareScope","remoteFallbackUrl","reject","existingRemote","document","querySelector","onload","__initialized","init","__webpack_share_scopes__","onerror","d","script","createElement","setAttribute","getElementsByTagName","appendChild","get","ConfigCustom","assign","location","protocol","host","uniqueName","fileToLoad","componentNameParts","componentName","setPromise","runningLoads","i18nPromise","i18n","pos","lastIndexOf","i18nURL","file","extendTranslations","err","all","CustomComponent","LinearProgress","DeviceManager","uploadImagesToInstance","selectedInstance","isFloatComma","dateFormat","fullWidthOneButton","fullWidthTwoButtons","fullWidthThreeButtons","dropZone","dropZoneEmpty","image","objectFit","uploadDiv","uploadDivDragging","background","uploadCenterDiv","border","uploadCenterIcon","uploadCenterText","fontSize","uploadCenterTextAndIcon","flexDirection","justifyContent","disabledOpacity","deleteButton","selectedImage","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFileSelector","dropzoneRef","imagePrefix","objectID","path","upload","updateFiles","readFiles","files","readFolder","folderName","dirFiles","readDir","isDir","RegExp","test","stats","formatBytes","pos_","folder","onDrop","acceptedFiles","reader","FileReader","maxSize","onabort","ext","pop","Math","round","btoa","Uint8Array","byte","String","fromCharCode","writeFile64","readAsArrayBuffer","renderDeleteDialog","deleteFile","base64ToArrayBuffer","binaryString","len","bytes","buffer","loadFile","readFile","play","AudioContext","buf","decodeAudioData","source","createBufferSource","connect","destination","start","getFileIcon","extension","backgroundImage","backgroundSize","backgroundRepeat","IconAudio","IconText","IconVideo","IconCode","folders","withFolder","noSize","noNone","buttons","refresh","element","ListItemIcon","ListItemText","delete","_this$dropzoneRef$cur","IconUpload","IconPlay","accept","fileTypes","last","Dropzone","multiple","noKeyboard","noClick","onDragEnter","uploadFile","onDragLeave","getRootProps","getInputProps","uploadError","UploadIcon","fullWidthIcon","indexOf","adapter","renderFileBrowser","showFileBrowser","DialogSelectFile","selected","_value","selectOnlyFolders","allowUpload","allowDownload","allowCreateFolder","allowView","showToolbar","limitPath","disableEdit","getEnums","enums","short","allowDeactivate","TextWithIcon","getHostByIp","ips","listenOnAllPorts","address","onlyIp4","family","onlyIp6","noInternal","internal","_this$state$ips","_this$state$ips2","alt","fileExists","exist","loadImage","_getUrl","update","port","hostname","res","blob","readAsDataURL","UploadImage","crop","removeIconFunc","onInstancesUpdate","_id","long","findIndex","getHistory","sort","b","getAdapterInstances","instances","_instance$common","adapters","_instance$common2","onlyEnabled","_instance$common3","enabled","subscribeObject","unsubscribeObject","_obj$native","_obj$native$hardware","interfaces","hardware","networkInterfaces","inter","ignoreInternal","_ip","ignoreLoopback","ip","_this$state$interface","_this$state$interface2","_this$state$interface3","modalDialog","overflowHidden","titleIcon","languageButton","languageButtonActive","toggleTranslation","progress","applyDisabled","applyButton","titleButtonApply","titleButtonClose","onApply","textInput","useState","useEffect","disableEscapeKeyDown","LanguageIcon","autoComplete","multiline","CheckIcon","CloseIcon","jsonError","jsonNoError","AceEditor","showPrintMargin","editValueMode","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","editorProps","$blockScrolling","wrapper","validateJson","allowEmpty","showSelectId","CustomModal","Editor","LANGUAGES","languages","system","changeGuiLanguage","setLanguage","changeLanguage","getSystemConfig","language","scrollRef","scrolledDown","offsetHeight","scrollTop","scrollHeight","licenseUrl","showLicenseDialog","loading","addEventListener","reason","overflowY","texts","checkBox","licenseChecked","Check","agreeText","Close","updateTimeout","multiEdit","oldValue","min","parseFloat","checkValue","Number","isNaN","isFinite","autoCompleteOptions","arr","getOptionSelected","inputProps","unit","step","DialogSelectID","dialogName","filterFunc","types","customFilter","filters","halfWidth1","halfWidth2","PASSWORD_PLACEHOLDER","_repeat","_visible","_notEqual","onChangePassword","password","repeatPassword","repeat","visible","InputAdornment","tabIndex","edge","VisibilityOff","Visibility","form","passwordRepeat","copyToClipboard","IconCopy","warning","ownId","ownHostname","ports","_instance$native","_instance$native2","bind","secure","leEnabled","leUpdate","leCheckPort","lePort","v6bind","num","maybePromise","noMargin","initialValue","groupItem","group","ListSubheader","menuPaper","maxHeight","_getValue","_this$state$list","manual","gap","v","showAllValues","ip2int","ipInt","octet","openUrl","adminInstance","getCurrentInstance","_instanceObj$common","hostObj","localIp","hostIp","netmask","findNetworkAddressOfHost","warn","_message","onLoaded","DialogError","DialogMessage","onCommandRunning","_origin","pathname","_originIp","args","arg","onBackEndCommand","reloadBrowser","reload","useNative","entries","saveConfig","controlStyle","showProcess","_obj$common","_obj$common2","ack","okText","slider","marks","gutterBottom","Slider","getAriaValueText","valueLabelDisplay","getIconByName","Edit","Delete","Refresh","Add","Search","LinkOff","NotListedLocation","PlayArrow","Stop","Pause","FastForward","FastRewind","Lightbulb","Fluorescent","WbIncandescent","Power","Settings","Group","Person","QrCode","Wifi","WifiOff","controlTimeout","delayedUpdate","timer","onStateChanged","controlType","stateValue","getObjectID","foreign","oid","detectType","subscribeState","unsubscribeState","controlled","read","write","falseImage","falseText","falseTextStyle","controlDelay","divStyle","blinkStyle","labelIcon","labelControl","narrow","addColon","blinkOnUpdate","animation","iconFalse","textFalse","iconTrue","textTrue","trueText","trueImage","Switch","trueTextStyle","flexGrow","valueLabelFormat","dangerouslySetInnerHTML","__html","borderStyle","secondary","header","contrastText","padding","marginBlockEnd","marginBlockStart","valueBlinkOnce","force","valueBlink","valueImage","valueAndUnit","valueTxt","booleanAsCheckbox","copyButton","multiLine","styleValue","valStyle","html","blink","style1","style2","styleUnit","ContentCopy","boxStyle","highlight","styleLabel","onLink","instanceId","_target","_url","hash","close","MAX_SIZE","paper","headerText","visuallyHidden","clip","paddingLeft","paddingRight","silver","filteredOut","buttonCell","outline","buttonRemoveWrapper","zIndex","arrayToObject","array","nameOfFirstAttr","nameOfSecondAttr","object","row","ConfigTable","_this","filterRefs","resizeTimeout","secret","refDiv","handleRequestSort","property","orderCheck","order","orderBy","newOrder","stableSort","applyFilter","comparator","getComparator","stabilizedThis","order_","updateVisible","_updateVisible","encryptedAttributes","encrypt","objKeyName","objValue","objValueName","_schema$items","clear","visibleValue","valueInputRef","getFilterValue","setFilterValue","createRef","objectToArray","decrypt","filterOn","validateUniqueProps","itemTable","attrItem","schemaForAttribute","uniqueColumns","uniqueCol","allVals","entry","errorMessage","descendingComparator","_el$current","_el$current$children$","_el$current$children$2","filterValue","renderShowHideFilter","headCell","IconFilterOff","IconFilterOn","renderImportExportButtons","import","showImportDialog","ImportIcon","export","onExport","ExportIcon","renderAddButton","doAnyFilterSet","allowAddByFilter","enhancedTableHead","buttonsWidth","_schema$items2","renderOneFilter","showAddButton","lines","line","_row$it$attr","encodeURIComponent","getFullYear","getMonth","padStart","getDate","click","removeChild","onImport","it2","values","_this$state$value","p","showTypeOfImportDialog","isAnyFilterSet","IconClose","align","sortDirection","showFirstAddOnTop","TableSortLabel","active","direction","enhancedFilterCard","_schema$items3","tdStyle","compact","Card","enhancedBottomCard","colSpan","renderCards","_schema$items4","renderTable","_schema$items5","hover","showSecondAddAt","ErrorIcon","alignSelf","componentDidUpdate","_this$refDiv$current","clientWidth","_this$refDiv$current2","getCurrentBreakpoint","currentBreakpoint","useCardFor","helper","time","actionButton","actionButtonStyle","minRows","TextareaAutosize","resize","maxRows","iconStyle","getLocalContext","_this$props$customObj","topic","namespace","convertID2Topic","getUsers","users","_users","user","_user$common","_user$common2","getObjectNameFromObj","_user$common3","_user$common4","_this$state$users$val4","_this$state$users$val5","_this$state$users$val","_this$state$users$val2","_this$state$users$val3","getInvertedColor","QRCode","QRCodeComponent","fgColor","bgColor","level","components","accordion","ConfigAccordion","ConfigAlive","autocomplete","ConfigAutocomplete","autocompleteSendTo","ConfigAutocompleteSendTo","certCollection","ConfigCertCollection","certificate","ConfigCertificateSelect","ConfigCertificates","checkbox","ConfigCheckbox","ConfigChip","ConfigColor","coordinates","ConfigCoordinates","ConfigCRON","datePicker","DatePicker","spacing","format","deviceManager","ConfigDeviceManager","ConfigStaticDivider","ConfigFile","fileSelector","ConfigFunc","ConfigStaticHeader","ConfigImageUpload","imageSendTo","ConfigImageSendTo","ConfigInstanceSelect","interface","ConfigInterface","ConfigIP","jsonEditor","ConfigJsonEditor","ConfigLanguage","ConfigLicense","number","ConfigNumber","objectId","ConfigObjectId","ConfigPassword","ConfigPattern","ConfigPort","qrCode","ConfigQrCode","room","ConfigRoom","select","ConfigSelect","selectSendTo","ConfigSelectSendTo","sendto","ConfigSendTo","ConfigSetState","ConfigSlider","ConfigState","staticImage","ConfigStaticImage","staticInfo","ConfigStaticInfo","staticLink","ConfigStaticText","staticText","ConfigText","textSendTo","ConfigTextSendTo","timePicker","shortFormat","returnFormat","TimePicker","ampm","timeSteps","timesteps","hours","minutes","seconds","strValue","toTimeString","views","ConfigTopic","ConfigUUID","ConfigUser","paperWithIcons","paperWithoutIcons","heading","collapsable","_localStorage","localStorage","getItem","renderItems","noMultiEdit","ItemComponent","customs","panel","schemaStyle","columnSpacing","rowSpacing","setItem","isParentTab","withIcons","innerStyle","tabs","panelWithIcons","panelWithoutIcons","tab","onHashTabsChanged","tabS","tabN","openMenu","removeEventListener","onMenuChange","elements","currentTarget","MenuIcon","Menu","anchorEl","Tabs","scrollButtons","tabsStyle","Tab","wrapped","iconPosition","JsonConfigComponent","forceUpdateHandlers","errorTimeout","errorCached","onAlive","attrOrData","onValueChange","forceAttrUpdate","updateData","buildDependencies","readData","loadI18n","fileName","exists","jsonFile","jsonStr","updateContext","flatten","_list","attrs","_attrs$attr$confirm","_attrs$attr$onChange","_attrs$attr$hidden","_attrs$attr$label","_attrs$attr$help","_attrs$attr$confirm2","_attrs$attr$onChange2","_attrs$attr$hidden2","_attrs$attr$label2","_attrs$attr$help2","depObj","embedded","_themeName","ConfigTabs","scroll","exportImportButtons","decryptLegacy","textParts","_key","CryptoJS","enc","Hex","iv","cipherParams","lib","CipherParams","ciphertext","decryptedBinary","AES","Utf8","_iv","encryptLegacy","WordArray","random","encrypted","loadScript","_document$getElementB","getElementById","JsonConfig","Router","fileSubscribed","fileLangSubscribed","handleFileSelect","evt","r","contents","readAsText","onFileChange","_this$state$schema","getConfigFile","MD5","Theme","saveConfigDialog","getInstanceObject","langFileName","subscribeFiles","unsubscribeFiles","getExportImportButtons","PublishIcon","generateFile","encryptedNative","_obj$encryptedNative","doNavigate","scanForInclude","filePaths","_getConfigFile","k","_filePaths","binary","byteLength","JSON5","e1","renderSaveConfigDialog","onSave","findAttr","_schema","postProcessing","dataAttr","tItem","dataVal","doSave","doNotSaveAttributes","doNotSave","encryptedObj","setObject","nativeWithNonSaved","_prevProps","prevState","configStored","SaveCloseButtons","isIFrame","dense","newReact","noTextOnButtons"],"sourceRoot":""}
|