iobroker.eos-admin 7.9.75 → 7.9.76

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 (480) hide show
  1. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v54.js +1 -1
  2. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v55.js +1 -1
  3. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v56.js +1 -1
  4. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v57.js +1 -1
  5. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v58.js +1 -1
  6. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v59.js +1 -1
  7. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v60.js +1 -1
  8. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v61.js +1 -1
  9. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v62.js +1 -1
  10. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v63.js +1 -1
  11. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v64.js +1 -1
  12. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v65.js +1 -1
  13. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v66.js +1 -1
  14. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v67.js +1 -1
  15. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v68.js +1 -1
  16. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v69.js +1 -1
  17. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v70.js +1 -1
  18. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v71.js +1 -1
  19. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v72.js +1 -1
  20. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v73.js +1 -1
  21. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v74.js +1 -1
  22. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v75.js +1 -2
  23. package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v76.js +2 -0
  24. package/adminWww/assets/Adapters-B5_jQ7DE-v54.js +1 -1
  25. package/adminWww/assets/Adapters-B5_jQ7DE-v55.js +1 -1
  26. package/adminWww/assets/Adapters-B5_jQ7DE-v56.js +1 -1
  27. package/adminWww/assets/Adapters-B5_jQ7DE-v57.js +1 -1
  28. package/adminWww/assets/Adapters-B5_jQ7DE-v58.js +1 -1
  29. package/adminWww/assets/Adapters-B5_jQ7DE-v59.js +1 -1
  30. package/adminWww/assets/Adapters-B5_jQ7DE-v60.js +1 -1
  31. package/adminWww/assets/Adapters-B5_jQ7DE-v61.js +1 -1
  32. package/adminWww/assets/Adapters-B5_jQ7DE-v62.js +1 -1
  33. package/adminWww/assets/Adapters-B5_jQ7DE-v63.js +1 -1
  34. package/adminWww/assets/Adapters-B5_jQ7DE-v64.js +1 -1
  35. package/adminWww/assets/Adapters-B5_jQ7DE-v65.js +1 -1
  36. package/adminWww/assets/Adapters-B5_jQ7DE-v66.js +1 -1
  37. package/adminWww/assets/Adapters-B5_jQ7DE-v67.js +1 -1
  38. package/adminWww/assets/Adapters-B5_jQ7DE-v68.js +1 -1
  39. package/adminWww/assets/Adapters-B5_jQ7DE-v69.js +1 -1
  40. package/adminWww/assets/Adapters-B5_jQ7DE-v70.js +1 -1
  41. package/adminWww/assets/Adapters-B5_jQ7DE-v71.js +1 -1
  42. package/adminWww/assets/Adapters-B5_jQ7DE-v72.js +1 -1
  43. package/adminWww/assets/Adapters-B5_jQ7DE-v73.js +1 -1
  44. package/adminWww/assets/Adapters-B5_jQ7DE-v74.js +1 -1
  45. package/adminWww/assets/Adapters-B5_jQ7DE-v75.js +1 -9
  46. package/adminWww/assets/Adapters-B5_jQ7DE-v76.js +9 -0
  47. package/adminWww/assets/Config-hHK2UzGP-v54.js +1 -1
  48. package/adminWww/assets/Config-hHK2UzGP-v55.js +1 -1
  49. package/adminWww/assets/Config-hHK2UzGP-v56.js +1 -1
  50. package/adminWww/assets/Config-hHK2UzGP-v57.js +1 -1
  51. package/adminWww/assets/Config-hHK2UzGP-v58.js +1 -1
  52. package/adminWww/assets/Config-hHK2UzGP-v59.js +1 -1
  53. package/adminWww/assets/Config-hHK2UzGP-v60.js +1 -1
  54. package/adminWww/assets/Config-hHK2UzGP-v61.js +1 -1
  55. package/adminWww/assets/Config-hHK2UzGP-v62.js +1 -1
  56. package/adminWww/assets/Config-hHK2UzGP-v63.js +1 -1
  57. package/adminWww/assets/Config-hHK2UzGP-v64.js +1 -1
  58. package/adminWww/assets/Config-hHK2UzGP-v65.js +1 -1
  59. package/adminWww/assets/Config-hHK2UzGP-v66.js +1 -1
  60. package/adminWww/assets/Config-hHK2UzGP-v67.js +1 -1
  61. package/adminWww/assets/Config-hHK2UzGP-v68.js +1 -1
  62. package/adminWww/assets/Config-hHK2UzGP-v69.js +1 -1
  63. package/adminWww/assets/Config-hHK2UzGP-v70.js +1 -1
  64. package/adminWww/assets/Config-hHK2UzGP-v71.js +1 -1
  65. package/adminWww/assets/Config-hHK2UzGP-v72.js +1 -1
  66. package/adminWww/assets/Config-hHK2UzGP-v73.js +1 -1
  67. package/adminWww/assets/Config-hHK2UzGP-v74.js +1 -1
  68. package/adminWww/assets/Config-hHK2UzGP-v75.js +1 -1
  69. package/adminWww/assets/Config-hHK2UzGP-v76.js +1 -0
  70. package/adminWww/assets/CustomTab-B0wqoazH-v54.js +1 -1
  71. package/adminWww/assets/CustomTab-B0wqoazH-v55.js +1 -1
  72. package/adminWww/assets/CustomTab-B0wqoazH-v56.js +1 -1
  73. package/adminWww/assets/CustomTab-B0wqoazH-v57.js +1 -1
  74. package/adminWww/assets/CustomTab-B0wqoazH-v58.js +1 -1
  75. package/adminWww/assets/CustomTab-B0wqoazH-v59.js +1 -1
  76. package/adminWww/assets/CustomTab-B0wqoazH-v60.js +1 -1
  77. package/adminWww/assets/CustomTab-B0wqoazH-v61.js +1 -1
  78. package/adminWww/assets/CustomTab-B0wqoazH-v62.js +1 -1
  79. package/adminWww/assets/CustomTab-B0wqoazH-v63.js +1 -1
  80. package/adminWww/assets/CustomTab-B0wqoazH-v64.js +1 -1
  81. package/adminWww/assets/CustomTab-B0wqoazH-v65.js +1 -1
  82. package/adminWww/assets/CustomTab-B0wqoazH-v66.js +1 -1
  83. package/adminWww/assets/CustomTab-B0wqoazH-v67.js +1 -1
  84. package/adminWww/assets/CustomTab-B0wqoazH-v68.js +1 -1
  85. package/adminWww/assets/CustomTab-B0wqoazH-v69.js +1 -1
  86. package/adminWww/assets/CustomTab-B0wqoazH-v70.js +1 -1
  87. package/adminWww/assets/CustomTab-B0wqoazH-v71.js +1 -1
  88. package/adminWww/assets/CustomTab-B0wqoazH-v72.js +1 -1
  89. package/adminWww/assets/CustomTab-B0wqoazH-v73.js +1 -1
  90. package/adminWww/assets/CustomTab-B0wqoazH-v74.js +1 -1
  91. package/adminWww/assets/CustomTab-B0wqoazH-v75.js +1 -1
  92. package/adminWww/assets/CustomTab-B0wqoazH-v76.js +1 -0
  93. package/adminWww/assets/DeviceManager-BFmQeYQ1-v54.js +1 -1
  94. package/adminWww/assets/DeviceManager-BFmQeYQ1-v55.js +1 -1
  95. package/adminWww/assets/DeviceManager-BFmQeYQ1-v56.js +1 -1
  96. package/adminWww/assets/DeviceManager-BFmQeYQ1-v57.js +1 -1
  97. package/adminWww/assets/DeviceManager-BFmQeYQ1-v58.js +1 -1
  98. package/adminWww/assets/DeviceManager-BFmQeYQ1-v59.js +1 -1
  99. package/adminWww/assets/DeviceManager-BFmQeYQ1-v60.js +1 -1
  100. package/adminWww/assets/DeviceManager-BFmQeYQ1-v61.js +1 -1
  101. package/adminWww/assets/DeviceManager-BFmQeYQ1-v62.js +1 -1
  102. package/adminWww/assets/DeviceManager-BFmQeYQ1-v63.js +1 -1
  103. package/adminWww/assets/DeviceManager-BFmQeYQ1-v64.js +1 -1
  104. package/adminWww/assets/DeviceManager-BFmQeYQ1-v65.js +1 -1
  105. package/adminWww/assets/DeviceManager-BFmQeYQ1-v66.js +1 -1
  106. package/adminWww/assets/DeviceManager-BFmQeYQ1-v67.js +1 -1
  107. package/adminWww/assets/DeviceManager-BFmQeYQ1-v68.js +1 -1
  108. package/adminWww/assets/DeviceManager-BFmQeYQ1-v69.js +1 -1
  109. package/adminWww/assets/DeviceManager-BFmQeYQ1-v70.js +1 -1
  110. package/adminWww/assets/DeviceManager-BFmQeYQ1-v71.js +1 -1
  111. package/adminWww/assets/DeviceManager-BFmQeYQ1-v72.js +1 -1
  112. package/adminWww/assets/DeviceManager-BFmQeYQ1-v73.js +1 -1
  113. package/adminWww/assets/DeviceManager-BFmQeYQ1-v74.js +1 -1
  114. package/adminWww/assets/DeviceManager-BFmQeYQ1-v75.js +1 -1
  115. package/adminWww/assets/DeviceManager-BFmQeYQ1-v76.js +1 -0
  116. package/adminWww/assets/EasyMode-B1d9Vdc4-v54.js +1 -1
  117. package/adminWww/assets/EasyMode-B1d9Vdc4-v55.js +1 -1
  118. package/adminWww/assets/EasyMode-B1d9Vdc4-v56.js +1 -1
  119. package/adminWww/assets/EasyMode-B1d9Vdc4-v57.js +1 -1
  120. package/adminWww/assets/EasyMode-B1d9Vdc4-v58.js +1 -1
  121. package/adminWww/assets/EasyMode-B1d9Vdc4-v59.js +1 -1
  122. package/adminWww/assets/EasyMode-B1d9Vdc4-v60.js +1 -1
  123. package/adminWww/assets/EasyMode-B1d9Vdc4-v61.js +1 -1
  124. package/adminWww/assets/EasyMode-B1d9Vdc4-v62.js +1 -1
  125. package/adminWww/assets/EasyMode-B1d9Vdc4-v63.js +1 -1
  126. package/adminWww/assets/EasyMode-B1d9Vdc4-v64.js +1 -1
  127. package/adminWww/assets/EasyMode-B1d9Vdc4-v65.js +1 -1
  128. package/adminWww/assets/EasyMode-B1d9Vdc4-v66.js +1 -1
  129. package/adminWww/assets/EasyMode-B1d9Vdc4-v67.js +1 -1
  130. package/adminWww/assets/EasyMode-B1d9Vdc4-v68.js +1 -1
  131. package/adminWww/assets/EasyMode-B1d9Vdc4-v69.js +1 -1
  132. package/adminWww/assets/EasyMode-B1d9Vdc4-v70.js +1 -1
  133. package/adminWww/assets/EasyMode-B1d9Vdc4-v71.js +1 -1
  134. package/adminWww/assets/EasyMode-B1d9Vdc4-v72.js +1 -1
  135. package/adminWww/assets/EasyMode-B1d9Vdc4-v73.js +1 -1
  136. package/adminWww/assets/EasyMode-B1d9Vdc4-v74.js +1 -1
  137. package/adminWww/assets/EasyMode-B1d9Vdc4-v75.js +1 -1
  138. package/adminWww/assets/EasyMode-B1d9Vdc4-v76.js +1 -0
  139. package/adminWww/assets/Enums-DbWYxKOo-v54.js +1 -1
  140. package/adminWww/assets/Enums-DbWYxKOo-v55.js +1 -1
  141. package/adminWww/assets/Enums-DbWYxKOo-v56.js +1 -1
  142. package/adminWww/assets/Enums-DbWYxKOo-v57.js +1 -1
  143. package/adminWww/assets/Enums-DbWYxKOo-v58.js +1 -1
  144. package/adminWww/assets/Enums-DbWYxKOo-v59.js +1 -1
  145. package/adminWww/assets/Enums-DbWYxKOo-v60.js +1 -1
  146. package/adminWww/assets/Enums-DbWYxKOo-v61.js +1 -1
  147. package/adminWww/assets/Enums-DbWYxKOo-v62.js +1 -1
  148. package/adminWww/assets/Enums-DbWYxKOo-v63.js +1 -1
  149. package/adminWww/assets/Enums-DbWYxKOo-v64.js +1 -1
  150. package/adminWww/assets/Enums-DbWYxKOo-v65.js +1 -1
  151. package/adminWww/assets/Enums-DbWYxKOo-v66.js +1 -1
  152. package/adminWww/assets/Enums-DbWYxKOo-v67.js +1 -1
  153. package/adminWww/assets/Enums-DbWYxKOo-v68.js +1 -1
  154. package/adminWww/assets/Enums-DbWYxKOo-v69.js +1 -1
  155. package/adminWww/assets/Enums-DbWYxKOo-v70.js +1 -1
  156. package/adminWww/assets/Enums-DbWYxKOo-v71.js +1 -1
  157. package/adminWww/assets/Enums-DbWYxKOo-v72.js +1 -1
  158. package/adminWww/assets/Enums-DbWYxKOo-v73.js +1 -1
  159. package/adminWww/assets/Enums-DbWYxKOo-v74.js +1 -1
  160. package/adminWww/assets/Enums-DbWYxKOo-v75.js +1 -91
  161. package/adminWww/assets/Enums-DbWYxKOo-v76.js +91 -0
  162. package/adminWww/assets/Fields-CX3rKuWb-v54.js +1 -1
  163. package/adminWww/assets/Fields-CX3rKuWb-v55.js +1 -1
  164. package/adminWww/assets/Fields-CX3rKuWb-v56.js +1 -1
  165. package/adminWww/assets/Fields-CX3rKuWb-v57.js +1 -1
  166. package/adminWww/assets/Fields-CX3rKuWb-v58.js +1 -1
  167. package/adminWww/assets/Fields-CX3rKuWb-v59.js +1 -1
  168. package/adminWww/assets/Fields-CX3rKuWb-v60.js +1 -1
  169. package/adminWww/assets/Fields-CX3rKuWb-v61.js +1 -1
  170. package/adminWww/assets/Fields-CX3rKuWb-v62.js +1 -1
  171. package/adminWww/assets/Fields-CX3rKuWb-v63.js +1 -1
  172. package/adminWww/assets/Fields-CX3rKuWb-v64.js +1 -1
  173. package/adminWww/assets/Fields-CX3rKuWb-v65.js +1 -1
  174. package/adminWww/assets/Fields-CX3rKuWb-v66.js +1 -1
  175. package/adminWww/assets/Fields-CX3rKuWb-v67.js +1 -1
  176. package/adminWww/assets/Fields-CX3rKuWb-v68.js +1 -1
  177. package/adminWww/assets/Fields-CX3rKuWb-v69.js +1 -1
  178. package/adminWww/assets/Fields-CX3rKuWb-v70.js +1 -1
  179. package/adminWww/assets/Fields-CX3rKuWb-v71.js +1 -1
  180. package/adminWww/assets/Fields-CX3rKuWb-v72.js +1 -1
  181. package/adminWww/assets/Fields-CX3rKuWb-v73.js +1 -1
  182. package/adminWww/assets/Fields-CX3rKuWb-v74.js +1 -1
  183. package/adminWww/assets/Fields-CX3rKuWb-v75.js +1 -1
  184. package/adminWww/assets/Fields-CX3rKuWb-v76.js +1 -0
  185. package/adminWww/assets/Files-Cd2HOzIE-v54.js +1 -1
  186. package/adminWww/assets/Files-Cd2HOzIE-v55.js +1 -1
  187. package/adminWww/assets/Files-Cd2HOzIE-v56.js +1 -1
  188. package/adminWww/assets/Files-Cd2HOzIE-v57.js +1 -1
  189. package/adminWww/assets/Files-Cd2HOzIE-v58.js +1 -1
  190. package/adminWww/assets/Files-Cd2HOzIE-v59.js +1 -1
  191. package/adminWww/assets/Files-Cd2HOzIE-v60.js +1 -1
  192. package/adminWww/assets/Files-Cd2HOzIE-v61.js +1 -1
  193. package/adminWww/assets/Files-Cd2HOzIE-v62.js +1 -1
  194. package/adminWww/assets/Files-Cd2HOzIE-v63.js +1 -1
  195. package/adminWww/assets/Files-Cd2HOzIE-v64.js +1 -1
  196. package/adminWww/assets/Files-Cd2HOzIE-v65.js +1 -1
  197. package/adminWww/assets/Files-Cd2HOzIE-v66.js +1 -1
  198. package/adminWww/assets/Files-Cd2HOzIE-v67.js +1 -1
  199. package/adminWww/assets/Files-Cd2HOzIE-v68.js +1 -1
  200. package/adminWww/assets/Files-Cd2HOzIE-v69.js +1 -1
  201. package/adminWww/assets/Files-Cd2HOzIE-v70.js +1 -1
  202. package/adminWww/assets/Files-Cd2HOzIE-v71.js +1 -1
  203. package/adminWww/assets/Files-Cd2HOzIE-v72.js +1 -1
  204. package/adminWww/assets/Files-Cd2HOzIE-v73.js +1 -1
  205. package/adminWww/assets/Files-Cd2HOzIE-v74.js +1 -1
  206. package/adminWww/assets/Files-Cd2HOzIE-v75.js +1 -1
  207. package/adminWww/assets/Files-Cd2HOzIE-v76.js +1 -0
  208. package/adminWww/assets/Hosts-Bg8QzW5i-v54.js +1 -1
  209. package/adminWww/assets/Hosts-Bg8QzW5i-v55.js +1 -1
  210. package/adminWww/assets/Hosts-Bg8QzW5i-v56.js +1 -1
  211. package/adminWww/assets/Hosts-Bg8QzW5i-v57.js +1 -1
  212. package/adminWww/assets/Hosts-Bg8QzW5i-v58.js +1 -1
  213. package/adminWww/assets/Hosts-Bg8QzW5i-v59.js +1 -1
  214. package/adminWww/assets/Hosts-Bg8QzW5i-v60.js +1 -1
  215. package/adminWww/assets/Hosts-Bg8QzW5i-v61.js +1 -1
  216. package/adminWww/assets/Hosts-Bg8QzW5i-v62.js +1 -1
  217. package/adminWww/assets/Hosts-Bg8QzW5i-v63.js +1 -1
  218. package/adminWww/assets/Hosts-Bg8QzW5i-v64.js +1 -1
  219. package/adminWww/assets/Hosts-Bg8QzW5i-v65.js +1 -1
  220. package/adminWww/assets/Hosts-Bg8QzW5i-v66.js +1 -1
  221. package/adminWww/assets/Hosts-Bg8QzW5i-v67.js +1 -1
  222. package/adminWww/assets/Hosts-Bg8QzW5i-v68.js +1 -1
  223. package/adminWww/assets/Hosts-Bg8QzW5i-v69.js +1 -1
  224. package/adminWww/assets/Hosts-Bg8QzW5i-v70.js +1 -1
  225. package/adminWww/assets/Hosts-Bg8QzW5i-v71.js +1 -1
  226. package/adminWww/assets/Hosts-Bg8QzW5i-v72.js +1 -1
  227. package/adminWww/assets/Hosts-Bg8QzW5i-v73.js +1 -1
  228. package/adminWww/assets/Hosts-Bg8QzW5i-v74.js +1 -1
  229. package/adminWww/assets/Hosts-Bg8QzW5i-v75.js +1 -121
  230. package/adminWww/assets/Hosts-Bg8QzW5i-v76.js +121 -0
  231. package/adminWww/assets/Instances-YdaGnS5a-v54.js +1 -1
  232. package/adminWww/assets/Instances-YdaGnS5a-v55.js +1 -1
  233. package/adminWww/assets/Instances-YdaGnS5a-v56.js +1 -1
  234. package/adminWww/assets/Instances-YdaGnS5a-v57.js +1 -1
  235. package/adminWww/assets/Instances-YdaGnS5a-v58.js +1 -1
  236. package/adminWww/assets/Instances-YdaGnS5a-v59.js +1 -1
  237. package/adminWww/assets/Instances-YdaGnS5a-v60.js +1 -1
  238. package/adminWww/assets/Instances-YdaGnS5a-v61.js +1 -1
  239. package/adminWww/assets/Instances-YdaGnS5a-v62.js +1 -1
  240. package/adminWww/assets/Instances-YdaGnS5a-v63.js +1 -1
  241. package/adminWww/assets/Instances-YdaGnS5a-v64.js +1 -1
  242. package/adminWww/assets/Instances-YdaGnS5a-v65.js +1 -1
  243. package/adminWww/assets/Instances-YdaGnS5a-v66.js +1 -1
  244. package/adminWww/assets/Instances-YdaGnS5a-v67.js +1 -1
  245. package/adminWww/assets/Instances-YdaGnS5a-v68.js +1 -1
  246. package/adminWww/assets/Instances-YdaGnS5a-v69.js +1 -1
  247. package/adminWww/assets/Instances-YdaGnS5a-v70.js +1 -1
  248. package/adminWww/assets/Instances-YdaGnS5a-v71.js +1 -1
  249. package/adminWww/assets/Instances-YdaGnS5a-v72.js +1 -1
  250. package/adminWww/assets/Instances-YdaGnS5a-v73.js +1 -1
  251. package/adminWww/assets/Instances-YdaGnS5a-v74.js +1 -1
  252. package/adminWww/assets/Instances-YdaGnS5a-v75.js +1 -2
  253. package/adminWww/assets/Instances-YdaGnS5a-v76.js +2 -0
  254. package/adminWww/assets/Intro-DkwRiz1n-v54.js +1 -1
  255. package/adminWww/assets/Intro-DkwRiz1n-v55.js +1 -1
  256. package/adminWww/assets/Intro-DkwRiz1n-v56.js +1 -1
  257. package/adminWww/assets/Intro-DkwRiz1n-v57.js +1 -1
  258. package/adminWww/assets/Intro-DkwRiz1n-v58.js +1 -1
  259. package/adminWww/assets/Intro-DkwRiz1n-v59.js +1 -1
  260. package/adminWww/assets/Intro-DkwRiz1n-v60.js +1 -1
  261. package/adminWww/assets/Intro-DkwRiz1n-v61.js +1 -1
  262. package/adminWww/assets/Intro-DkwRiz1n-v62.js +1 -1
  263. package/adminWww/assets/Intro-DkwRiz1n-v63.js +1 -1
  264. package/adminWww/assets/Intro-DkwRiz1n-v64.js +1 -1
  265. package/adminWww/assets/Intro-DkwRiz1n-v65.js +1 -1
  266. package/adminWww/assets/Intro-DkwRiz1n-v66.js +1 -1
  267. package/adminWww/assets/Intro-DkwRiz1n-v67.js +1 -1
  268. package/adminWww/assets/Intro-DkwRiz1n-v68.js +1 -1
  269. package/adminWww/assets/Intro-DkwRiz1n-v69.js +1 -1
  270. package/adminWww/assets/Intro-DkwRiz1n-v70.js +1 -1
  271. package/adminWww/assets/Intro-DkwRiz1n-v71.js +1 -1
  272. package/adminWww/assets/Intro-DkwRiz1n-v72.js +1 -1
  273. package/adminWww/assets/Intro-DkwRiz1n-v73.js +1 -1
  274. package/adminWww/assets/Intro-DkwRiz1n-v74.js +1 -1
  275. package/adminWww/assets/Intro-DkwRiz1n-v75.js +1 -2
  276. package/adminWww/assets/Intro-DkwRiz1n-v76.js +2 -0
  277. package/adminWww/assets/Logs-CsVPSLJH-v54.js +1 -1
  278. package/adminWww/assets/Logs-CsVPSLJH-v55.js +1 -1
  279. package/adminWww/assets/Logs-CsVPSLJH-v56.js +1 -1
  280. package/adminWww/assets/Logs-CsVPSLJH-v57.js +1 -1
  281. package/adminWww/assets/Logs-CsVPSLJH-v58.js +1 -1
  282. package/adminWww/assets/Logs-CsVPSLJH-v59.js +1 -1
  283. package/adminWww/assets/Logs-CsVPSLJH-v60.js +1 -1
  284. package/adminWww/assets/Logs-CsVPSLJH-v61.js +1 -1
  285. package/adminWww/assets/Logs-CsVPSLJH-v62.js +1 -1
  286. package/adminWww/assets/Logs-CsVPSLJH-v63.js +1 -1
  287. package/adminWww/assets/Logs-CsVPSLJH-v64.js +1 -1
  288. package/adminWww/assets/Logs-CsVPSLJH-v65.js +1 -1
  289. package/adminWww/assets/Logs-CsVPSLJH-v66.js +1 -1
  290. package/adminWww/assets/Logs-CsVPSLJH-v67.js +1 -1
  291. package/adminWww/assets/Logs-CsVPSLJH-v68.js +1 -1
  292. package/adminWww/assets/Logs-CsVPSLJH-v69.js +1 -1
  293. package/adminWww/assets/Logs-CsVPSLJH-v70.js +1 -1
  294. package/adminWww/assets/Logs-CsVPSLJH-v71.js +1 -1
  295. package/adminWww/assets/Logs-CsVPSLJH-v72.js +1 -1
  296. package/adminWww/assets/Logs-CsVPSLJH-v73.js +1 -1
  297. package/adminWww/assets/Logs-CsVPSLJH-v74.js +1 -1
  298. package/adminWww/assets/Logs-CsVPSLJH-v75.js +1 -1
  299. package/adminWww/assets/Logs-CsVPSLJH-v76.js +1 -0
  300. package/adminWww/assets/Objects-DPan0bzw-v54.js +1 -1
  301. package/adminWww/assets/Objects-DPan0bzw-v55.js +1 -1
  302. package/adminWww/assets/Objects-DPan0bzw-v56.js +1 -1
  303. package/adminWww/assets/Objects-DPan0bzw-v57.js +1 -1
  304. package/adminWww/assets/Objects-DPan0bzw-v58.js +1 -1
  305. package/adminWww/assets/Objects-DPan0bzw-v59.js +1 -1
  306. package/adminWww/assets/Objects-DPan0bzw-v60.js +1 -1
  307. package/adminWww/assets/Objects-DPan0bzw-v61.js +1 -1
  308. package/adminWww/assets/Objects-DPan0bzw-v62.js +1 -1
  309. package/adminWww/assets/Objects-DPan0bzw-v63.js +1 -1
  310. package/adminWww/assets/Objects-DPan0bzw-v64.js +1 -1
  311. package/adminWww/assets/Objects-DPan0bzw-v65.js +1 -1
  312. package/adminWww/assets/Objects-DPan0bzw-v66.js +1 -1
  313. package/adminWww/assets/Objects-DPan0bzw-v67.js +1 -1
  314. package/adminWww/assets/Objects-DPan0bzw-v68.js +1 -1
  315. package/adminWww/assets/Objects-DPan0bzw-v69.js +1 -1
  316. package/adminWww/assets/Objects-DPan0bzw-v70.js +1 -1
  317. package/adminWww/assets/Objects-DPan0bzw-v71.js +1 -1
  318. package/adminWww/assets/Objects-DPan0bzw-v72.js +1 -1
  319. package/adminWww/assets/Objects-DPan0bzw-v73.js +1 -1
  320. package/adminWww/assets/Objects-DPan0bzw-v74.js +1 -1
  321. package/adminWww/assets/Objects-DPan0bzw-v75.js +1 -878
  322. package/adminWww/assets/Objects-DPan0bzw-v76.js +878 -0
  323. package/adminWww/assets/Users-BgnBRgwU-v54.js +1 -1
  324. package/adminWww/assets/Users-BgnBRgwU-v55.js +1 -1
  325. package/adminWww/assets/Users-BgnBRgwU-v56.js +1 -1
  326. package/adminWww/assets/Users-BgnBRgwU-v57.js +1 -1
  327. package/adminWww/assets/Users-BgnBRgwU-v58.js +1 -1
  328. package/adminWww/assets/Users-BgnBRgwU-v59.js +1 -1
  329. package/adminWww/assets/Users-BgnBRgwU-v60.js +1 -1
  330. package/adminWww/assets/Users-BgnBRgwU-v61.js +1 -1
  331. package/adminWww/assets/Users-BgnBRgwU-v62.js +1 -1
  332. package/adminWww/assets/Users-BgnBRgwU-v63.js +1 -1
  333. package/adminWww/assets/Users-BgnBRgwU-v64.js +1 -1
  334. package/adminWww/assets/Users-BgnBRgwU-v65.js +1 -1
  335. package/adminWww/assets/Users-BgnBRgwU-v66.js +1 -1
  336. package/adminWww/assets/Users-BgnBRgwU-v67.js +1 -1
  337. package/adminWww/assets/Users-BgnBRgwU-v68.js +1 -1
  338. package/adminWww/assets/Users-BgnBRgwU-v69.js +1 -1
  339. package/adminWww/assets/Users-BgnBRgwU-v70.js +1 -1
  340. package/adminWww/assets/Users-BgnBRgwU-v71.js +1 -1
  341. package/adminWww/assets/Users-BgnBRgwU-v72.js +1 -1
  342. package/adminWww/assets/Users-BgnBRgwU-v73.js +1 -1
  343. package/adminWww/assets/Users-BgnBRgwU-v74.js +1 -1
  344. package/adminWww/assets/Users-BgnBRgwU-v75.js +1 -1
  345. package/adminWww/assets/Users-BgnBRgwU-v76.js +1 -0
  346. package/adminWww/assets/bootstrap-COulQZax-v54.js +1 -1
  347. package/adminWww/assets/bootstrap-COulQZax-v55.js +1 -1
  348. package/adminWww/assets/bootstrap-COulQZax-v56.js +1 -1
  349. package/adminWww/assets/bootstrap-COulQZax-v57.js +1 -1
  350. package/adminWww/assets/bootstrap-COulQZax-v58.js +1 -1
  351. package/adminWww/assets/bootstrap-COulQZax-v59.js +1 -1
  352. package/adminWww/assets/bootstrap-COulQZax-v60.js +1 -1
  353. package/adminWww/assets/bootstrap-COulQZax-v61.js +1 -1
  354. package/adminWww/assets/bootstrap-COulQZax-v62.js +1 -1
  355. package/adminWww/assets/bootstrap-COulQZax-v63.js +1 -1
  356. package/adminWww/assets/bootstrap-COulQZax-v64.js +1 -1
  357. package/adminWww/assets/bootstrap-COulQZax-v65.js +1 -1
  358. package/adminWww/assets/bootstrap-COulQZax-v66.js +1 -1
  359. package/adminWww/assets/bootstrap-COulQZax-v67.js +1 -1
  360. package/adminWww/assets/bootstrap-COulQZax-v68.js +1 -1
  361. package/adminWww/assets/bootstrap-COulQZax-v69.js +1 -1
  362. package/adminWww/assets/bootstrap-COulQZax-v70.js +1 -1
  363. package/adminWww/assets/bootstrap-COulQZax-v71.js +1 -1
  364. package/adminWww/assets/bootstrap-COulQZax-v72.js +1 -1
  365. package/adminWww/assets/bootstrap-COulQZax-v73.js +1 -1
  366. package/adminWww/assets/bootstrap-COulQZax-v74.js +1 -1
  367. package/adminWww/assets/bootstrap-COulQZax-v75.js +1 -317
  368. package/adminWww/assets/bootstrap-COulQZax-v76.js +317 -0
  369. package/adminWww/assets/hostInit-v54.js +1 -1
  370. package/adminWww/assets/hostInit-v55.js +1 -1
  371. package/adminWww/assets/hostInit-v56.js +1 -1
  372. package/adminWww/assets/hostInit-v57.js +1 -1
  373. package/adminWww/assets/hostInit-v58.js +1 -1
  374. package/adminWww/assets/hostInit-v59.js +1 -1
  375. package/adminWww/assets/hostInit-v60.js +1 -1
  376. package/adminWww/assets/hostInit-v61.js +1 -1
  377. package/adminWww/assets/hostInit-v62.js +1 -1
  378. package/adminWww/assets/hostInit-v63.js +1 -1
  379. package/adminWww/assets/hostInit-v64.js +1 -1
  380. package/adminWww/assets/hostInit-v65.js +1 -1
  381. package/adminWww/assets/hostInit-v66.js +1 -1
  382. package/adminWww/assets/hostInit-v67.js +1 -1
  383. package/adminWww/assets/hostInit-v68.js +1 -1
  384. package/adminWww/assets/hostInit-v69.js +1 -1
  385. package/adminWww/assets/hostInit-v70.js +1 -1
  386. package/adminWww/assets/hostInit-v71.js +1 -1
  387. package/adminWww/assets/hostInit-v72.js +1 -1
  388. package/adminWww/assets/hostInit-v73.js +1 -1
  389. package/adminWww/assets/hostInit-v74.js +1 -1
  390. package/adminWww/assets/hostInit-v75.js +1 -2
  391. package/adminWww/assets/hostInit-v76.js +2 -0
  392. package/adminWww/assets/index-CQZugZ1z-v54.js +1 -1
  393. package/adminWww/assets/index-CQZugZ1z-v55.js +1 -1
  394. package/adminWww/assets/index-CQZugZ1z-v56.js +1 -1
  395. package/adminWww/assets/index-CQZugZ1z-v57.js +1 -1
  396. package/adminWww/assets/index-CQZugZ1z-v58.js +1 -1
  397. package/adminWww/assets/index-CQZugZ1z-v59.js +1 -1
  398. package/adminWww/assets/index-CQZugZ1z-v60.js +1 -1
  399. package/adminWww/assets/index-CQZugZ1z-v61.js +1 -1
  400. package/adminWww/assets/index-CQZugZ1z-v62.js +1 -1
  401. package/adminWww/assets/index-CQZugZ1z-v63.js +1 -1
  402. package/adminWww/assets/index-CQZugZ1z-v64.js +1 -1
  403. package/adminWww/assets/index-CQZugZ1z-v65.js +1 -1
  404. package/adminWww/assets/index-CQZugZ1z-v66.js +1 -1
  405. package/adminWww/assets/index-CQZugZ1z-v67.js +1 -1
  406. package/adminWww/assets/index-CQZugZ1z-v68.js +1 -1
  407. package/adminWww/assets/index-CQZugZ1z-v69.js +1 -1
  408. package/adminWww/assets/index-CQZugZ1z-v70.js +1 -1
  409. package/adminWww/assets/index-CQZugZ1z-v71.js +1 -1
  410. package/adminWww/assets/index-CQZugZ1z-v72.js +1 -1
  411. package/adminWww/assets/index-CQZugZ1z-v73.js +1 -1
  412. package/adminWww/assets/index-CQZugZ1z-v74.js +1 -1
  413. package/adminWww/assets/index-CQZugZ1z-v75.js +1 -2
  414. package/adminWww/assets/index-CQZugZ1z-v76.js +2 -0
  415. package/adminWww/assets/index-D2ymscJA-v54.js +1 -1
  416. package/adminWww/assets/index-D2ymscJA-v55.js +1 -1
  417. package/adminWww/assets/index-D2ymscJA-v56.js +1 -1
  418. package/adminWww/assets/index-D2ymscJA-v57.js +1 -1
  419. package/adminWww/assets/index-D2ymscJA-v58.js +1 -1
  420. package/adminWww/assets/index-D2ymscJA-v59.js +1 -1
  421. package/adminWww/assets/index-D2ymscJA-v60.js +1 -1
  422. package/adminWww/assets/index-D2ymscJA-v61.js +1 -1
  423. package/adminWww/assets/index-D2ymscJA-v62.js +1 -1
  424. package/adminWww/assets/index-D2ymscJA-v63.js +1 -1
  425. package/adminWww/assets/index-D2ymscJA-v64.js +1 -1
  426. package/adminWww/assets/index-D2ymscJA-v65.js +1 -1
  427. package/adminWww/assets/index-D2ymscJA-v66.js +1 -1
  428. package/adminWww/assets/index-D2ymscJA-v67.js +1 -1
  429. package/adminWww/assets/index-D2ymscJA-v68.js +1 -1
  430. package/adminWww/assets/index-D2ymscJA-v69.js +1 -1
  431. package/adminWww/assets/index-D2ymscJA-v70.js +1 -1
  432. package/adminWww/assets/index-D2ymscJA-v71.js +1 -1
  433. package/adminWww/assets/index-D2ymscJA-v72.js +1 -1
  434. package/adminWww/assets/index-D2ymscJA-v73.js +1 -1
  435. package/adminWww/assets/index-D2ymscJA-v74.js +1 -1
  436. package/adminWww/assets/index-D2ymscJA-v75.js +1 -950
  437. package/adminWww/assets/index-D2ymscJA-v76.js +950 -0
  438. package/adminWww/assets/sentry-B7YeoTAx-v71.js +1 -1
  439. package/adminWww/assets/sentry-B7YeoTAx-v72.js +1 -1
  440. package/adminWww/assets/sentry-B7YeoTAx-v73.js +1 -1
  441. package/adminWww/assets/sentry-B7YeoTAx-v74.js +1 -1
  442. package/adminWww/assets/sentry-B7YeoTAx-v75.js +1 -1
  443. package/adminWww/assets/sentry-B7YeoTAx-v76.js +1 -0
  444. package/adminWww/css/eos-branding.css +39 -1
  445. package/adminWww/index.html +11 -11
  446. package/adminWww/js/eos-branding.js +1 -1
  447. package/adminWww/js/eos-console-quiet.js +1 -1
  448. package/adminWww/js/eos-manual-write-policy.js +367 -36
  449. package/adminWww/js/eos-objects-state-tools.js +1 -1
  450. package/adminWww/js/eos-policy-client.js +1 -1
  451. package/adminWww/js/eos-role-ui.js +1 -1
  452. package/adminWww/js/eos-security-ui.js +1 -1
  453. package/adminWww/mf-manifest.json +1 -1
  454. package/adminWww/remoteEntry-v54.js +1 -1
  455. package/adminWww/remoteEntry-v55.js +1 -1
  456. package/adminWww/remoteEntry-v56.js +1 -1
  457. package/adminWww/remoteEntry-v57.js +1 -1
  458. package/adminWww/remoteEntry-v58.js +1 -1
  459. package/adminWww/remoteEntry-v59.js +1 -1
  460. package/adminWww/remoteEntry-v60.js +1 -1
  461. package/adminWww/remoteEntry-v61.js +1 -1
  462. package/adminWww/remoteEntry-v62.js +1 -1
  463. package/adminWww/remoteEntry-v63.js +1 -1
  464. package/adminWww/remoteEntry-v64.js +1 -1
  465. package/adminWww/remoteEntry-v65.js +1 -1
  466. package/adminWww/remoteEntry-v66.js +1 -1
  467. package/adminWww/remoteEntry-v67.js +1 -1
  468. package/adminWww/remoteEntry-v68.js +1 -1
  469. package/adminWww/remoteEntry-v69.js +1 -1
  470. package/adminWww/remoteEntry-v70.js +1 -1
  471. package/adminWww/remoteEntry-v71.js +1 -1
  472. package/adminWww/remoteEntry-v72.js +1 -1
  473. package/adminWww/remoteEntry-v73.js +1 -1
  474. package/adminWww/remoteEntry-v74.js +1 -1
  475. package/adminWww/remoteEntry-v75.js +1 -2
  476. package/adminWww/remoteEntry-v76.js +2 -0
  477. package/adminWww/remoteEntry.js +1 -1
  478. package/io-package.json +9 -9
  479. package/package.json +1 -1
  480. package/tools/nexowatt-validate-package.cjs +3 -3
@@ -1 +1 @@
1
- export * from "./sentry-B7YeoTAx-v75.js";
1
+ export * from "./sentry-B7YeoTAx-v76.js";
@@ -1 +1 @@
1
- export * from "./sentry-B7YeoTAx-v75.js";
1
+ export * from "./sentry-B7YeoTAx-v76.js";
@@ -1 +1 @@
1
- export * from "./sentry-B7YeoTAx-v75.js";
1
+ export * from "./sentry-B7YeoTAx-v76.js";
@@ -1 +1 @@
1
- export * from "./sentry-B7YeoTAx-v75.js";
1
+ export * from "./sentry-B7YeoTAx-v76.js";
@@ -1 +1 @@
1
- import{j as s}from"./DefaultPropsProvider-BiXBMQYQ.js";import{i as f}from"./iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js";import{a as t,i as h}from"./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js";const p={},b={All:t.AllInclusive,messaging:t.Message,communication:t.WifiTethering,general:t.Apps,logic:t.VpnKey,alarm:t.NotificationsActive,"iot-systems":t.SystemUpdateAlt,"misc-data":t.EmojiSymbols,multimedia:t.PermMedia,network:t.SettingsEthernet,storage:t.Storage,visualization:t.Visibility,"climate-control":t.SettingsBrightness,"date-and-time":t.DateRange,energy:t.BatteryChargingFull,garden:t.FilterVintage,geoposition:t.LocationOn,hardware:t.Phonelink,health:t.Favorite,household:t.House,infrastructure:t.Apartment,lighting:t.EmojiObjects,protocols:t.DialerSip,utility:t.PhonelinkSetup,vehicle:t.AirportShuttle,"visualization-icons":t.BubbleChart,"visualization-widgets":t.Widgets,weather:t.Brightness6,metering:t.LinearScale};function x({iconName:d,className:a,adapter:n,socket:e,onClick:r,style:m}){const[_,g]=f.useState("");if(f.useEffect(()=>{n&&e&&(p[n]instanceof Promise||(p[n]=e.getObject(`system.adapter.${n}`)),p[n].then(o=>{var c;return((c=o==null?void 0:o.common)==null?void 0:c.icon)&&g(`../../adapter/${n}/${o.common.icon}`)}))},[n,e]),n)return s.jsx("img",{onClick:o=>r&&r(o),src:_||"",className:a,style:m,alt:""});const l=b[d]||t.Help;return s.jsx(l,{className:a,style:m,onClick:o=>r&&r(o)})}const y={button:{marginLeft:10,marginRight:10},icon:{marginRight:5}};function E({arrayItem:d,title:a,onClick:n,value:e,contained:r,buttonIcon:m,icons:_,t:g,translateSuffix:l,noTranslation:o}){const[c,u]=f.useState(null);return l=l||"",s.jsxs(s.Fragment,{children:[s.jsx(h.Tooltip,{title:a||"",slotProps:{popper:{sx:{pointerEvents:"none"}}},children:s.jsxs(h.Button,{style:y.button,variant:r?"contained":"outlined",color:"primary",onClick:i=>u(i.currentTarget),children:[m||_&&s.jsx(x,{iconName:e,style:y.icon}),typeof e=="number"||o?e:g(e+l)]})}),s.jsx(h.Menu,{anchorEl:c,open:!!c,disableScrollLock:!0,marginThreshold:8,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},slotProps:{root:{className:"eos-module-filter-menu"},paper:{className:"eos-module-filter-menu-paper",sx:{minWidth:180,maxWidth:"min(420px, calc(100vw - 24px))",maxHeight:"min(70vh, 640px)",overflowY:"auto"}}},onClose:()=>u(null),children:d.map(({name:i},S)=>s.jsxs(h.MenuItem,{selected:e||e===0?i===e:S===0,disabled:e||e===0?i===e:S===0,className:`tag-card-${i}`,style:{placeContent:"space-between"},value:i,onClick:()=>{n(i),u(null)},children:[_&&s.jsx(x,{iconName:i,style:y.icon}),typeof i=="number"||o?i:g(i+l)]},i))})]})}const A="data:image/svg+xml,%3csvg%20viewBox='0%200%20256%20230'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M251.22%20187.856c5.785%2010.045%206.345%2020.608%201.538%2028.958-4.8%208.357-14.192%2013.143-25.768%2013.143h-21.816c.259-4.068.431-8.17.431-12.302%200-4.628-.215-9.198-.531-13.754l14.35-.014c3.528%200%206.38-2.867%206.38-6.403a6.46%206.46%200%200%200-.768-3.053l-91.46-158.97a6.349%206.349%200%200%200-5.54-3.24%206.374%206.374%200%200%200-5.461%203.09l-14.522%2025.243c44.134%2033.27%2073.804%2084.813%2077.864%20143.333.316%204.548.531%209.119.531%2013.753%200%204.132-.172%208.228-.424%2012.302h-71.246c.388-4.053.611-8.148.611-12.302%200-4.649-.273-9.233-.776-13.753-3.52-32.206-19.286-60.748-42.503-80.89l-10.003%2017.376c17.54%2016.325%2029.512%2038.558%2032.767%2063.514.59%204.505.92%209.09.92%2013.753%200%204.154-.273%208.264-.74%2012.302H29.01c-11.576%200-20.968-4.793-25.768-13.15-4.807-8.35-4.247-18.905%201.538-28.958l13.56-23.238a79.42%2079.42%200%200%201%2020.715%2016.052l-8.083%2013.768a6.523%206.523%200%200%200-.77%203.054%206.383%206.383%200%200%200%206.382%206.395l32.033.015c-2.687-15.356-9.772-29.21-19.918-40.183-5.979-6.445-12.963-11.9-20.738-16.074l35.77-62.15a151.427%20151.427%200%200%201%2021.564%2014.624c30.827%2025.013%2051.644%2061.955%2055.416%20103.776h19.172c-3.91-48.892-28.477-92.006-64.937-120.548a171.205%20171.205%200%200%200-21.672-14.457l30.532-53.045C109.583%205.77%20118.42%200%20128.036%200c9.607%200%2018.438%205.77%2024.223%2015.823l98.961%20172.033z'%20fill='%23FB2D26'/%3e%3c/svg%3e";export{E as C,x as M,A as s};
1
+ export * from "./sentry-B7YeoTAx-v76.js";
@@ -0,0 +1 @@
1
+ import{j as s}from"./DefaultPropsProvider-BiXBMQYQ.js";import{i as f}from"./iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js";import{a as t,i as h}from"./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js";const p={},b={All:t.AllInclusive,messaging:t.Message,communication:t.WifiTethering,general:t.Apps,logic:t.VpnKey,alarm:t.NotificationsActive,"iot-systems":t.SystemUpdateAlt,"misc-data":t.EmojiSymbols,multimedia:t.PermMedia,network:t.SettingsEthernet,storage:t.Storage,visualization:t.Visibility,"climate-control":t.SettingsBrightness,"date-and-time":t.DateRange,energy:t.BatteryChargingFull,garden:t.FilterVintage,geoposition:t.LocationOn,hardware:t.Phonelink,health:t.Favorite,household:t.House,infrastructure:t.Apartment,lighting:t.EmojiObjects,protocols:t.DialerSip,utility:t.PhonelinkSetup,vehicle:t.AirportShuttle,"visualization-icons":t.BubbleChart,"visualization-widgets":t.Widgets,weather:t.Brightness6,metering:t.LinearScale};function x({iconName:d,className:a,adapter:n,socket:e,onClick:r,style:m}){const[_,g]=f.useState("");if(f.useEffect(()=>{n&&e&&(p[n]instanceof Promise||(p[n]=e.getObject(`system.adapter.${n}`)),p[n].then(o=>{var c;return((c=o==null?void 0:o.common)==null?void 0:c.icon)&&g(`../../adapter/${n}/${o.common.icon}`)}))},[n,e]),n)return s.jsx("img",{onClick:o=>r&&r(o),src:_||"",className:a,style:m,alt:""});const l=b[d]||t.Help;return s.jsx(l,{className:a,style:m,onClick:o=>r&&r(o)})}const y={button:{marginLeft:10,marginRight:10},icon:{marginRight:5}};function E({arrayItem:d,title:a,onClick:n,value:e,contained:r,buttonIcon:m,icons:_,t:g,translateSuffix:l,noTranslation:o}){const[c,u]=f.useState(null);return l=l||"",s.jsxs(s.Fragment,{children:[s.jsx(h.Tooltip,{title:a||"",slotProps:{popper:{sx:{pointerEvents:"none"}}},children:s.jsxs(h.Button,{style:y.button,variant:r?"contained":"outlined",color:"primary",onClick:i=>u(i.currentTarget),children:[m||_&&s.jsx(x,{iconName:e,style:y.icon}),typeof e=="number"||o?e:g(e+l)]})}),s.jsx(h.Menu,{anchorEl:c,open:!!c,disableScrollLock:!0,marginThreshold:8,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},slotProps:{root:{className:"eos-module-filter-menu"},paper:{className:"eos-module-filter-menu-paper",sx:{minWidth:180,maxWidth:"min(420px, calc(100vw - 24px))",maxHeight:"min(70vh, 640px)",overflowY:"auto"}}},onClose:()=>u(null),children:d.map(({name:i},S)=>s.jsxs(h.MenuItem,{selected:e||e===0?i===e:S===0,disabled:e||e===0?i===e:S===0,className:`tag-card-${i}`,style:{placeContent:"space-between"},value:i,onClick:()=>{n(i),u(null)},children:[_&&s.jsx(x,{iconName:i,style:y.icon}),typeof i=="number"||o?i:g(i+l)]},i))})]})}const A="data:image/svg+xml,%3csvg%20viewBox='0%200%20256%20230'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M251.22%20187.856c5.785%2010.045%206.345%2020.608%201.538%2028.958-4.8%208.357-14.192%2013.143-25.768%2013.143h-21.816c.259-4.068.431-8.17.431-12.302%200-4.628-.215-9.198-.531-13.754l14.35-.014c3.528%200%206.38-2.867%206.38-6.403a6.46%206.46%200%200%200-.768-3.053l-91.46-158.97a6.349%206.349%200%200%200-5.54-3.24%206.374%206.374%200%200%200-5.461%203.09l-14.522%2025.243c44.134%2033.27%2073.804%2084.813%2077.864%20143.333.316%204.548.531%209.119.531%2013.753%200%204.132-.172%208.228-.424%2012.302h-71.246c.388-4.053.611-8.148.611-12.302%200-4.649-.273-9.233-.776-13.753-3.52-32.206-19.286-60.748-42.503-80.89l-10.003%2017.376c17.54%2016.325%2029.512%2038.558%2032.767%2063.514.59%204.505.92%209.09.92%2013.753%200%204.154-.273%208.264-.74%2012.302H29.01c-11.576%200-20.968-4.793-25.768-13.15-4.807-8.35-4.247-18.905%201.538-28.958l13.56-23.238a79.42%2079.42%200%200%201%2020.715%2016.052l-8.083%2013.768a6.523%206.523%200%200%200-.77%203.054%206.383%206.383%200%200%200%206.382%206.395l32.033.015c-2.687-15.356-9.772-29.21-19.918-40.183-5.979-6.445-12.963-11.9-20.738-16.074l35.77-62.15a151.427%20151.427%200%200%201%2021.564%2014.624c30.827%2025.013%2051.644%2061.955%2055.416%20103.776h19.172c-3.91-48.892-28.477-92.006-64.937-120.548a171.205%20171.205%200%200%200-21.672-14.457l30.532-53.045C109.583%205.77%20118.42%200%20128.036%200c9.607%200%2018.438%205.77%2024.223%2015.823l98.961%20172.033z'%20fill='%23FB2D26'/%3e%3c/svg%3e";export{E as C,x as M,A as s};
@@ -3764,7 +3764,7 @@ html.eos-objects-surface [data-eos-scalar-capture="1"]:hover {
3764
3764
  box-shadow: inset 0 0 0 1px rgba(0, 255, 136, .30) !important;
3765
3765
  }
3766
3766
 
3767
- /* === NexoWatt EOS v7.9.75: type-aware manual datapoint controls =========
3767
+ /* === NexoWatt EOS v7.9.76: universal manual datapoint controls =========
3768
3768
  Button/trigger and boolean switch states use the whole value cell as one
3769
3769
  deterministic action target. Safety-relevant commands remain visible but
3770
3770
  are locked outside expert mode. */
@@ -3811,3 +3811,41 @@ html .eos-object-value-cell[data-eos-expert-only="1"]:hover {
3811
3811
  background: rgba(255, 177, 0, .11) !important;
3812
3812
  box-shadow: inset 0 0 0 1px rgba(255, 177, 0, .25) !important;
3813
3813
  }
3814
+
3815
+ /* === NexoWatt EOS v7.9.76: universal manual write surface ================
3816
+ Every declared writable state gets a deterministic full-cell hit target.
3817
+ Write-only states without a current read value show a visible placeholder.
3818
+ The object browser remains responsible for ACL and common.write semantics. */
3819
+ html.eos-app.eos-objects-surface .eos-object-value-cell[data-eos-object-writable="1"],
3820
+ html.eos-objects-surface .eos-object-value-cell[data-eos-object-writable="1"] {
3821
+ min-height: 32px !important;
3822
+ display: flex !important;
3823
+ align-items: center !important;
3824
+ width: 100% !important;
3825
+ box-sizing: border-box !important;
3826
+ pointer-events: auto !important;
3827
+ cursor: pointer !important;
3828
+ }
3829
+ html.eos-app.eos-objects-surface .eos-object-value-cell[data-eos-write-behavior="dialog"],
3830
+ html.eos-objects-surface .eos-object-value-cell[data-eos-write-behavior="dialog"] {
3831
+ cursor: text !important;
3832
+ }
3833
+ html.eos-app.eos-objects-surface .eos-write-placeholder,
3834
+ html.eos-objects-surface .eos-write-placeholder {
3835
+ display: inline-flex !important;
3836
+ align-items: center !important;
3837
+ min-height: 26px !important;
3838
+ padding: 0 8px !important;
3839
+ border: 1px dashed rgba(0, 255, 170, .42) !important;
3840
+ border-radius: 7px !important;
3841
+ color: rgba(226, 255, 246, .82) !important;
3842
+ background: rgba(0, 255, 170, .055) !important;
3843
+ font-size: 12px !important;
3844
+ line-height: 1.2 !important;
3845
+ pointer-events: none !important;
3846
+ }
3847
+ html.eos-app.eos-objects-surface .eos-object-value-cell[data-eos-object-writable="1"]:focus-visible,
3848
+ html.eos-objects-surface .eos-object-value-cell[data-eos-object-writable="1"]:focus-visible {
3849
+ outline: 2px solid rgba(0, 255, 170, .75) !important;
3850
+ outline-offset: -2px !important;
3851
+ }
@@ -7,9 +7,9 @@
7
7
  <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate" />
8
8
  <meta http-equiv="Pragma" content="no-cache" />
9
9
  <meta http-equiv="Expires" content="0" />
10
- <script src="./js/eos-console-quiet.js?v=75"></script>
11
- <script src="./js/eos-manual-write-policy.js?v=75"></script>
12
- <script type="module" src="./assets/hostInit-v75.js?v=75"></script>
10
+ <script src="./js/eos-console-quiet.js?v=76"></script>
11
+ <script src="./js/eos-manual-write-policy.js?v=76"></script>
12
+ <script type="module" src="./assets/hostInit-v76.js?v=76"></script>
13
13
 
14
14
  <meta charset="utf-8" />
15
15
  <link
@@ -36,7 +36,7 @@
36
36
  rel="stylesheet"
37
37
  href="css/leaflet.css"
38
38
  />
39
- <link rel="stylesheet" href="./css/eos-branding.css?v=75" />
39
+ <link rel="stylesheet" href="./css/eos-branding.css?v=76" />
40
40
  <link
41
41
  rel="manifest"
42
42
  href="manifest.json"
@@ -156,15 +156,15 @@
156
156
  false,
157
157
  );
158
158
  </script>
159
- <script type="module" crossorigin src="./assets/index-CQZugZ1z-v75.js?v=75"></script>
159
+ <script type="module" crossorigin src="./assets/index-CQZugZ1z-v76.js?v=76"></script>
160
160
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
161
161
  <link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
162
- <script defer src="./js/eos-policy-client.js?v=75"></script>
163
- <script defer src="./js/eos-branding.js?v=75"></script>
164
- <script defer src="./js/eos-security-ui.js?v=75"></script>
165
- <script defer src="./js/eos-role-ui.js?v=75"></script>
166
- <script defer src="./js/eos-assistant.js?v=75"></script>
167
- <script defer src="./js/eos-objects-state-tools.js?v=75"></script>
162
+ <script defer src="./js/eos-policy-client.js?v=76"></script>
163
+ <script defer src="./js/eos-branding.js?v=76"></script>
164
+ <script defer src="./js/eos-security-ui.js?v=76"></script>
165
+ <script defer src="./js/eos-role-ui.js?v=76"></script>
166
+ <script defer src="./js/eos-assistant.js?v=76"></script>
167
+ <script defer src="./js/eos-objects-state-tools.js?v=76"></script>
168
168
  </head>
169
169
  <body>
170
170
  <noscript>You need to enable JavaScript to run this app.</noscript>
@@ -1,7 +1,7 @@
1
1
  (() => {
2
2
  'use strict';
3
3
 
4
- window.NEXOWATT_EOS_UI_VERSION = 'v75-type-aware-manual-controls';
4
+ window.NEXOWATT_EOS_UI_VERSION = 'v76-universal-manual-write';
5
5
 
6
6
  const BRAND = 'NexoWatt EOS';
7
7
  const EOS_MEANING = 'Energy Operation System';
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  'use strict';
3
- window.NEXOWATT_EOS_CONSOLE_QUIET_VERSION = 'v75-type-aware-manual-controls';
3
+ window.NEXOWATT_EOS_CONSOLE_QUIET_VERSION = 'v76-universal-manual-write';
4
4
  // Diagnostic output is intentionally left untouched in the stability release.
5
5
  // Suppressing broad console prefixes hid important performance and runtime clues.
6
6
  window.NEXOWATT_EOS_RESTORE_CONSOLE = () => undefined;
@@ -1,45 +1,64 @@
1
- /* NexoWatt EOS manual datapoint write policy v7.9.75 */
1
+ /* NexoWatt EOS manual datapoint write policy v7.9.76 */
2
2
  (function (root, factory) {
3
3
  'use strict';
4
4
  const api = factory();
5
5
  if (typeof module === 'object' && module.exports) module.exports = api;
6
6
  if (!root) return;
7
7
 
8
- root.NEXOWATT_EOS_MANUAL_WRITE_POLICY_VERSION = 'v75-type-aware-manual-controls';
8
+ root.NEXOWATT_EOS_MANUAL_WRITE_POLICY_VERSION = 'v76-universal-manual-write';
9
9
  root.NEXOWATT_EOS_GET_WRITE_BEHAVIOR = api.getWriteBehavior;
10
10
  root.NEXOWATT_EOS_IS_EXPERT_ONLY_STATE = api.isExpertOnlyState;
11
11
  root.NEXOWATT_EOS_COERCE_BOOLEAN = api.toBoolean;
12
12
  root.NEXOWATT_EOS_WRITE_MANUAL_STATE = api.writeManualState;
13
+ root.NEXOWATT_EOS_RESOLVE_EDITOR_TYPE = api.resolveEditorType;
14
+ root.NEXOWATT_EOS_PREPARE_EDITOR_VALUE = api.prepareEditorValue;
15
+ root.NEXOWATT_EOS_COERCE_WRITE_VALUE = api.coerceWriteValue;
16
+ root.NEXOWATT_EOS_GET_DIRECT_WRITE_VALUE = api.getDirectWriteValue;
17
+ root.NEXOWATT_EOS_GET_WRITE_LABEL = api.getWriteLabel;
18
+ root.NEXOWATT_EOS_NORMALIZE_STATES = api.normalizeStates;
13
19
  })(typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : null, function () {
14
20
  'use strict';
15
21
 
16
- const pendingWrites = new Map();
22
+ // Manual writes are serialized per datapoint. A second command is queued
23
+ // instead of being silently dropped while the previous write is pending.
24
+ const writeQueues = new Map();
17
25
 
18
26
  const normalizeText = value => String(value == null ? '' : value)
19
27
  .normalize('NFKD')
20
28
  .replace(/[\u0300-\u036f]/g, '')
21
- .toLowerCase();
29
+ .toLowerCase()
30
+ .trim();
22
31
 
23
32
  const flattenTranslatedText = value => {
24
33
  if (value == null) return '';
25
34
  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);
26
- if (typeof value === 'object') return Object.values(value).map(flattenTranslatedText).join(' ');
35
+ if (typeof value === 'object') return Object.values(value).map(flattenTranslatedText).filter(Boolean).join(' ');
27
36
  return '';
28
37
  };
29
38
 
30
- const getExplicitExpertOnly = obj => {
31
- const common = obj && obj.common ? obj.common : {};
32
- const native = obj && obj.native ? obj.native : {};
39
+ const getCommon = obj => (obj && obj.common && typeof obj.common === 'object' ? obj.common : {});
40
+ const getNative = obj => (obj && obj.native && typeof obj.native === 'object' ? obj.native : {});
41
+
42
+ const getExplicitValue = (obj, name) => {
43
+ const common = getCommon(obj);
44
+ const native = getNative(obj);
33
45
  const custom = common.custom || {};
34
46
  const candidates = [
35
- common.manualWriteExpertOnly,
36
- common.expertOnly,
37
- native.manualWriteExpertOnly,
38
- native.nexowatt && native.nexowatt.manualWriteExpertOnly,
39
- custom.nexowatt && custom.nexowatt.manualWriteExpertOnly,
40
- custom['nexowatt.eos'] && custom['nexowatt.eos'].manualWriteExpertOnly,
41
- custom['eos-admin'] && custom['eos-admin'].manualWriteExpertOnly,
47
+ common[name],
48
+ native[name],
49
+ native.nexowatt && native.nexowatt[name],
50
+ custom.nexowatt && custom.nexowatt[name],
51
+ custom['nexowatt.eos'] && custom['nexowatt.eos'][name],
52
+ custom['eos-admin'] && custom['eos-admin'][name],
42
53
  ];
54
+ for (const value of candidates) {
55
+ if (value !== undefined) return value;
56
+ }
57
+ return undefined;
58
+ };
59
+
60
+ const getExplicitExpertOnly = obj => {
61
+ const candidates = [getExplicitValue(obj, 'manualWriteExpertOnly'), getExplicitValue(obj, 'expertOnly')];
43
62
  for (const value of candidates) {
44
63
  if (typeof value === 'boolean') return value;
45
64
  }
@@ -50,7 +69,7 @@
50
69
  const explicit = getExplicitExpertOnly(obj);
51
70
  if (explicit !== undefined) return explicit;
52
71
 
53
- const common = obj && obj.common ? obj.common : {};
72
+ const common = getCommon(obj);
54
73
  const role = normalizeText(common.role);
55
74
  const text = normalizeText([
56
75
  id,
@@ -61,7 +80,8 @@
61
80
  ].join(' '));
62
81
  const compact = text.replace(/[^a-z0-9]+/g, '');
63
82
 
64
- // Writable raw power/current commands are never exposed in normal mode.
83
+ // Conservative safety policy for commands that can reset equipment,
84
+ // open contactors or materially change charging/power/current limits.
65
85
  if (/^(?:level\.)?(?:power|current)(?:\.|$)/.test(role)) return true;
66
86
  if (/^(?:value\.)?(?:power|current)\.setpoint(?:\.|$)/.test(role)) return true;
67
87
 
@@ -85,54 +105,365 @@
85
105
  const toBoolean = value => {
86
106
  if (value === true || value === 1) return true;
87
107
  if (value === false || value === 0 || value == null) return false;
88
- const normalized = normalizeText(value).trim();
89
- if (['true', '1', 'on', 'yes', 'ja', 'enabled', 'active'].includes(normalized)) return true;
90
- if (['false', '0', 'off', 'no', 'nein', 'disabled', 'inactive', '', 'null', '(null)'].includes(normalized)) return false;
108
+ const normalized = normalizeText(value);
109
+ if (['true', '1', 'on', 'yes', 'ja', 'enabled', 'enable', 'active', 'start', 'open', 'ein', 'an'].includes(normalized)) return true;
110
+ if (['false', '0', 'off', 'no', 'nein', 'disabled', 'disable', 'inactive', 'stop', 'closed', 'aus', '', 'null', '(null)'].includes(normalized)) return false;
91
111
  return Boolean(value);
92
112
  };
93
113
 
114
+ const normalizeSingleCommonType = value => {
115
+ const type = normalizeText(value);
116
+ if (type === 'int' || type === 'integer' || type === 'float' || type === 'double') return 'number';
117
+ if (type === 'bool') return 'boolean';
118
+ if (type === 'object' || type === 'array') return type;
119
+ if (type === 'json') return 'json';
120
+ if (type === 'number' || type === 'boolean' || type === 'string' || type === 'mixed' || type === 'file') return type;
121
+ return '';
122
+ };
123
+
124
+ const normalizeCommonType = value => {
125
+ if (Array.isArray(value)) {
126
+ const types = [...new Set(value.map(normalizeSingleCommonType).filter(Boolean))];
127
+ return types.length === 1 ? types[0] : types.length ? 'mixed' : '';
128
+ }
129
+ return normalizeSingleCommonType(value);
130
+ };
131
+
132
+ const inferPrimitiveType = value => {
133
+ if (Array.isArray(value)) return 'array';
134
+ if (value !== null && typeof value === 'object') return 'object';
135
+ if (typeof value === 'boolean') return 'boolean';
136
+ if (typeof value === 'number') return 'number';
137
+ if (typeof value === 'string') return 'string';
138
+ return '';
139
+ };
140
+
141
+ const normalizeStates = states => {
142
+ if (!states) return null;
143
+ if (Array.isArray(states)) {
144
+ const result = {};
145
+ states.forEach((value, index) => { result[String(index)] = flattenTranslatedText(value); });
146
+ return result;
147
+ }
148
+ if (typeof states === 'string') {
149
+ const result = {};
150
+ states.split(/[;,]/).map(part => part.trim()).filter(Boolean).forEach(part => {
151
+ const separator = part.includes(':') ? ':' : part.includes('=') ? '=' : '';
152
+ if (!separator) return;
153
+ const index = part.indexOf(separator);
154
+ const key = part.slice(0, index).trim();
155
+ const label = part.slice(index + 1).trim();
156
+ if (key) result[key] = label || key;
157
+ });
158
+ return Object.keys(result).length ? result : null;
159
+ }
160
+ if (typeof states === 'object') {
161
+ const result = {};
162
+ Object.keys(states).forEach(key => { result[String(key)] = flattenTranslatedText(states[key]); });
163
+ return result;
164
+ }
165
+ return null;
166
+ };
167
+
168
+ const resolveEditorType = (obj, currentValue, states) => {
169
+ const common = getCommon(obj);
170
+ const normalizedStates = normalizeStates(states || common.states);
171
+ if (normalizedStates && Object.keys(normalizedStates).length) return 'states';
172
+
173
+ const declared = normalizeCommonType(common.type);
174
+ if (declared === 'file') return 'file';
175
+ if (declared === 'object' || declared === 'array' || declared === 'json') return 'json';
176
+ if (declared === 'number' || declared === 'boolean' || declared === 'string') return declared;
177
+
178
+ const candidate = currentValue !== undefined && currentValue !== null ? currentValue : common.def;
179
+ const inferred = inferPrimitiveType(candidate);
180
+ if (inferred === 'object' || inferred === 'array') return 'json';
181
+ if (inferred) return inferred;
182
+ return 'string';
183
+ };
184
+
185
+ const stringifyJsonValue = value => {
186
+ if (typeof value === 'string') {
187
+ try {
188
+ return JSON.stringify(JSON.parse(value), null, 2);
189
+ } catch {
190
+ return value;
191
+ }
192
+ }
193
+ if (value === undefined || value === null) return '';
194
+ try {
195
+ return JSON.stringify(value, null, 2);
196
+ } catch {
197
+ return String(value);
198
+ }
199
+ };
200
+
201
+ const isNumberInRange = (value, common) => {
202
+ if (value === '') return false;
203
+ const number = Number(typeof value === 'string' ? value.trim().replace(',', '.') : value);
204
+ if (!Number.isFinite(number)) return false;
205
+ if (typeof common.min === 'number' && number < common.min) return false;
206
+ if (typeof common.max === 'number' && number > common.max) return false;
207
+ return true;
208
+ };
209
+
210
+ const prepareEditorValue = (obj, currentValue, states) => {
211
+ const common = getCommon(obj);
212
+ const type = resolveEditorType(obj, currentValue, states);
213
+ const hasCurrentValue = currentValue !== undefined && currentValue !== null;
214
+ const hasDefault = common.def !== undefined && common.def !== null;
215
+ let value = hasCurrentValue ? currentValue : hasDefault ? common.def : undefined;
216
+ let valid = true;
217
+
218
+ if (type === 'number') {
219
+ if (value === undefined || value === '') {
220
+ value = '';
221
+ valid = false;
222
+ } else {
223
+ const normalized = typeof value === 'string' ? value.trim().replace(',', '.') : value;
224
+ const parsed = Number(normalized);
225
+ if (Number.isFinite(parsed)) {
226
+ value = parsed;
227
+ valid = isNumberInRange(parsed, common);
228
+ } else {
229
+ value = String(value);
230
+ valid = false;
231
+ }
232
+ }
233
+ } else if (type === 'boolean') {
234
+ value = toBoolean(value);
235
+ } else if (type === 'json') {
236
+ const declared = normalizeCommonType(common.type);
237
+ if (value === undefined) value = declared === 'array' ? '[]' : declared === 'object' ? '{}' : '';
238
+ value = stringifyJsonValue(value);
239
+ try {
240
+ JSON.parse(value);
241
+ valid = true;
242
+ } catch {
243
+ valid = false;
244
+ }
245
+ } else if (type === 'states') {
246
+ value = value === undefined ? '' : value;
247
+ const normalizedStates = normalizeStates(states || common.states) || {};
248
+ valid = value !== '' && Object.prototype.hasOwnProperty.call(normalizedStates, String(value));
249
+ } else {
250
+ value = value === undefined ? '' : String(value);
251
+ }
252
+
253
+ return { type, value, propsValue: value, valid };
254
+ };
255
+
256
+ const parseNumber = (value, common) => {
257
+ if (value === null || value === 'null') return null;
258
+ const normalized = typeof value === 'string' ? value.trim().replace(',', '.') : value;
259
+ if (normalized === '') throw new Error('Der Zahlenwert darf nicht leer sein.');
260
+ const number = Number(normalized);
261
+ if (!Number.isFinite(number)) throw new Error(`Ungültiger Zahlenwert: ${String(value)}`);
262
+ if (typeof common.min === 'number' && number < common.min) throw new Error(`Wert liegt unter dem Minimum ${common.min}.`);
263
+ if (typeof common.max === 'number' && number > common.max) throw new Error(`Wert liegt über dem Maximum ${common.max}.`);
264
+ return number;
265
+ };
266
+
267
+ const parseJsonStateValue = (value, declared) => {
268
+ const raw = value == null ? '' : typeof value === 'string' ? value : JSON.stringify(value);
269
+ if (!raw.trim()) throw new Error('Der JSON-Wert darf nicht leer sein.');
270
+ const parsed = JSON.parse(raw);
271
+ if (declared === 'array' && !Array.isArray(parsed)) throw new Error('Der Datenpunkt erwartet ein JSON-Array.');
272
+ if (declared === 'object' && (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))) {
273
+ throw new Error('Der Datenpunkt erwartet ein JSON-Objekt.');
274
+ }
275
+ // ioBroker StateValue is scalar. Structured values are therefore stored
276
+ // as a validated JSON string instead of passing an unsupported object.
277
+ return raw;
278
+ };
279
+
280
+ const coerceByDeclaredType = (obj, value, currentValue) => {
281
+ const common = getCommon(obj);
282
+ const declared = normalizeCommonType(common.type);
283
+ if (value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'value')) value = value.value;
284
+
285
+ if (declared === 'number') return parseNumber(value, common);
286
+ if (declared === 'boolean') return value === null || value === 'null' ? null : toBoolean(value);
287
+ if (declared === 'string') return value === null ? '' : String(value);
288
+ if (declared === 'object' || declared === 'array' || declared === 'json') return parseJsonStateValue(value, declared);
289
+
290
+ // mixed or missing type: preserve the current/default primitive type where possible.
291
+ const candidate = currentValue !== undefined && currentValue !== null ? currentValue : common.def;
292
+ const inferred = inferPrimitiveType(candidate);
293
+ if (inferred === 'number') return parseNumber(value, common);
294
+ if (inferred === 'boolean') return value === null || value === 'null' ? null : toBoolean(value);
295
+ if (inferred === 'object' || inferred === 'array') return parseJsonStateValue(value, inferred);
296
+ if (typeof value === 'string' && value.trim() === 'null') return null;
297
+ return value == null ? '' : value;
298
+ };
299
+
300
+ const coerceStateKey = (obj, value, currentValue) => {
301
+ const raw = value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'value') ? value.value : value;
302
+ return coerceByDeclaredType(obj, raw, currentValue);
303
+ };
304
+
305
+ const coerceWriteValue = (obj, rawValue, editorType, originalType, currentValue) => {
306
+ const common = getCommon(obj);
307
+ if (common.write === false) throw new Error('common.write=false');
308
+
309
+ if (editorType === 'states') return coerceStateKey(obj, rawValue, currentValue);
310
+ if (editorType === 'number') return parseNumber(rawValue, common);
311
+ if (editorType === 'boolean') return rawValue === null || rawValue === 'null' ? null : toBoolean(rawValue);
312
+ if (editorType === 'json') return parseJsonStateValue(rawValue, normalizeCommonType(common.type));
313
+ if (editorType === 'string') return rawValue == null ? '' : String(rawValue);
314
+ return coerceByDeclaredType(obj, rawValue, currentValue);
315
+ };
316
+
317
+ const booleanTokens = {
318
+ true: ['true', '1', 'on', 'yes', 'ja', 'enabled', 'enable', 'active', 'start', 'open', 'ein', 'an'],
319
+ false: ['false', '0', 'off', 'no', 'nein', 'disabled', 'disable', 'inactive', 'stop', 'closed', 'aus'],
320
+ };
321
+
322
+ const stringTogglePairs = [
323
+ ['off', 'on'], ['false', 'true'], ['0', '1'], ['disabled', 'enabled'], ['disable', 'enable'],
324
+ ['inactive', 'active'], ['stop', 'start'], ['closed', 'open'], ['aus', 'ein'], ['nein', 'ja'],
325
+ ];
326
+
327
+ const findBooleanStateKey = (states, desired) => {
328
+ const normalized = normalizeStates(states);
329
+ if (!normalized) return undefined;
330
+ const tokens = desired ? booleanTokens.true : booleanTokens.false;
331
+ for (const [key, label] of Object.entries(normalized)) {
332
+ if (tokens.includes(normalizeText(key)) || tokens.includes(normalizeText(label))) return key;
333
+ }
334
+ return undefined;
335
+ };
336
+
337
+ const getStringToggleValue = (currentValue, desired) => {
338
+ const raw = String(currentValue == null ? '' : currentValue).trim();
339
+ const current = normalizeText(raw);
340
+ let result = desired ? 'true' : 'false';
341
+ for (const [falseToken, trueToken] of stringTogglePairs) {
342
+ if (current === falseToken || current === trueToken) {
343
+ result = desired ? trueToken : falseToken;
344
+ break;
345
+ }
346
+ }
347
+ if (raw && raw === raw.toUpperCase()) return result.toUpperCase();
348
+ if (raw && raw[0] === raw[0].toUpperCase() && raw.slice(1) === raw.slice(1).toLowerCase()) {
349
+ return result.charAt(0).toUpperCase() + result.slice(1);
350
+ }
351
+ return result;
352
+ };
353
+
354
+ const getDirectWriteValue = (id, obj, item, behavior, currentValue) => {
355
+ const common = getCommon(obj);
356
+ const desired = behavior === 'button' ? true : !toBoolean(currentValue);
357
+ const explicitName = behavior === 'button' ? 'manualTriggerValue' : desired ? 'manualTrueValue' : 'manualFalseValue';
358
+ const explicit = getExplicitValue(obj, explicitName);
359
+ if (explicit !== undefined) return coerceByDeclaredType(obj, explicit, currentValue);
360
+
361
+ const stateKey = findBooleanStateKey(common.states, desired);
362
+ if (stateKey !== undefined) return coerceStateKey(obj, stateKey, currentValue);
363
+
364
+ if (behavior === 'button' && common.def !== undefined && common.def !== null) {
365
+ return coerceByDeclaredType(obj, common.def, currentValue);
366
+ }
367
+
368
+ const declared = normalizeCommonType(common.type);
369
+ if (declared === 'number') {
370
+ if (behavior === 'switch') {
371
+ if (desired && typeof common.max === 'number') return common.max;
372
+ if (!desired && typeof common.min === 'number') return common.min;
373
+ }
374
+ return desired ? 1 : 0;
375
+ }
376
+ if (declared === 'string') return getStringToggleValue(currentValue, desired);
377
+ if (declared === 'object' || declared === 'array' || declared === 'json') {
378
+ throw new Error('Objekt-/Array-Befehle müssen über den Wertdialog gesetzt werden.');
379
+ }
380
+ if (declared === 'mixed') {
381
+ if (typeof currentValue === 'number') return desired ? 1 : 0;
382
+ if (typeof currentValue === 'string') return getStringToggleValue(currentValue, desired);
383
+ }
384
+ return desired;
385
+ };
386
+
94
387
  const getWriteBehavior = (id, obj, item, expertMode) => {
95
388
  if (!obj || obj.type !== 'state') return 'readonly';
96
- const common = obj.common || {};
389
+ const common = getCommon(obj);
97
390
  if (common.write === false) return 'readonly';
98
391
  if (isExpertOnlyState(id, obj) && !expertMode) return 'expert-only';
99
- if (common.type === 'file') return 'file';
392
+ if (normalizeCommonType(common.type) === 'file') return 'file';
100
393
 
101
394
  const role = normalizeText(common.role);
102
395
  const data = item && item.data ? item.data : {};
103
- const isButton = Boolean(data.button) || role === 'button' || role.startsWith('button.') || role === 'action' || role.startsWith('action.');
104
- if (isButton) return 'button';
105
- if (Boolean(data.switch) || role === 'switch' || role.startsWith('switch.') || common.type === 'boolean') return 'switch';
396
+ const declared = normalizeCommonType(common.type);
397
+ const explicitControl = normalizeText(
398
+ getExplicitValue(obj, 'manualWriteControl') !== undefined
399
+ ? getExplicitValue(obj, 'manualWriteControl')
400
+ : getExplicitValue(obj, 'manualControl'),
401
+ );
402
+ if (['button', 'trigger', 'action'].includes(explicitControl) && !['object', 'array', 'json'].includes(declared)) return 'button';
403
+ if (['dialog', 'value', 'editor'].includes(explicitControl)) return 'dialog';
404
+ if (['switch', 'toggle'].includes(explicitControl)) return 'switch';
405
+
406
+ const normalizedStates = normalizeStates(common.states);
407
+ const stateCount = normalizedStates ? Object.keys(normalizedStates).length : 0;
408
+ const isButton = Boolean(data.button) || role === 'button' || role.startsWith('button.') || role === 'action' || role.startsWith('action.') || role === 'trigger' || role.startsWith('trigger.');
409
+ if (isButton && declared !== 'object' && declared !== 'array' && declared !== 'json') return 'button';
410
+ if (declared === 'boolean') return 'switch';
411
+ // A numeric/string mode with more than two states is a selector, not a
412
+ // toggle. Treating it as a switch would make only two of its values reachable.
413
+ if ((Boolean(data.switch) || role === 'switch' || role.startsWith('switch.')) && stateCount <= 2) return 'switch';
106
414
  return 'dialog';
107
415
  };
108
416
 
417
+ const getWriteLabel = (id, obj, behavior, expertMode, hasState) => {
418
+ if (behavior === 'readonly') return 'Nur lesbar';
419
+ if (behavior === 'expert-only') return 'Nur im Expertenmodus beschreibbar';
420
+ if (behavior === 'button') return 'Befehl auslösen';
421
+ if (behavior === 'switch') return 'Schalten';
422
+ if (!hasState) return 'Wert setzen (schreibender Datenpunkt ohne aktuellen Lesewert)';
423
+ return 'Wert bearbeiten';
424
+ };
425
+
109
426
  const writeManualState = (socket, id, value) => {
110
427
  if (!socket || typeof socket.setState !== 'function') {
111
428
  return Promise.reject(new Error('ioBroker socket is not ready'));
112
429
  }
113
430
  const key = String(id || '');
114
431
  if (!key) return Promise.reject(new Error('Missing datapoint ID'));
115
- if (pendingWrites.has(key)) return pendingWrites.get(key);
432
+ if (value === undefined) return Promise.reject(new Error(`Undefined is not a valid state value for ${key}`));
433
+ if (value !== null && !['string', 'number', 'boolean'].includes(typeof value)) {
434
+ return Promise.reject(new Error(`Unsupported state value type for ${key}: ${typeof value}`));
435
+ }
116
436
 
117
- let timeoutHandle;
118
- const operation = Promise.resolve().then(() => socket.setState(key, { val: value, ack: false, q: 0 }));
119
- const timeout = new Promise((_, reject) => {
120
- timeoutHandle = setTimeout(() => reject(new Error(`Write timeout for ${key}`)), 15000);
121
- });
122
- const promise = Promise.race([operation, timeout])
123
- .finally(() => {
437
+ const previous = writeQueues.get(key) || Promise.resolve();
438
+ const operation = previous.catch(() => undefined).then(() => {
439
+ let timeoutHandle;
440
+ const write = Promise.resolve().then(() => socket.setState(key, { val: value, ack: false, q: 0 }));
441
+ const timeout = new Promise((_, reject) => {
442
+ timeoutHandle = setTimeout(() => reject(new Error(`Write timeout for ${key}`)), 15000);
443
+ });
444
+ return Promise.race([write, timeout]).finally(() => {
124
445
  if (timeoutHandle) clearTimeout(timeoutHandle);
125
- pendingWrites.delete(key);
126
446
  });
127
- pendingWrites.set(key, promise);
128
- return promise;
447
+ });
448
+ const tail = operation.finally(() => {
449
+ if (writeQueues.get(key) === tail) writeQueues.delete(key);
450
+ });
451
+ writeQueues.set(key, tail);
452
+ return operation;
129
453
  };
130
454
 
131
455
  return {
132
456
  getExplicitExpertOnly,
133
457
  isExpertOnlyState,
134
458
  getWriteBehavior,
459
+ getWriteLabel,
460
+ resolveEditorType,
461
+ prepareEditorValue,
462
+ coerceWriteValue,
463
+ getDirectWriteValue,
135
464
  toBoolean,
136
465
  writeManualState,
466
+ normalizeStates,
467
+ normalizeCommonType,
137
468
  };
138
469
  });