@iobroker/adapter-react-v5 7.7.3 → 7.7.4
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/build/Components/CustomModal.js +1 -1
- package/build/Components/CustomModal.js.map +1 -1
- package/build/Components/FileBrowser.js.map +1 -1
- package/build/Components/ObjectBrowser.d.ts +5 -5
- package/build/Components/ObjectBrowser.js +76 -37
- package/build/Components/ObjectBrowser.js.map +1 -1
- package/build/Components/Utils.js +1 -2
- package/build/Components/Utils.js.map +1 -1
- package/build/Dialogs/SelectID.d.ts +5 -5
- package/build/Dialogs/SelectID.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Components/Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2024 Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React from 'react';\n\nimport { copy } from './CopyToClipboard';\nimport { I18n } from '../i18n';\nimport type { IobTheme, ThemeName, ThemeType } from '../types';\n\nconst NAMESPACE = 'material';\nconst days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst QUALITY_BITS: Record<ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY], string> = {\n 0x00: '0x00 - good',\n\n 0x01: '0x01 - general problem',\n 0x02: '0x02 - no connection problem',\n\n 0x10: '0x10 - substitute value from controller',\n 0x20: '0x20 - substitute initial value',\n 0x40: '0x40 - substitute value from device or instance',\n 0x80: '0x80 - substitute value from sensor',\n\n 0x11: '0x11 - general problem by instance',\n 0x41: '0x41 - general problem by device',\n 0x81: '0x81 - general problem by sensor',\n\n 0x12: '0x12 - instance not connected',\n 0x42: '0x42 - device not connected',\n 0x82: '0x82 - sensor not connected',\n\n 0x44: '0x44 - device reports error',\n 0x84: '0x84 - sensor reports error',\n};\nconst SIGNATURES: Record<string, string> = {\n JVBERi0: 'pdf',\n R0lGODdh: 'gif',\n R0lGODlh: 'gif',\n iVBORw0KGgo: 'png',\n '/9j/': 'jpg',\n PHN2Zw: 'svg',\n Qk1: 'bmp',\n AAABAA: 'ico', // 00 00 01 00 according to https://en.wikipedia.org/wiki/List_of_file_signatures\n};\ntype SmartNameObject = { [lang in ioBroker.Languages]?: string } & {\n /** Which kind of device it is */\n smartType?: string | null;\n /** Which value to set when the ON command is issued */\n byON?: string | null;\n};\n\ntype SmartName = null | false | string | SmartNameObject;\n\ntype ClassDictionary = Record<string, any>;\ntype ClassValue = ClassArray | ClassDictionary | string | number | null | boolean | undefined;\ntype ClassArray = ClassValue[];\n\nexport class Utils {\n static namespace = NAMESPACE;\n\n static INSTANCES = 'instances';\n\n static dateFormat = ['DD', 'MM'];\n\n static FORBIDDEN_CHARS = /[^._\\-/ :!#$%&()+=@^{}|~\\p{Ll}\\p{Lu}\\p{Nd}]+/gu;\n\n /**\n * Capitalize words.\n */\n static CapitalWords(name: string | null | undefined): string {\n return (name || '')\n .split(/[\\s_]/)\n .filter(item => item)\n .map(word => (word ? word[0].toUpperCase() + word.substring(1).toLowerCase() : ''))\n .join(' ');\n }\n\n static formatSeconds(seconds: number): string {\n const days_ = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n\n const hours = Math.floor(seconds / 3600)\n .toString()\n .padStart(2, '0');\n seconds %= 3600;\n\n const minutes = Math.floor(seconds / 60)\n .toString()\n .padStart(2, '0');\n seconds %= 60;\n\n const secondsStr = Math.floor(seconds).toString().padStart(2, '0');\n\n let text = '';\n if (days_) {\n text += `${days_} ${I18n.t('ra_daysShortText')} `;\n }\n text += `${hours}:${minutes}:${secondsStr}`;\n\n return text;\n }\n\n /**\n * Get the name of the object by id from the name or description.\n */\n static getObjectName(\n objects: Record<string, ioBroker.Object>,\n id: string,\n settings?: { name: ioBroker.StringOrTranslated } | ioBroker.Languages | null,\n options?: { language?: ioBroker.Languages },\n /** Set to true to get the description. */\n isDesc?: boolean,\n ): string {\n const item = objects[id];\n let text: string | undefined;\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n if (!options.language) {\n options.language =\n (objects['system.config'] &&\n objects['system.config'].common &&\n objects['system.config'].common.language) ||\n window.sysLang ||\n 'en';\n }\n if ((settings as { name: ioBroker.StringOrTranslated })?.name) {\n const textObj = (settings as { name: ioBroker.StringOrTranslated }).name;\n if (typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en;\n } else {\n text = textObj;\n }\n } else if (isDesc && item?.common?.desc) {\n const textObj = item.common.desc;\n if (typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en || textObj.de || textObj.ru || '';\n } else {\n text = textObj;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else if (!isDesc && item?.common) {\n const textObj = item.common.name || item.common.desc;\n if (textObj && typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en || textObj.de || textObj.ru || '';\n } else {\n text = textObj as string;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else {\n const pos = id.lastIndexOf('.');\n text = id.substring(pos + 1).replace(/[_.]/g, ' ');\n text = Utils.CapitalWords(text);\n }\n\n return text?.trim() || '';\n }\n\n /**\n * Get the name of the object from the name or description.\n */\n static getObjectNameFromObj(\n obj: ioBroker.PartialObject,\n /** settings or language */\n settings: { name: ioBroker.StringOrTranslated } | ioBroker.Languages | null,\n options?: { language?: ioBroker.Languages },\n /** Set to true to get the description. */\n isDesc?: boolean,\n /** Allow using spaces in name (by edit) */\n noTrim?: boolean,\n ): string {\n const item = obj;\n let text = obj?._id || '';\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n\n if ((settings as { name: ioBroker.StringOrTranslated })?.name) {\n const name = (settings as { name: ioBroker.StringOrTranslated }).name;\n if (typeof name === 'object') {\n text = (options.language && name[options.language]) || name.en;\n } else {\n text = name;\n }\n } else if (isDesc && item?.common?.desc) {\n const desc: ioBroker.StringOrTranslated = item.common.desc;\n if (typeof desc === 'object') {\n text = (options.language && desc[options.language]) || desc.en;\n } else {\n text = desc;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else if (!isDesc && item?.common?.name) {\n let name = item.common.name;\n if (!name && item.common.desc) {\n name = item.common.desc;\n }\n if (typeof name === 'object') {\n text = (options.language && name[options.language]) || name.en;\n } else {\n text = name;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n }\n return noTrim ? text : text.trim();\n }\n\n /**\n * Extracts from the object material settings, depends on username\n */\n static getSettingsOrder(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n forEnumId: string,\n options: { user?: string },\n ): string | null {\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as any as ioBroker.StateCommon;\n }\n let settings;\n if (common?.custom) {\n settings = common.custom[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subOrder && settings[user].subOrder[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subOrder[forEnumId]));\n }\n } else if (settings[user].order) {\n return JSON.parse(JSON.stringify(settings[user].order));\n }\n }\n }\n return null;\n }\n\n /**\n Used in material\n */\n static getSettingsCustomURLs(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n forEnumId: string,\n options: { user?: string },\n ): string | null {\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as any as ioBroker.StateCommon;\n }\n let settings;\n if (common?.custom) {\n settings = common.custom[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subURLs && settings[user].subURLs[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subURLs[forEnumId]));\n }\n } else if (settings[user].URLs) {\n return JSON.parse(JSON.stringify(settings[user].URLs));\n }\n }\n }\n return null;\n }\n\n /**\n * Reorder the array items in list between source and dest.\n */\n static reorder(list: Iterable<any> | ArrayLike<any>, source: number, dest: number): Iterable<any> | ArrayLike<any> {\n const result = Array.from(list);\n const [removed] = result.splice(source, 1);\n result.splice(dest, 0, removed);\n return result;\n }\n\n /**\n Get smart name settings for the given object.\n */\n static getSettings(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n options: {\n id?: string;\n user?: string;\n name?: ioBroker.StringOrTranslated;\n icon?: string;\n color?: string;\n language?: ioBroker.Languages;\n },\n defaultEnabling?: boolean,\n ): {\n name: string;\n enabled?: boolean;\n useCustom?: boolean;\n icon?: string;\n color?: string;\n } {\n let settings;\n const id = (obj as ioBroker.StateObject)?._id || options?.id;\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as ioBroker.StateCommon;\n }\n if (common?.custom) {\n settings = common.custom;\n settings =\n settings[NAMESPACE] && settings[NAMESPACE][options.user || 'admin']\n ? JSON.parse(JSON.stringify(settings[NAMESPACE][options.user || 'admin']))\n : { enabled: true };\n } else {\n settings = { enabled: defaultEnabling === undefined ? true : defaultEnabling, useCustom: false };\n }\n\n if (!Object.prototype.hasOwnProperty.call(settings, 'enabled')) {\n settings.enabled = defaultEnabling === undefined ? true : defaultEnabling;\n }\n\n if (options) {\n if (!settings.name && options.name) {\n settings.name = options.name;\n }\n if (!settings.icon && options.icon) {\n settings.icon = options.icon;\n }\n if (!settings.color && options.color) {\n settings.color = options.color;\n }\n }\n\n if (common) {\n if (!settings.color && common.color) {\n settings.color = common.color;\n }\n if (!settings.icon && common.icon) {\n settings.icon = common.icon;\n }\n if (!settings.name && common.name) {\n settings.name = common.name;\n }\n }\n\n if (typeof settings.name === 'object') {\n settings.name = (options.language && settings.name[options.language]) || settings.name.en;\n\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n\n if (settings.name === settings.name.toUpperCase()) {\n settings.name = settings.name[0] + settings.name.substring(1).toLowerCase();\n }\n }\n if (!settings.name && id) {\n const pos = id.lastIndexOf('.');\n settings.name = id.substring(pos + 1).replace(/[_.]/g, ' ');\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n settings.name = Utils.CapitalWords(settings.name);\n }\n\n return settings;\n }\n\n /**\n Sets smartName settings for the given object.\n */\n static setSettings(\n obj: Partial<ioBroker.Object>,\n settings: Record<string, any>,\n options: { user?: string; language?: ioBroker.Languages },\n ): boolean {\n if (obj) {\n obj.common = obj.common || ({} as ioBroker.StateCommon);\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[NAMESPACE] = obj.common.custom[NAMESPACE] || {};\n obj.common.custom[NAMESPACE][options.user || 'admin'] = settings;\n const s = obj.common.custom[NAMESPACE][options.user || 'admin'];\n if (s.useCommon) {\n if (s.color !== undefined) {\n obj.common.color = s.color;\n delete s.color;\n }\n if (s.icon !== undefined) {\n obj.common.icon = s.icon;\n delete s.icon;\n }\n if (s.name !== undefined) {\n if (typeof obj.common.name !== 'object' && options.language) {\n obj.common.name = { [options.language]: s.name } as ioBroker.StringOrTranslated;\n } else if (typeof obj.common.name === 'object' && options.language) {\n obj.common.name[options.language] = s.name;\n }\n delete s.name;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the icon for the given settings.\n */\n static getIcon(\n settings: { icon?: string; name?: string; prefix?: string },\n style?: React.CSSProperties,\n ): React.JSX.Element | null {\n if (settings?.icon) {\n // If UTF-8 icon\n if (settings.icon.length <= 2) {\n return <span style={style || {}}>{settings.icon}</span>;\n }\n if (settings.icon.startsWith('data:image')) {\n return (\n <img\n alt={settings.name}\n src={settings.icon}\n style={style || {}}\n />\n );\n }\n // maybe later some changes for a second type\n return (\n <img\n alt={settings.name}\n src={(settings.prefix || '') + settings.icon}\n style={style}\n />\n );\n }\n return null;\n }\n\n /**\n * Get the icon for the given object.\n */\n static getObjectIcon(id: string | ioBroker.PartialObject, obj?: ioBroker.PartialObject): string | null {\n // If id is Object\n if (typeof id === 'object') {\n obj = id;\n id = obj?._id;\n }\n\n if (obj?.common?.icon) {\n let icon = obj.common.icon;\n // If UTF-8 icon\n if (typeof icon === 'string' && icon.length <= 2) {\n return icon;\n }\n if (icon.startsWith('data:image')) {\n return icon;\n }\n\n const parts = id.split('.');\n if (parts[0] === 'system') {\n icon = `adapter/${parts[2]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n } else {\n icon = `adapter/${parts[0]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n }\n\n if (window.location.pathname.match(/adapter\\/[^/]+\\/[^/]+\\.html/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\/[.\\d]+/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\//)) {\n icon = `../${icon}`;\n }\n return icon;\n }\n\n return null;\n }\n\n /**\n * Converts word1_word2 to word1Word2.\n */\n static splitCamelCase(text: string | null | undefined): string {\n // if (false && text !== text.toUpperCase()) {\n // const words = text.split(/\\s+/);\n // for (let i = 0; i < words.length; i++) {\n // const word = words[i];\n // if (word.toLowerCase() !== word && word.toUpperCase() !== word) {\n // let z = 0;\n // const ww = [];\n // let start = 0;\n // while (z < word.length) {\n // if (word[z].match(/[A-ZÜÄÖА-Я]/)) {\n // ww.push(word.substring(start, z));\n // start = z;\n // }\n // z++;\n // }\n // if (start !== z) {\n // ww.push(word.substring(start, z));\n // }\n // for (let k = 0; k < ww.length; k++) {\n // words.splice(i + k, 0, ww[k]);\n // }\n // i += ww.length;\n // }\n // }\n //\n // return words.map(w => {\n // w = w.trim();\n // if (w) {\n // return w[0].toUpperCase() + w.substring(1).toLowerCase();\n // }\n // return '';\n // }).join(' ');\n // }\n return text ? Utils.CapitalWords(text) : '';\n }\n\n /**\n * Check if the given color is bright.\n * https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n */\n static isUseBright(color: string | null | undefined, defaultValue?: boolean): boolean {\n if (!color) {\n return defaultValue === undefined ? true : defaultValue;\n }\n color = color.toString();\n if (color.startsWith('#')) {\n color = color.slice(1);\n }\n let r;\n let g;\n let b;\n\n const rgb = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n if (rgb && rgb.length === 4) {\n r = parseInt(rgb[1], 10);\n g = parseInt(rgb[2], 10);\n b = parseInt(rgb[3], 10);\n } else {\n // convert 3-digit hex to 6-digits.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n // remove alfa channel\n if (color.length === 8) {\n color = color.substring(0, 6);\n } else if (color.length !== 6) {\n return false;\n }\n\n r = parseInt(color.slice(0, 2), 16);\n g = parseInt(color.slice(2, 4), 16);\n b = parseInt(color.slice(4, 6), 16);\n }\n\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 <= 186;\n }\n\n /**\n * Get the time string in the format 00:00.\n */\n static getTimeString(seconds: string | number): string {\n seconds = parseFloat(seconds as string);\n if (Number.isNaN(seconds)) {\n return '--:--';\n }\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60)\n .toString()\n .padStart(2, '0');\n const secs = (seconds % 60).toString().padStart(2, '0');\n if (hours) {\n return `${hours}:${minutes}:${secs}`;\n }\n\n return `${minutes}:${secs}`;\n }\n\n /**\n * Gets the wind direction with the given angle (degrees).\n */\n static getWindDirection(\n /** angle in degrees from 0° to 360° */\n angle: number,\n ): string {\n if (angle >= 0 && angle < 11.25) {\n return 'N';\n }\n if (angle >= 11.25 && angle < 33.75) {\n return 'NNE';\n }\n if (angle >= 33.75 && angle < 56.25) {\n return 'NE';\n }\n if (angle >= 56.25 && angle < 78.75) {\n return 'ENE';\n }\n if (angle >= 78.75 && angle < 101.25) {\n return 'E';\n }\n if (angle >= 101.25 && angle < 123.75) {\n return 'ESE';\n }\n if (angle >= 123.75 && angle < 146.25) {\n return 'SE';\n }\n if (angle >= 146.25 && angle < 168.75) {\n return 'SSE';\n }\n if (angle >= 168.75 && angle < 191.25) {\n return 'S';\n }\n if (angle >= 191.25 && angle < 213.75) {\n return 'SSW';\n }\n if (angle >= 213.75 && angle < 236.25) {\n return 'SW';\n }\n if (angle >= 236.25 && angle < 258.75) {\n return 'WSW';\n }\n if (angle >= 258.75 && angle < 281.25) {\n return 'W';\n }\n if (angle >= 281.25 && angle < 303.75) {\n return 'WNW';\n }\n if (angle >= 303.75 && angle < 326.25) {\n return 'NW';\n }\n if (angle >= 326.25 && angle < 348.75) {\n return 'NNW';\n }\n // if (angle >= 348.75) {\n return 'N';\n }\n\n /**\n * Pad the given number with a zero if it's not two digits long.\n */\n static padding(num: string | number): string {\n if (typeof num === 'string') {\n if (num.length < 2) {\n return `0${num}`;\n }\n return num;\n }\n if (num < 10) {\n return `0${num}`;\n }\n return num.toString();\n }\n\n /**\n * Sets the date format.\n */\n static setDataFormat(format: string): void {\n if (format) {\n Utils.dateFormat = format.toUpperCase().split(/[.-/]/);\n Utils.dateFormat.splice(Utils.dateFormat.indexOf('YYYY'), 1);\n }\n }\n\n /**\n * Converts the date to a string.\n */\n static date2string(now: string | number | Date): string {\n if (typeof now === 'string') {\n now = now.trim();\n if (!now) {\n return '';\n }\n // only letters\n if (now.match(/^[\\w\\s]+$/)) {\n // Day of the week\n return now;\n }\n const m = now.match(/(\\d{1,4})[-./](\\d{1,2})[-./](\\d{1,4})/);\n if (m) {\n const a = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];\n // We now have 3 numbers. Let's try to detect where is year, where is day and where is month\n const year = a.find(y => y > 31);\n if (year !== undefined) {\n a.splice(a.indexOf(year), 1);\n\n const day = a.find(mm => mm > 12);\n if (day) {\n a.splice(a.indexOf(day), 1);\n now = new Date(year, a[0] - 1, day);\n } else if (Utils.dateFormat[0][0] === 'M' && Utils.dateFormat[1][0] === 'D') {\n // MM DD\n now = new Date(year, a[0] - 1, a[1]);\n if (Math.abs(now.getTime() - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[1] - 1, a[0]);\n }\n } else if (Utils.dateFormat[0][0] === 'D' && Utils.dateFormat[1][0] === 'M') {\n // DD MM\n now = new Date(year, a[1] - 1, a[0]);\n if (Math.abs(now.getTime() - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[0] - 1, a[1]);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n\n let date = I18n.t(`ra_dow_${days[now.getDay()]}`).replace('ra_dow_', '');\n date += `. ${now.getDate()} ${I18n.t(`ra_month_${months[now.getMonth()]}`).replace('ra_month_', '')}`;\n return date;\n }\n\n /**\n * Render a text as a link.\n */\n static renderTextWithA(text: string): React.JSX.Element[] | string {\n let m: RegExpMatchArray | null = text.match(/<a [^<]+<\\/a>|<br\\s?\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (m) {\n const result: React.JSX.Element[] = [];\n let key = 1;\n do {\n const start = text.substring(0, m.index);\n text = text.substring((m.index || 0) + m[0].length);\n start && result.push(<span key={`a${key++}`}>{start}</span>);\n\n if (m[0].startsWith('<b>')) {\n result.push(<b key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</b>);\n } else if (m[0].startsWith('<i>')) {\n result.push(<i key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</i>);\n } else if (m[0].startsWith('<br')) {\n result.push(<br key={`a${key++}`} />);\n } else {\n const href = m[0].match(/href=\"([^\"]+)\"/) || m[0].match(/href='([^']+)'/);\n const target = m[0].match(/target=\"([^\"]+)\"/) || m[0].match(/target='([^']+)'/);\n const rel = m[0].match(/rel=\"([^\"]+)\"/) || m[0].match(/rel='([^']+)'/);\n const title = m[0].match(/>([^<]*)</);\n\n result.push(\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n key={`a${key++}`}\n href={href ? href[1] : ''}\n target={target ? target[1] : '_blank'}\n rel={rel ? rel[1] : 'noreferrer'}\n style={{ color: 'inherit' }}\n >\n {title ? title[1] : ''}\n </a>,\n );\n }\n\n m = text ? text.match(/<a [^<]+<\\/a>|<br\\s?\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/) : null;\n if (!m && text) {\n // put the rest text\n result.push(<span key={`a${key++}`}>{text}</span>);\n }\n } while (m);\n\n return result;\n }\n\n return text;\n }\n\n /**\n * Get the smart name of the given state.\n */\n static getSmartName(\n states: Record<string, ioBroker.StateObject> | ioBroker.StateObject | ioBroker.StateCommon,\n id: string,\n instanceId: string,\n noCommon?: boolean,\n ): SmartName | undefined {\n if (!id) {\n if (!noCommon) {\n if (!(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n if (states && !(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n return (states as ioBroker.StateObject).common.smartName;\n }\n if (states && !(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n const obj = states as ioBroker.StateObject;\n return obj?.common?.custom && obj.common.custom[instanceId]\n ? obj.common.custom[instanceId].smartName\n : undefined;\n }\n if (!noCommon) {\n return (states as Record<string, ioBroker.StateObject>)[id].common.smartName;\n }\n const obj = (states as Record<string, ioBroker.StateObject>)[id];\n\n return obj?.common?.custom && obj.common.custom[instanceId]\n ? obj.common.custom[instanceId].smartName || null\n : null;\n }\n\n /**\n * Get the smart name from a state.\n */\n static getSmartNameFromObj(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n instanceId: string,\n noCommon?: boolean,\n ): SmartName | undefined {\n if (!noCommon) {\n if (!(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n if (obj && !(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n\n return (obj as ioBroker.StateObject).common.smartName;\n }\n if (obj && !(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n\n const custom: Record<string, string> | undefined | null = (obj as ioBroker.StateObject)?.common?.custom?.[\n instanceId\n ];\n\n return custom ? custom.smartName : undefined;\n }\n\n /**\n * Enable smart name for a state.\n */\n static enableSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName = {};\n } else {\n sureStateObject.common.smartName = {};\n }\n }\n\n /**\n * Completely remove smart name from a state.\n */\n static removeSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n if (sureStateObject?.common?.custom?.[instanceId]) {\n sureStateObject.common.custom[instanceId] = null;\n }\n } else {\n sureStateObject.common.smartName = null;\n }\n }\n\n /**\n * Update the smart name of a state.\n */\n static updateSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n newSmartName: ioBroker.StringOrTranslated | undefined,\n byON: string | null | undefined,\n smartType: string | null | undefined,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n const language = I18n.getLanguage();\n\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n\n // convert the old format\n if (typeof sureStateObject.common.smartName === 'string') {\n const nnn = sureStateObject.common.smartName;\n sureStateObject.common.smartName = {};\n sureStateObject.common.smartName[language] = nnn;\n }\n\n // convert the old settings\n if (sureStateObject.native?.byON) {\n delete sureStateObject.native.byON;\n let _smartName: SmartName = sureStateObject.common.smartName as SmartName;\n\n if (_smartName && typeof _smartName !== 'object') {\n _smartName = {\n en: _smartName,\n [language]: _smartName,\n };\n }\n sureStateObject.common.smartName = _smartName;\n }\n if (smartType !== undefined) {\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n if (!smartType) {\n delete sureStateObject.common.custom[instanceId].smartName.smartType;\n } else {\n sureStateObject.common.custom[instanceId].smartName.smartType = smartType;\n }\n } else {\n sureStateObject.common.smartName ||= {};\n if (!smartType) {\n delete (sureStateObject.common.smartName as SmartNameObject).smartType;\n } else {\n (sureStateObject.common.smartName as SmartNameObject).smartType = smartType;\n }\n }\n }\n\n if (byON !== undefined) {\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n sureStateObject.common.custom[instanceId].smartName.byON = byON;\n } else {\n sureStateObject.common.smartName ||= {};\n (sureStateObject.common.smartName as SmartNameObject).byON = byON;\n }\n }\n\n if (newSmartName !== undefined) {\n let smartName;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n smartName = sureStateObject.common.custom[instanceId].smartName;\n } else {\n sureStateObject.common.smartName ||= {};\n smartName = sureStateObject.common.smartName;\n }\n smartName[language] = newSmartName;\n\n // If smart name deleted\n if (\n smartName &&\n (!smartName[language] ||\n (smartName[language] === sureStateObject.common.name &&\n (!sureStateObject.common.role || sureStateObject.common.role.includes('button'))))\n ) {\n delete smartName[language];\n let empty = true;\n // Check if the structure has any definitions\n for (const key in smartName) {\n if (Object.prototype.hasOwnProperty.call(smartName, key)) {\n empty = false;\n break;\n }\n }\n // If empty => delete smartName completely\n if (empty) {\n if (noCommon && sureStateObject.common.custom?.[instanceId]) {\n if (sureStateObject.common.custom[instanceId].smartName.byON === undefined) {\n delete sureStateObject.common.custom[instanceId];\n } else {\n delete sureStateObject.common.custom[instanceId].en;\n delete sureStateObject.common.custom[instanceId].de;\n delete sureStateObject.common.custom[instanceId].ru;\n delete sureStateObject.common.custom[instanceId].nl;\n delete sureStateObject.common.custom[instanceId].pl;\n delete sureStateObject.common.custom[instanceId].it;\n delete sureStateObject.common.custom[instanceId].fr;\n delete sureStateObject.common.custom[instanceId].pt;\n delete sureStateObject.common.custom[instanceId].es;\n delete sureStateObject.common.custom[instanceId].uk;\n delete sureStateObject.common.custom[instanceId]['zh-cn'];\n }\n } else if (\n sureStateObject.common.smartName &&\n (sureStateObject.common.smartName as SmartNameObject).byON !== undefined\n ) {\n const _smartName: { [lang in ioBroker.Languages]?: string } = sureStateObject.common\n .smartName as {\n [lang in ioBroker.Languages]?: string;\n };\n delete _smartName.en;\n delete _smartName.de;\n delete _smartName.ru;\n delete _smartName.nl;\n delete _smartName.pl;\n delete _smartName.it;\n delete _smartName.fr;\n delete _smartName.pt;\n delete _smartName.es;\n delete _smartName.uk;\n delete _smartName['zh-cn'];\n } else {\n sureStateObject.common.smartName = null;\n }\n }\n }\n }\n }\n\n /**\n * Disable the smart name of a state.\n */\n static disableSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName = false;\n } else {\n sureStateObject.common.smartName = false;\n }\n }\n\n /**\n * Copy text to the clipboard.\n */\n static copyToClipboard(text: string, e?: Event): boolean {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n return copy(text);\n }\n\n /**\n * Gets the extension of a file name.\n *\n * @param fileName the file name.\n * @returns The extension in lower case.\n */\n static getFileExtension(fileName: string): string | null {\n const pos = (fileName || '').lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n /**\n * Format number of bytes as a string with B, KB, MB or GB.\n * The base for all calculations is 1024.\n *\n * @param bytes The number of bytes.\n * @returns The formatted string (e.g. '723.5 KB')\n */\n static formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n /**\n * Invert the given color according to a theme type to get the inverted text color for background\n *\n * @param color Color in the format '#rrggbb' or '#rgb' (or without a hash)\n * @param themeType 'light' or 'dark'\n * @param invert If true, the dark theme has a light color in the control, or the dark theme has a light color in the control\n */\n static getInvertedColor(color: string, themeType: ThemeType, invert?: boolean): string | undefined {\n if (!color) {\n return undefined;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && (themeType === 'dark' || (invert && themeType === 'light'))) {\n return '#DDD';\n }\n if (invertedColor === '#000000' && (themeType === 'light' || (invert && themeType === 'dark'))) {\n return '#222';\n }\n\n return undefined;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n /**\n * Invert the given color\n *\n * @param hex Color in the format '#rrggbb' or '#rgb' (or without a hash)\n * @param bw Set to black or white.\n */\n static invertColor(hex: string | null | undefined, bw?: boolean): string {\n if (!hex || typeof hex !== 'string') {\n return '';\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n let alfa = null;\n if (hex.length === 8) {\n alfa = hex.substring(6, 8);\n hex = hex.substring(0, 6);\n } else if (hex.length !== 6) {\n console.warn(`Cannot invert color: ${hex}`);\n return hex;\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? `#000000${alfa || ''}` : `#FFFFFF${alfa || ''}`;\n }\n // invert color components\n const rs = (255 - r).toString(16);\n const gs = (255 - g).toString(16);\n const bd = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${rs.padStart(2, '0')}${gs.padStart(2, '0')}${bd.padStart(2, '0')}${alfa || ''}`;\n }\n\n /**\n * Convert RGB to array [r, g, b]\n *\n * @param hex Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns Array with 3 elements [r, g, b]\n */\n static color2rgb(hex: string): false | [number, number, number] | '' {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return false;\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6 && hex.length !== 8) {\n console.warn(`Cannot invert color: ${hex}`);\n return false;\n }\n\n return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16)];\n }\n\n // Big thanks to: https://github.com/antimatter15/rgb-lab\n /**\n * Convert RGB to LAB\n *\n * @param rgb color in format [r,g,b]\n * @returns lab color in format [l,a,b]\n */\n static rgb2lab(rgb: [number, number, number]): [number, number, number] {\n let r = rgb[0] / 255;\n let g = rgb[1] / 255;\n let b = rgb[2] / 255;\n\n r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92;\n g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92;\n b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92;\n\n let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;\n let y = r * 0.2126 + g * 0.7152 + b * 0.0722; /* / 1.00000; */\n let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;\n\n x = x > 0.008856 ? x ** 0.33333333 : 7.787 * x + 0.137931; // 16 / 116;\n y = y > 0.008856 ? y ** 0.33333333 : 7.787 * y + 0.137931; // 16 / 116;\n z = z > 0.008856 ? z ** 0.33333333 : 7.787 * z + 0.137931; // 16 / 116;\n\n return [116 * y - 16, 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Calculate the distance between two colors in LAB color space in the range 0-100^2\n * If the distance is less than 1000, the colors are similar\n *\n * @param color1 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @param color2 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns distance in the range 0-100^2\n */\n static colorDistance(color1: string, color2: string): number {\n const rgb1 = Utils.color2rgb(color1);\n const rgb2 = Utils.color2rgb(color2);\n if (!rgb1 || !rgb2) {\n return 0;\n }\n\n const lab1 = Utils.rgb2lab(rgb1);\n const lab2 = Utils.rgb2lab(rgb2);\n const dltL = lab1[0] - lab2[0];\n const dltA = lab1[1] - lab2[1];\n const dltB = lab1[2] - lab2[2];\n const c1 = Math.sqrt(lab1[1] * lab1[1] + lab1[2] * lab1[2]);\n const c2 = Math.sqrt(lab2[1] * lab2[1] + lab2[2] * lab2[2]);\n const dltC = c1 - c2;\n let dltH = dltA * dltA + dltB * dltB - dltC * dltC;\n dltH = dltH < 0 ? 0 : Math.sqrt(dltH);\n const sc = 1.0 + 0.045 * c1;\n const sh = 1.0 + 0.015 * c1;\n const dltLKlsl = dltL;\n const dltCkcsc = dltC / sc;\n const dltHkhsh = dltH / sh;\n const i = dltLKlsl * dltLKlsl + dltCkcsc * dltCkcsc + dltHkhsh * dltHkhsh;\n return i < 0 ? 0 : i;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n private static _toVal(mix: ClassValue): string {\n let y;\n let str = '';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n y = Utils._toVal(mix[k]);\n if (y) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (const k in mix) {\n if (mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * Convert any object to a string with its values.\n */\n static clsx(...inputs: ClassValue[]): string {\n let i = 0;\n let tmp;\n let x;\n let str = '';\n while (i < inputs.length) {\n tmp = inputs[i++];\n if (tmp) {\n x = Utils._toVal(tmp);\n if (x) {\n str && (str += ' ');\n str += x;\n }\n }\n }\n return str;\n }\n\n /**\n * Get the current theme name (either from local storage or the browser settings).\n */\n static getThemeName(themeName?: ThemeName | null): ThemeName {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return (window as any).vendorPrefix;\n }\n\n themeName = ((window as any)._localStorage || window.localStorage).getItem('App.themeName');\n if (themeName) {\n return themeName;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n /**\n * Get the type of theme.\n */\n static getThemeType(themeName?: ThemeName): ThemeType {\n if ((window as any).vendorPrefix && (window as any).vendorPrefix !== '@@vendorPrefix@@') {\n return 'light';\n }\n\n themeName = themeName || Utils.getThemeName();\n return themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light';\n }\n\n /**\n * Set the theme name and theme type.\n */\n static setThemeName(themeName: ThemeName): void {\n const vendorPrefix = (window as any).vendorPrefix;\n if (vendorPrefix && vendorPrefix !== '@@vendorPrefix@@' && vendorPrefix !== 'MV') {\n return; // ignore\n }\n ((window as any)._localStorage || window.localStorage).setItem('App.themeName', themeName);\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.theme',\n themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light',\n );\n }\n\n /**\n * Toggle the theme name between 'dark' and 'colored'.\n *\n * @returns the new theme name.\n */\n static toggleTheme(themeName?: ThemeName | null): ThemeName {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return (window as any).vendorPrefix as ThemeName;\n }\n themeName =\n themeName || ((window as any)._localStorage || window.localStorage).getItem('App.themeName') || 'light';\n\n // dark => blue => colored => light => dark\n const themes = Utils.getThemeNames();\n const pos = themeName ? themes.indexOf(themeName) : -1;\n let newTheme: ThemeName;\n if (pos !== -1) {\n newTheme = themes[(pos + 1) % themes.length];\n } else {\n newTheme = themes[0];\n }\n Utils.setThemeName(newTheme);\n\n return newTheme;\n }\n\n /**\n * Get the list of themes\n *\n * @returns list of possible themes\n */\n static getThemeNames(): ThemeName[] {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return [(window as any).vendorPrefix as ThemeName];\n }\n\n return ['light', 'dark'];\n }\n\n /**\n * Parse a query string into its parts.\n */\n static parseQuery(query: string): Record<string, string | number | boolean> {\n query = (query || '').toString().replace(/^\\?/, '');\n const result: Record<string, string | number | boolean> = {};\n query.split('&').forEach(part => {\n part = part.trim();\n if (part) {\n const parts = part.split('=');\n const attr = decodeURIComponent(parts[0]).trim();\n if (parts.length > 1) {\n const value = decodeURIComponent(parts[1]);\n if (value === 'true') {\n result[attr] = true;\n } else if (value === 'false') {\n result[attr] = false;\n } else {\n const f = parseFloat(value);\n if (f.toString() === value) {\n result[attr] = f;\n } else {\n result[attr] = value;\n }\n }\n } else {\n result[attr] = true;\n }\n }\n });\n return result;\n }\n\n /**\n * Returns parent ID.\n *\n * @returns parent ID or null if no parent\n */\n static getParentId(id: string): string | null {\n const p = (id || '').toString().split('.');\n if (p.length > 1) {\n p.pop();\n return p.join('.');\n }\n\n return null;\n }\n\n static formatDate(dateObj: Date, dateFormat: string): string {\n // format could be DD.MM.YYYY, YYYY.MM.DD or MM/DD/YYYY\n\n if (!dateObj) {\n return '';\n }\n\n let text;\n const mm = (dateObj.getMonth() + 1).toString().padStart(2, '0');\n const dd = dateObj.getDate().toString().padStart(2, '0');\n\n if (dateFormat === 'MM/DD/YYYY') {\n text = `${mm}/${dd}/${dateObj.getFullYear()}`;\n } else {\n text = `${dateObj.getFullYear()}-${mm}-${dd}`;\n }\n\n // time\n text += ` ${dateObj.getHours().toString().padStart(2, '0')}:${dateObj.getMinutes().toString().padStart(2, '0')}:${dateObj.getSeconds().toString().padStart(2, '0')}.${dateObj.getMilliseconds().toString().padStart(3, '0')}`;\n\n return text;\n }\n\n /**\n * Format seconds to string like 'h:mm:ss' or 'd.hh:mm:ss'\n */\n static formatTime(seconds: number): string {\n if (seconds) {\n seconds = Math.round(seconds);\n const d = Math.floor(seconds / (3600 * 24));\n const h = Math.floor((seconds % (3600 * 24)) / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = seconds % 60;\n if (d) {\n return `${d}.${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n if (h) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n\n return `0:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return '0:00:00';\n }\n\n static MDtext2link(text: string): string {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, ' '));\n }\n\n return text\n .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')\n .trim()\n .replace(/\\s/g, '')\n .toLowerCase();\n }\n\n /**\n * Open url link in the new target window\n */\n static openLink(url: string, target?: string): void {\n // replace IPv6 Address with [ipv6]:port\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n\n if (target === 'this') {\n window.location.href = url;\n } else {\n window.open(url, target || '_blank');\n }\n }\n\n static MDgetTitle(text: string): string {\n const result = Utils.MDextractHeader(text);\n const header = result.header;\n let body = result.body;\n if (!header.title) {\n // remove {docsify-bla}\n body = body.replace(/{[^}]*}/g, '');\n body = body.trim();\n const lines = body.replace(/\\r/g, '').split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('# ')) {\n return lines[i].substring(2).trim();\n }\n }\n return '';\n }\n\n return header.title?.toString() || '';\n }\n\n static MDextractHeader(text: string): { header: Record<string, string | boolean | number>; body: string } {\n const attrs: Record<string, string | boolean | number> = {};\n if (text.substring(0, 3) === '---') {\n const pos = text.substring(3).indexOf('\\n---');\n if (pos !== -1) {\n const _header = text.substring(3, pos + 3);\n const lines = _header.replace(/\\r/g, '').split('\\n');\n lines.forEach(line => {\n if (!line.trim()) {\n return;\n }\n const pos_ = line.indexOf(':');\n if (pos_ !== -1) {\n const attr = line.substring(0, pos_).trim();\n let value = line.substring(pos_ + 1).trim();\n value = value.replace(/^['\"]|['\"]$/g, '');\n if (value === 'true') {\n attrs[attr] = true;\n } else if (value === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(value).toString() === attrs[attr]) {\n attrs[attr] = parseFloat(value);\n } else {\n attrs[attr] = value;\n }\n } else {\n attrs[line.trim()] = true;\n }\n });\n text = text.substring(pos + 7);\n }\n }\n return { header: attrs, body: text };\n }\n\n static MDremoveDocsify(text: string): string {\n const m = text.match(/{docsify-[^}]*}/g);\n if (m) {\n m.forEach(doc => (text = text.replace(doc, '')));\n }\n return text;\n }\n\n /**\n * Generate the file for download from JSON object.\n */\n static generateFile(\n fileName: string,\n /** json file data */\n json: Record<string, any>,\n ): void {\n const el = document.createElement('a');\n el.setAttribute(\n 'href',\n `data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(json, null, 2))}`,\n );\n el.setAttribute('download', fileName);\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n /**\n * Convert quality code into text\n *\n * @returns lines that decode quality\n */\n static quality2text(quality: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY]): string[] {\n const custom = quality & 0xffff0000;\n const text: string = QUALITY_BITS[quality];\n let result;\n if (text) {\n result = [text];\n } else if (quality & 0x01) {\n result = [QUALITY_BITS[0x01], `0x${(quality & (0xffff & ~1)).toString(16)}`];\n } else if (quality & 0x02) {\n result = [QUALITY_BITS[0x02], `0x${(quality & (0xffff & ~2)).toString(16)}`];\n } else {\n result = [`0x${quality.toString(16)}`];\n }\n if (custom) {\n result.push(`0x${(custom >> 16).toString(16).toUpperCase()}`);\n }\n return result;\n }\n\n /**\n * Deep copy object\n */\n static clone(object: Record<string, any>): Record<string, any> {\n return JSON.parse(JSON.stringify(object));\n }\n\n /**\n * Get states of object\n *\n * @returns states as an object in form {\"value1\": \"label1\", \"value2\": \"label2\"} or null\n */\n static getStates(obj: ioBroker.StateObject | null | undefined): Record<string, string> | null {\n const states: Record<string, string> | string[] | string | undefined | null = obj?.common?.states;\n let result: Record<string, string> | null | undefined;\n if (states) {\n if (typeof states === 'string' && states[0] === '{') {\n try {\n result = JSON.parse(states) as Record<string, string>;\n } catch {\n console.error(`Cannot parse states: ${states}`);\n result = null;\n }\n } else if (typeof states === 'string') {\n // if old format val1:text1;val2:text2\n const parts = states.split(';');\n result = {};\n for (let p = 0; p < parts.length; p++) {\n const s = parts[p].split(':');\n result[s[0]] = s[1];\n }\n } else if (Array.isArray(states)) {\n result = {};\n if (obj?.common.type === 'number') {\n states.forEach((value, key) => (result[key] = value));\n } else if (obj?.common.type === 'string') {\n states.forEach(value => (result[value] = value));\n } else if (obj?.common.type === 'boolean') {\n result.false = states[0];\n result.true = states[1];\n }\n } else if (typeof states === 'object') {\n result = states;\n }\n }\n\n return result || null;\n }\n\n /**\n * Get svg file as text\n *\n * @param url URL of SVG file\n * @returns Promise with \"data:image...\"\n */\n static async getSvg(url: string): Promise<string> {\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise(resolve => {\n const reader = new FileReader();\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n reader.onload = (): void => resolve(reader.result?.toString() || '');\n reader.readAsDataURL(blob);\n });\n }\n\n /**\n * Detect a file extension by its content\n *\n * @returns The detected extension, like 'jpg'\n */\n static detectMimeType(\n /** Base64 encoded binary file */\n base64: string,\n ): string | null {\n const signature = Object.keys(SIGNATURES).find(s => base64.startsWith(s));\n return signature ? SIGNATURES[signature] : null;\n }\n\n /**\n * Check if configured repository is the stable repository\n */\n static isStableRepository(\n /** current configured repository or multi repository */\n activeRepo: string | string[],\n ): boolean {\n return !!(\n (typeof activeRepo === 'string' && activeRepo.toLowerCase().startsWith('stable')) ||\n (activeRepo && typeof activeRepo !== 'string' && activeRepo.find(r => r.toLowerCase().startsWith('stable')))\n );\n }\n\n /**\n * Check if a given string is an integer\n */\n static isStringInteger(str: string | number): boolean {\n if (typeof str === 'number') {\n return Math.round(str) === str;\n }\n return parseInt(str, 10).toString() === str;\n }\n\n /**\n * Check if the date is valid\n */\n static isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date as any as number);\n }\n\n static getStyle(\n theme: IobTheme,\n ...args: (((_theme: IobTheme) => Record<string, any>) | undefined | Record<string, any>)[]\n ): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (let a = 0; a < args.length; a++) {\n if (typeof args[a] === 'function') {\n Object.assign(result, (args[a] as (_theme: IobTheme) => Record<string, any>)(theme));\n } else if (args[a] && typeof args[a] === 'object') {\n Object.keys(args[a] as Record<string, any>).forEach((attr: string) => {\n if (typeof (args[a] as Record<string, any>)[attr] === 'function') {\n result[attr] = (\n (args[a] as Record<string, any>)[attr] as (_theme: IobTheme) => Record<string, any>\n )(theme);\n } else if (typeof (args[a] as Record<string, any>)[attr] === 'object') {\n const obj = (args[a] as Record<string, any>)[attr];\n result[attr] = {};\n Object.keys(obj).forEach((attr1: string) => {\n if (typeof obj[attr1] === 'function') {\n result[attr][attr1] = obj(theme);\n } else if (obj[attr1] || obj[attr1] === 0) {\n result[attr][attr1] = obj[attr1];\n }\n });\n } else if ((args[a] as Record<string, any>)[attr] || (args[a] as Record<string, any>)[attr] === 0) {\n result[attr] = (args[a] as Record<string, any>)[attr];\n }\n });\n }\n }\n\n return result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Components/Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2024 Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React from 'react';\n\nimport { copy } from './CopyToClipboard';\nimport { I18n } from '../i18n';\nimport type { IobTheme, ThemeName, ThemeType } from '../types';\n\nconst NAMESPACE = 'material';\nconst days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst QUALITY_BITS: Record<ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY], string> = {\n 0x00: '0x00 - good',\n\n 0x01: '0x01 - general problem',\n 0x02: '0x02 - no connection problem',\n\n 0x10: '0x10 - substitute value from controller',\n 0x20: '0x20 - substitute initial value',\n 0x40: '0x40 - substitute value from device or instance',\n 0x80: '0x80 - substitute value from sensor',\n\n 0x11: '0x11 - general problem by instance',\n 0x41: '0x41 - general problem by device',\n 0x81: '0x81 - general problem by sensor',\n\n 0x12: '0x12 - instance not connected',\n 0x42: '0x42 - device not connected',\n 0x82: '0x82 - sensor not connected',\n\n 0x44: '0x44 - device reports error',\n 0x84: '0x84 - sensor reports error',\n};\nconst SIGNATURES: Record<string, string> = {\n JVBERi0: 'pdf',\n R0lGODdh: 'gif',\n R0lGODlh: 'gif',\n iVBORw0KGgo: 'png',\n '/9j/': 'jpg',\n PHN2Zw: 'svg',\n Qk1: 'bmp',\n AAABAA: 'ico', // 00 00 01 00 according to https://en.wikipedia.org/wiki/List_of_file_signatures\n};\ntype SmartNameObject = { [lang in ioBroker.Languages]?: string } & {\n /** Which kind of device it is */\n smartType?: string | null;\n /** Which value to set when the ON command is issued */\n byON?: string | null;\n};\n\ntype SmartName = null | false | string | SmartNameObject;\n\ntype ClassDictionary = Record<string, any>;\ntype ClassValue = ClassArray | ClassDictionary | string | number | null | boolean | undefined;\ntype ClassArray = ClassValue[];\n\nexport class Utils {\n static namespace = NAMESPACE;\n\n static INSTANCES = 'instances';\n\n static dateFormat = ['DD', 'MM'];\n\n static FORBIDDEN_CHARS = /[^._\\-/ :!#$%&()+=@^{}|~\\p{Ll}\\p{Lu}\\p{Nd}]+/gu;\n\n /**\n * Capitalize words.\n */\n static CapitalWords(name: string | null | undefined): string {\n return (name || '')\n .split(/[\\s_]/)\n .filter(item => item)\n .map(word => (word ? word[0].toUpperCase() + word.substring(1).toLowerCase() : ''))\n .join(' ');\n }\n\n static formatSeconds(seconds: number): string {\n const days_ = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n\n const hours = Math.floor(seconds / 3600)\n .toString()\n .padStart(2, '0');\n seconds %= 3600;\n\n const minutes = Math.floor(seconds / 60)\n .toString()\n .padStart(2, '0');\n seconds %= 60;\n\n const secondsStr = Math.floor(seconds).toString().padStart(2, '0');\n\n let text = '';\n if (days_) {\n text += `${days_} ${I18n.t('ra_daysShortText')} `;\n }\n text += `${hours}:${minutes}:${secondsStr}`;\n\n return text;\n }\n\n /**\n * Get the name of the object by id from the name or description.\n */\n static getObjectName(\n objects: Record<string, ioBroker.Object>,\n id: string,\n settings?: { name: ioBroker.StringOrTranslated } | ioBroker.Languages | null,\n options?: { language?: ioBroker.Languages },\n /** Set to true to get the description. */\n isDesc?: boolean,\n ): string {\n const item = objects[id];\n let text: string | undefined;\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n if (!options.language) {\n options.language =\n (objects['system.config'] &&\n objects['system.config'].common &&\n objects['system.config'].common.language) ||\n window.sysLang ||\n 'en';\n }\n if ((settings as { name: ioBroker.StringOrTranslated })?.name) {\n const textObj = (settings as { name: ioBroker.StringOrTranslated }).name;\n if (typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en;\n } else {\n text = textObj;\n }\n } else if (isDesc && item?.common?.desc) {\n const textObj = item.common.desc;\n if (typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en || textObj.de || textObj.ru || '';\n } else {\n text = textObj;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else if (!isDesc && item?.common) {\n const textObj = item.common.name || item.common.desc;\n if (textObj && typeof textObj === 'object') {\n text = (options.language && textObj[options.language]) || textObj.en || textObj.de || textObj.ru || '';\n } else {\n text = textObj as string;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else {\n const pos = id.lastIndexOf('.');\n text = id.substring(pos + 1).replace(/[_.]/g, ' ');\n text = Utils.CapitalWords(text);\n }\n\n return text?.trim() || '';\n }\n\n /**\n * Get the name of the object from the name or description.\n */\n static getObjectNameFromObj(\n obj: ioBroker.PartialObject,\n /** settings or language */\n settings: { name: ioBroker.StringOrTranslated } | ioBroker.Languages | null,\n options?: { language?: ioBroker.Languages },\n /** Set to true to get the description. */\n isDesc?: boolean,\n /** Allow using spaces in name (by edit) */\n noTrim?: boolean,\n ): string {\n const item = obj;\n let text = obj?._id || '';\n\n if (typeof settings === 'string' && !options) {\n options = { language: settings };\n settings = null;\n }\n\n options = options || {};\n\n if ((settings as { name: ioBroker.StringOrTranslated })?.name) {\n const name = (settings as { name: ioBroker.StringOrTranslated }).name;\n if (typeof name === 'object') {\n text = (options.language && name[options.language]) || name.en;\n } else {\n text = name;\n }\n } else if (isDesc && item?.common?.desc) {\n const desc: ioBroker.StringOrTranslated = item.common.desc;\n if (typeof desc === 'object') {\n text = (options.language && desc[options.language]) || desc.en;\n } else {\n text = desc;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else if (!isDesc && item?.common?.name) {\n let name = item.common.name;\n if (!name && item.common.desc) {\n name = item.common.desc;\n }\n if (typeof name === 'object') {\n text = (options.language && name[options.language]) || name.en;\n } else {\n text = name;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n }\n return noTrim ? text : text.trim();\n }\n\n /**\n * Extracts from the object material settings, depends on username\n */\n static getSettingsOrder(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n forEnumId: string,\n options: { user?: string },\n ): string | null {\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as any as ioBroker.StateCommon;\n }\n let settings;\n if (common?.custom) {\n settings = common.custom[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subOrder && settings[user].subOrder[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subOrder[forEnumId]));\n }\n } else if (settings[user].order) {\n return JSON.parse(JSON.stringify(settings[user].order));\n }\n }\n }\n return null;\n }\n\n /**\n Used in material\n */\n static getSettingsCustomURLs(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n forEnumId: string,\n options: { user?: string },\n ): string | null {\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as any as ioBroker.StateCommon;\n }\n let settings;\n if (common?.custom) {\n settings = common.custom[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subURLs && settings[user].subURLs[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subURLs[forEnumId]));\n }\n } else if (settings[user].URLs) {\n return JSON.parse(JSON.stringify(settings[user].URLs));\n }\n }\n }\n return null;\n }\n\n /**\n * Reorder the array items in list between source and dest.\n */\n static reorder(list: Iterable<any> | ArrayLike<any>, source: number, dest: number): Iterable<any> | ArrayLike<any> {\n const result = Array.from(list);\n const [removed] = result.splice(source, 1);\n result.splice(dest, 0, removed);\n return result;\n }\n\n /**\n Get smart name settings for the given object.\n */\n static getSettings(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n options: {\n id?: string;\n user?: string;\n name?: ioBroker.StringOrTranslated;\n icon?: string;\n color?: string;\n language?: ioBroker.Languages;\n },\n defaultEnabling?: boolean,\n ): {\n name: string;\n enabled?: boolean;\n useCustom?: boolean;\n icon?: string;\n color?: string;\n } {\n let settings;\n const id = (obj as ioBroker.StateObject)?._id || options?.id;\n let common: ioBroker.StateCommon | undefined;\n if (obj && Object.prototype.hasOwnProperty.call(obj, 'common')) {\n common = (obj as ioBroker.StateObject).common;\n } else {\n common = obj as ioBroker.StateCommon;\n }\n if (common?.custom) {\n settings = common.custom;\n settings =\n settings[NAMESPACE] && settings[NAMESPACE][options.user || 'admin']\n ? JSON.parse(JSON.stringify(settings[NAMESPACE][options.user || 'admin']))\n : { enabled: true };\n } else {\n settings = { enabled: defaultEnabling === undefined ? true : defaultEnabling, useCustom: false };\n }\n\n if (!Object.prototype.hasOwnProperty.call(settings, 'enabled')) {\n settings.enabled = defaultEnabling === undefined ? true : defaultEnabling;\n }\n\n if (options) {\n if (!settings.name && options.name) {\n settings.name = options.name;\n }\n if (!settings.icon && options.icon) {\n settings.icon = options.icon;\n }\n if (!settings.color && options.color) {\n settings.color = options.color;\n }\n }\n\n if (common) {\n if (!settings.color && common.color) {\n settings.color = common.color;\n }\n if (!settings.icon && common.icon) {\n settings.icon = common.icon;\n }\n if (!settings.name && common.name) {\n settings.name = common.name;\n }\n }\n\n if (typeof settings.name === 'object') {\n settings.name = (options.language && settings.name[options.language]) || settings.name.en;\n\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n\n if (settings.name === settings.name.toUpperCase()) {\n settings.name = settings.name[0] + settings.name.substring(1).toLowerCase();\n }\n }\n if (!settings.name && id) {\n const pos = id.lastIndexOf('.');\n settings.name = id.substring(pos + 1).replace(/[_.]/g, ' ');\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n settings.name = Utils.CapitalWords(settings.name);\n }\n\n return settings;\n }\n\n /**\n Sets smartName settings for the given object.\n */\n static setSettings(\n obj: Partial<ioBroker.Object>,\n settings: Record<string, any>,\n options: { user?: string; language?: ioBroker.Languages },\n ): boolean {\n if (obj) {\n obj.common = obj.common || ({} as ioBroker.StateCommon);\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[NAMESPACE] = obj.common.custom[NAMESPACE] || {};\n obj.common.custom[NAMESPACE][options.user || 'admin'] = settings;\n const s = obj.common.custom[NAMESPACE][options.user || 'admin'];\n if (s.useCommon) {\n if (s.color !== undefined) {\n obj.common.color = s.color;\n delete s.color;\n }\n if (s.icon !== undefined) {\n obj.common.icon = s.icon;\n delete s.icon;\n }\n if (s.name !== undefined) {\n if (typeof obj.common.name !== 'object' && options.language) {\n obj.common.name = { [options.language]: s.name } as ioBroker.StringOrTranslated;\n } else if (typeof obj.common.name === 'object' && options.language) {\n obj.common.name[options.language] = s.name;\n }\n delete s.name;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the icon for the given settings.\n */\n static getIcon(\n settings: { icon?: string; name?: string; prefix?: string },\n style?: React.CSSProperties,\n ): React.JSX.Element | null {\n if (settings?.icon) {\n // If UTF-8 icon\n if (settings.icon.length <= 2) {\n return <span style={style || {}}>{settings.icon}</span>;\n }\n if (settings.icon.startsWith('data:image')) {\n return (\n <img\n alt={settings.name}\n src={settings.icon}\n style={style || {}}\n />\n );\n }\n // maybe later some changes for a second type\n return (\n <img\n alt={settings.name}\n src={(settings.prefix || '') + settings.icon}\n style={style}\n />\n );\n }\n return null;\n }\n\n /**\n * Get the icon for the given object.\n */\n static getObjectIcon(id: string | ioBroker.PartialObject, obj?: ioBroker.PartialObject): string | null {\n // If id is Object\n if (typeof id === 'object') {\n obj = id;\n id = obj?._id;\n }\n\n if (obj?.common?.icon) {\n let icon = obj.common.icon;\n // If UTF-8 icon\n if (typeof icon === 'string' && icon.length <= 2) {\n return icon;\n }\n if (icon.startsWith('data:image')) {\n return icon;\n }\n\n const parts = id.split('.');\n if (parts[0] === 'system') {\n icon = `adapter/${parts[2]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n } else {\n icon = `adapter/${parts[0]}${icon.startsWith('/') ? '' : '/'}${icon}`;\n }\n\n if (window.location.pathname.match(/adapter\\/[^/]+\\/[^/]+\\.html/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\/[.\\d]+/)) {\n icon = `../../${icon}`;\n } else if (window.location.pathname.match(/material\\//)) {\n icon = `../${icon}`;\n }\n return icon;\n }\n\n return null;\n }\n\n /**\n * Converts word1_word2 to word1Word2.\n */\n static splitCamelCase(text: string | null | undefined): string {\n // if (false && text !== text.toUpperCase()) {\n // const words = text.split(/\\s+/);\n // for (let i = 0; i < words.length; i++) {\n // const word = words[i];\n // if (word.toLowerCase() !== word && word.toUpperCase() !== word) {\n // let z = 0;\n // const ww = [];\n // let start = 0;\n // while (z < word.length) {\n // if (word[z].match(/[A-ZÜÄÖА-Я]/)) {\n // ww.push(word.substring(start, z));\n // start = z;\n // }\n // z++;\n // }\n // if (start !== z) {\n // ww.push(word.substring(start, z));\n // }\n // for (let k = 0; k < ww.length; k++) {\n // words.splice(i + k, 0, ww[k]);\n // }\n // i += ww.length;\n // }\n // }\n //\n // return words.map(w => {\n // w = w.trim();\n // if (w) {\n // return w[0].toUpperCase() + w.substring(1).toLowerCase();\n // }\n // return '';\n // }).join(' ');\n // }\n return text ? Utils.CapitalWords(text) : '';\n }\n\n /**\n * Check if the given color is bright.\n * https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n */\n static isUseBright(color: string | null | undefined, defaultValue?: boolean): boolean {\n if (!color) {\n return defaultValue === undefined ? true : defaultValue;\n }\n color = color.toString();\n if (color.startsWith('#')) {\n color = color.slice(1);\n }\n let r;\n let g;\n let b;\n\n const rgb = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n if (rgb && rgb.length === 4) {\n r = parseInt(rgb[1], 10);\n g = parseInt(rgb[2], 10);\n b = parseInt(rgb[3], 10);\n } else {\n // convert 3-digit hex to 6-digits.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n // remove alfa channel\n if (color.length === 8) {\n color = color.substring(0, 6);\n } else if (color.length !== 6) {\n return false;\n }\n\n r = parseInt(color.slice(0, 2), 16);\n g = parseInt(color.slice(2, 4), 16);\n b = parseInt(color.slice(4, 6), 16);\n }\n\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 <= 186;\n }\n\n /**\n * Get the time string in the format 00:00.\n */\n static getTimeString(seconds: string | number): string {\n seconds = parseFloat(seconds as string);\n if (Number.isNaN(seconds)) {\n return '--:--';\n }\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60)\n .toString()\n .padStart(2, '0');\n const secs = (seconds % 60).toString().padStart(2, '0');\n if (hours) {\n return `${hours}:${minutes}:${secs}`;\n }\n\n return `${minutes}:${secs}`;\n }\n\n /**\n * Gets the wind direction with the given angle (degrees).\n */\n static getWindDirection(\n /** angle in degrees from 0° to 360° */\n angle: number,\n ): string {\n if (angle >= 0 && angle < 11.25) {\n return 'N';\n }\n if (angle >= 11.25 && angle < 33.75) {\n return 'NNE';\n }\n if (angle >= 33.75 && angle < 56.25) {\n return 'NE';\n }\n if (angle >= 56.25 && angle < 78.75) {\n return 'ENE';\n }\n if (angle >= 78.75 && angle < 101.25) {\n return 'E';\n }\n if (angle >= 101.25 && angle < 123.75) {\n return 'ESE';\n }\n if (angle >= 123.75 && angle < 146.25) {\n return 'SE';\n }\n if (angle >= 146.25 && angle < 168.75) {\n return 'SSE';\n }\n if (angle >= 168.75 && angle < 191.25) {\n return 'S';\n }\n if (angle >= 191.25 && angle < 213.75) {\n return 'SSW';\n }\n if (angle >= 213.75 && angle < 236.25) {\n return 'SW';\n }\n if (angle >= 236.25 && angle < 258.75) {\n return 'WSW';\n }\n if (angle >= 258.75 && angle < 281.25) {\n return 'W';\n }\n if (angle >= 281.25 && angle < 303.75) {\n return 'WNW';\n }\n if (angle >= 303.75 && angle < 326.25) {\n return 'NW';\n }\n if (angle >= 326.25 && angle < 348.75) {\n return 'NNW';\n }\n // if (angle >= 348.75) {\n return 'N';\n }\n\n /**\n * Pad the given number with a zero if it's not two digits long.\n */\n static padding(num: string | number): string {\n if (typeof num === 'string') {\n if (num.length < 2) {\n return `0${num}`;\n }\n return num;\n }\n if (num < 10) {\n return `0${num}`;\n }\n return num.toString();\n }\n\n /**\n * Sets the date format.\n */\n static setDataFormat(format: string): void {\n if (format) {\n Utils.dateFormat = format.toUpperCase().split(/[.-/]/);\n Utils.dateFormat.splice(Utils.dateFormat.indexOf('YYYY'), 1);\n }\n }\n\n /**\n * Converts the date to a string.\n */\n static date2string(now: string | number | Date): string {\n if (typeof now === 'string') {\n now = now.trim();\n if (!now) {\n return '';\n }\n // only letters\n if (now.match(/^[\\w\\s]+$/)) {\n // Day of the week\n return now;\n }\n const m = now.match(/(\\d{1,4})[-./](\\d{1,2})[-./](\\d{1,4})/);\n if (m) {\n const a = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];\n // We now have 3 numbers. Let's try to detect where is year, where is day and where is month\n const year = a.find(y => y > 31);\n if (year !== undefined) {\n a.splice(a.indexOf(year), 1);\n\n const day = a.find(mm => mm > 12);\n if (day) {\n a.splice(a.indexOf(day), 1);\n now = new Date(year, a[0] - 1, day);\n } else if (Utils.dateFormat[0][0] === 'M' && Utils.dateFormat[1][0] === 'D') {\n // MM DD\n now = new Date(year, a[0] - 1, a[1]);\n if (Math.abs(now.getTime() - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[1] - 1, a[0]);\n }\n } else if (Utils.dateFormat[0][0] === 'D' && Utils.dateFormat[1][0] === 'M') {\n // DD MM\n now = new Date(year, a[1] - 1, a[0]);\n if (Math.abs(now.getTime() - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[0] - 1, a[1]);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n\n let date = I18n.t(`ra_dow_${days[now.getDay()]}`).replace('ra_dow_', '');\n date += `. ${now.getDate()} ${I18n.t(`ra_month_${months[now.getMonth()]}`).replace('ra_month_', '')}`;\n return date;\n }\n\n /**\n * Render a text as a link.\n */\n static renderTextWithA(text: string): React.JSX.Element[] | string {\n let m: RegExpMatchArray | null = text.match(/<a [^<]+<\\/a>|<br\\s?\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (m) {\n const result: React.JSX.Element[] = [];\n let key = 1;\n do {\n const start = text.substring(0, m.index);\n text = text.substring((m.index || 0) + m[0].length);\n start && result.push(<span key={`a${key++}`}>{start}</span>);\n\n if (m[0].startsWith('<b>')) {\n result.push(<b key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</b>);\n } else if (m[0].startsWith('<i>')) {\n result.push(<i key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</i>);\n } else if (m[0].startsWith('<br')) {\n result.push(<br key={`a${key++}`} />);\n } else {\n const href = m[0].match(/href=\"([^\"]+)\"/) || m[0].match(/href='([^']+)'/);\n const target = m[0].match(/target=\"([^\"]+)\"/) || m[0].match(/target='([^']+)'/);\n const rel = m[0].match(/rel=\"([^\"]+)\"/) || m[0].match(/rel='([^']+)'/);\n const title = m[0].match(/>([^<]*)</);\n\n result.push(\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n key={`a${key++}`}\n href={href ? href[1] : ''}\n target={target ? target[1] : '_blank'}\n rel={rel ? rel[1] : 'noreferrer'}\n style={{ color: 'inherit' }}\n >\n {title ? title[1] : ''}\n </a>,\n );\n }\n\n m = text ? text.match(/<a [^<]+<\\/a>|<br\\s?\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/) : null;\n if (!m && text) {\n // put the rest text\n result.push(<span key={`a${key++}`}>{text}</span>);\n }\n } while (m);\n\n return result;\n }\n\n return text;\n }\n\n /**\n * Get the smart name of the given state.\n */\n static getSmartName(\n states: Record<string, ioBroker.StateObject> | ioBroker.StateObject | ioBroker.StateCommon,\n id: string,\n instanceId: string,\n noCommon?: boolean,\n ): SmartName | undefined {\n if (!id) {\n if (!noCommon) {\n if (!(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n if (states && !(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n return (states as ioBroker.StateObject).common.smartName;\n }\n if (states && !(states as ioBroker.StateObject).common) {\n return (states as ioBroker.StateCommon).smartName;\n }\n const obj = states as ioBroker.StateObject;\n return obj?.common?.custom && obj.common.custom[instanceId]\n ? obj.common.custom[instanceId].smartName\n : undefined;\n }\n if (!noCommon) {\n return (states as Record<string, ioBroker.StateObject>)[id].common.smartName;\n }\n const obj = (states as Record<string, ioBroker.StateObject>)[id];\n\n return obj?.common?.custom && obj.common.custom[instanceId]\n ? obj.common.custom[instanceId].smartName || null\n : null;\n }\n\n /**\n * Get the smart name from a state.\n */\n static getSmartNameFromObj(\n obj: ioBroker.StateObject | ioBroker.StateCommon,\n instanceId: string,\n noCommon?: boolean,\n ): SmartName | undefined {\n if (!noCommon) {\n if (!(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n if (obj && !(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n\n return (obj as ioBroker.StateObject).common.smartName;\n }\n if (obj && !(obj as ioBroker.StateObject).common) {\n return (obj as ioBroker.StateCommon).smartName;\n }\n\n const custom: Record<string, string> | undefined | null = (obj as ioBroker.StateObject)?.common?.custom?.[\n instanceId\n ];\n\n return custom ? custom.smartName : undefined;\n }\n\n /**\n * Enable smart name for a state.\n */\n static enableSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName = {};\n } else {\n sureStateObject.common.smartName = {};\n }\n }\n\n /**\n * Completely remove smart name from a state.\n */\n static removeSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n if (sureStateObject?.common?.custom?.[instanceId]) {\n sureStateObject.common.custom[instanceId] = null;\n }\n } else {\n sureStateObject.common.smartName = null;\n }\n }\n\n /**\n * Update the smart name of a state.\n */\n static updateSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n newSmartName: ioBroker.StringOrTranslated | undefined,\n byON: string | null | undefined,\n smartType: string | null | undefined,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n const language = I18n.getLanguage();\n\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n\n // convert the old format\n if (typeof sureStateObject.common.smartName === 'string') {\n const nnn = sureStateObject.common.smartName;\n sureStateObject.common.smartName = {};\n sureStateObject.common.smartName[language] = nnn;\n }\n\n // convert the old settings\n if (sureStateObject.native?.byON) {\n delete sureStateObject.native.byON;\n let _smartName: SmartName = sureStateObject.common.smartName as SmartName;\n\n if (_smartName && typeof _smartName !== 'object') {\n _smartName = {\n en: _smartName,\n [language]: _smartName,\n };\n }\n sureStateObject.common.smartName = _smartName;\n }\n if (smartType !== undefined) {\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n if (!smartType) {\n delete sureStateObject.common.custom[instanceId].smartName.smartType;\n } else {\n sureStateObject.common.custom[instanceId].smartName.smartType = smartType;\n }\n } else {\n sureStateObject.common.smartName ||= {};\n if (!smartType) {\n delete (sureStateObject.common.smartName as SmartNameObject).smartType;\n } else {\n (sureStateObject.common.smartName as SmartNameObject).smartType = smartType;\n }\n }\n }\n\n if (byON !== undefined) {\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n sureStateObject.common.custom[instanceId].smartName.byON = byON;\n } else {\n sureStateObject.common.smartName ||= {};\n (sureStateObject.common.smartName as SmartNameObject).byON = byON;\n }\n }\n\n if (newSmartName !== undefined) {\n let smartName;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName ||= {};\n smartName = sureStateObject.common.custom[instanceId].smartName;\n } else {\n sureStateObject.common.smartName ||= {};\n smartName = sureStateObject.common.smartName;\n }\n smartName[language] = newSmartName;\n\n // If smart name deleted\n if (\n smartName &&\n (!smartName[language] ||\n (smartName[language] === sureStateObject.common.name && !sureStateObject.common.role))\n ) {\n delete smartName[language];\n let empty = true;\n // Check if the structure has any definitions\n for (const key in smartName) {\n if (Object.prototype.hasOwnProperty.call(smartName, key)) {\n empty = false;\n break;\n }\n }\n // If empty => delete smartName completely\n if (empty) {\n if (noCommon && sureStateObject.common.custom?.[instanceId]) {\n if (sureStateObject.common.custom[instanceId].smartName.byON === undefined) {\n delete sureStateObject.common.custom[instanceId];\n } else {\n delete sureStateObject.common.custom[instanceId].en;\n delete sureStateObject.common.custom[instanceId].de;\n delete sureStateObject.common.custom[instanceId].ru;\n delete sureStateObject.common.custom[instanceId].nl;\n delete sureStateObject.common.custom[instanceId].pl;\n delete sureStateObject.common.custom[instanceId].it;\n delete sureStateObject.common.custom[instanceId].fr;\n delete sureStateObject.common.custom[instanceId].pt;\n delete sureStateObject.common.custom[instanceId].es;\n delete sureStateObject.common.custom[instanceId].uk;\n delete sureStateObject.common.custom[instanceId]['zh-cn'];\n }\n } else if (\n sureStateObject.common.smartName &&\n (sureStateObject.common.smartName as SmartNameObject).byON !== undefined\n ) {\n const _smartName: { [lang in ioBroker.Languages]?: string } = sureStateObject.common\n .smartName as {\n [lang in ioBroker.Languages]?: string;\n };\n delete _smartName.en;\n delete _smartName.de;\n delete _smartName.ru;\n delete _smartName.nl;\n delete _smartName.pl;\n delete _smartName.it;\n delete _smartName.fr;\n delete _smartName.pt;\n delete _smartName.es;\n delete _smartName.uk;\n delete _smartName['zh-cn'];\n } else {\n sureStateObject.common.smartName = null;\n }\n }\n }\n }\n }\n\n /**\n * Disable the smart name of a state.\n */\n static disableSmartName(\n obj: ioBroker.StateObject | ioBroker.EnumObject,\n instanceId: string,\n noCommon?: boolean,\n ): void {\n // Typing must be fixed in js-controller\n const sureStateObject = obj as ioBroker.StateObject;\n if (noCommon) {\n sureStateObject.common.custom ||= {};\n sureStateObject.common.custom[instanceId] ||= {};\n sureStateObject.common.custom[instanceId].smartName = false;\n } else {\n sureStateObject.common.smartName = false;\n }\n }\n\n /**\n * Copy text to the clipboard.\n */\n static copyToClipboard(text: string, e?: Event): boolean {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n return copy(text);\n }\n\n /**\n * Gets the extension of a file name.\n *\n * @param fileName the file name.\n * @returns The extension in lower case.\n */\n static getFileExtension(fileName: string): string | null {\n const pos = (fileName || '').lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n /**\n * Format number of bytes as a string with B, KB, MB or GB.\n * The base for all calculations is 1024.\n *\n * @param bytes The number of bytes.\n * @returns The formatted string (e.g. '723.5 KB')\n */\n static formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n /**\n * Invert the given color according to a theme type to get the inverted text color for background\n *\n * @param color Color in the format '#rrggbb' or '#rgb' (or without a hash)\n * @param themeType 'light' or 'dark'\n * @param invert If true, the dark theme has a light color in the control, or the dark theme has a light color in the control\n */\n static getInvertedColor(color: string, themeType: ThemeType, invert?: boolean): string | undefined {\n if (!color) {\n return undefined;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && (themeType === 'dark' || (invert && themeType === 'light'))) {\n return '#DDD';\n }\n if (invertedColor === '#000000' && (themeType === 'light' || (invert && themeType === 'dark'))) {\n return '#222';\n }\n\n return undefined;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n /**\n * Invert the given color\n *\n * @param hex Color in the format '#rrggbb' or '#rgb' (or without a hash)\n * @param bw Set to black or white.\n */\n static invertColor(hex: string | null | undefined, bw?: boolean): string {\n if (!hex || typeof hex !== 'string') {\n return '';\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n let alfa = null;\n if (hex.length === 8) {\n alfa = hex.substring(6, 8);\n hex = hex.substring(0, 6);\n } else if (hex.length !== 6) {\n console.warn(`Cannot invert color: ${hex}`);\n return hex;\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? `#000000${alfa || ''}` : `#FFFFFF${alfa || ''}`;\n }\n // invert color components\n const rs = (255 - r).toString(16);\n const gs = (255 - g).toString(16);\n const bd = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${rs.padStart(2, '0')}${gs.padStart(2, '0')}${bd.padStart(2, '0')}${alfa || ''}`;\n }\n\n /**\n * Convert RGB to array [r, g, b]\n *\n * @param hex Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns Array with 3 elements [r, g, b]\n */\n static color2rgb(hex: string): false | [number, number, number] | '' {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return false;\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgb')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex =\n parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6 && hex.length !== 8) {\n console.warn(`Cannot invert color: ${hex}`);\n return false;\n }\n\n return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16)];\n }\n\n // Big thanks to: https://github.com/antimatter15/rgb-lab\n /**\n * Convert RGB to LAB\n *\n * @param rgb color in format [r,g,b]\n * @returns lab color in format [l,a,b]\n */\n static rgb2lab(rgb: [number, number, number]): [number, number, number] {\n let r = rgb[0] / 255;\n let g = rgb[1] / 255;\n let b = rgb[2] / 255;\n\n r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92;\n g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92;\n b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92;\n\n let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;\n let y = r * 0.2126 + g * 0.7152 + b * 0.0722; /* / 1.00000; */\n let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;\n\n x = x > 0.008856 ? x ** 0.33333333 : 7.787 * x + 0.137931; // 16 / 116;\n y = y > 0.008856 ? y ** 0.33333333 : 7.787 * y + 0.137931; // 16 / 116;\n z = z > 0.008856 ? z ** 0.33333333 : 7.787 * z + 0.137931; // 16 / 116;\n\n return [116 * y - 16, 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Calculate the distance between two colors in LAB color space in the range 0-100^2\n * If the distance is less than 1000, the colors are similar\n *\n * @param color1 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @param color2 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns distance in the range 0-100^2\n */\n static colorDistance(color1: string, color2: string): number {\n const rgb1 = Utils.color2rgb(color1);\n const rgb2 = Utils.color2rgb(color2);\n if (!rgb1 || !rgb2) {\n return 0;\n }\n\n const lab1 = Utils.rgb2lab(rgb1);\n const lab2 = Utils.rgb2lab(rgb2);\n const dltL = lab1[0] - lab2[0];\n const dltA = lab1[1] - lab2[1];\n const dltB = lab1[2] - lab2[2];\n const c1 = Math.sqrt(lab1[1] * lab1[1] + lab1[2] * lab1[2]);\n const c2 = Math.sqrt(lab2[1] * lab2[1] + lab2[2] * lab2[2]);\n const dltC = c1 - c2;\n let dltH = dltA * dltA + dltB * dltB - dltC * dltC;\n dltH = dltH < 0 ? 0 : Math.sqrt(dltH);\n const sc = 1.0 + 0.045 * c1;\n const sh = 1.0 + 0.015 * c1;\n const dltLKlsl = dltL;\n const dltCkcsc = dltC / sc;\n const dltHkhsh = dltH / sh;\n const i = dltLKlsl * dltLKlsl + dltCkcsc * dltCkcsc + dltHkhsh * dltHkhsh;\n return i < 0 ? 0 : i;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n private static _toVal(mix: ClassValue): string {\n let y;\n let str = '';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n y = Utils._toVal(mix[k]);\n if (y) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (const k in mix) {\n if (mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * Convert any object to a string with its values.\n */\n static clsx(...inputs: ClassValue[]): string {\n let i = 0;\n let tmp;\n let x;\n let str = '';\n while (i < inputs.length) {\n tmp = inputs[i++];\n if (tmp) {\n x = Utils._toVal(tmp);\n if (x) {\n str && (str += ' ');\n str += x;\n }\n }\n }\n return str;\n }\n\n /**\n * Get the current theme name (either from local storage or the browser settings).\n */\n static getThemeName(themeName?: ThemeName | null): ThemeName {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return (window as any).vendorPrefix;\n }\n\n themeName = ((window as any)._localStorage || window.localStorage).getItem('App.themeName');\n if (themeName) {\n return themeName;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n /**\n * Get the type of theme.\n */\n static getThemeType(themeName?: ThemeName): ThemeType {\n if ((window as any).vendorPrefix && (window as any).vendorPrefix !== '@@vendorPrefix@@') {\n return 'light';\n }\n\n themeName = themeName || Utils.getThemeName();\n return themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light';\n }\n\n /**\n * Set the theme name and theme type.\n */\n static setThemeName(themeName: ThemeName): void {\n const vendorPrefix = (window as any).vendorPrefix;\n if (vendorPrefix && vendorPrefix !== '@@vendorPrefix@@' && vendorPrefix !== 'MV') {\n return; // ignore\n }\n ((window as any)._localStorage || window.localStorage).setItem('App.themeName', themeName);\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.theme',\n themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light',\n );\n }\n\n /**\n * Toggle the theme name between 'dark' and 'colored'.\n *\n * @returns the new theme name.\n */\n static toggleTheme(themeName?: ThemeName | null): ThemeName {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return (window as any).vendorPrefix as ThemeName;\n }\n themeName =\n themeName || ((window as any)._localStorage || window.localStorage).getItem('App.themeName') || 'light';\n\n // dark => blue => colored => light => dark\n const themes = Utils.getThemeNames();\n const pos = themeName ? themes.indexOf(themeName) : -1;\n let newTheme: ThemeName;\n if (pos !== -1) {\n newTheme = themes[(pos + 1) % themes.length];\n } else {\n newTheme = themes[0];\n }\n Utils.setThemeName(newTheme);\n\n return newTheme;\n }\n\n /**\n * Get the list of themes\n *\n * @returns list of possible themes\n */\n static getThemeNames(): ThemeName[] {\n if (\n (window as any).vendorPrefix &&\n (window as any).vendorPrefix !== '@@vendorPrefix@@' &&\n (window as any).vendorPrefix !== 'MV'\n ) {\n return [(window as any).vendorPrefix as ThemeName];\n }\n\n return ['light', 'dark'];\n }\n\n /**\n * Parse a query string into its parts.\n */\n static parseQuery(query: string): Record<string, string | number | boolean> {\n query = (query || '').toString().replace(/^\\?/, '');\n const result: Record<string, string | number | boolean> = {};\n query.split('&').forEach(part => {\n part = part.trim();\n if (part) {\n const parts = part.split('=');\n const attr = decodeURIComponent(parts[0]).trim();\n if (parts.length > 1) {\n const value = decodeURIComponent(parts[1]);\n if (value === 'true') {\n result[attr] = true;\n } else if (value === 'false') {\n result[attr] = false;\n } else {\n const f = parseFloat(value);\n if (f.toString() === value) {\n result[attr] = f;\n } else {\n result[attr] = value;\n }\n }\n } else {\n result[attr] = true;\n }\n }\n });\n return result;\n }\n\n /**\n * Returns parent ID.\n *\n * @returns parent ID or null if no parent\n */\n static getParentId(id: string): string | null {\n const p = (id || '').toString().split('.');\n if (p.length > 1) {\n p.pop();\n return p.join('.');\n }\n\n return null;\n }\n\n static formatDate(dateObj: Date, dateFormat: string): string {\n // format could be DD.MM.YYYY, YYYY.MM.DD or MM/DD/YYYY\n\n if (!dateObj) {\n return '';\n }\n\n let text;\n const mm = (dateObj.getMonth() + 1).toString().padStart(2, '0');\n const dd = dateObj.getDate().toString().padStart(2, '0');\n\n if (dateFormat === 'MM/DD/YYYY') {\n text = `${mm}/${dd}/${dateObj.getFullYear()}`;\n } else {\n text = `${dateObj.getFullYear()}-${mm}-${dd}`;\n }\n\n // time\n text += ` ${dateObj.getHours().toString().padStart(2, '0')}:${dateObj.getMinutes().toString().padStart(2, '0')}:${dateObj.getSeconds().toString().padStart(2, '0')}.${dateObj.getMilliseconds().toString().padStart(3, '0')}`;\n\n return text;\n }\n\n /**\n * Format seconds to string like 'h:mm:ss' or 'd.hh:mm:ss'\n */\n static formatTime(seconds: number): string {\n if (seconds) {\n seconds = Math.round(seconds);\n const d = Math.floor(seconds / (3600 * 24));\n const h = Math.floor((seconds % (3600 * 24)) / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = seconds % 60;\n if (d) {\n return `${d}.${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n if (h) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n\n return `0:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n return '0:00:00';\n }\n\n static MDtext2link(text: string): string {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, ' '));\n }\n\n return text\n .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')\n .trim()\n .replace(/\\s/g, '')\n .toLowerCase();\n }\n\n /**\n * Open url link in the new target window\n */\n static openLink(url: string, target?: string): void {\n // replace IPv6 Address with [ipv6]:port\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n\n if (target === 'this') {\n window.location.href = url;\n } else {\n window.open(url, target || '_blank');\n }\n }\n\n static MDgetTitle(text: string): string {\n const result = Utils.MDextractHeader(text);\n const header = result.header;\n let body = result.body;\n if (!header.title) {\n // remove {docsify-bla}\n body = body.replace(/{[^}]*}/g, '');\n body = body.trim();\n const lines = body.replace(/\\r/g, '').split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('# ')) {\n return lines[i].substring(2).trim();\n }\n }\n return '';\n }\n\n return header.title?.toString() || '';\n }\n\n static MDextractHeader(text: string): { header: Record<string, string | boolean | number>; body: string } {\n const attrs: Record<string, string | boolean | number> = {};\n if (text.substring(0, 3) === '---') {\n const pos = text.substring(3).indexOf('\\n---');\n if (pos !== -1) {\n const _header = text.substring(3, pos + 3);\n const lines = _header.replace(/\\r/g, '').split('\\n');\n lines.forEach(line => {\n if (!line.trim()) {\n return;\n }\n const pos_ = line.indexOf(':');\n if (pos_ !== -1) {\n const attr = line.substring(0, pos_).trim();\n let value = line.substring(pos_ + 1).trim();\n value = value.replace(/^['\"]|['\"]$/g, '');\n if (value === 'true') {\n attrs[attr] = true;\n } else if (value === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(value).toString() === attrs[attr]) {\n attrs[attr] = parseFloat(value);\n } else {\n attrs[attr] = value;\n }\n } else {\n attrs[line.trim()] = true;\n }\n });\n text = text.substring(pos + 7);\n }\n }\n return { header: attrs, body: text };\n }\n\n static MDremoveDocsify(text: string): string {\n const m = text.match(/{docsify-[^}]*}/g);\n if (m) {\n m.forEach(doc => (text = text.replace(doc, '')));\n }\n return text;\n }\n\n /**\n * Generate the file for download from JSON object.\n */\n static generateFile(\n fileName: string,\n /** json file data */\n json: Record<string, any>,\n ): void {\n const el = document.createElement('a');\n el.setAttribute(\n 'href',\n `data:application/json;charset=utf-8,${encodeURIComponent(JSON.stringify(json, null, 2))}`,\n );\n el.setAttribute('download', fileName);\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n /**\n * Convert quality code into text\n *\n * @returns lines that decode quality\n */\n static quality2text(quality: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY]): string[] {\n const custom = quality & 0xffff0000;\n const text: string = QUALITY_BITS[quality];\n let result;\n if (text) {\n result = [text];\n } else if (quality & 0x01) {\n result = [QUALITY_BITS[0x01], `0x${(quality & (0xffff & ~1)).toString(16)}`];\n } else if (quality & 0x02) {\n result = [QUALITY_BITS[0x02], `0x${(quality & (0xffff & ~2)).toString(16)}`];\n } else {\n result = [`0x${quality.toString(16)}`];\n }\n if (custom) {\n result.push(`0x${(custom >> 16).toString(16).toUpperCase()}`);\n }\n return result;\n }\n\n /**\n * Deep copy object\n */\n static clone(object: Record<string, any>): Record<string, any> {\n return JSON.parse(JSON.stringify(object));\n }\n\n /**\n * Get states of object\n *\n * @returns states as an object in form {\"value1\": \"label1\", \"value2\": \"label2\"} or null\n */\n static getStates(obj: ioBroker.StateObject | null | undefined): Record<string, string> | null {\n const states: Record<string, string> | string[] | string | undefined | null = obj?.common?.states;\n let result: Record<string, string> | null | undefined;\n if (states) {\n if (typeof states === 'string' && states[0] === '{') {\n try {\n result = JSON.parse(states) as Record<string, string>;\n } catch {\n console.error(`Cannot parse states: ${states}`);\n result = null;\n }\n } else if (typeof states === 'string') {\n // if old format val1:text1;val2:text2\n const parts = states.split(';');\n result = {};\n for (let p = 0; p < parts.length; p++) {\n const s = parts[p].split(':');\n result[s[0]] = s[1];\n }\n } else if (Array.isArray(states)) {\n result = {};\n if (obj?.common.type === 'number') {\n states.forEach((value, key) => (result[key] = value));\n } else if (obj?.common.type === 'string') {\n states.forEach(value => (result[value] = value));\n } else if (obj?.common.type === 'boolean') {\n result.false = states[0];\n result.true = states[1];\n }\n } else if (typeof states === 'object') {\n result = states;\n }\n }\n\n return result || null;\n }\n\n /**\n * Get svg file as text\n *\n * @param url URL of SVG file\n * @returns Promise with \"data:image...\"\n */\n static async getSvg(url: string): Promise<string> {\n const response = await fetch(url);\n const blob = await response.blob();\n return new Promise(resolve => {\n const reader = new FileReader();\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n reader.onload = (): void => resolve(reader.result?.toString() || '');\n reader.readAsDataURL(blob);\n });\n }\n\n /**\n * Detect a file extension by its content\n *\n * @returns The detected extension, like 'jpg'\n */\n static detectMimeType(\n /** Base64 encoded binary file */\n base64: string,\n ): string | null {\n const signature = Object.keys(SIGNATURES).find(s => base64.startsWith(s));\n return signature ? SIGNATURES[signature] : null;\n }\n\n /**\n * Check if configured repository is the stable repository\n */\n static isStableRepository(\n /** current configured repository or multi repository */\n activeRepo: string | string[],\n ): boolean {\n return !!(\n (typeof activeRepo === 'string' && activeRepo.toLowerCase().startsWith('stable')) ||\n (activeRepo && typeof activeRepo !== 'string' && activeRepo.find(r => r.toLowerCase().startsWith('stable')))\n );\n }\n\n /**\n * Check if a given string is an integer\n */\n static isStringInteger(str: string | number): boolean {\n if (typeof str === 'number') {\n return Math.round(str) === str;\n }\n return parseInt(str, 10).toString() === str;\n }\n\n /**\n * Check if the date is valid\n */\n static isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date as any as number);\n }\n\n static getStyle(\n theme: IobTheme,\n ...args: (((_theme: IobTheme) => Record<string, any>) | undefined | Record<string, any>)[]\n ): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (let a = 0; a < args.length; a++) {\n if (typeof args[a] === 'function') {\n Object.assign(result, (args[a] as (_theme: IobTheme) => Record<string, any>)(theme));\n } else if (args[a] && typeof args[a] === 'object') {\n Object.keys(args[a] as Record<string, any>).forEach((attr: string) => {\n if (typeof (args[a] as Record<string, any>)[attr] === 'function') {\n result[attr] = (\n (args[a] as Record<string, any>)[attr] as (_theme: IobTheme) => Record<string, any>\n )(theme);\n } else if (typeof (args[a] as Record<string, any>)[attr] === 'object') {\n const obj = (args[a] as Record<string, any>)[attr];\n result[attr] = {};\n Object.keys(obj).forEach((attr1: string) => {\n if (typeof obj[attr1] === 'function') {\n result[attr][attr1] = obj(theme);\n } else if (obj[attr1] || obj[attr1] === 0) {\n result[attr][attr1] = obj[attr1];\n }\n });\n } else if ((args[a] as Record<string, any>)[attr] || (args[a] as Record<string, any>)[attr] === 0) {\n result[attr] = (args[a] as Record<string, any>)[attr];\n }\n });\n }\n }\n\n return result;\n }\n}\n"]}
|