@iobroker/gui-components 8.0.2 → 10.0.1

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 (160) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +834 -543
  3. package/build/AdminConnection.js.map +1 -1
  4. package/build/Components/404.js +13 -13
  5. package/build/Components/404.js.map +1 -1
  6. package/build/Components/ColorPicker.js.map +1 -1
  7. package/build/Components/ComplexCron.js +2 -2
  8. package/build/Components/ComplexCron.js.map +1 -1
  9. package/build/Components/CopyToClipboard.js.map +1 -1
  10. package/build/Components/CustomModal.js +1 -1
  11. package/build/Components/CustomModal.js.map +1 -1
  12. package/build/Components/DeviceType/DeviceTypeIcon.js +1 -0
  13. package/build/Components/DeviceType/DeviceTypeIcon.js.map +1 -1
  14. package/build/Components/DeviceType/DeviceTypeSelector.js +2 -2
  15. package/build/Components/DeviceType/DeviceTypeSelector.js.map +1 -1
  16. package/build/Components/DeviceType/i18n/de.json +1 -0
  17. package/build/Components/DeviceType/i18n/en.json +1 -0
  18. package/build/Components/DeviceType/i18n/fr.json +1 -0
  19. package/build/Components/DeviceType/i18n/it.json +1 -0
  20. package/build/Components/DeviceType/i18n/nl.json +1 -0
  21. package/build/Components/DeviceType/i18n/pl.json +1 -0
  22. package/build/Components/DeviceType/i18n/pt.json +1 -0
  23. package/build/Components/DeviceType/i18n/ru.json +1 -0
  24. package/build/Components/DeviceType/i18n/uk.json +1 -0
  25. package/build/Components/DeviceType/i18n/zh-cn.json +1 -0
  26. package/build/Components/FileBrowser.d.ts +39 -4
  27. package/build/Components/FileBrowser.js +104 -11
  28. package/build/Components/FileBrowser.js.map +1 -1
  29. package/build/Components/FileViewer.js +2 -4
  30. package/build/Components/FileViewer.js.map +1 -1
  31. package/build/Components/Icon.d.ts +1 -3
  32. package/build/Components/Icon.js +11 -11
  33. package/build/Components/Icon.js.map +1 -1
  34. package/build/Components/Image.js +8 -4
  35. package/build/Components/Image.js.map +1 -1
  36. package/build/Components/InfoBox.js +1 -1
  37. package/build/Components/InfoBox.js.map +1 -1
  38. package/build/Components/IobUri.js +5 -5
  39. package/build/Components/IobUri.js.map +1 -1
  40. package/build/Components/Loader.d.ts +2 -3
  41. package/build/Components/Loader.js +25 -257
  42. package/build/Components/Loader.js.map +1 -1
  43. package/build/Components/Loaders/Community.d.ts +31 -0
  44. package/build/Components/Loaders/Community.js +265 -0
  45. package/build/Components/Loaders/Community.js.map +1 -0
  46. package/build/Components/Loaders/HA.d.ts +17 -0
  47. package/build/Components/Loaders/HA.js +99 -0
  48. package/build/Components/Loaders/HA.js.map +1 -0
  49. package/build/Components/Loaders/MV.js.map +1 -1
  50. package/build/Components/Loaders/NW.d.ts +17 -0
  51. package/build/Components/Loaders/NW.js +70 -0
  52. package/build/Components/Loaders/NW.js.map +1 -0
  53. package/build/Components/Loaders/PT.js +103 -103
  54. package/build/Components/Loaders/PT.js.map +1 -1
  55. package/build/Components/Loaders/Vendor.js +7 -7
  56. package/build/Components/Loaders/Vendor.js.map +1 -1
  57. package/build/Components/MDUtils.js.map +1 -1
  58. package/build/Components/ObjectBrowser.d.ts +25 -406
  59. package/build/Components/ObjectBrowser.js +460 -1543
  60. package/build/Components/ObjectBrowser.js.map +1 -1
  61. package/build/Components/Router.js.map +1 -1
  62. package/build/Components/SaveCloseButtons.js.map +1 -1
  63. package/build/Components/Schedule.d.ts +27 -1
  64. package/build/Components/Schedule.js +60 -50
  65. package/build/Components/Schedule.js.map +1 -1
  66. package/build/Components/SelectWithIcon.js +1 -1
  67. package/build/Components/SelectWithIcon.js.map +1 -1
  68. package/build/Components/SimpleCron/cronText.js.map +1 -1
  69. package/build/Components/SimpleCron/index.js +3 -3
  70. package/build/Components/SimpleCron/index.js.map +1 -1
  71. package/build/Components/TabContainer.js +7 -2
  72. package/build/Components/TabContainer.js.map +1 -1
  73. package/build/Components/TabContent.d.ts +1 -1
  74. package/build/Components/TabContent.js +5 -5
  75. package/build/Components/TabContent.js.map +1 -1
  76. package/build/Components/TabHeader.js +2 -2
  77. package/build/Components/TabHeader.js.map +1 -1
  78. package/build/Components/TableResize.js.map +1 -1
  79. package/build/Components/TextWithIcon.js.map +1 -1
  80. package/build/Components/TreeTable.d.ts +1 -0
  81. package/build/Components/TreeTable.js +16 -6
  82. package/build/Components/TreeTable.js.map +1 -1
  83. package/build/Components/UploadImage.js +305 -305
  84. package/build/Components/UploadImage.js.map +1 -1
  85. package/build/Components/Utils.d.ts +17 -3
  86. package/build/Components/Utils.js +167 -9
  87. package/build/Components/Utils.js.map +1 -1
  88. package/build/Components/objectBrowser.types.d.ts +496 -0
  89. package/build/Components/objectBrowserUtils.d.ts +170 -0
  90. package/build/Components/objectBrowserUtils.js +1375 -0
  91. package/build/Components/objectBrowserUtils.js.map +1 -0
  92. package/build/Connection.js.map +1 -1
  93. package/build/Dialogs/ComplexCron.js.map +1 -1
  94. package/build/Dialogs/Confirm.js.map +1 -1
  95. package/build/Dialogs/Cron.js.map +1 -1
  96. package/build/Dialogs/Error.js.map +1 -1
  97. package/build/Dialogs/Message.js.map +1 -1
  98. package/build/Dialogs/SelectFile.d.ts +1 -1
  99. package/build/Dialogs/SelectFile.js +1 -1
  100. package/build/Dialogs/SelectFile.js.map +1 -1
  101. package/build/Dialogs/SelectID.d.ts +1 -1
  102. package/build/Dialogs/SelectID.js +1 -1
  103. package/build/Dialogs/SelectID.js.map +1 -1
  104. package/build/Dialogs/SimpleCron.js.map +1 -1
  105. package/build/Dialogs/TextInput.js +1 -1
  106. package/build/Dialogs/TextInput.js.map +1 -1
  107. package/build/GenericApp.d.ts +6 -4
  108. package/build/GenericApp.js +22 -16
  109. package/build/GenericApp.js.map +1 -1
  110. package/build/Prompt.js +7 -7
  111. package/build/Prompt.js.map +1 -1
  112. package/build/Theme.js +57 -11
  113. package/build/Theme.js.map +1 -1
  114. package/build/assets/devices/parseNames.js +1 -0
  115. package/build/assets/devices/parseNames.js.map +1 -1
  116. package/build/assets/rooms/parseNames.js +1 -0
  117. package/build/assets/rooms/parseNames.js.map +1 -1
  118. package/build/dictionary.js.map +1 -1
  119. package/build/globals.d.ts +2 -0
  120. package/build/i18n/de.json +5 -66
  121. package/build/i18n/en.json +5 -66
  122. package/build/i18n/es.json +5 -66
  123. package/build/i18n/fr.json +5 -66
  124. package/build/i18n/it.json +5 -61
  125. package/build/i18n/nl.json +5 -61
  126. package/build/i18n/pl.json +5 -61
  127. package/build/i18n/pt.json +5 -61
  128. package/build/i18n/ru.json +5 -61
  129. package/build/i18n/uk.json +5 -61
  130. package/build/i18n/zh-cn.json +5 -61
  131. package/build/i18n.js +12 -15
  132. package/build/i18n.js.map +1 -1
  133. package/build/index.css +56 -56
  134. package/build/index.d.ts +9 -4
  135. package/build/index.js +5 -2
  136. package/build/index.js.map +1 -1
  137. package/build/modulefederation.admin.config.d.ts +1 -0
  138. package/build/modulefederation.admin.config.js +1 -1
  139. package/build/modulefederation.admin.config.js.map +1 -1
  140. package/build/types.d.ts +4 -84
  141. package/i18n/de.json +5 -66
  142. package/i18n/en.json +5 -66
  143. package/i18n/es.json +5 -66
  144. package/i18n/fr.json +5 -66
  145. package/i18n/it.json +5 -61
  146. package/i18n/nl.json +5 -61
  147. package/i18n/pl.json +5 -61
  148. package/i18n/pt.json +5 -61
  149. package/i18n/ru.json +5 -61
  150. package/i18n/uk.json +5 -61
  151. package/i18n/zh-cn.json +5 -61
  152. package/index.css +56 -56
  153. package/modulefederation.admin.config.d.ts +1 -0
  154. package/modulefederation.admin.config.js +1 -2
  155. package/package.json +50 -35
  156. package/tasksExample.ts +93 -0
  157. package/build/LegacyConnection.d.ts +0 -938
  158. package/build/LegacyConnection.js +0 -2849
  159. package/build/LegacyConnection.js.map +0 -1
  160. package/tasksExample.js +0 -91
@@ -1 +1 @@
1
- {"version":3,"file":"PT.js","sourceRoot":"./src/","sources":["Components/Loaders/PT.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,oBAAoB;AACpB,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGhB,CAAC;AAeF;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;YAClD,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;IAChE,OAAO,CACH,6BACI,SAAS,EAAE,gCAAgC,SAAS,EAAE,EACtD,KAAK,EAAE;YACH,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,OAAO,MAAM,CAAC,sBAAsB,GAAG;oBACzC,CAAC,CAAC,SAAS;YACrB,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,MAAM,CAAC,sBAAsB;oBAC/B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM;wBAC1B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM;YACpB,cAAc,EAAE,OAAO;SAC1B;QAED,6BACI,SAAS,EAAC,aAAa,EACvB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAEpC,6BAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;gBACnC,6BAAK,SAAS,EAAC,gCAAgC,GAAG;gBAClD,6BAAK,SAAS,EAAC,iCAAiC,GAAG;gBACnD,6BAAK,SAAS,EAAC,+BAA+B,GAAG,CAC/C,CACJ,CACJ,CACT,CAAC;AACN,CAAC","sourcesContent":["/**\r\n * Copyright 2021-2024 ioBroker GmbH\r\n *\r\n * MIT License\r\n *\r\n */\r\nimport React, { useEffect } from 'react';\r\n\r\nimport type { ThemeType, ThemeName } from '../../types';\r\n\r\n// import './PT.css'\r\nconst ptStyles = `\r\n.logo-background-light, .logo-background-colored {\r\n background: white;\r\n}\r\n.logo-background-dark, .logo-background-blue {\r\n background: black;\r\n}\r\n.pt-logo-div {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n -ms-transform: translateX(-50%) translateY(-50%);\r\n -webkit-transform: translate(-50%,-50%);\r\n transform: translate(-50%,-50%);\r\n z-index: 2;\r\n}\r\n.pt-logo-border {\r\n border-style: solid;\r\n box-sizing: border-box;\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n}\r\n.pt-loader-block {\r\n height: 65px;\r\n width: 74px;\r\n border-radius: 15px;\r\n position: absolute;\r\n box-sizing: content-box;\r\n}\r\n.pt-loader-blue {\r\n border: 9px solid #0F99DE;\r\n transform: rotate(5grad);\r\n left: 93px;\r\n top: 0;\r\n animation: spin-blue 5s ease-in-out infinite;\r\n}\r\n.pt-loader-green {\r\n border: 9px solid #88A536;\r\n transform: rotate(-6grad);\r\n left: 70px;\r\n top: 58px;\r\n animation: spin-green 5s ease-in-out infinite;\r\n}\r\n.pt-loader-red {\r\n border: 9px solid #BD1B24;\r\n transform: rotate(-15grad);\r\n left: 24px;\r\n top: 100px;\r\n animation: spin-red 5s ease-in-out infinite;\r\n}\r\n\r\n@keyframes spin-blue {\r\n 0% {\r\n transform: rotate(5deg);\r\n }\r\n 25% {\r\n transform: rotate(185deg);\r\n }\r\n 50% {\r\n transform: rotate(185deg);\r\n }\r\n 75% {\r\n transform: rotate(185deg);\r\n }\r\n 100% {\r\n transform: rotate(185deg);\r\n }\r\n}\r\n@keyframes spin-green {\r\n 0% {\r\n transform: rotate(-6deg);\r\n }\r\n 25% {\r\n transform: rotate(-6deg);\r\n }\r\n 50% {\r\n transform: rotate(174deg);\r\n }\r\n 75% {\r\n transform: rotate(174deg);\r\n }\r\n 100% {\r\n transform: rotate(-6deg);\r\n }\r\n}\r\n@keyframes spin-red {\r\n 0% {\r\n transform: rotate(-15deg);\r\n }\r\n 25% {\r\n transform: rotate(-15deg);\r\n }\r\n 50% {\r\n transform: rotate(-15deg);\r\n }\r\n 75% {\r\n transform: rotate(165deg);\r\n }\r\n 100% {\r\n transform: rotate(165deg);\r\n }\r\n}\r\n`;\r\n\r\ninterface LoaderPTProps {\r\n /** The size in pixels of this loader. */\r\n size?: number;\r\n /** The chosen theme type. */\r\n themeType?: ThemeType;\r\n /** The chosen theme name. */\r\n themeName?: ThemeName;\r\n /** Background color */\r\n backgroundColor?: string;\r\n /** Background image URL */\r\n backgroundImage?: string;\r\n}\r\n\r\n/**\r\n * A loader component with the vendor-specific logo\r\n *\r\n * @param props Properties of the loader of type LoaderPTProps\r\n */\r\nexport function LoaderPT(props: LoaderPTProps): React.JSX.Element {\r\n const size = props.size || 200;\r\n useEffect(() => {\r\n if (!window.document.getElementById('pt-iobroker-component')) {\r\n const style = window.document.createElement('style');\r\n style.setAttribute('id', 'pt-iobroker-component');\r\n style.innerHTML = ptStyles;\r\n window.document.head.appendChild(style);\r\n }\r\n }, []);\r\n\r\n const themeName = props.themeType || props.themeName || 'light';\r\n return (\r\n <div\r\n className={`pt-logo-back logo-background-${themeName}`}\r\n style={{\r\n backgroundImage:\r\n props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'\r\n ? props.backgroundImage\r\n : window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'\r\n ? `url(${window.loadingBackgroundImage})`\r\n : undefined,\r\n backgroundColor:\r\n props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'\r\n ? props.backgroundColor\r\n : window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'\r\n ? window.loadingBackgroundColor\r\n : props.themeType === 'dark'\r\n ? '#000'\r\n : '#FFF',\r\n backgroundSize: 'cover',\r\n }}\r\n >\r\n <div\r\n className=\"pt-logo-div\"\r\n style={{ width: size, height: size }}\r\n >\r\n <div style={{ width: 200, height: 200 }}>\r\n <div className=\"pt-loader-blue pt-loader-block\" />\r\n <div className=\"pt-loader-green pt-loader-block\" />\r\n <div className=\"pt-loader-red pt-loader-block\" />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"PT.js","sourceRoot":"./src/","sources":["Components/Loaders/PT.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,oBAAoB;AACpB,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGhB,CAAC;AAeF;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;YAClD,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;IAChE,OAAO,CACH,6BACI,SAAS,EAAE,gCAAgC,SAAS,EAAE,EACtD,KAAK,EAAE;YACH,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,OAAO,MAAM,CAAC,sBAAsB,GAAG;oBACzC,CAAC,CAAC,SAAS;YACrB,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,MAAM,CAAC,sBAAsB;oBAC/B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM;wBAC1B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM;YACpB,cAAc,EAAE,OAAO;SAC1B;QAED,6BACI,SAAS,EAAC,aAAa,EACvB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAEpC,6BAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;gBACnC,6BAAK,SAAS,EAAC,gCAAgC,GAAG;gBAClD,6BAAK,SAAS,EAAC,iCAAiC,GAAG;gBACnD,6BAAK,SAAS,EAAC,+BAA+B,GAAG,CAC/C,CACJ,CACJ,CACT,CAAC;AACN,CAAC","sourcesContent":["/**\n * Copyright 2021-2024 ioBroker GmbH\n *\n * MIT License\n *\n */\nimport React, { useEffect } from 'react';\n\nimport type { ThemeType, ThemeName } from '../../types';\n\n// import './PT.css'\nconst ptStyles = `\n.logo-background-light, .logo-background-colored {\n background: white;\n}\n.logo-background-dark, .logo-background-blue {\n background: black;\n}\n.pt-logo-div {\n position: absolute;\n top: 50%;\n left: 50%;\n -ms-transform: translateX(-50%) translateY(-50%);\n -webkit-transform: translate(-50%,-50%);\n transform: translate(-50%,-50%);\n z-index: 2;\n}\n.pt-logo-border {\n border-style: solid;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n position: absolute;\n}\n.pt-loader-block {\n height: 65px;\n width: 74px;\n border-radius: 15px;\n position: absolute;\n box-sizing: content-box;\n}\n.pt-loader-blue {\n border: 9px solid #0F99DE;\n transform: rotate(5grad);\n left: 93px;\n top: 0;\n animation: spin-blue 5s ease-in-out infinite;\n}\n.pt-loader-green {\n border: 9px solid #88A536;\n transform: rotate(-6grad);\n left: 70px;\n top: 58px;\n animation: spin-green 5s ease-in-out infinite;\n}\n.pt-loader-red {\n border: 9px solid #BD1B24;\n transform: rotate(-15grad);\n left: 24px;\n top: 100px;\n animation: spin-red 5s ease-in-out infinite;\n}\n\n@keyframes spin-blue {\n 0% {\n transform: rotate(5deg);\n }\n 25% {\n transform: rotate(185deg);\n }\n 50% {\n transform: rotate(185deg);\n }\n 75% {\n transform: rotate(185deg);\n }\n 100% {\n transform: rotate(185deg);\n }\n}\n@keyframes spin-green {\n 0% {\n transform: rotate(-6deg);\n }\n 25% {\n transform: rotate(-6deg);\n }\n 50% {\n transform: rotate(174deg);\n }\n 75% {\n transform: rotate(174deg);\n }\n 100% {\n transform: rotate(-6deg);\n }\n}\n@keyframes spin-red {\n 0% {\n transform: rotate(-15deg);\n }\n 25% {\n transform: rotate(-15deg);\n }\n 50% {\n transform: rotate(-15deg);\n }\n 75% {\n transform: rotate(165deg);\n }\n 100% {\n transform: rotate(165deg);\n }\n}\n`;\n\ninterface LoaderPTProps {\n /** The size in pixels of this loader. */\n size?: number;\n /** The chosen theme type. */\n themeType?: ThemeType;\n /** The chosen theme name. */\n themeName?: ThemeName;\n /** Background color */\n backgroundColor?: string;\n /** Background image URL */\n backgroundImage?: string;\n}\n\n/**\n * A loader component with the vendor-specific logo\n *\n * @param props Properties of the loader of type LoaderPTProps\n */\nexport function LoaderPT(props: LoaderPTProps): React.JSX.Element {\n const size = props.size || 200;\n useEffect(() => {\n if (!window.document.getElementById('pt-iobroker-component')) {\n const style = window.document.createElement('style');\n style.setAttribute('id', 'pt-iobroker-component');\n style.innerHTML = ptStyles;\n window.document.head.appendChild(style);\n }\n }, []);\n\n const themeName = props.themeType || props.themeName || 'light';\n return (\n <div\n className={`pt-logo-back logo-background-${themeName}`}\n style={{\n backgroundImage:\n props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'\n ? props.backgroundImage\n : window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'\n ? `url(${window.loadingBackgroundImage})`\n : undefined,\n backgroundColor:\n props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'\n ? props.backgroundColor\n : window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'\n ? window.loadingBackgroundColor\n : props.themeType === 'dark'\n ? '#000'\n : '#FFF',\n backgroundSize: 'cover',\n }}\n >\n <div\n className=\"pt-logo-div\"\n style={{ width: size, height: size }}\n >\n <div style={{ width: 200, height: 200 }}>\n <div className=\"pt-loader-blue pt-loader-block\" />\n <div className=\"pt-loader-green pt-loader-block\" />\n <div className=\"pt-loader-red pt-loader-block\" />\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -7,13 +7,13 @@
7
7
  import React, { useEffect } from 'react';
8
8
  import { CircularProgress } from '@mui/material';
9
9
  // import './Vendor.css'
10
- const vendorStyles = `
11
- .logo-background-light, .logo-background-colored {
12
- background: white;
13
- }
14
- .logo-background-dark, .logo-background-blue {
15
- background: black;
16
- }
10
+ const vendorStyles = `
11
+ .logo-background-light, .logo-background-colored {
12
+ background: white;
13
+ }
14
+ .logo-background-dark, .logo-background-blue {
15
+ background: black;
16
+ }
17
17
  `;
18
18
  export function LoaderVendor(props) {
19
19
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"Vendor.js","sourceRoot":"./src/","sources":["Components/Loaders/Vendor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,wBAAwB;AACxB,MAAM,YAAY,GAAG;;;;;;;CAOpB,CAAC;AAeF,MAAM,UAAU,YAAY,CAAC,KAAwB;IACjD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YACtD,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;IAC5D,OAAO,CACH,6BACI,SAAS,EAAE,oCAAoC,KAAK,EAAE,EACtD,KAAK,EAAE;YACH,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,OAAO,MAAM,CAAC,sBAAsB,GAAG;oBACzC,CAAC,CAAC,SAAS;YACrB,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,MAAM,CAAC,sBAAsB;oBAC/B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM;wBAC1B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM;YACpB,cAAc,EAAE,OAAO;SAC1B;QAED,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAI;QAC/B,oBAAC,gBAAgB,IACb,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG,EACvB,SAAS,EAAE,CAAC,GACd;QACF,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAI,CAC7B,CACT,CAAC;AACN,CAAC","sourcesContent":["/**\r\n * Copyright 2021-2024 ioBroker GmbH\r\n *\r\n * MIT License\r\n *\r\n */\r\nimport React, { useEffect } from 'react';\r\nimport { CircularProgress } from '@mui/material';\r\n\r\nimport type { ThemeType, ThemeName } from '../../types';\r\n\r\n// import './Vendor.css'\r\nconst vendorStyles = `\r\n.logo-background-light, .logo-background-colored {\r\n background: white;\r\n}\r\n.logo-background-dark, .logo-background-blue {\r\n background: black;\r\n}\r\n`;\r\n\r\ninterface LoaderVendorProps {\r\n /** The size in pixels of this loader. */\r\n size?: number;\r\n /** The chosen theme type. */\r\n themeType?: ThemeType;\r\n /** The chosen theme name. */\r\n themeName?: ThemeName;\r\n /** Background color */\r\n backgroundColor?: string;\r\n /** Background image URL */\r\n backgroundImage?: string;\r\n}\r\n\r\nexport function LoaderVendor(props: LoaderVendorProps): React.JSX.Element {\r\n useEffect(() => {\r\n if (!window.document.getElementById('vendor-iobroker-component')) {\r\n const style = window.document.createElement('style');\r\n style.setAttribute('id', 'vendor-iobroker-component');\r\n style.innerHTML = vendorStyles;\r\n window.document.head.appendChild(style);\r\n }\r\n }, []);\r\n\r\n const theme = props.themeType || props.themeName || 'light';\r\n return (\r\n <div\r\n className={`vendor-logo-back logo-background-${theme}`}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n width: '10%',\r\n margin: 'auto',\r\n backgroundImage:\r\n props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'\r\n ? props.backgroundImage\r\n : window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'\r\n ? `url(${window.loadingBackgroundImage})`\r\n : undefined,\r\n backgroundColor:\r\n props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'\r\n ? props.backgroundColor\r\n : window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'\r\n ? window.loadingBackgroundColor\r\n : props.themeType === 'dark'\r\n ? '#000'\r\n : '#FFF',\r\n backgroundSize: 'cover',\r\n }}\r\n >\r\n <div style={{ flexGrow: 1 }} />\r\n <CircularProgress\r\n color=\"secondary\"\r\n size={props.size || 200}\r\n thickness={5}\r\n />\r\n <div style={{ flexGrow: 1 }} />\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"Vendor.js","sourceRoot":"./src/","sources":["Components/Loaders/Vendor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,wBAAwB;AACxB,MAAM,YAAY,GAAG;;;;;;;CAOpB,CAAC;AAeF,MAAM,UAAU,YAAY,CAAC,KAAwB;IACjD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YACtD,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;IAC5D,OAAO,CACH,6BACI,SAAS,EAAE,oCAAoC,KAAK,EAAE,EACtD,KAAK,EAAE;YACH,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,OAAO,MAAM,CAAC,sBAAsB,GAAG;oBACzC,CAAC,CAAC,SAAS;YACrB,eAAe,EACX,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,0BAA0B;gBACzE,CAAC,CAAC,KAAK,CAAC,eAAe;gBACvB,CAAC,CAAC,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB,KAAK,0BAA0B;oBAC7F,CAAC,CAAC,MAAM,CAAC,sBAAsB;oBAC/B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM;wBAC1B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM;YACpB,cAAc,EAAE,OAAO;SAC1B;QAED,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAI;QAC/B,oBAAC,gBAAgB,IACb,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG,EACvB,SAAS,EAAE,CAAC,GACd;QACF,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAI,CAC7B,CACT,CAAC;AACN,CAAC","sourcesContent":["/**\n * Copyright 2021-2024 ioBroker GmbH\n *\n * MIT License\n *\n */\nimport React, { useEffect } from 'react';\nimport { CircularProgress } from '@mui/material';\n\nimport type { ThemeType, ThemeName } from '../../types';\n\n// import './Vendor.css'\nconst vendorStyles = `\n.logo-background-light, .logo-background-colored {\n background: white;\n}\n.logo-background-dark, .logo-background-blue {\n background: black;\n}\n`;\n\ninterface LoaderVendorProps {\n /** The size in pixels of this loader. */\n size?: number;\n /** The chosen theme type. */\n themeType?: ThemeType;\n /** The chosen theme name. */\n themeName?: ThemeName;\n /** Background color */\n backgroundColor?: string;\n /** Background image URL */\n backgroundImage?: string;\n}\n\nexport function LoaderVendor(props: LoaderVendorProps): React.JSX.Element {\n useEffect(() => {\n if (!window.document.getElementById('vendor-iobroker-component')) {\n const style = window.document.createElement('style');\n style.setAttribute('id', 'vendor-iobroker-component');\n style.innerHTML = vendorStyles;\n window.document.head.appendChild(style);\n }\n }, []);\n\n const theme = props.themeType || props.themeName || 'light';\n return (\n <div\n className={`vendor-logo-back logo-background-${theme}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n width: '10%',\n margin: 'auto',\n backgroundImage:\n props.backgroundImage && props.backgroundImage !== '@@loginBackgroundImage@@'\n ? props.backgroundImage\n : window.loadingBackgroundImage && window.loadingBackgroundImage !== '@@loginBackgroundImage@@'\n ? `url(${window.loadingBackgroundImage})`\n : undefined,\n backgroundColor:\n props.backgroundColor && props.backgroundColor !== '@@loginBackgroundColor@@'\n ? props.backgroundColor\n : window.loadingBackgroundColor && window.loadingBackgroundColor !== '@@loginBackgroundColor@@'\n ? window.loadingBackgroundColor\n : props.themeType === 'dark'\n ? '#000'\n : '#FFF',\n backgroundSize: 'cover',\n }}\n >\n <div style={{ flexGrow: 1 }} />\n <CircularProgress\n color=\"secondary\"\n size={props.size || 200}\n thickness={5}\n />\n <div style={{ flexGrow: 1 }} />\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MDUtils.js","sourceRoot":"./src/","sources":["Components/MDUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Copyright 2018-2023 Denis Haev (bluefox) <dogafox@gmail.com>\r\n *\r\n * MIT License\r\n *\r\n */\r\nimport { copy } from './CopyToClipboard';\r\n\r\nexport class MDUtils {\r\n static text2link(text: string): string {\r\n const m = text.match(/\\d+\\.\\)\\s/);\r\n if (m) {\r\n text = text.replace(m[0], m[0].replace(/\\s/, '&nbsp;'));\r\n }\r\n\r\n return text\r\n .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')\r\n .trim()\r\n .replace(/\\s/g, '')\r\n .toLowerCase();\r\n }\r\n\r\n static openLink(url: string, target?: string): void {\r\n // replace IPv6 Address with [ipv6]:port\r\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/');\r\n\r\n if (target === 'this') {\r\n window.location.href = url;\r\n } else {\r\n window.open(url, target || '_blank');\r\n }\r\n }\r\n\r\n static getTitle(text: string): string {\r\n const result = MDUtils.extractHeader(text);\r\n let body = result.body;\r\n const header = result.header;\r\n if (!header.title) {\r\n // remove {docsify-bla}\r\n body = body.replace(/{[^}]*}/g, '');\r\n body = body.trim();\r\n const lines = body.replace(/\\r/g, '').split('\\n');\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].startsWith('# ')) {\r\n return lines[i].substring(2).trim();\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n return header.title.toString();\r\n }\r\n\r\n static extractHeader(text: string): { header: Record<string, string | boolean | number>; body: string } {\r\n const attrs: Record<string, string | boolean | number> = {};\r\n if (text.substring(0, 3) === '---') {\r\n const pos = text.substring(3).indexOf('\\n---');\r\n if (pos !== -1) {\r\n const _header = text.substring(3, pos + 3);\r\n const lines = _header.replace(/\\r/g, '').split('\\n');\r\n lines.forEach(line => {\r\n if (!line.trim()) {\r\n return;\r\n }\r\n const pos_ = line.indexOf(':');\r\n if (pos_ !== -1) {\r\n const attr = line.substring(0, pos_).trim();\r\n let val: string = line.substring(pos_ + 1).trim();\r\n val = val.replace(/^['\"]|['\"]$/g, '');\r\n if (val === 'true') {\r\n attrs[attr] = true;\r\n } else if (val === 'false') {\r\n attrs[attr] = false;\r\n } else if (parseFloat(val).toString() === val) {\r\n attrs[attr] = parseFloat(val);\r\n } else {\r\n attrs[attr] = val;\r\n }\r\n } else {\r\n attrs[line.trim()] = true;\r\n }\r\n });\r\n text = text.substring(pos + 7);\r\n }\r\n }\r\n return { header: attrs, body: text };\r\n }\r\n\r\n static removeDocsify(text: string): string {\r\n const m = text.match(/{docsify-[^}]*}/g);\r\n if (m) {\r\n m.forEach(doc => (text = text.replace(doc, '')));\r\n }\r\n return text;\r\n }\r\n\r\n static onCopy(e: Event | null, text: string): void {\r\n copy(text);\r\n e && e.stopPropagation();\r\n e && e.preventDefault();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MDUtils.js","sourceRoot":"./src/","sources":["Components/MDUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2023 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport { copy } from './CopyToClipboard';\n\nexport class MDUtils {\n static text2link(text: string): string {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, '&nbsp;'));\n }\n\n return text\n .replace(/[^a-zA-Zа-яА-Я0-9]/g, '')\n .trim()\n .replace(/\\s/g, '')\n .toLowerCase();\n }\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 getTitle(text: string): string {\n const result = MDUtils.extractHeader(text);\n let body = result.body;\n const header = result.header;\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 extractHeader(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 val: string = line.substring(pos_ + 1).trim();\n val = val.replace(/^['\"]|['\"]$/g, '');\n if (val === 'true') {\n attrs[attr] = true;\n } else if (val === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(val).toString() === val) {\n attrs[attr] = parseFloat(val);\n } else {\n attrs[attr] = val;\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 removeDocsify(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 static onCopy(e: Event | null, text: string): void {\n copy(text);\n e && e.stopPropagation();\n e && e.preventDefault();\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Copyright 2020-2025, Denis Haev <dogafox@gmail.com>
2
+ * Copyright 2020-2026, Denis Haev <dogafox@gmail.com>
3
3
  *
4
4
  * MIT License
5
5
  *
6
6
  */
7
7
  import React, { Component, type JSX } from 'react';
8
- import type { ThemeType, ThemeName, IobTheme, Translate } from '../types';
9
- import type { Router } from './Router';
10
- import { Connection } from '../Connection';
8
+ import { getSelectIdIconFromObjects } from './objectBrowserUtils';
9
+ import type { ObjectBrowserProps, AdapterColumn, ObjectBrowserFilter, ObjectBrowserState, TreeItem, CustomAdminColumnStored, ObjectEvent } from './objectBrowser.types';
10
+ export { getSelectIdIconFromObjects, type ObjectBrowserFilter };
11
11
  declare global {
12
12
  interface Window {
13
13
  sparkline: {
@@ -20,406 +20,23 @@ declare module '@mui/material/Button' {
20
20
  grey: true;
21
21
  }
22
22
  }
23
- type ObjectEventType = 'new' | 'changed' | 'deleted';
24
- interface ObjectEvent {
25
- id: string;
26
- obj?: ioBroker.Object;
27
- type: ObjectEventType;
28
- oldObj?: ioBroker.Object;
29
- }
30
- interface ObjectsWorker {
31
- getObjects(update?: boolean): Promise<void | Record<string, ioBroker.Object>>;
32
- registerHandler(cb: (events: ObjectEvent[]) => void): void;
33
- unregisterHandler(cb: (events: ObjectEvent[]) => void, doNotUnsubscribe?: boolean): void;
34
- }
35
- interface CustomAdminColumnStored {
36
- path: string;
37
- name: string;
38
- objTypes?: ioBroker.ObjectType[];
39
- width?: number;
40
- edit?: boolean;
41
- type?: ioBroker.CommonType;
42
- }
43
- export interface TreeItemData {
44
- id: string;
45
- name: string;
46
- obj?: ioBroker.Object;
47
- /** Object ID in lower case for filtering */
48
- fID?: string;
49
- /** translated common.name in lower case for filtering */
50
- fName?: string;
51
- /** Link to parent item */
52
- parent?: TreeItem;
53
- level?: number;
54
- icon?: string | JSX.Element | null;
55
- /** If the item existing object or generated folder */
56
- generated?: boolean;
57
- title?: string;
58
- /** if the item has "write" button (value=true, ack=false) */
59
- button?: boolean;
60
- /** If the item has read and write and is boolean */
61
- switch?: boolean;
62
- /** If the item is url linke */
63
- url?: boolean;
64
- /** if the item has custom settings in `common.custom` */
65
- hasCustoms?: boolean;
66
- /** If this item is visible */
67
- visible?: boolean;
68
- /** Is any of the children visible (not only directly children) */
69
- hasVisibleChildren?: boolean;
70
- /** Is any of the parents visible (not only directly parent) */
71
- hasVisibleParent?: boolean;
72
- /** Combination of `visible || hasVisibleChildren` */
73
- sumVisibility?: boolean;
74
- /** translated names of enumerations (functions) where this object is the member (or the parent), divided by comma */
75
- funcs?: string;
76
- /** is if the enums are from parent */
77
- pef?: boolean;
78
- /** translated names of enumerations (rooms) where this object is the member (or the parent), divided by comma */
79
- rooms?: string;
80
- /** is if the enums are from parent */
81
- per?: boolean;
82
- lang?: ioBroker.Languages;
83
- state?: {
84
- valTextRx?: JSX.Element[] | null;
85
- style?: React.CSSProperties;
86
- };
87
- aclTooltip?: null | JSX.Element;
88
- }
89
- export interface ObjectBrowserCustomFilter {
90
- type?: ioBroker.ObjectType | ioBroker.ObjectType[];
91
- common?: {
92
- type?: ioBroker.CommonType | ioBroker.CommonType[];
93
- role?: string | string[];
94
- custom?: '_' | '_dataSources' | true | string | string[];
95
- };
96
- }
97
- export interface TreeItem {
98
- id?: string;
99
- data: TreeItemData;
100
- children?: TreeItem[];
101
- }
102
- /** Converts ioB pattern into regex */
103
- export declare function pattern2RegEx(pattern: string): string;
104
- export declare function filterRoles(roleArray: {
105
- role: string;
106
- type: ioBroker.CommonType;
107
- }[], type: ioBroker.CommonType, defaultRoles?: {
108
- role: string;
109
- type: ioBroker.CommonType;
110
- }[]): string[];
111
- export declare function getSelectIdIconFromObjects(objects: Record<string, ioBroker.Object>, id: string, lang: ioBroker.Languages, imagePrefix?: string): string | JSX.Element | null;
112
23
  export declare const ITEM_IMAGES: Record<string, JSX.Element>;
113
- export interface ObjectBrowserFilter {
114
- id?: string;
115
- name?: string;
116
- room?: string[];
117
- func?: string[];
118
- role?: string[];
119
- type?: string[];
120
- custom?: string[];
121
- expertMode?: boolean;
122
- }
123
- interface AdapterColumn {
124
- adapter: string;
125
- id: string;
126
- name: string;
127
- path: string[];
128
- pathText: string;
129
- edit?: boolean;
130
- type?: 'boolean' | 'string' | 'number';
131
- objTypes?: ioBroker.ObjectType[];
132
- align?: 'center' | 'left' | 'right';
133
- }
134
- interface ObjectBrowserEditRoleProps {
135
- roleArray: {
136
- role: string;
137
- type: ioBroker.CommonType;
138
- }[];
139
- id: string;
140
- socket: Connection;
141
- onClose: (obj?: ioBroker.Object | null) => void;
142
- t: Translate;
143
- commonType: ioBroker.CommonType;
144
- }
145
- interface ObjectViewFileDialogProps {
146
- t: Translate;
147
- socket: Connection;
148
- obj: ioBroker.AnyObject;
149
- onClose: () => void;
150
- }
151
- interface DragWrapperProps {
152
- item: TreeItem;
153
- className?: string;
154
- style?: React.CSSProperties;
155
- children: JSX.Element | null;
156
- }
157
- interface ObjectCustomDialogProps {
158
- allVisibleObjects: boolean;
159
- customsInstances: string[];
160
- expertMode?: boolean;
161
- isFloatComma: boolean;
162
- lang: ioBroker.Languages;
163
- objectIDs: string[];
164
- objects: Record<string, ioBroker.Object>;
165
- onClose: () => void;
166
- reportChangedIds: (ids: string[]) => void;
167
- socket: Connection;
168
- systemConfig: ioBroker.SystemConfigObject;
169
- t: Translate;
170
- theme: IobTheme;
171
- themeName: ThemeName;
172
- themeType: ThemeType;
173
- }
174
- interface ObjectMoveRenameDialogProps {
175
- childrenIds: string[];
176
- expertMode: boolean;
177
- id: string;
178
- objectType: ioBroker.ObjectType | undefined;
179
- onClose: () => void;
180
- socket: Connection;
181
- t: Translate;
182
- theme: IobTheme;
183
- }
184
- interface ObjectBrowserValueProps {
185
- /** State type */
186
- type: 'states' | 'string' | 'number' | 'boolean' | 'json';
187
- /** State role */
188
- role: string;
189
- /** common.states */
190
- states: Record<string, string> | null;
191
- /** The state value */
192
- value: string | number | boolean | null;
193
- /** If expert mode is enabled */
194
- expertMode: boolean;
195
- onClose: (newValue?: {
196
- val: ioBroker.StateValue;
197
- ack: boolean;
198
- q: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];
199
- expire: number | undefined;
200
- }) => void;
201
- /** Configured theme */
202
- themeType: ThemeType;
203
- theme: IobTheme;
204
- socket: Connection;
205
- defaultHistory: string;
206
- dateFormat: string;
207
- object: ioBroker.StateObject;
208
- isFloatComma: boolean;
209
- t: Translate;
210
- lang: ioBroker.Languages;
211
- width?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
212
- }
213
- interface ObjectBrowserEditObjectProps {
214
- socket: Connection;
215
- obj: ioBroker.AnyObject;
216
- roleArray: {
217
- role: string;
218
- type: ioBroker.CommonType;
219
- }[];
220
- expertMode: boolean;
221
- themeType: ThemeType;
222
- theme: IobTheme;
223
- aliasTab: boolean;
224
- onClose: (obj?: ioBroker.AnyObject) => void;
225
- dialogName?: string;
226
- objects: Record<string, ioBroker.AnyObject>;
227
- dateFormat: string;
228
- isFloatComma: boolean;
229
- onNewObject: (obj: ioBroker.AnyObject) => void;
230
- t: Translate;
231
- width?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
232
- }
233
- export interface ObjectAliasEditorProps {
234
- t: Translate;
235
- roleArray: {
236
- role: string;
237
- type: ioBroker.CommonType;
238
- }[];
239
- socket: Connection;
240
- objects: Record<string, ioBroker.AnyObject>;
241
- onRedirect: (id: string, delay?: number) => void;
242
- obj: ioBroker.AnyObject;
243
- onClose: () => void;
244
- }
245
- export type ObjectBrowserColumn = 'name' | 'type' | 'role' | 'room' | 'func' | 'val' | 'buttons';
246
- type ObjectBrowserPossibleColumns = 'name' | 'type' | 'role' | 'room' | 'func' | 'val' | 'buttons' | 'changedFrom' | 'qualityCode' | 'timestamp' | 'lastChange' | 'id';
247
- export interface ObjectBrowserProps {
248
- /** where to store settings in localStorage */
249
- dialogName?: string;
250
- defaultFilters?: ObjectBrowserFilter;
251
- selected?: string | string[];
252
- onSelect?: (selected: string | string[], name: string | null, isDouble?: boolean) => void;
253
- onFilterChanged?: (newFilter: ObjectBrowserFilter) => void;
254
- socket: Connection;
255
- showExpertButton?: boolean;
256
- expertMode?: boolean;
257
- imagePrefix?: string;
258
- themeName: ThemeName;
259
- themeType: ThemeType;
260
- /** will be filled by withWidth */
261
- width?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
262
- theme: IobTheme;
263
- t: Translate;
264
- lang: ioBroker.Languages;
265
- multiSelect?: boolean;
266
- notEditable?: boolean;
267
- foldersFirst?: boolean;
268
- disableColumnSelector?: boolean;
269
- isFloatComma?: boolean;
270
- dateFormat?: string;
271
- levelPadding?: number;
272
- /** Allow selection of non-objects (virtual branches) */
273
- allowNonObjects?: boolean;
274
- /** Called when all objects are loaded */
275
- onAllLoaded?: () => void;
276
- objectCustomDialog?: React.FC<ObjectCustomDialogProps>;
277
- objectMoveRenameDialog?: React.FC<ObjectMoveRenameDialogProps>;
278
- objectAddBoolean?: boolean;
279
- objectEditBoolean?: boolean;
280
- objectStatesView?: boolean;
281
- objectImportExport?: boolean;
282
- objectEditOfAccessControl?: boolean;
283
- /** modal add object */
284
- modalNewObject?: (oBrowser: ObjectBrowserClass) => JSX.Element;
285
- /** modal Edit Of Access Control */
286
- modalEditOfAccessControl: (oBrowser: ObjectBrowserClass, data: TreeItemData) => JSX.Element;
287
- onObjectDelete?: (id: string, hasChildren: boolean, objectExists: boolean, childrenCount: number) => void;
288
- /**
289
- * Optional filter
290
- * `{common: {custom: true}}` - show only objects with some custom settings
291
- * `{common: {custom: 'sql.0'}}` - show only objects with sql.0 custom settings (only of the specific instance)
292
- * `{common: {custom: '_dataSources'}}` - show only objects of adapters `influxdb' or 'sql' or 'history'
293
- * `{common: {custom: 'adapterName.'}}` - show only objects of custom settings of specific adapter (all instances)
294
- * `{type: 'channel'}` - show only channels
295
- * `{type: ['channel', 'device']}` - show only channels and devices
296
- * `{common: {type: 'number'}` - show only states of type 'number
297
- * `{common: {type: ['number', 'string']}` - show only states of type 'number and string
298
- * `{common: {role: ['switch']}` - show only states with roles starting from switch
299
- * `{common: {role: ['switch', 'button']}` - show only states with roles starting from `switch` and `button`
300
- */
301
- customFilter: ObjectBrowserCustomFilter;
302
- objectBrowserValue?: React.FC<ObjectBrowserValueProps>;
303
- objectBrowserEditObject?: React.FC<ObjectBrowserEditObjectProps>;
304
- /** on edit alias */
305
- objectBrowserAliasEditor?: React.FC<ObjectAliasEditorProps>;
306
- /** on Edit role */
307
- objectBrowserEditRole?: React.FC<ObjectBrowserEditRoleProps>;
308
- /** on view file state */
309
- objectBrowserViewFile?: React.FC<ObjectViewFileDialogProps>;
310
- router?: typeof Router;
311
- types?: ioBroker.ObjectType[];
312
- /** Possible columns: ['name', 'type', 'role', 'room', 'func', 'val', 'buttons'] */
313
- columns?: ObjectBrowserColumn[];
314
- /** Shows only elements of this root */
315
- root?: string;
316
- /** cache of objects */
317
- objectsWorker?: ObjectsWorker;
318
- /**
319
- * function to filter out all unnecessary objects. It cannot be used together with "types"
320
- * Example for function: `obj => obj.common?.type === 'boolean'` to show only boolean states
321
- */
322
- filterFunc?: (obj: ioBroker.Object) => boolean;
323
- /** Used for enums dragging */
324
- DragWrapper?: React.FC<DragWrapperProps>;
325
- /** let DragWrapper know about objects to get the icons */
326
- setObjectsReference?: (objects: Record<string, ioBroker.Object>) => void;
327
- dragEnabled?: boolean;
328
- }
329
- interface ObjectBrowserState {
330
- loaded: boolean;
331
- foldersFirst: boolean;
332
- selected: string[];
333
- focused: string;
334
- selectedNonObject: string;
335
- filter: ObjectBrowserFilter;
336
- filterKey: number;
337
- depth: number;
338
- expandAllVisible: boolean;
339
- expanded: string[];
340
- toast: string;
341
- scrollBarWidth: number;
342
- customDialog: null | string[];
343
- customDialogAll?: boolean;
344
- editObjectDialog: string;
345
- editObjectAlias: boolean;
346
- viewFileDialog: string;
347
- showAliasEditor: string;
348
- enumDialog: null | {
349
- item: TreeItem;
350
- type: 'room' | 'func';
351
- enumsOriginal: string;
352
- };
353
- enumDialogEnums?: null | string[];
354
- roleDialog: null | string;
355
- statesView: boolean;
356
- /** ['name', 'type', 'role', 'room', 'func', 'val', 'buttons'] */
357
- columns: ObjectBrowserPossibleColumns[] | null;
358
- columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null;
359
- columnsSelectorShow: boolean;
360
- columnsAuto: boolean;
361
- columnsWidths: Record<string, number>;
362
- columnsDialogTransparent: number;
363
- columnsEditCustomDialog: null | {
364
- obj: ioBroker.Object;
365
- item: TreeItem;
366
- it: AdapterColumn;
367
- };
368
- customColumnDialogValueChanged: boolean;
369
- showExportDialog: false | number;
370
- showAllExportOptions: boolean;
371
- linesEnabled: boolean;
372
- showDescription: boolean;
373
- showContextMenu: {
374
- item: TreeItem;
375
- position: {
376
- left: number;
377
- top: number;
378
- };
379
- subItem?: string;
380
- subAnchor?: HTMLLIElement;
381
- } | null;
382
- noStatesByExportImport: boolean;
383
- beautifyJsonExport: boolean;
384
- excludeSystemRepositoriesFromExport: boolean;
385
- excludeTranslations: boolean;
386
- updating?: boolean;
387
- modalNewObj?: null | {
388
- id: string;
389
- initialType?: ioBroker.ObjectType;
390
- initialStateType?: ioBroker.CommonType;
391
- };
392
- error?: any;
393
- modalEditOfAccess?: boolean;
394
- modalEditOfAccessObjData?: TreeItemData;
395
- updateOpened?: boolean;
396
- tooltipInfo: null | {
397
- el: JSX.Element[];
398
- id: string;
399
- };
400
- /** Show the menu with aliases for state */
401
- aliasMenu: string;
402
- /** Show rename dialog */
403
- showRenameDialog: {
404
- id: string;
405
- childrenIds: string[];
406
- } | null;
407
- }
408
24
  export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, ObjectBrowserState> {
409
25
  private info;
410
26
  private localStorage;
411
- private lastAppliedFilter;
412
27
  private readonly tableRef;
413
- private readonly filterRefs;
414
28
  private pausedSubscribes;
415
29
  private selectFirst;
30
+ /** Last navigation that was applied from `navigateTo` or reported via `onNavigateTo` (loop guard). */
31
+ private lastNav;
32
+ /** True while applying `navigateTo`, so the derived-state watcher does not echo it back. */
33
+ private applyingNav;
416
34
  private root;
417
35
  private readonly states;
418
36
  private subscribes;
419
37
  private unsubscribeTimer;
420
38
  private statesUpdateTimer;
421
39
  private objectsUpdateTimer;
422
- private filterTimer;
423
40
  private readonly visibleCols;
424
41
  private readonly texts;
425
42
  private readonly possibleCols;
@@ -445,23 +62,16 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
445
62
  private systemConfig;
446
63
  objects: Record<string, ioBroker.Object>;
447
64
  private defaultHistory;
448
- private cltrPressed;
65
+ private ctrlPressed;
449
66
  private columnsVisibility;
450
67
  private changedIds;
451
68
  private contextMenu;
452
69
  private recordStates;
453
70
  private styles;
71
+ private expertMode;
454
72
  private customColumnDialog;
455
- /** Namespaces which are allowed to be edited by non-expert users */
456
- static NON_EXPERT_NAMESPACES: string[];
457
73
  constructor(props: ObjectBrowserProps);
458
74
  loadAllObjects(update?: boolean): Promise<void>;
459
- /**
460
- * Check if it is a non-expert id
461
- */
462
- static isNonExpertId(
463
- /** id to test */
464
- id: string): boolean;
465
75
  private expandAllSelected;
466
76
  /**
467
77
  * @param isDouble is double click
@@ -541,7 +151,6 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
541
151
  private subscribe;
542
152
  private unsubscribe;
543
153
  private pauseSubscribe;
544
- private onFilter;
545
154
  clearFilter(): void;
546
155
  isFilterEmpty(): boolean;
547
156
  private getFilterInput;
@@ -568,8 +177,11 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
568
177
  private _exportObjects;
569
178
  renderExportDialog(): JSX.Element | null;
570
179
  renderRenameDialog(): JSX.Element | null;
180
+ private parseJsonFile;
571
181
  private handleJsonUpload;
572
182
  toolTipObjectCreating: () => JSX.Element[] | string;
183
+ onOpenFile(): void;
184
+ renderInputJsonDialog(): JSX.Element | null;
573
185
  /**
574
186
  * Renders the toolbar.
575
187
  */
@@ -594,8 +206,6 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
594
206
  private renderEditRoleDialog;
595
207
  private onColumnsEditCustomDialogClose;
596
208
  private renderColumnsEditCustomDialog;
597
- private static getCustomValue;
598
- private static setCustomValue;
599
209
  /**
600
210
  * Renders a custom value.
601
211
  */
@@ -615,7 +225,7 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
615
225
  */
616
226
  renderItem(root: TreeItem, isExpanded: boolean | undefined, counter?: {
617
227
  count: number;
618
- }): JSX.Element[];
228
+ }): (JSX.Element | null)[];
619
229
  private calculateColumnsVisibility;
620
230
  resizerMouseMove: (e: MouseEvent) => void;
621
231
  resizerMouseUp: () => void;
@@ -638,10 +248,19 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
638
248
  renderHandleRight(): JSX.Element;
639
249
  private renderHeader;
640
250
  private renderToast;
251
+ /** Derive the current navigation target from the dialog/selection state. */
252
+ private getStateNav;
253
+ private static navEqual;
254
+ /** Apply a navigation target coming from the parent (`navigateTo`): select + open the dialog. */
255
+ private applyNavigateTo;
256
+ /** Apply the initial `navigateTo` after the tree has loaded (called from componentDidMount). */
257
+ private applyInitialNavigateTo;
258
+ /** Reconcile `navigateTo` (parent/URL) with the browser's selection/dialog state. */
259
+ private reconcileNavigation;
641
260
  /**
642
261
  * Called when component is updated.
643
262
  */
644
- componentDidUpdate(): void;
263
+ componentDidUpdate(prevProps: ObjectBrowserProps): void;
645
264
  scrollToItem(id: string): void;
646
265
  private renderCustomDialog;
647
266
  private onUpdate;
@@ -656,10 +275,10 @@ export declare class ObjectBrowserClass extends Component<ObjectBrowserProps, Ob
656
275
  */
657
276
  private renderContextMenu;
658
277
  private renderEditValueDialog;
278
+ doFilter(doNotStore?: boolean): void;
659
279
  /**
660
280
  * The rendering method of this component.
661
281
  */
662
282
  render(): JSX.Element;
663
283
  }
664
284
  export declare const ObjectBrowser: (props: Record<string, any>) => JSX.Element;
665
- export {};