@iobroker/dm-gui-components 8.0.9 → 9.0.0

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.
Files changed (64) hide show
  1. package/README.md +3 -0
  2. package/build/Communication.d.ts +10 -36
  3. package/build/Communication.js +90 -67
  4. package/build/Communication.js.map +1 -1
  5. package/build/DeviceActionButton.d.ts +3 -3
  6. package/build/DeviceActionButton.js +2 -2
  7. package/build/DeviceActionButton.js.map +1 -1
  8. package/build/DeviceCard.d.ts +28 -9
  9. package/build/DeviceCard.js +161 -63
  10. package/build/DeviceCard.js.map +1 -1
  11. package/build/DeviceControl.d.ts +5 -5
  12. package/build/DeviceControl.js.map +1 -1
  13. package/build/DeviceImageUpload.d.ts +2 -1
  14. package/build/DeviceImageUpload.js +1 -1
  15. package/build/DeviceImageUpload.js.map +1 -1
  16. package/build/DeviceList.d.ts +5 -7
  17. package/build/DeviceList.js +96 -86
  18. package/build/DeviceList.js.map +1 -1
  19. package/build/DeviceStatus.d.ts +7 -4
  20. package/build/DeviceStatus.js +37 -30
  21. package/build/DeviceStatus.js.map +1 -1
  22. package/build/InstanceActionButton.d.ts +1 -1
  23. package/build/InstanceActionButton.js.map +1 -1
  24. package/build/StateOrObjectHandler.d.ts +10 -0
  25. package/build/StateOrObjectHandler.js +141 -0
  26. package/build/StateOrObjectHandler.js.map +1 -0
  27. package/build/TooltipButton.d.ts +1 -0
  28. package/build/TooltipButton.js +4 -3
  29. package/build/TooltipButton.js.map +1 -1
  30. package/build/Utils.d.ts +1 -2
  31. package/build/Utils.js.map +1 -1
  32. package/build/hooks.d.ts +3 -0
  33. package/build/hooks.js +10 -0
  34. package/build/hooks.js.map +1 -0
  35. package/build/i18n/de.json +2 -1
  36. package/build/i18n/en.json +1 -0
  37. package/build/i18n/es.json +1 -0
  38. package/build/i18n/fr.json +1 -0
  39. package/build/i18n/it.json +1 -0
  40. package/build/i18n/nl.json +1 -0
  41. package/build/i18n/pl.json +1 -0
  42. package/build/i18n/pt.json +1 -0
  43. package/build/i18n/ru.json +1 -0
  44. package/build/i18n/uk.json +1 -0
  45. package/build/i18n/zh-cn.json +1 -0
  46. package/build/protocol/DmProtocolBase.d.ts +29 -0
  47. package/build/protocol/DmProtocolBase.js +12 -0
  48. package/build/protocol/DmProtocolBase.js.map +1 -0
  49. package/build/protocol/DmProtocolV1.d.ts +12 -0
  50. package/build/protocol/DmProtocolV1.js +22 -0
  51. package/build/protocol/DmProtocolV1.js.map +1 -0
  52. package/build/protocol/DmProtocolV2.d.ts +5 -0
  53. package/build/protocol/DmProtocolV2.js +11 -0
  54. package/build/protocol/DmProtocolV2.js.map +1 -0
  55. package/build/protocol/DmProtocolV3.d.ts +12 -0
  56. package/build/protocol/DmProtocolV3.js +28 -0
  57. package/build/protocol/DmProtocolV3.js.map +1 -0
  58. package/build/protocol/UnknownDmProtocol.d.ts +13 -0
  59. package/build/protocol/UnknownDmProtocol.js +20 -0
  60. package/build/protocol/UnknownDmProtocol.js.map +1 -0
  61. package/build/protocol/api.d.ts +2 -0
  62. package/build/protocol/api.js +2 -0
  63. package/build/protocol/api.js.map +1 -0
  64. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { ControlBase } from '@iobroker/dm-utils/build/types/base';\nimport type { ActionBase } from '@iobroker/dm-utils/build/types/api';\nimport {\n Add,\n Article,\n Bluetooth,\n BluetoothDisabled,\n Delete,\n Edit,\n FastForward,\n FastRewind,\n Fluorescent,\n Group,\n Info,\n Lightbulb,\n Link as LinkIcon,\n LinkOff,\n NotListedLocation,\n Pause,\n Person,\n PlayArrow,\n Power,\n QrCode,\n QuestionMark,\n Refresh,\n Search,\n Settings,\n Stop,\n Visibility,\n Upgrade,\n WbIncandescent,\n Wifi,\n WifiOff,\n} from '@mui/icons-material';\n\nimport { I18n, Icon } from '@iobroker/adapter-react-v5';\n\n/**\n * Get Icon by font-awesome name. Do not use these names, use names from getIconByName\n *\n * @param icon font-awesome icon name\n * Only following font-awesome icons are supported:\n * - fa-trash-can, fa-trash\n * - fa-pen\n * - fa-redo-alt\n * - fa-plus\n * - fa-qrcode, qrcode\n * - fa-wifi\n * - fa-wifi-slash\n * - fa-bluetooth\n * - fa-bluetooth-slash\n * - fa-eye\n * - fa-search\n * - fa-unlink\n * - fa-link\n * - fa-search-location\n * - fa-play\n * - fa-stop\n * - fa-pause\n * @param color color of the icon\n */\nfunction getFaIcon(icon: string, color?: string): React.JSX.Element | null {\n const iconStyle = icon\n .split(' ')\n .map(s => s.trim())\n .filter(s => s !== 'fa-solid');\n\n if (iconStyle.includes('fa-trash-can') || iconStyle.includes('fa-trash')) {\n return <Delete style={{ color }} />;\n }\n if (iconStyle.includes('fa-pen')) {\n return <Edit style={{ color }} />;\n }\n if (iconStyle.includes('fa-redo-alt')) {\n return <Refresh style={{ color }} />;\n }\n if (iconStyle.includes('fa-plus')) {\n return <Add style={{ color }} />;\n }\n if (iconStyle.includes('fa-qrcode') || iconStyle.includes('qrcode')) {\n return <QrCode style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi')) {\n return <Wifi style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi-slash')) {\n return <WifiOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth')) {\n return <Bluetooth style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth-slash')) {\n return <BluetoothDisabled style={{ color }} />;\n }\n if (iconStyle.includes('fa-eye')) {\n return <Visibility style={{ color }} />;\n }\n if (iconStyle.includes('fa-search')) {\n return <Search style={{ color }} />;\n }\n if (iconStyle.includes('fa-unlink')) {\n return <LinkOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-link')) {\n return <LinkIcon style={{ color }} />;\n }\n if (iconStyle.includes('fa-search-location')) {\n return <NotListedLocation style={{ color }} />;\n }\n if (iconStyle.includes('fa-play')) {\n return <PlayArrow style={{ color }} />;\n }\n if (iconStyle.includes('fa-stop')) {\n return <Stop style={{ color }} />;\n }\n if (iconStyle.includes('fa-pause')) {\n return <Pause style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\n/**\n * Get Icon by name or by action\n *\n * @param name action name\n * possible action or icon names are\n * - edit, rename\n * - delete\n * - refresh\n * - newDevice, new, add\n * - discover, search\n * - unpairDevice, unpair\n * - pairDevice, pair\n * - identify\n * - play\n * - stop\n * - pause\n * - forward, next\n * - rewind, previous\n * - lamp, light\n * - backlight\n * - dimmer\n * - socket\n * - settings\n * - users, group\n * - user\n * - qrcode\n * - identify\n * - info\n * - lines\n * @param altName icon name\n * @param color color of the icon\n */\nfunction getIconByName(name: string, altName?: string, color?: string): React.JSX.Element | null {\n if (name === 'edit' || name === 'rename' || altName === 'edit' || altName === 'rename') {\n return <Edit style={{ color }} />;\n }\n if (name === 'delete' || altName === 'delete') {\n return <Delete style={{ color }} />;\n }\n if (name === 'refresh' || altName === 'refresh') {\n return <Refresh style={{ color }} />;\n }\n if (\n name === 'newDevice' ||\n name === 'new' ||\n name === 'add' ||\n altName === 'newDevice' ||\n altName === 'new' ||\n altName === 'add'\n ) {\n return <Add style={{ color }} />;\n }\n if (name === 'discover' || name === 'search' || altName === 'discover' || altName === 'search') {\n return <Search style={{ color }} />;\n }\n if (name === 'unpairDevice' || name === 'unpair' || altName === 'unpairDevice' || altName === 'unpair') {\n return <LinkOff style={{ color }} />;\n }\n if (name === 'pairDevice' || name === 'pair' || altName === 'pairDevice' || altName === 'pair') {\n return <LinkIcon style={{ color }} />;\n }\n if (name === 'identify' || altName === 'identify') {\n return <NotListedLocation style={{ color }} />;\n }\n if (name === 'play' || altName === 'play') {\n return <PlayArrow style={{ color }} />;\n }\n if (name === 'stop' || altName === 'stop') {\n return <Stop style={{ color }} />;\n }\n if (name === 'pause' || altName === 'pause') {\n return <Pause style={{ color }} />;\n }\n if (name === 'forward' || name === 'next' || altName === 'forward' || altName === 'next') {\n return <FastForward style={{ color }} />;\n }\n if (name === 'rewind' || name === 'previous' || altName === 'rewind' || altName === 'previous') {\n return <FastRewind style={{ color }} />;\n }\n if (name === 'lamp' || name === 'light' || altName === 'lamp' || altName === 'light') {\n return <Lightbulb style={{ color }} />;\n }\n if (name === 'backlight' || altName === 'backlight') {\n return <Fluorescent style={{ color }} />;\n }\n if (name === 'dimmer' || altName === 'dimmer') {\n return <WbIncandescent style={{ color }} />;\n }\n if (name === 'socket' || altName === 'socket') {\n return <Power style={{ color }} />;\n }\n if (name === 'settings' || altName === 'settings') {\n return <Settings style={{ color }} />;\n }\n if (name === 'users' || name === 'group' || altName === 'users' || altName === 'group') {\n return <Group style={{ color }} />;\n }\n if (name === 'user' || altName === 'user') {\n return <Person style={{ color }} />;\n }\n if (name === 'update' || altName === 'update') {\n return <Upgrade style={{ color }} />;\n }\n if (name === 'qrcode' || altName === 'qrcode') {\n return <QrCode style={{ color }} />;\n }\n if (name === 'info' || altName === 'info') {\n return <Info style={{ color }} />;\n }\n if (name === 'lines' || altName === 'lines') {\n return <Article style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\nexport function renderControlIcon(\n action: ControlBase,\n colors?: { primary: string; secondary: string },\n value?: string | number | boolean | null,\n): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n let color = (value && action.colorOn) || action.color || (action.state ? 'primary' : 'inherit');\n\n if (colors) {\n if (color === 'primary') {\n color = colors.primary;\n } else if (color === 'secondary') {\n color = colors.secondary;\n }\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, color);\n }\n if (value && action.iconOn?.startsWith('data:image')) {\n return (\n <Icon\n src={action.iconOn}\n style={{ color }}\n />\n );\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, color);\n}\n\nexport function renderActionIcon(action: ActionBase): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, action.color);\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color: action.color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, action.color);\n}\n\nlet language: ioBroker.Languages;\n\n/**\n * Get Translation\n */\nexport function getTranslation(\n /** Text to translate */\n text: ioBroker.StringOrTranslated,\n noTranslation?: boolean,\n): string {\n language = language || I18n.getLanguage();\n\n if (typeof text === 'object') {\n return text[language] || text.en;\n }\n\n return noTranslation ? text : I18n.t(text);\n}\n"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { ActionBase, ControlBase } from './protocol/api';\nimport {\n Add,\n Article,\n Bluetooth,\n BluetoothDisabled,\n Delete,\n Edit,\n FastForward,\n FastRewind,\n Fluorescent,\n Group,\n Info,\n Lightbulb,\n Link as LinkIcon,\n LinkOff,\n NotListedLocation,\n Pause,\n Person,\n PlayArrow,\n Power,\n QrCode,\n QuestionMark,\n Refresh,\n Search,\n Settings,\n Stop,\n Visibility,\n Upgrade,\n WbIncandescent,\n Wifi,\n WifiOff,\n} from '@mui/icons-material';\n\nimport { I18n, Icon } from '@iobroker/adapter-react-v5';\n\n/**\n * Get Icon by font-awesome name. Do not use these names, use names from getIconByName\n *\n * @param icon font-awesome icon name\n * Only following font-awesome icons are supported:\n * - fa-trash-can, fa-trash\n * - fa-pen\n * - fa-redo-alt\n * - fa-plus\n * - fa-qrcode, qrcode\n * - fa-wifi\n * - fa-wifi-slash\n * - fa-bluetooth\n * - fa-bluetooth-slash\n * - fa-eye\n * - fa-search\n * - fa-unlink\n * - fa-link\n * - fa-search-location\n * - fa-play\n * - fa-stop\n * - fa-pause\n * @param color color of the icon\n */\nfunction getFaIcon(icon: string, color?: string): React.JSX.Element | null {\n const iconStyle = icon\n .split(' ')\n .map(s => s.trim())\n .filter(s => s !== 'fa-solid');\n\n if (iconStyle.includes('fa-trash-can') || iconStyle.includes('fa-trash')) {\n return <Delete style={{ color }} />;\n }\n if (iconStyle.includes('fa-pen')) {\n return <Edit style={{ color }} />;\n }\n if (iconStyle.includes('fa-redo-alt')) {\n return <Refresh style={{ color }} />;\n }\n if (iconStyle.includes('fa-plus')) {\n return <Add style={{ color }} />;\n }\n if (iconStyle.includes('fa-qrcode') || iconStyle.includes('qrcode')) {\n return <QrCode style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi')) {\n return <Wifi style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi-slash')) {\n return <WifiOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth')) {\n return <Bluetooth style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth-slash')) {\n return <BluetoothDisabled style={{ color }} />;\n }\n if (iconStyle.includes('fa-eye')) {\n return <Visibility style={{ color }} />;\n }\n if (iconStyle.includes('fa-search')) {\n return <Search style={{ color }} />;\n }\n if (iconStyle.includes('fa-unlink')) {\n return <LinkOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-link')) {\n return <LinkIcon style={{ color }} />;\n }\n if (iconStyle.includes('fa-search-location')) {\n return <NotListedLocation style={{ color }} />;\n }\n if (iconStyle.includes('fa-play')) {\n return <PlayArrow style={{ color }} />;\n }\n if (iconStyle.includes('fa-stop')) {\n return <Stop style={{ color }} />;\n }\n if (iconStyle.includes('fa-pause')) {\n return <Pause style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\n/**\n * Get Icon by name or by action\n *\n * @param name action name\n * possible action or icon names are\n * - edit, rename\n * - delete\n * - refresh\n * - newDevice, new, add\n * - discover, search\n * - unpairDevice, unpair\n * - pairDevice, pair\n * - identify\n * - play\n * - stop\n * - pause\n * - forward, next\n * - rewind, previous\n * - lamp, light\n * - backlight\n * - dimmer\n * - socket\n * - settings\n * - users, group\n * - user\n * - qrcode\n * - identify\n * - info\n * - lines\n * @param altName icon name\n * @param color color of the icon\n */\nfunction getIconByName(name: string, altName?: string, color?: string): React.JSX.Element | null {\n if (name === 'edit' || name === 'rename' || altName === 'edit' || altName === 'rename') {\n return <Edit style={{ color }} />;\n }\n if (name === 'delete' || altName === 'delete') {\n return <Delete style={{ color }} />;\n }\n if (name === 'refresh' || altName === 'refresh') {\n return <Refresh style={{ color }} />;\n }\n if (\n name === 'newDevice' ||\n name === 'new' ||\n name === 'add' ||\n altName === 'newDevice' ||\n altName === 'new' ||\n altName === 'add'\n ) {\n return <Add style={{ color }} />;\n }\n if (name === 'discover' || name === 'search' || altName === 'discover' || altName === 'search') {\n return <Search style={{ color }} />;\n }\n if (name === 'unpairDevice' || name === 'unpair' || altName === 'unpairDevice' || altName === 'unpair') {\n return <LinkOff style={{ color }} />;\n }\n if (name === 'pairDevice' || name === 'pair' || altName === 'pairDevice' || altName === 'pair') {\n return <LinkIcon style={{ color }} />;\n }\n if (name === 'identify' || altName === 'identify') {\n return <NotListedLocation style={{ color }} />;\n }\n if (name === 'play' || altName === 'play') {\n return <PlayArrow style={{ color }} />;\n }\n if (name === 'stop' || altName === 'stop') {\n return <Stop style={{ color }} />;\n }\n if (name === 'pause' || altName === 'pause') {\n return <Pause style={{ color }} />;\n }\n if (name === 'forward' || name === 'next' || altName === 'forward' || altName === 'next') {\n return <FastForward style={{ color }} />;\n }\n if (name === 'rewind' || name === 'previous' || altName === 'rewind' || altName === 'previous') {\n return <FastRewind style={{ color }} />;\n }\n if (name === 'lamp' || name === 'light' || altName === 'lamp' || altName === 'light') {\n return <Lightbulb style={{ color }} />;\n }\n if (name === 'backlight' || altName === 'backlight') {\n return <Fluorescent style={{ color }} />;\n }\n if (name === 'dimmer' || altName === 'dimmer') {\n return <WbIncandescent style={{ color }} />;\n }\n if (name === 'socket' || altName === 'socket') {\n return <Power style={{ color }} />;\n }\n if (name === 'settings' || altName === 'settings') {\n return <Settings style={{ color }} />;\n }\n if (name === 'users' || name === 'group' || altName === 'users' || altName === 'group') {\n return <Group style={{ color }} />;\n }\n if (name === 'user' || altName === 'user') {\n return <Person style={{ color }} />;\n }\n if (name === 'update' || altName === 'update') {\n return <Upgrade style={{ color }} />;\n }\n if (name === 'qrcode' || altName === 'qrcode') {\n return <QrCode style={{ color }} />;\n }\n if (name === 'info' || altName === 'info') {\n return <Info style={{ color }} />;\n }\n if (name === 'lines' || altName === 'lines') {\n return <Article style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\nexport function renderControlIcon(\n action: ControlBase,\n colors?: { primary: string; secondary: string },\n value?: string | number | boolean | null,\n): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n let color = (value && action.colorOn) || action.color || (action.state ? 'primary' : 'inherit');\n\n if (colors) {\n if (color === 'primary') {\n color = colors.primary;\n } else if (color === 'secondary') {\n color = colors.secondary;\n }\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, color);\n }\n if (value && action.iconOn?.startsWith('data:image')) {\n return (\n <Icon\n src={action.iconOn}\n style={{ color }}\n />\n );\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, color);\n}\n\nexport function renderActionIcon(action: ActionBase): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, action.color);\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color: action.color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, action.color);\n}\n\nlet language: ioBroker.Languages;\n\n/**\n * Get Translation\n */\nexport function getTranslation(\n /** Text to translate */\n text: ioBroker.StringOrTranslated,\n noTranslation?: boolean,\n): string {\n language = language || I18n.getLanguage();\n\n if (typeof text === 'object') {\n return text[language] || text.en;\n }\n\n return noTranslation ? text : I18n.t(text);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { ValueOrStateOrObject } from '@iobroker/dm-utils';
2
+ import type { StateOrObjectHandler } from './StateOrObjectHandler';
3
+ export declare function useStateOrObject<T extends ioBroker.StringOrTranslated | number | boolean>(item: ValueOrStateOrObject<T> | undefined, stateOrObjectHandler: StateOrObjectHandler): T | undefined;
package/build/hooks.js ADDED
@@ -0,0 +1,10 @@
1
+ import { useEffect, useState } from 'react';
2
+ export function useStateOrObject(item, stateOrObjectHandler) {
3
+ const [value, setValue] = useState();
4
+ useEffect(() => {
5
+ void stateOrObjectHandler.addListener(item, value => setValue(value));
6
+ return () => void stateOrObjectHandler.unsubscribe();
7
+ }, [stateOrObjectHandler, item]);
8
+ return value;
9
+ }
10
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"./src/","sources":["hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,UAAU,gBAAgB,CAC5B,IAAyC,EACzC,oBAA0C;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAK,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,oBAAoB,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,GAAG,EAAE,CAAC,KAAK,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type { ValueOrStateOrObject } from '@iobroker/dm-utils';\nimport { useEffect, useState } from 'react';\nimport type { StateOrObjectHandler } from './StateOrObjectHandler';\n\nexport function useStateOrObject<T extends ioBroker.StringOrTranslated | number | boolean>(\n item: ValueOrStateOrObject<T> | undefined,\n stateOrObjectHandler: StateOrObjectHandler,\n): T | undefined {\n const [value, setValue] = useState<T>();\n\n useEffect(() => {\n void stateOrObjectHandler.addListener(item, value => setValue(value));\n return () => void stateOrObjectHandler.unsubscribe();\n }, [stateOrObjectHandler, item]);\n\n return value;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "allDevicesFilteredOut": "Alle Geräte herausgefiltert",
3
- "apiVersionError": "Das Backend ist neuer als die GUI. Bitte aktualisieren Sie denAdmin.",
3
+ "apiVersionError": "Das Backend ist neuer als die GUI. Bitte aktualisieren Sie den Admin.",
4
4
  "batteryTooltip": "Batterie",
5
5
  "cancelButtonText": "Abbrechen",
6
6
  "closeButtonText": "Schließen",
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Bitte eingeben",
25
25
  "refreshInstanceList": "Instanzliste aktualisieren",
26
26
  "refreshTooltip": "Aktualisieren",
27
+ "selectInstanceText": "Bitte eine Instanz auswählen.",
27
28
  "toClipboard": "in die Zwischenablage kopiert",
28
29
  "yesButtonText": "Ja"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Please enter",
25
25
  "refreshInstanceList": "Refresh instance list",
26
26
  "refreshTooltip": "Refresh",
27
+ "selectInstanceText": "Please select instance",
27
28
  "toClipboard": "to clipboard",
28
29
  "yesButtonText": "Yes"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Por favor escribe",
25
25
  "refreshInstanceList": "Actualizar lista de instancias",
26
26
  "refreshTooltip": "Actualizar",
27
+ "selectInstanceText": "Por favor seleccione una instancia",
27
28
  "toClipboard": "al portapapeles",
28
29
  "yesButtonText": "Sí"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Entrez s'il vous plait",
25
25
  "refreshInstanceList": "Actualiser la liste des instances",
26
26
  "refreshTooltip": "Rafraîchir",
27
+ "selectInstanceText": "Veuillez sélectionner une instance",
27
28
  "toClipboard": "au presse-papiers",
28
29
  "yesButtonText": "Oui"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Prego entra",
25
25
  "refreshInstanceList": "Aggiorna l'elenco delle istanze",
26
26
  "refreshTooltip": "ricaricare",
27
+ "selectInstanceText": "Seleziona l'istanza",
27
28
  "toClipboard": "negli appunti",
28
29
  "yesButtonText": "SÌ"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Kom binnen alstublieft",
25
25
  "refreshInstanceList": "Ververs de exemplaarlijst",
26
26
  "refreshTooltip": "Vernieuwen",
27
+ "selectInstanceText": "Selecteer een instantie",
27
28
  "toClipboard": "naar klembord",
28
29
  "yesButtonText": "Ja"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Podaj",
25
25
  "refreshInstanceList": "Odśwież listę instancji",
26
26
  "refreshTooltip": "Odświeżać",
27
+ "selectInstanceText": "Proszę wybrać instancję",
27
28
  "toClipboard": "do schowka",
28
29
  "yesButtonText": "Tak"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Por favor, insira",
25
25
  "refreshInstanceList": "Atualizar lista de instâncias",
26
26
  "refreshTooltip": "Atualizar",
27
+ "selectInstanceText": "Por favor, selecione uma instância.",
27
28
  "toClipboard": "para a área de transferência",
28
29
  "yesButtonText": "Sim"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Пожалуйста входите",
25
25
  "refreshInstanceList": "Обновить список экземпляров",
26
26
  "refreshTooltip": "Обновить",
27
+ "selectInstanceText": "Пожалуйста, выберите экземпляр.",
27
28
  "toClipboard": "в буфер обмена",
28
29
  "yesButtonText": "Да"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "Будь ласка введіть",
25
25
  "refreshInstanceList": "Оновити список екземплярів",
26
26
  "refreshTooltip": "Оновити",
27
+ "selectInstanceText": "Будь ласка, виберіть екземпляр",
27
28
  "toClipboard": "в буфер обміну",
28
29
  "yesButtonText": "Так"
29
30
  }
@@ -24,6 +24,7 @@
24
24
  "pleaseEnterValueText": "请输入",
25
25
  "refreshInstanceList": "刷新实例列表",
26
26
  "refreshTooltip": "刷新",
27
+ "selectInstanceText": "请选择实例",
27
28
  "toClipboard": "到剪贴板",
28
29
  "yesButtonText": "是的"
29
30
  }
@@ -0,0 +1,29 @@
1
+ import { type Connection } from '@iobroker/adapter-react-v5';
2
+ import type { RetVal } from '@iobroker/dm-utils';
3
+ import type { ControlState, DeviceInfo, DmActionResponse, DmControlResponse, InstanceDetails } from './api';
4
+ export interface Message {
5
+ actionId?: string;
6
+ deviceId?: string;
7
+ value?: unknown;
8
+ origin?: number;
9
+ confirm?: boolean;
10
+ data?: any;
11
+ /** Inform backend, how long the frontend will wait for an answer */
12
+ timeout?: number;
13
+ }
14
+ export type CommandName = `dm:${string}`;
15
+ export type LoadDevicesCallback = (batch: DeviceInfo[], total?: number) => RetVal<void>;
16
+ export declare abstract class DmProtocolBase {
17
+ private readonly selectedInstance;
18
+ private readonly socket;
19
+ constructor(selectedInstance: string, socket: Connection);
20
+ abstract convertInstanceDetails(details: any): InstanceDetails;
21
+ abstract loadDevices(callback: LoadDevicesCallback): Promise<void>;
22
+ abstract sendAction(command: CommandName, messageToSend: Message): Promise<DmActionResponse | DmControlResponse>;
23
+ abstract sendControl(command: CommandName, messageToSend: {
24
+ deviceId: string;
25
+ controlId: string;
26
+ state?: ControlState;
27
+ }): Promise<DmControlResponse>;
28
+ protected send<T = any>(command: CommandName, data?: any): Promise<T>;
29
+ }
@@ -0,0 +1,12 @@
1
+ export class DmProtocolBase {
2
+ selectedInstance;
3
+ socket;
4
+ constructor(selectedInstance, socket) {
5
+ this.selectedInstance = selectedInstance;
6
+ this.socket = socket;
7
+ }
8
+ send(command, data) {
9
+ return this.socket.sendTo(this.selectedInstance, command, data);
10
+ }
11
+ }
12
+ //# sourceMappingURL=DmProtocolBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DmProtocolBase.js","sourceRoot":"./src/","sources":["protocol/DmProtocolBase.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAgB,cAAc;IAEX;IACA;IAFrB,YACqB,gBAAwB,EACxB,MAAkB;QADlB,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,WAAM,GAAN,MAAM,CAAY;IACpC,CAAC;IAgBM,IAAI,CAAU,OAAoB,EAAE,IAAU;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import { type Connection } from '@iobroker/adapter-react-v5';\nimport type { RetVal } from '@iobroker/dm-utils';\nimport type { ControlState, DeviceInfo, DmActionResponse, DmControlResponse, InstanceDetails } from './api';\n\nexport interface Message {\n actionId?: string;\n deviceId?: string;\n value?: unknown;\n origin?: number;\n confirm?: boolean;\n data?: any;\n /** Inform backend, how long the frontend will wait for an answer */\n timeout?: number;\n}\n\nexport type CommandName = `dm:${string}`;\n\nexport type LoadDevicesCallback = (batch: DeviceInfo[], total?: number) => RetVal<void>;\n\nexport abstract class DmProtocolBase {\n constructor(\n private readonly selectedInstance: string,\n private readonly socket: Connection,\n ) {}\n\n public abstract convertInstanceDetails(details: any): InstanceDetails;\n\n public abstract loadDevices(callback: LoadDevicesCallback): Promise<void>;\n\n public abstract sendAction(\n command: CommandName,\n messageToSend: Message,\n ): Promise<DmActionResponse | DmControlResponse>;\n\n public abstract sendControl(\n command: CommandName,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<DmControlResponse>;\n\n protected send<T = any>(command: CommandName, data?: any): Promise<T> {\n return this.socket.sendTo(this.selectedInstance, command, data);\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { ControlState, DmActionResponse, DmControlResponse, InstanceDetails } from './api';
2
+ import { DmProtocolBase, type CommandName, type LoadDevicesCallback, type Message } from './DmProtocolBase';
3
+ export declare class DmProtocolV1 extends DmProtocolBase {
4
+ convertInstanceDetails(details: any): InstanceDetails;
5
+ loadDevices(callback: LoadDevicesCallback): Promise<void>;
6
+ sendAction(command: CommandName, messageToSend: Message): Promise<DmActionResponse>;
7
+ sendControl(command: CommandName, messageToSend: {
8
+ deviceId: string;
9
+ controlId: string;
10
+ state?: ControlState;
11
+ }): Promise<DmControlResponse>;
12
+ }
@@ -0,0 +1,22 @@
1
+ import { DmProtocolBase } from './DmProtocolBase';
2
+ export class DmProtocolV1 extends DmProtocolBase {
3
+ convertInstanceDetails(details) {
4
+ if (details.apiVersion !== 'v1') {
5
+ throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);
6
+ }
7
+ const v1 = details;
8
+ return { ...v1, apiVersion: 'v3' };
9
+ }
10
+ async loadDevices(callback) {
11
+ // in V1, devices come in a single batch; thus we can simply call the callback with those
12
+ const devices = await this.send('dm:listDevices');
13
+ await callback(devices.map(d => ({ ...d, identifier: d.id })));
14
+ }
15
+ sendAction(command, messageToSend) {
16
+ return this.send(command, messageToSend);
17
+ }
18
+ sendControl(command, messageToSend) {
19
+ return this.send(command, messageToSend);
20
+ }
21
+ }
22
+ //# sourceMappingURL=DmProtocolV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DmProtocolV1.js","sourceRoot":"./src/","sources":["protocol/DmProtocolV1.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAA4D,MAAM,kBAAkB,CAAC;AAE5G,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC5B,sBAAsB,CAAC,OAAY;QAC/C,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,EAAE,GAAG,OAA6B,CAAC;QACzC,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,QAA6B;QAC3D,yFAAyF;QACzF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAkB,gBAAgB,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEe,UAAU,CAAC,OAAoB,EAAE,aAAsB;QACnE,OAAO,IAAI,CAAC,IAAI,CAAmB,OAAO,EAAE,aAAa,CAAC,CAAC;IAC/D,CAAC;IAEM,WAAW,CACd,OAAoB,EACpB,aAA4E;QAE5E,OAAO,IAAI,CAAC,IAAI,CAAoB,OAAO,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;CACJ","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type * as V1 from '@iobroker/dm-utils-v1/build/types/api';\nimport type { ControlState, DeviceInfo, DmActionResponse, DmControlResponse, InstanceDetails } from './api';\nimport { DmProtocolBase, type CommandName, type LoadDevicesCallback, type Message } from './DmProtocolBase';\n\nexport class DmProtocolV1 extends DmProtocolBase {\n public override convertInstanceDetails(details: any): InstanceDetails {\n if (details.apiVersion !== 'v1') {\n throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);\n }\n\n const v1 = details as V1.InstanceDetails;\n return { ...v1, apiVersion: 'v3' };\n }\n\n public override async loadDevices(callback: LoadDevicesCallback): Promise<void> {\n // in V1, devices come in a single batch; thus we can simply call the callback with those\n const devices = await this.send<V1.DeviceInfo[]>('dm:listDevices');\n await callback(devices.map<DeviceInfo>(d => ({ ...d, identifier: d.id })));\n }\n\n public override sendAction(command: CommandName, messageToSend: Message): Promise<DmActionResponse> {\n return this.send<DmActionResponse>(command, messageToSend);\n }\n\n public sendControl(\n command: CommandName,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<DmControlResponse> {\n return this.send<DmControlResponse>(command, messageToSend);\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { InstanceDetails } from './api';
2
+ import { DmProtocolV1 } from './DmProtocolV1';
3
+ export declare class DmProtocolV2 extends DmProtocolV1 {
4
+ convertInstanceDetails(details: any): InstanceDetails;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { DmProtocolV1 } from './DmProtocolV1';
2
+ export class DmProtocolV2 extends DmProtocolV1 {
3
+ convertInstanceDetails(details) {
4
+ if (details.apiVersion !== 'v2') {
5
+ throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);
6
+ }
7
+ const v1 = details;
8
+ return { ...v1, apiVersion: 'v3' };
9
+ }
10
+ }
11
+ //# sourceMappingURL=DmProtocolV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DmProtocolV2.js","sourceRoot":"./src/","sources":["protocol/DmProtocolV2.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,OAAO,YAAa,SAAQ,YAAY;IAC1B,sBAAsB,CAAC,OAAY;QAC/C,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,EAAE,GAAG,OAA6B,CAAC;QACzC,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;CACJ","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type * as V1 from '@iobroker/dm-utils-v1/build/types/api';\nimport type { InstanceDetails } from './api';\nimport { DmProtocolV1 } from './DmProtocolV1';\n\nexport class DmProtocolV2 extends DmProtocolV1 {\n public override convertInstanceDetails(details: any): InstanceDetails {\n if (details.apiVersion !== 'v2') {\n throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);\n }\n\n const v1 = details as V1.InstanceDetails;\n return { ...v1, apiVersion: 'v3' };\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { ControlState, DmActionResponse, DmControlResponse, InstanceDetails } from './api';
2
+ import { type CommandName, DmProtocolBase, type LoadDevicesCallback, type Message } from './DmProtocolBase';
3
+ export declare class DmProtocolV3 extends DmProtocolBase {
4
+ convertInstanceDetails(details: any): InstanceDetails;
5
+ loadDevices(callback: LoadDevicesCallback): Promise<void>;
6
+ sendAction(command: CommandName, messageToSend: Message): Promise<DmActionResponse>;
7
+ sendControl(command: CommandName, messageToSend: {
8
+ deviceId: string;
9
+ controlId: string;
10
+ state?: ControlState;
11
+ }): Promise<DmControlResponse>;
12
+ }
@@ -0,0 +1,28 @@
1
+ import { DmProtocolBase } from './DmProtocolBase';
2
+ export class DmProtocolV3 extends DmProtocolBase {
3
+ convertInstanceDetails(details) {
4
+ if (details.apiVersion !== 'v3') {
5
+ throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);
6
+ }
7
+ return details;
8
+ }
9
+ async loadDevices(callback) {
10
+ let response = await this.send('dm:loadDevices');
11
+ let total = response.total;
12
+ while (response.add) {
13
+ await callback(response.add, total);
14
+ if (!response.next) {
15
+ break;
16
+ }
17
+ response = await this.send('dm:deviceLoadProgress', response.next);
18
+ total = response.total ?? total;
19
+ }
20
+ }
21
+ sendAction(command, messageToSend) {
22
+ return this.send(command, messageToSend);
23
+ }
24
+ sendControl(command, messageToSend) {
25
+ return this.send(command, messageToSend);
26
+ }
27
+ }
28
+ //# sourceMappingURL=DmProtocolV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DmProtocolV3.js","sourceRoot":"./src/","sources":["protocol/DmProtocolV3.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAA0C,MAAM,kBAAkB,CAAC;AAE5G,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC5B,sBAAsB,CAAC,OAAY;QAC/C,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,QAA6B;QAC3D,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAsB,gBAAgB,CAAC,CAAC;QACtE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM;YACV,CAAC;YACD,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAsB,uBAAuB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxF,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QACpC,CAAC;IACL,CAAC;IAEe,UAAU,CAAC,OAAoB,EAAE,aAAsB;QACnE,OAAO,IAAI,CAAC,IAAI,CAAmB,OAAO,EAAE,aAAa,CAAC,CAAC;IAC/D,CAAC;IAEM,WAAW,CACd,OAAoB,EACpB,aAA4E;QAE5E,OAAO,IAAI,CAAC,IAAI,CAAoB,OAAO,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;CACJ","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { ControlState, DeviceLoadIncrement, DmActionResponse, DmControlResponse, InstanceDetails } from './api';\nimport { type CommandName, DmProtocolBase, type LoadDevicesCallback, type Message } from './DmProtocolBase';\n\nexport class DmProtocolV3 extends DmProtocolBase {\n public override convertInstanceDetails(details: any): InstanceDetails {\n if (details.apiVersion !== 'v3') {\n throw new Error(`Unsupported API version: ${details.apiVersion ?? 'unknown'}`);\n }\n\n return details;\n }\n\n public override async loadDevices(callback: LoadDevicesCallback): Promise<void> {\n let response = await this.send<DeviceLoadIncrement>('dm:loadDevices');\n let total = response.total;\n while (response.add) {\n await callback(response.add, total);\n if (!response.next) {\n break;\n }\n response = await this.send<DeviceLoadIncrement>('dm:deviceLoadProgress', response.next);\n total = response.total ?? total;\n }\n }\n\n public override sendAction(command: CommandName, messageToSend: Message): Promise<DmActionResponse> {\n return this.send<DmActionResponse>(command, messageToSend);\n }\n\n public sendControl(\n command: CommandName,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<DmControlResponse> {\n return this.send<DmControlResponse>(command, messageToSend);\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { ControlState, DmActionResponse, DmControlResponse, InstanceDetails } from './api';
2
+ import { type CommandName, DmProtocolBase, type LoadDevicesCallback, type Message } from './DmProtocolBase';
3
+ export declare class UnknownDmProtocol extends DmProtocolBase {
4
+ constructor();
5
+ convertInstanceDetails(details: any): InstanceDetails;
6
+ loadDevices(_callback: LoadDevicesCallback): Promise<void>;
7
+ sendAction(_command: CommandName, _messageToSend: Message): Promise<DmActionResponse>;
8
+ sendControl(_command: CommandName, _messageToSend: {
9
+ deviceId: string;
10
+ controlId: string;
11
+ state?: ControlState;
12
+ }): Promise<DmControlResponse>;
13
+ }
@@ -0,0 +1,20 @@
1
+ import { DmProtocolBase } from './DmProtocolBase';
2
+ export class UnknownDmProtocol extends DmProtocolBase {
3
+ constructor() {
4
+ // as socket is never used in this protocol, we can use this ugly hack:
5
+ super('', undefined);
6
+ }
7
+ convertInstanceDetails(details) {
8
+ return details;
9
+ }
10
+ loadDevices(_callback) {
11
+ throw new Error('Protocol version unknown');
12
+ }
13
+ sendAction(_command, _messageToSend) {
14
+ throw new Error('Protocol version unknown');
15
+ }
16
+ sendControl(_command, _messageToSend) {
17
+ throw new Error('Protocol version unknown');
18
+ }
19
+ }
20
+ //# sourceMappingURL=UnknownDmProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownDmProtocol.js","sourceRoot":"./src/","sources":["protocol/UnknownDmProtocol.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAA0C,MAAM,kBAAkB,CAAC;AAE5G,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IACjD;QACI,uEAAuE;QACvE,KAAK,CAAC,EAAE,EAAE,SAAgB,CAAC,CAAC;IAChC,CAAC;IAEe,sBAAsB,CAAC,OAAY;QAC/C,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,WAAW,CAAC,SAA8B;QAC7C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IAEM,UAAU,CAAC,QAAqB,EAAE,cAAuB;QAC5D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IAEM,WAAW,CACd,QAAqB,EACrB,cAA6E;QAE7E,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;CACJ","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { ControlState, DmActionResponse, DmControlResponse, InstanceDetails } from './api';\nimport { type CommandName, DmProtocolBase, type LoadDevicesCallback, type Message } from './DmProtocolBase';\n\nexport class UnknownDmProtocol extends DmProtocolBase {\n constructor() {\n // as socket is never used in this protocol, we can use this ugly hack:\n super('', undefined as any);\n }\n\n public override convertInstanceDetails(details: any): InstanceDetails {\n return details;\n }\n\n public loadDevices(_callback: LoadDevicesCallback): Promise<void> {\n throw new Error('Protocol version unknown');\n }\n\n public sendAction(_command: CommandName, _messageToSend: Message): Promise<DmActionResponse> {\n throw new Error('Protocol version unknown');\n }\n\n public sendControl(\n _command: CommandName,\n _messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<DmControlResponse> {\n throw new Error('Protocol version unknown');\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export type * from '@iobroker/dm-utils/build/types/api';
2
+ export type { ActionButton, ConfigConnectionType, ControlBase, ControlState, DeviceDetails, DeviceId, DeviceStatus, ErrorResponse, JsonFormSchema, ProgressUpdate, } from '@iobroker/dm-utils';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"./src/","sources":["protocol/api.ts"],"names":[],"mappings":"","sourcesContent":["export type * from '@iobroker/dm-utils/build/types/api';\n\nexport type {\n ActionButton,\n ConfigConnectionType,\n ControlBase,\n ControlState,\n DeviceDetails,\n DeviceId,\n DeviceStatus,\n ErrorResponse,\n JsonFormSchema,\n ProgressUpdate,\n} from '@iobroker/dm-utils';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iobroker/dm-gui-components",
3
- "version": "8.0.9",
3
+ "version": "9.0.0",
4
4
  "description": "ReactJS components to develop admin interface for ioBroker device manager.",
5
5
  "author": {
6
6
  "name": "Jey Cee",
@@ -52,14 +52,15 @@
52
52
  },
53
53
  "homepage": "https://github.com/ioBroker/dm-gui-components#readme",
54
54
  "dependencies": {
55
- "@iobroker/adapter-react-v5": "^8.0.17",
56
- "@iobroker/json-config": "^8.0.8"
55
+ "@iobroker/adapter-react-v5": "^8.0.21",
56
+ "@iobroker/json-config": "^8.1.11"
57
57
  },
58
58
  "devDependencies": {
59
- "@alcalzone/release-script": "^5.0.0",
60
- "@alcalzone/release-script-plugin-license": "^4.0.0",
61
- "@iobroker/build-tools": "^2.0.15",
62
- "@iobroker/dm-utils": "^1.0.16",
59
+ "@alcalzone/release-script": "^5.1.1",
60
+ "@alcalzone/release-script-plugin-license": "^5.1.1",
61
+ "@iobroker/build-tools": "^3.0.1",
62
+ "@iobroker/dm-utils": "^3.0.0",
63
+ "@iobroker/dm-utils-v1": "npm:@iobroker/dm-utils@^1.0.16",
63
64
  "@iobroker/eslint-config": "^2.2.0",
64
65
  "tsc-alias": "^1.8.16",
65
66
  "typescript": "~5.9.3"