iobroker.admin 7.7.2 → 7.7.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +120 -13
  3. package/admin/README.md +3 -0
  4. package/admin/admin.png +0 -0
  5. package/admin/i18n/de.json +1 -1
  6. package/admin/i18n/es.json +1 -1
  7. package/admin/i18n/fr.json +1 -1
  8. package/admin/i18n/it.json +1 -1
  9. package/admin/i18n/nl.json +1 -1
  10. package/admin/i18n/pl.json +1 -1
  11. package/admin/i18n/pt.json +1 -1
  12. package/admin/i18n/ru.json +1 -1
  13. package/admin/i18n/uk.json +1 -1
  14. package/admin/i18n/zh-cn.json +1 -1
  15. package/admin/jsonConfig.json5 +1 -2
  16. package/adminWww/assets/AdapterUpdateDialog-CJRQB5ud.js +2 -0
  17. package/adminWww/assets/Adapters-B5LWXJ3G.js +9 -0
  18. package/adminWww/assets/Config-D3mtokJQ.js +1 -0
  19. package/adminWww/assets/CustomModal-DCjdghJB.js +1 -0
  20. package/adminWww/assets/CustomTab-CBVvppVS.js +1 -0
  21. package/adminWww/assets/DefaultPropsProvider-BZ42HOhu.js +15 -0
  22. package/adminWww/assets/DefaultPropsProvider-DoV5d6EJ.js +1 -0
  23. package/adminWww/assets/EasyMode-CR0Vw-OT.js +1 -0
  24. package/adminWww/assets/Enums-BImz5cPM.js +111 -0
  25. package/adminWww/assets/Fields-V2W2HJlv.js +1 -0
  26. package/adminWww/assets/Files-Ci2XDKh8.js +6 -0
  27. package/adminWww/assets/FilledInput-0vrRQpr_.js +2 -0
  28. package/adminWww/assets/Google-FmfjVx6X.js +27 -0
  29. package/adminWww/assets/Hosts-AXD2lYOf.js +121 -0
  30. package/adminWww/assets/Instances-j88MVgOp.js +2 -0
  31. package/adminWww/assets/Intro-DH7_8X9J.js +2 -0
  32. package/adminWww/assets/Logs-BJEYaBGh.js +1 -0
  33. package/adminWww/assets/Objects-CeqK8jeG.js +60 -0
  34. package/adminWww/assets/State-DhReNijC.js +1 -0
  35. package/adminWww/assets/TextField-fjsX40wR.js +138 -0
  36. package/adminWww/assets/Users-BJgk5zRR.js +1 -0
  37. package/adminWww/assets/___vite-browser-external_commonjs-proxy-DMh1aSo_.js +1 -0
  38. package/adminWww/assets/_commonjs-dynamic-modules-TDtrdbi3.js +1 -0
  39. package/adminWww/assets/_commonjsHelpers-CE1G-McA.js +1 -0
  40. package/adminWww/assets/ace-DgO9yth5.js +985 -0
  41. package/adminWww/assets/assertThisInitialized-CKqanoMB.js +1 -0
  42. package/adminWww/assets/blueGrey-BFcAYvAO.js +29 -0
  43. package/adminWww/assets/{bootstrap-CrpeRPv0.css → bootstrap-DSlxhDzw.css} +1 -1
  44. package/adminWww/assets/bootstrap-xC60EdKn.js +303 -0
  45. package/adminWww/assets/createSvgIcon-CC7aIjya.js +1 -0
  46. package/adminWww/assets/createTheme-O_VGsRib.js +16 -0
  47. package/adminWww/assets/defaultTheme-CF56WVgQ.js +1 -0
  48. package/adminWww/assets/emotion-cache.browser.esm-BgJfNZJN.js +1 -0
  49. package/adminWww/assets/emotion-react.browser.esm-LdYA3M0T.js +8 -0
  50. package/adminWww/assets/emotion-serialize.esm-Q4o_CgeF.js +1 -0
  51. package/adminWww/assets/emotion-styled.browser.esm-D6u524ZG.js +1 -0
  52. package/adminWww/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-q3_hvwuL.js +1 -0
  53. package/adminWww/assets/en-US-B8gg5zk_.js +1 -0
  54. package/adminWww/assets/ext-language_tools-DJmHbGA8.js +389 -0
  55. package/adminWww/assets/geosearch.module-BN92cSpK.js +1 -0
  56. package/adminWww/assets/{hostInit-fzxL8JAx.js → hostInit-OBG53iVO.js} +2 -2
  57. package/adminWww/assets/iconBase-CB0tx1VT.js +1 -0
  58. package/adminWww/assets/{index-D--ojYan.js → index-28qkNZAi.js} +1 -1
  59. package/adminWww/assets/index-8V8iNIbi.js +5 -0
  60. package/adminWww/assets/{index-CJvbfjSs.js → index-B0C4gXUO.js} +1 -1
  61. package/adminWww/assets/index-B5NvG6mn.js +2 -0
  62. package/adminWww/assets/index-BVQ-ZSLt.js +10 -0
  63. package/adminWww/assets/index-B_eoqXoQ.js +890 -0
  64. package/adminWww/assets/index-Bc8bBbjM.js +15 -0
  65. package/adminWww/assets/{index-Co3YA5NW.js → index-BgpTxVrG.js} +1 -1
  66. package/adminWww/assets/{index-DTGUg51P.js → index-C73G-H4k.js} +2 -2
  67. package/adminWww/assets/{index-rKfs-rCa.js → index-CbQYNHIO.js} +1 -1
  68. package/adminWww/assets/index-ChtI58Wj.js +1 -0
  69. package/adminWww/assets/index-CkI9667U.js +1 -0
  70. package/adminWww/assets/index-DEgEIbz9.js +1 -0
  71. package/adminWww/assets/index-DYa0xJDK.js +1 -0
  72. package/adminWww/assets/index-Dy_ekAsY.js +1 -0
  73. package/adminWww/assets/index-d-Zo1uu9.js +55 -0
  74. package/adminWww/assets/{iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js → iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-CXogaIXO.js} +1 -1
  75. package/adminWww/assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-D-aUnioX.js +1 -0
  76. package/adminWww/assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-DQH_iIDO.js +1 -0
  77. package/adminWww/assets/iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-Dy1SQ0vs.js +1 -0
  78. package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js → iobroker_admin__loadShare__leaflet__loadShare__-BfU5U5_j.js} +1 -1
  79. package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-CpCTEixV.js +1 -0
  80. package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js → iobroker_admin__loadShare__react__loadShare__-CMWK8WhK.js} +1 -1
  81. package/adminWww/assets/iobroker_admin__loadShare__react_mf_2_dom__loadShare__-GTRt2eft.js +1 -0
  82. package/adminWww/assets/iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-BF_gp27r.js +1 -0
  83. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CHE4rLsT.js +5 -0
  84. package/adminWww/assets/leaflet-src-B98elavC.js +4 -0
  85. package/adminWww/assets/locale-ZVMVA5rz.js +1 -0
  86. package/adminWww/assets/pl-OOhGZ0tn.js +1 -0
  87. package/adminWww/assets/preload-helper-BDBacUwf.js +1 -0
  88. package/adminWww/assets/sdk-DTP6UH26.js +15 -0
  89. package/adminWww/assets/sentry-C8mPNiGL.js +1 -0
  90. package/adminWww/assets/useTheme-C-uGEZO5.js +1 -0
  91. package/adminWww/assets/useTheme-UOPilb5j.js +1 -0
  92. package/adminWww/assets/{zh-cn-vvAC9zpl.js → zh-cn-Dy5SHo8v.js} +13 -13
  93. package/adminWww/img/admin.png +0 -0
  94. package/adminWww/index.html +4 -4
  95. package/adminWww/lib/js/ace/ext-searchbox.js +1 -1
  96. package/adminWww/lib/js/socket.io.js +7 -1
  97. package/adminWww/mf-manifest.json +1 -1
  98. package/adminWww/remoteEntry.js +2 -2
  99. package/build/i18n/de.json +18 -0
  100. package/build/i18n/es.json +18 -0
  101. package/build/i18n/fr.json +18 -0
  102. package/build/i18n/it.json +18 -0
  103. package/build/i18n/nl.json +18 -0
  104. package/build/i18n/pl.json +18 -0
  105. package/build/i18n/pt.json +18 -0
  106. package/build/i18n/ru.json +18 -0
  107. package/build/i18n/uk.json +18 -0
  108. package/build/i18n/zh-cn.json +18 -0
  109. package/build/lib/checkLinuxPass.js.map +1 -0
  110. package/{build-backend → build}/lib/testPassword.js +1 -1
  111. package/build/lib/testPassword.js.map +1 -0
  112. package/{build-backend → build}/lib/translations.js +16 -1
  113. package/build/lib/translations.js.map +1 -0
  114. package/{build-backend → build}/lib/utils.js +20 -0
  115. package/build/lib/utils.js.map +1 -0
  116. package/{build-backend → build}/lib/web.js +6 -7
  117. package/build/lib/web.js.map +1 -0
  118. package/{build-backend → build}/main.js +68 -5
  119. package/build/main.js.map +1 -0
  120. package/io-package.json +27 -40
  121. package/package.json +117 -110
  122. package/adminWww/assets/AdapterUpdateDialog-DHGhgEEq.js +0 -2
  123. package/adminWww/assets/Adapters-CgSIajcF.js +0 -7
  124. package/adminWww/assets/Config-BQSl4bfA.js +0 -1
  125. package/adminWww/assets/CustomModal-DNMTLv4y.js +0 -1
  126. package/adminWww/assets/CustomTab-Bl8S8QZW.js +0 -1
  127. package/adminWww/assets/DefaultPropsProvider-u5xB1Fxz.js +0 -30
  128. package/adminWww/assets/EasyMode-xDbqrply.js +0 -1
  129. package/adminWww/assets/Enums-BSICIhWI.js +0 -111
  130. package/adminWww/assets/Fields-C3JkTmfP.js +0 -1
  131. package/adminWww/assets/Files-DK85-COY.js +0 -6
  132. package/adminWww/assets/FilledInput-CysG4ax_.js +0 -2
  133. package/adminWww/assets/Hosts-qIsB4Gub.js +0 -121
  134. package/adminWww/assets/Instances-BA_DCzs8.js +0 -2
  135. package/adminWww/assets/Intro-00oh6SLw.js +0 -2
  136. package/adminWww/assets/Logs-Cvpgh-zN.js +0 -1
  137. package/adminWww/assets/Objects-Dp71iotS.js +0 -60
  138. package/adminWww/assets/State-BqfD2ABf.js +0 -1
  139. package/adminWww/assets/Tabs-sxfWgN0b.js +0 -138
  140. package/adminWww/assets/Users-CDcWqTfZ.js +0 -1
  141. package/adminWww/assets/_commonjsHelpers-D6-XlEtG.js +0 -1
  142. package/adminWww/assets/ace-BG5WYul1.js +0 -985
  143. package/adminWww/assets/blueGrey-DYsiMDOn.js +0 -29
  144. package/adminWww/assets/bootstrap-BYQTdf9r.js +0 -2024
  145. package/adminWww/assets/createSvgIcon-Bh3KWtyp.js +0 -1
  146. package/adminWww/assets/emotion-cache.browser.esm-B8BFze5o.js +0 -1
  147. package/adminWww/assets/emotion-react.browser.esm-BCDt9NrH.js +0 -8
  148. package/adminWww/assets/emotion-serialize.esm-BUa21YfQ.js +0 -1
  149. package/adminWww/assets/emotion-styled.browser.esm-CyFqGgyG.js +0 -1
  150. package/adminWww/assets/emotion-utils.browser.esm-pglN4_eI.js +0 -1
  151. package/adminWww/assets/geosearch.module-DH4NhiPj.js +0 -1
  152. package/adminWww/assets/iconBase-C3vi24ZE.js +0 -1
  153. package/adminWww/assets/index-B1ITPhEY.js +0 -7
  154. package/adminWww/assets/index-C_-7Z7UV.js +0 -1
  155. package/adminWww/assets/index-D3IAEXXP.js +0 -10
  156. package/adminWww/assets/index-DPDg2YA0.js +0 -1
  157. package/adminWww/assets/index-Qa7Q_Dz5.js +0 -1
  158. package/adminWww/assets/index-qcIeekse.js +0 -55
  159. package/adminWww/assets/index-wN1ZlPSW.js +0 -2
  160. package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js +0 -1
  161. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +0 -5
  162. package/adminWww/assets/leaflet-src-A2ZHl6nF.js +0 -4
  163. package/adminWww/assets/locale-9HzB0nxi.js +0 -1
  164. package/adminWww/assets/preload-helper-Dp1pzeXC.js +0 -1
  165. package/adminWww/assets/sentry-H_UdJ2zx.js +0 -1
  166. package/adminWww/lib/js/crypto-js/aes.js +0 -234
  167. package/adminWww/lib/js/crypto-js/blowfish.js +0 -471
  168. package/adminWww/lib/js/crypto-js/bower.json +0 -39
  169. package/adminWww/lib/js/crypto-js/cipher-core.js +0 -895
  170. package/adminWww/lib/js/crypto-js/core.js +0 -807
  171. package/adminWww/lib/js/crypto-js/crypto-js.js +0 -6657
  172. package/adminWww/lib/js/crypto-js/docs/QuickStartGuide.wiki +0 -470
  173. package/adminWww/lib/js/crypto-js/enc-base64.js +0 -136
  174. package/adminWww/lib/js/crypto-js/enc-base64url.js +0 -148
  175. package/adminWww/lib/js/crypto-js/enc-hex.js +0 -18
  176. package/adminWww/lib/js/crypto-js/enc-latin1.js +0 -18
  177. package/adminWww/lib/js/crypto-js/enc-utf16.js +0 -149
  178. package/adminWww/lib/js/crypto-js/enc-utf8.js +0 -18
  179. package/adminWww/lib/js/crypto-js/evpkdf.js +0 -134
  180. package/adminWww/lib/js/crypto-js/format-hex.js +0 -66
  181. package/adminWww/lib/js/crypto-js/format-openssl.js +0 -18
  182. package/adminWww/lib/js/crypto-js/hmac-md5.js +0 -18
  183. package/adminWww/lib/js/crypto-js/hmac-ripemd160.js +0 -18
  184. package/adminWww/lib/js/crypto-js/hmac-sha1.js +0 -18
  185. package/adminWww/lib/js/crypto-js/hmac-sha224.js +0 -18
  186. package/adminWww/lib/js/crypto-js/hmac-sha256.js +0 -18
  187. package/adminWww/lib/js/crypto-js/hmac-sha3.js +0 -18
  188. package/adminWww/lib/js/crypto-js/hmac-sha384.js +0 -18
  189. package/adminWww/lib/js/crypto-js/hmac-sha512.js +0 -18
  190. package/adminWww/lib/js/crypto-js/hmac.js +0 -143
  191. package/adminWww/lib/js/crypto-js/index.js +0 -18
  192. package/adminWww/lib/js/crypto-js/lib-typedarrays.js +0 -76
  193. package/adminWww/lib/js/crypto-js/md5.js +0 -268
  194. package/adminWww/lib/js/crypto-js/mode-cfb.js +0 -80
  195. package/adminWww/lib/js/crypto-js/mode-ctr-gladman.js +0 -116
  196. package/adminWww/lib/js/crypto-js/mode-ctr.js +0 -58
  197. package/adminWww/lib/js/crypto-js/mode-ecb.js +0 -40
  198. package/adminWww/lib/js/crypto-js/mode-ofb.js +0 -54
  199. package/adminWww/lib/js/crypto-js/package.json +0 -42
  200. package/adminWww/lib/js/crypto-js/pad-ansix923.js +0 -49
  201. package/adminWww/lib/js/crypto-js/pad-iso10126.js +0 -44
  202. package/adminWww/lib/js/crypto-js/pad-iso97971.js +0 -40
  203. package/adminWww/lib/js/crypto-js/pad-nopadding.js +0 -30
  204. package/adminWww/lib/js/crypto-js/pad-pkcs7.js +0 -18
  205. package/adminWww/lib/js/crypto-js/pad-zeropadding.js +0 -47
  206. package/adminWww/lib/js/crypto-js/pbkdf2.js +0 -145
  207. package/adminWww/lib/js/crypto-js/rabbit-legacy.js +0 -190
  208. package/adminWww/lib/js/crypto-js/rabbit.js +0 -192
  209. package/adminWww/lib/js/crypto-js/rc4.js +0 -139
  210. package/adminWww/lib/js/crypto-js/ripemd160.js +0 -267
  211. package/adminWww/lib/js/crypto-js/sha1.js +0 -150
  212. package/adminWww/lib/js/crypto-js/sha224.js +0 -80
  213. package/adminWww/lib/js/crypto-js/sha256.js +0 -199
  214. package/adminWww/lib/js/crypto-js/sha3.js +0 -326
  215. package/adminWww/lib/js/crypto-js/sha384.js +0 -83
  216. package/adminWww/lib/js/crypto-js/sha512.js +0 -326
  217. package/adminWww/lib/js/crypto-js/tripledes.js +0 -779
  218. package/adminWww/lib/js/crypto-js/x64-core.js +0 -304
  219. package/build-backend/i18n/de.json +0 -18
  220. package/build-backend/i18n/es.json +0 -18
  221. package/build-backend/i18n/fr.json +0 -18
  222. package/build-backend/i18n/it.json +0 -18
  223. package/build-backend/i18n/nl.json +0 -18
  224. package/build-backend/i18n/pl.json +0 -18
  225. package/build-backend/i18n/pt.json +0 -18
  226. package/build-backend/i18n/ru.json +0 -18
  227. package/build-backend/i18n/uk.json +0 -18
  228. package/build-backend/i18n/zh-cn.json +0 -18
  229. package/build-backend/lib/checkLinuxPass.js.map +0 -1
  230. package/build-backend/lib/testPassword.js.map +0 -1
  231. package/build-backend/lib/translations.js.map +0 -1
  232. package/build-backend/lib/utils.js.map +0 -1
  233. package/build-backend/lib/web.js.map +0 -1
  234. package/build-backend/main.js.map +0 -1
  235. /package/{build-backend → build}/i18n/en.json +0 -0
  236. /package/{build-backend → build}/lib/checkLinuxPass.js +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014-2023 bluefox <dogafox@gmail.com>
3
+ Copyright (c) 2014-2025 bluefox <dogafox@gmail.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <img src="admin/admin.svg" width="100" height="100" />
1
+ <img src="packages/admin/admin/admin.svg" width="100" height="100" />
2
2
 
3
3
  # ioBroker.admin
4
4
 
@@ -77,6 +77,75 @@ You can add the following lines into Reverse Proxy tab to let Intro tab run behi
77
77
 
78
78
  So all links of instances that use web server, like `eventlist`, `vis`, `material` and so on will use `https://iobroker.mydomain.com/ioBrokerWeb/` path
79
79
 
80
+ ### Extended reverse proxy example (with screenshots)
81
+
82
+ Below is a more complete example showing how a reverse proxy (e.g. Nginx Proxy Manager) can be configured and how the Admin UI resolves links after mapping.
83
+
84
+ > NOTE: At the moment the admin UI itself still needs to be effectively served from the web root `/` of the host. login and other hardcoded urls do not yet respect another base path (see limitation discussion here: https://github.com/ioBroker/ioBroker.admin/issues/1660#issuecomment-2360056439).
85
+
86
+ #### 1. Base host / root mapping
87
+
88
+ Map the public root (or a dedicated host like `https://iobroker.example.com/`) directly to your Admin instance (default port 8081):
89
+
90
+ <img src="assets/revproxy_nginxpm_root.png" alt="Nginx Proxy Manager: root mapping to admin" width="640" />
91
+
92
+ #### 2. Custom locations for other services
93
+
94
+ Add additional custom locations for web / REST / other adapter frontends. Each location forwards to the respective local port (e.g. web.0 on 8082, rest-api.0 on 8093):
95
+
96
+ <img src="assets/revproxy_nginxpm_customlocations.png" alt="Nginx Proxy Manager: custom locations" width="640" />
97
+
98
+ Example custom locations (Nginx style):
99
+ ```
100
+ /location /web/ => http://LOCAL_IOBROKER_IP:8082/
101
+ /location /welcome/ => http://LOCAL_IOBROKER_IP:1234/
102
+ /location /esphome/ => http://LOCAL_IOBROKER_IP:6052/
103
+ ```
104
+ (Adjust paths/ports for your environment.)
105
+
106
+ #### 3. Configure mappings in Admin Reverse Proxy tab
107
+
108
+ Enter the same paths so that Intro / Instances pages rewrite adapter links correctly:
109
+
110
+ | Global path | Instance | Instance path behind proxy |
111
+ |-------------|--------------|----------------------------|
112
+ | `/` | `web.0` | `/web/` |
113
+ | | `rest-api.0` | `/api/` |
114
+ | | `esphome.0` | `/esphome/` |
115
+
116
+ > If you keep Admin on `/` you usually do not need to list `admin.0`, but adding it does not hurt and can make intent explicit.
117
+
118
+ After saving, the Intro screen rewrites links so that all web‑served adapters open under the correct prefixed paths:
119
+
120
+ <img src="assets/revproxy_admin.png" alt="Admin Intro page after reverse proxy mapping" width="640" />
121
+
122
+ #### 4. Limitations & compatibility
123
+
124
+ * Admin root requirement: As stated above, full relocation of Admin itself under a sub‑path (e.g. `/admin/`) is not yet supported.
125
+ * Adapter path awareness: Not every adapter UI is currently path‑aware. While generic `localLink` rewriting covers many cases, some UIs still assume they are hosted at the domain root. Known examples:
126
+ * `vis` (classic) – NOT fully working behind a sub‑path today.
127
+ * `vis-2` – generally more path tolerant, but custom widgets or legacy resources may still use absolute paths.
128
+ * Any adapter serving hard‑coded absolute URLs (starting with `/`) may need manual fixes until updated upstream.
129
+ * Mixed content: If you terminate TLS at the proxy (HTTPS) but contact adapters over HTTP internally, make sure all external links are rewritten to HTTPS to avoid browser mixed-content blocks.
130
+ * WebSocket forwarding: Ensure `Upgrade` and `Connection` headers are passed through. In Nginx, this typically means adding:
131
+ ```
132
+ proxy_set_header Upgrade $http_upgrade;
133
+ proxy_set_header Connection "upgrade";
134
+ ```
135
+ (old checking the websocket support box, if using proxy manager)
136
+ * Trailing slashes: Always keep a trailing slash in the mapped path (e.g. `/web/`) and location, so nginx does path rewriting.
137
+ This makes simple cases like the welcome adapter above work, because it only sees a / path -> correctly serves its index.html.
138
+
139
+ #### 5. Quick troubleshooting checklist
140
+
141
+ | Symptom | Likely cause | Action |
142
+ |------------------------------------|--------------------------------------|-------------------------------------------------------|
143
+ | Blank or partial Admin UI | Admin mounted under sub‑path only | Keep Admin at `/` (see limitation) |
144
+ | Adapter link opens wrong host/port | Missing entry in Reverse Proxy tab | Add mapping row and save |
145
+ | 404 for adapter JS/CSS | Missing trailing slash in location | Add trailing slash to location and mapping |
146
+ | WebSocket errors in console | Proxy not forwarding upgrade headers | Add `proxy_set_header Upgrade` / `Connection` headers |
147
+ | vis UI broken | Adapter not path‑aware | Keep on root or wait for adapter update |
148
+
80
149
  ## Used icons
81
150
 
82
151
  This project uses icons from [Flaticon](https://www.flaticon.com/).
@@ -84,11 +153,59 @@ This project uses icons from [Flaticon](https://www.flaticon.com/).
84
153
  ioBroker GmbH has a valid license for all used icons.
85
154
  The icons may not be reused in other projects without the proper flaticon license or flaticon subscription.
86
155
 
87
-
156
+ ## Changelog
88
157
  <!--
89
158
  ### **WORK IN PROGRESS**
90
159
  -->
91
- ### 7.7.2 (2025-07-22)
160
+ ### 7.7.15 (2025-10-23)
161
+ - (@GermanBluefox) Improvement of categories: drag&drop, visibility
162
+ - (@copilot) Added missing filterFunc property to jsonConfig objectId schema to match documentation and implementation
163
+ - (@copilot, @SimonFischer04) Added extended reverse proxy example section with screenshots, limitations (admin root requirement), and adapter compatibility notes
164
+ - (@copilot, @SimonFischer04) Fixed instances page reverse proxy link mapping so adapter localLinks are rewritten to the configured proxy paths (prefix matching + web port replacement, with duplicate link collapse)
165
+ - (@copilot, @SimonFischer04) Fixed intro page reverse proxy link remapping so links are correctly rewritten immediately and after navigating away and back (load reverseProxy config before instance scan and use prefix startsWith matching)
166
+ - (@GermanBluefox) Fixed multi-selection in the select ID dialog
167
+
168
+ ### 7.7.3 (2025-09-25)
169
+ - Many GUI changes: See previous changelog below for details
170
+
171
+ ### 7.7.2 (2025-09-24)
172
+ - (@copilot) Fixed JSONCONFIG table validator bug where validation errors persisted after deleting table rows
173
+ - (@GermanBluefox) Made small fix for JsonConfig component `state`
174
+ - (@copilot) Fixed repository refresh issue: repositories are now automatically refreshed when switching repository source (stable/latest) without requiring manual "Check for updates"
175
+ - (@copilot) Added CSV file editing support in file browser - CSV files can now be edited directly in the file manager
176
+ - (@copilot) Implemented sortable columns for instances table (name, status, memory, ID, host, loglevel)
177
+ - (@copilot) Fixed adapter license icon linking to use commercial license URL instead of GitHub license
178
+ - (@copilot) Fixed license icon spacing in list view to maintain consistent layout
179
+ - (@GermanBluefox) Allows entering minus values with JsonConfig number component
180
+ - (@copilot) Fixed textIP checkbox inconsistency between Objects and States tabs for the same host configuration
181
+ - (@GermanBluefox) Added icon to `www` folder for windows
182
+ - (@copilot) Confirmed and documented Copilot issue handling guidelines: PRs use neutral language (no "fixes" keywords), issues closed manually by maintainers, and "fixed" labels added when appropriate
183
+ - (@copilot) Enhanced Copilot instructions to make issue management policy more prominent - no auto-closing issues, manual validation required
184
+ - (@copilot) Enhanced repository timestamp display to show both generated and read timestamps - shows when repository data was generated and when it was last read by admin backend
185
+ - (@copilot) Fixed jsonConfig port validation to properly account for bind addresses, allowing the same port on different IP addresses
186
+ - (@copilot) Added error indicators to JSON Config tabs and accordions to improve the visibility of validation errors
187
+ - (@copilot) Added export/import functionality for accordion sections in JsonConfig allowing users to save accordion data as JSON files and import them back with replace or add options
188
+ - (@copilot) Fixed time difference warning that incorrectly appeared when the browser tab was inactive for a while
189
+ - (@copilot) For GitHub-installed adapters, show version + commit hash instead of just version
190
+ - (@copilot) Fixed table export error when table items contain null values
191
+ - (@copilot) Object Browser: Added formatted duration display for values with role "value.duration" - shows time durations in HH:mm:ss format instead of raw seconds
192
+ - (@copilot) Enhanced GitHub Actions to skip tests when only README.md is changed, speeding up CI for Copilot PRs (tested with mixed file changes)
193
+ - (@GermanBluefox) Added the docker checker in JSON config
194
+ - (@copilot) Fixed js-controller update notifications to use "The js-controller" instead of "Adapter js-controller"
195
+ - (@copilot) Fixed JSONConfig sendTo jsonData attribute parser problem where backslashes (\) in text inputs caused JSON parsing errors
196
+ - (@copilot) Fixed step type behavior in chart display - "Schritte" now shows value until next point (step after) instead of step before
197
+ - (@copilot) Added all three-step type options (stepStart, stepMiddle, stepEnd) to chart display with clearer descriptions
198
+ - (@copilot) Fixed React error #62 in the Files tab caused by malformed CSS calc() function
199
+ - (@copilot) Added loading indicator to JSONConfig autocompleteSendTo component during sendTo operations
200
+ - (@copilot) Mark adapters removed from repository with "not maintained" text instead of empty version field
201
+ - (@copilot) Enhanced responsive design: modals and popups now use full screen on xs and sm breakpoints
202
+ - (@copilot) Added logout dropdown menu to user icon for improved user experience
203
+ - (@copilot) Updated OAuth2 documentation in DEVELOPER.md to include both cloud-based and direct callback approaches with clear guidance on when to use each method
204
+ - (@copilot) Only show adapters with satisfied dependencies in update all dialog
205
+ - (@copilot) Added new `readOnly` attribute for jsonEditor in jsonConfig - allows opening the editor to view JSON content without allowing modifications
206
+ - (@GermanBluefox) Reading of same instances was optimized in GUI
207
+ - (@GermanBluefox) Do not show the http page if admin is secured
208
+ - (@GermanBluefox) Show loading progress for custom tabs
92
209
  - (@GermanBluefox) Fixing change of the language in the admin
93
210
 
94
211
  ### 7.7.1 (2025-06-20)
@@ -97,16 +214,6 @@ The icons may not be reused in other projects without the proper flaticon licens
97
214
  ### 7.7.0 (2025-06-17)
98
215
  - (@foxriver76) Added the concept for single-side-on authentication (SSO)
99
216
 
100
- ### 7.6.20 (2025-06-16)
101
- - (@GermanBluefox) Allowed using of * in the filter of objects
102
- - (@GermanBluefox) Small GUI improvements
103
-
104
- ### 7.6.19 (2025-06-08)
105
-
106
- - (@GermanBluefox) Improvements on JSONConfig component `state`
107
- - (@GermanBluefox) Added `infoBox` JSONConfig component
108
- - (@Jey-Cee) Added the room selection to the wizard
109
-
110
217
  ## License
111
218
 
112
219
  The MIT License (MIT)
@@ -0,0 +1,3 @@
1
+ This directory is only to provide icon for https://www.npmjs.com/package/iobroker.admin
2
+
3
+ Real content is located in the [admin package](./packages/admin/admin)!
package/admin/admin.png CHANGED
Binary file
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Wenn der Browser in 3 Sekunden zu viele Ereignisse empfängt, wird das Aktualisieren der Daten vorübergehend beendet",
90
90
  "tooltip_ttl": "Nach dieser Zeit wird ein inaktiver Benutzer ausgeloggt.",
91
91
  "users permissions": "Benutzerberechtigungen"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Si el explorador recibe muchos eventos en 3 segundos, se detiene la actualización",
90
90
  "tooltip_ttl": "Tiempo de espera de inicio de sesión. Después de ese tiempo, el usuario se desconectar automáticamente.",
91
91
  "users permissions": "permisos de usuario"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Si le navigateur reçoit trop d'événements en 3 secondes, la mise à jour sera arrêtée",
90
90
  "tooltip_ttl": "Passé ce délai, l'utilisateur sera automatiquement déconnecté.",
91
91
  "users permissions": "Autorisations des utilisateurs"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Se il browser riceve troppi eventi in 3 secondi, l'aggiornamento verrà interrotto",
90
90
  "tooltip_ttl": "Timeout di login. Dopo questo tempo l'utente sarà disconnesso automaticamente.",
91
91
  "users permissions": "Permessi degli utenti"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Als de browser te veel gebeurtenissen binnen 3 seconden ontvangt, wordt de update gestopt",
90
90
  "tooltip_ttl": "Time-out aanmelding. Na deze tijd zal de gebruiker automatisch uitloggen.",
91
91
  "users permissions": "gebruikersrechten"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "jeśli przeglądarka otrzyma zbyt wiele zdarzeń w ciągu 3 sekund, aktualizacja zostanie zatrzymana",
90
90
  "tooltip_ttl": "Limit czasu logowania. Po tym czasie użytkownik zostanie automatycznie wylogowany.",
91
91
  "users permissions": "uprawnienia użytkowników"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Se o navegador receber muitos eventos em 3 segundos, a atualização será interrompida",
90
90
  "tooltip_ttl": "Tempo limite de login. Após esse tempo, o usuário será automaticamente desconectado.",
91
91
  "users permissions": "permissões de usuários"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "если браузер получает слишком много событий за 3 секунды, обновление будет остановлено",
90
90
  "tooltip_ttl": "По прошествии этого времени при бездействии пользователь будет разлогинен.",
91
91
  "users permissions": "Права доступа"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "Якщо браузер отримує занадто багато подій і оновлень даних протягом 3 секунд, оновлення даних буде тимчасово припинено",
90
90
  "tooltip_ttl": "Тривалість входу в систему. Після закінчення цього часу користувач автоматично вийде з системи.",
91
91
  "users permissions": "Дозволи користувачів"
92
- }
92
+ }
@@ -89,4 +89,4 @@
89
89
  "tooltip_thresholdValue": "如果浏览器在3秒内收到太多事件,将停止刷新",
90
90
  "tooltip_ttl": "登录超时时间。超时后用户将自动注销。",
91
91
  "users permissions": "用户权限"
92
- }
92
+ }
@@ -20,7 +20,6 @@
20
20
  port: {
21
21
  type: 'port',
22
22
  min: 1,
23
- max: 65565,
24
23
  label: 'Port',
25
24
  xs: 12,
26
25
  sm: 12,
@@ -273,7 +272,7 @@
273
272
  sm: 12,
274
273
  md: 8,
275
274
  lg: 4,
276
- accept: 'image/png',
275
+ accept: { 'image/png': [] },
277
276
  label: 'Upload image',
278
277
  crop: true,
279
278
  },
@@ -0,0 +1,2 @@
1
+ import{j as t}from"./DefaultPropsProvider-BZ42HOhu.js";import{i as y}from"./iobroker_admin__loadShare__react__loadShare__-CMWK8WhK.js";import{s as f,k as C}from"./bootstrap-xC60EdKn.js";import{h as T}from"./zh-cn-Dy5SHo8v.js";import{i as s,a as u}from"./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-Dy1SQ0vs.js";import{i as k}from"./iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-D-aUnioX.js";import{S as D}from"./State-DhReNijC.js";const a={closeButton:l=>({position:"absolute",right:8,top:8,color:l.palette.grey[500]}),languageButton:{position:"absolute",right:60,top:8},languageButtonActive:l=>({color:l.palette.primary.main}),typography:{paddingRight:30},version:l=>({background:"#4dabf5",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:l.palette.mode==="dark"?"black":"white"}),wrapperButton:{"@media screen and (max-width: 465px)":{"& *":{fontSize:10}},"@media screen and (max-width: 380px)":{"& *":{fontSize:9}}},messageText:{},messageIcon:{width:32,height:32,marginRight:8},messageColor_warn:{color:"#cb7642"},messageColor_error:{color:"#f5614d"},messageColor_info:{color:"#5abd29"},messageTitle_warn:l=>({background:"#cb7642",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:l.palette.mode==="dark"?"black":"white"}),messageTitle_error:l=>({background:"#f5614d",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:l.palette.mode==="dark"?"black":"white"}),messageTitle_info:l=>({background:"#5abd29",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:l.palette.mode==="dark"?"black":"white"}),messageDialogText:{fontSize:18},messageDialogTitle:{},versionTime:{fontSize:"smaller",opacity:.5,marginLeft:4},dialogPaper:{maxWidth:880},repoStableVersionText:l=>({color:l.palette.mode==="dark"?"#8dff7a":"#2b9800",fontWeight:"bold",marginLeft:"4px"}),repoLatestVersionText:l=>({color:l.palette.mode==="dark"?"#a3fcff":"#005498",fontWeight:"bold",marginLeft:"4px"})};function I(l,e,p,r){let c=null;return l&&l.forEach(i=>{var m,_;let d=!((m=i.condition)!=null&&m.rules);if((_=i.condition)!=null&&_.rules){const j=(Array.isArray(i.condition.rules)?i.condition.rules:[i.condition.rules]).map(o=>{let n,h,g;if(o.includes("oldVersion"))n=e,o=o.substring(10);else if(o.includes("newVersion"))n=p,o=o.substring(10);else{if(o==="installed")return!!e;if(o==="!"||o==="not-installed")return!e;if(r){const w=o.match(/([a-z][-a-z_0-9]+)([!=<>]+)([.\d]+)/);if(w){const x=Object.keys(r).find(b=>{var v;return((v=r[b])==null?void 0:v.name)===w[1]});if(x){n=r[x].version,h=w[2],g=w[3];try{return h==="=="?f.eq(n,g):h===">"?f.gt(n,g):h==="<"?f.lt(n,g):h===">="?f.gte(n,g):h==="<="?f.lte(n,g):h==="!="?f.neq(n,g):(console.warn(`Unknown rule ${n}${o}`),!1)}catch{return console.warn(`Cannot compare ${n}${o}`),!1}}}else if(o.match(/^[!=<>]+/)){if(o.startsWith("!")){const x=o.substring(1);if(!Object.keys(r).find(b=>{var v;return((v=r[b])==null?void 0:v.name)===x}))return!0}}else if(Object.keys(r).find(x=>{var b;return((b=r[x])==null?void 0:b.name)===o}))return!0;return!1}}o[1]>="0"&&o[1]<="9"?(h=o[0],g=o.substring(1)):(h=o.substring(0,2),g=o.substring(2));try{if(h==="==")return f.eq(n,g);if(h===">")return f.gt(n,g);if(h==="<")return f.lt(n,g);if(h===">=")return f.gte(n,g);if(h==="<=")return f.lte(n,g);if(h==="!=")return f.neq(n,g);console.warn(`Unknown rule ${n}${o}`)}catch{console.warn(`Cannot compare ${n}${o}`)}return!1});i.condition.operand==="or"?d=j.find(o=>o):d=j.findIndex(o=>!o)===-1}d&&(c||=[],c.push({title:i.title,text:i.text,link:i.link,linkText:i.linkText,buttons:i.buttons,level:i.level}))}),c}class W extends y.Component{t;mobile;messages;lang;constructor(e){var r,c;super(e),this.t=e.t,this.mobile=window.innerWidth<C,this.state={showMessageDialog:!1};const p=!1;this.messages=I(((r=this.props.adapterObject)==null?void 0:r.messages)||p,this.props.installedVersion,(c=this.props.adapterObject)==null?void 0:c.version,this.props.instances),this.lang=k.I18n.getLanguage(),T.locale(this.lang)}getDependencies(){return(this.props.dependencies||[]).map(e=>t.jsx(D,{state:e.rightVersion,children:`${e.name}${e.version?` (${e.version})`:""}: ${e.installed?e.installedVersion:"-"}`},e.name))}getNews(){var c;const e=[];let p,r;return this.props.isStable!==void 0&&(this.props.isStable?(p=this.props.adapterObject.version,r=this.props.adapterObject.latestVersion):(p=this.props.adapterObject.stable,r=this.props.adapterObject.version)),(c=this.props.news)==null||c.forEach(i=>{var m,_,j;const d=(i.news?i.news.split(`
2
+ `):[]).map(o=>o.trim().replace(/^\*\s*/,"").replace(/<!--[^>]*->/,"").replace(/<! -[^>]*->/,"").replace(/<!--|--!?>/g,"").trim()).filter(o=>!!o);(m=this.props.adapterObject)!=null&&m.version&&i.version&&f.gt(i.version,(_=this.props.adapterObject)==null?void 0:_.version)||e.push(t.jsxs(s.Grid2,{children:[t.jsxs(s.Typography,{sx:a.version,children:[i.version,r&&r===i.version?t.jsx(s.Box,{component:"span",sx:a.repoLatestVersionText,children:"(latest)"}):null,p&&p===i.version?t.jsx(s.Box,{component:"span",sx:a.repoStableVersionText,children:`(${k.I18n.t("stable")})`}):null,((j=this.props.adapterObject)==null?void 0:j.version)===i.version?t.jsxs("span",{style:a.versionTime,children:["(",T(this.props.adapterObject.versionDate).fromNow(),")"]}):null]}),d.map((o,n)=>t.jsx(s.Typography,{component:"div",variant:"body2",children:`• ${o}`},`${i.version}-${n}`))]},i.version))}),e}getText(e,p){return e&&typeof e=="object"?p?e.en:e[this.lang]||e.en:typeof e=="object"?"":e}renderOneMessage(e,p){return t.jsxs(s.Grid2,{children:[t.jsx(s.Typography,{sx:a[`messageTitle_${e.level||"warn"}`],children:this.getText(e.title,this.props.noTranslation)||""}),t.jsx(s.Typography,{component:"div",variant:"body2",style:a.messageText,children:this.getText(e.text,this.props.noTranslation)||""}),e.link?t.jsx(s.Button,{onClick:()=>{window.open(e.link,"_blank").focus()},startIcon:t.jsx(u.Public,{}),variant:"contained",color:"grey",children:this.getText(e.linkText,this.props.noTranslation)||this.props.t("More info")}):null]},p)}renderMessages(){return this.messages?t.jsx(s.Grid2,{container:!0,spacing:2,direction:"column",wrap:"nowrap",sx:{marginBottom:1},children:this.messages.map((e,p)=>this.renderOneMessage(e,p))}):null}renderMessageDialog(){var r;if(!this.state.showMessageDialog)return null;const e=this.messages.find(c=>c.buttons),p=(r=this.props.adapterObject)==null?void 0:r.version;return t.jsxs(s.Dialog,{onClose:()=>this.setState({showMessageDialog:!1}),open:!0,children:[t.jsx(s.DialogTitle,{style:a.messageDialogTitle,children:this.getText(e.title,this.props.noTranslation)||this.props.t("Please confirm")}),t.jsxs(s.DialogContent,{style:a.messageDialogText,children:[e.level==="warn"?t.jsx(u.Warning,{style:{...a.messageIcon,...a.messageColor_warn}}):null,e.level==="error"?t.jsx(u.Error,{style:{...a.messageIcon,...a.messageColor_error}}):null,e.level==="info"?t.jsx(u.Info,{style:{...a.messageIcon,...a.messageColor_info}}):null,this.getText(e.text,this.props.noTranslation)]}),t.jsxs(s.DialogActions,{children:[e.link?t.jsx(s.Button,{onClick:()=>{window.open(e.link,"_blank").focus()},startIcon:t.jsx(u.Public,{}),variant:"contained",color:"secondary",children:this.getText(e.linkText,this.props.noTranslation)||this.props.t("More info")}):null,e.link?t.jsx("div",{style:{flexGrow:1}}):null,e.buttons.map((c,i)=>c==="ok"?t.jsx(s.Button,{variant:"contained",onClick:()=>this.setState({showMessageDialog:!1},()=>this.props.onUpdate(p)),color:"primary",startIcon:t.jsx(u.Check,{}),children:this.t("Update")},i):c==="agree"?t.jsx(s.Button,{sx:a[`messageTitle_${e.level||"warn"}`],variant:"contained",onClick:()=>this.setState({showMessageDialog:!1},()=>this.props.onUpdate(p)),color:"primary",startIcon:t.jsx(u.Check,{}),children:this.t("Agree")},i):c==="cancel"?t.jsx(s.Button,{variant:"contained",onClick:()=>this.setState({showMessageDialog:!1}),startIcon:t.jsx(u.Close,{}),color:"grey",children:this.t("Cancel")},i):null)]})]})}render(){var c,i;const e=(c=this.props.adapterObject)==null?void 0:c.version,p=(i=this.props.news)==null?void 0:i.every(d=>d.downloaded),r=this.getNews();return t.jsxs(s.Dialog,{onClose:this.props.onClose,open:!0,sx:{"& .MuiDialog-paper":a.dialogPaper},children:[this.renderMessageDialog(),t.jsx(s.DialogTitle,{children:t.jsxs(s.Typography,{component:"h2",variant:"h6",sx:{"&.MuiTypography-root":a.typography},children:[t.jsx("div",{style:{width:"calc(100% - 60px)"},children:this.t('Update "%s" to v%s',this.props.adapter,e)}),t.jsx(s.IconButton,{size:"large",sx:a.closeButton,onClick:this.props.onClose,children:t.jsx(u.Close,{})}),this.lang!=="en"&&this.props.toggleTranslation&&!p?t.jsx(s.IconButton,{size:"large",style:k.Utils.getStyle(this.props.theme,a.languageButton,this.props.noTranslation&&a.languageButtonActive),onClick:this.props.toggleTranslation,title:k.I18n.t("Disable/Enable translation"),children:t.jsx(u.Language,{})}):null]})}),t.jsxs(s.DialogContent,{dividers:!0,children:[this.renderMessages(),t.jsxs(s.Grid2,{container:!0,direction:"column",spacing:2,wrap:"nowrap",children:[this.props.dependencies&&this.props.dependencies.length>0&&this.props.dependencies.find(d=>!d.rightVersion)&&t.jsxs(s.Grid2,{children:[t.jsx(s.Typography,{variant:"h6",gutterBottom:!0,children:this.t("Dependencies")}),this.getDependencies()]}),r.length?t.jsxs(s.Grid2,{children:[t.jsx(s.Typography,{variant:"h6",gutterBottom:!0,children:this.t("Change log")}),t.jsx(s.Grid2,{container:!0,spacing:2,direction:"column",wrap:"nowrap",children:r})]}):this.t("No change log available")]})]}),t.jsxs(s.DialogActions,{sx:a.wrapperButton,children:[!!this.props.rightDependencies&&this.props.onIgnore&&e&&t.jsx(s.Button,{id:"adapter-update-dialog-ignore",variant:"outlined",onClick:()=>this.props.onIgnore(e),color:"primary",children:this.t("Ignore version %s",e)}),t.jsx(s.Button,{variant:"contained",id:"adapter-update-dialog-ok",autoFocus:!0,disabled:!this.props.rightDependencies||!e||!this.props.adapterObject,onClick:()=>{var d;(d=this.messages)!=null&&d.find(m=>m.buttons)?this.setState({showMessageDialog:!0}):this.props.onUpdate(e)},color:"primary",startIcon:t.jsx(u.Check,{}),children:this.mobile?null:this.props.textUpdate?this.props.textUpdate:this.t("Update")}),this.props.textInstruction?t.jsx(s.Button,{id:"adapter-update-dialog-instructions",variant:"contained",autoFocus:!0,disabled:!this.props.rightDependencies||!e||!this.props.adapterObject,onClick:()=>{var d;(d=this.messages)!=null&&d.find(m=>m.buttons)?this.setState({showMessageDialog:!0}):this.props.onInstruction()},color:"primary",startIcon:t.jsx(u.Book,{}),children:this.mobile?null:this.props.textInstruction}):null,t.jsx(s.Button,{id:"adapter-update-dialog-cancel",variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:t.jsx(u.Close,{}),children:this.mobile?null:this.t("Close")})]})]})}}export{W as A,I as c};