iobroker.admin 7.7.2 → 7.7.3

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 (133) hide show
  1. package/README.md +42 -8
  2. package/admin/admin.png +0 -0
  3. package/admin/i18n/de.json +1 -1
  4. package/admin/i18n/es.json +1 -1
  5. package/admin/i18n/fr.json +1 -1
  6. package/admin/i18n/it.json +1 -1
  7. package/admin/i18n/nl.json +1 -1
  8. package/admin/i18n/pl.json +1 -1
  9. package/admin/i18n/pt.json +1 -1
  10. package/admin/i18n/ru.json +1 -1
  11. package/admin/i18n/uk.json +1 -1
  12. package/admin/i18n/zh-cn.json +1 -1
  13. package/admin/jsonConfig.json5 +1 -2
  14. package/adminWww/assets/{AdapterUpdateDialog-DHGhgEEq.js → AdapterUpdateDialog-BQUTMe7v.js} +1 -1
  15. package/adminWww/assets/Adapters-KuMqwfzU.js +9 -0
  16. package/adminWww/assets/Config-LH40Fzyp.js +1 -0
  17. package/adminWww/assets/CustomModal-UQ6ICKdg.js +1 -0
  18. package/adminWww/assets/CustomTab-CE2qvngn.js +1 -0
  19. package/adminWww/assets/DefaultPropsProvider-BxjOYH1h.js +30 -0
  20. package/adminWww/assets/EasyMode-XXQKZmWs.js +1 -0
  21. package/adminWww/assets/{Enums-BSICIhWI.js → Enums-Ddmi-fYo.js} +3 -3
  22. package/adminWww/assets/{Fields-C3JkTmfP.js → Fields-CQNdUYkd.js} +1 -1
  23. package/adminWww/assets/{Files-DK85-COY.js → Files-DgOiCRiN.js} +2 -2
  24. package/adminWww/assets/FilledInput-B9JSi0Ta.js +2 -0
  25. package/adminWww/assets/Hosts-BgDpLhdl.js +121 -0
  26. package/adminWww/assets/Instances-DikJwBl0.js +2 -0
  27. package/adminWww/assets/Intro-vxIHtYzr.js +2 -0
  28. package/adminWww/assets/Logs-DZUWTbJn.js +1 -0
  29. package/adminWww/assets/Objects-Dm1_4aGR.js +60 -0
  30. package/adminWww/assets/{State-BqfD2ABf.js → State-CrcWiBdx.js} +1 -1
  31. package/adminWww/assets/TextField-j-uewRwI.js +138 -0
  32. package/adminWww/assets/ThemeProvider-DHntAcOp.js +29 -0
  33. package/adminWww/assets/Users-GcWjwa7A.js +1 -0
  34. package/adminWww/assets/ace-1DqSbvTN.js +985 -0
  35. package/adminWww/assets/{bootstrap-BYQTdf9r.js → bootstrap-B3ZI_-0g.js} +112 -112
  36. package/adminWww/assets/{createSvgIcon-Bh3KWtyp.js → createSvgIcon-Ds12z7B3.js} +1 -1
  37. package/adminWww/assets/emotion-cache.browser.esm-BgJfNZJN.js +1 -0
  38. package/adminWww/assets/emotion-react.browser.esm-CBtpmfsG.js +8 -0
  39. package/adminWww/assets/emotion-serialize.esm-Q4o_CgeF.js +1 -0
  40. package/adminWww/assets/emotion-styled.browser.esm-BeD8nBzN.js +1 -0
  41. package/adminWww/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-BIy6Leuu.js +1 -0
  42. package/adminWww/assets/geosearch.module-B6h9BuIR.js +1 -0
  43. package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
  44. package/adminWww/assets/iconBase-BAOnvyiQ.js +1 -0
  45. package/adminWww/assets/{index-Qa7Q_Dz5.js → index-BOnh7es7.js} +1 -1
  46. package/adminWww/assets/{index-B1ITPhEY.js → index-BSfwmoAE.js} +3 -3
  47. package/adminWww/assets/{index-rKfs-rCa.js → index-BVgYaw7t.js} +1 -1
  48. package/adminWww/assets/{index-D--ojYan.js → index-C9i3HTsG.js} +1 -1
  49. package/adminWww/assets/{index-wN1ZlPSW.js → index-CELb-gCK.js} +2 -2
  50. package/adminWww/assets/{index-DPDg2YA0.js → index-CU6eZCem.js} +1 -1
  51. package/adminWww/assets/{index-DTGUg51P.js → index-DZ0MncEz.js} +2 -2
  52. package/adminWww/assets/index-Dg-s3k0-.js +10 -0
  53. package/adminWww/assets/index-tS5iCAF7.js +55 -0
  54. 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
  55. package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js → iobroker_admin__loadShare__leaflet__loadShare__-DIpcqFbm.js} +1 -1
  56. package/adminWww/assets/{iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js → iobroker_admin__loadShare__prop_mf_2_types__loadShare__-pDONiJUe.js} +1 -1
  57. package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js → iobroker_admin__loadShare__react__loadShare__-CuzHmAOj.js} +1 -1
  58. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CHE4rLsT.js +5 -0
  59. package/adminWww/assets/leaflet-src-BRBM-1HK.js +4 -0
  60. package/adminWww/assets/{sentry-H_UdJ2zx.js → sentry-B6yHtsbd.js} +1 -1
  61. package/adminWww/assets/{zh-cn-vvAC9zpl.js → zh-cn-heTcsLnU.js} +13 -13
  62. package/adminWww/img/admin.png +0 -0
  63. package/adminWww/index.html +2 -2
  64. package/adminWww/mf-manifest.json +1 -1
  65. package/adminWww/remoteEntry.js +2 -2
  66. package/build/i18n/de.json +18 -0
  67. package/build/i18n/es.json +18 -0
  68. package/build/i18n/fr.json +18 -0
  69. package/build/i18n/it.json +18 -0
  70. package/build/i18n/nl.json +18 -0
  71. package/build/i18n/pl.json +18 -0
  72. package/build/i18n/pt.json +18 -0
  73. package/build/i18n/ru.json +18 -0
  74. package/build/i18n/uk.json +18 -0
  75. package/build/i18n/zh-cn.json +18 -0
  76. package/build/lib/DockerManager.js +1315 -0
  77. package/build/lib/DockerManager.js.map +1 -0
  78. package/build/lib/dockerManager.types.js +3 -0
  79. package/build/lib/dockerManager.types.js.map +1 -0
  80. package/{build-backend → build}/lib/testPassword.js +1 -1
  81. package/{build-backend → build}/lib/testPassword.js.map +1 -1
  82. package/{build-backend → build}/lib/translations.js +16 -1
  83. package/build/lib/translations.js.map +1 -0
  84. package/{build-backend → build}/main.js +58 -5
  85. package/build/main.js.map +1 -0
  86. package/io-package.json +14 -14
  87. package/package.json +7 -7
  88. package/adminWww/assets/Adapters-CgSIajcF.js +0 -7
  89. package/adminWww/assets/Config-BQSl4bfA.js +0 -1
  90. package/adminWww/assets/CustomModal-DNMTLv4y.js +0 -1
  91. package/adminWww/assets/CustomTab-Bl8S8QZW.js +0 -1
  92. package/adminWww/assets/DefaultPropsProvider-u5xB1Fxz.js +0 -30
  93. package/adminWww/assets/EasyMode-xDbqrply.js +0 -1
  94. package/adminWww/assets/FilledInput-CysG4ax_.js +0 -2
  95. package/adminWww/assets/Hosts-qIsB4Gub.js +0 -121
  96. package/adminWww/assets/Instances-BA_DCzs8.js +0 -2
  97. package/adminWww/assets/Intro-00oh6SLw.js +0 -2
  98. package/adminWww/assets/Logs-Cvpgh-zN.js +0 -1
  99. package/adminWww/assets/Objects-Dp71iotS.js +0 -60
  100. package/adminWww/assets/Tabs-sxfWgN0b.js +0 -138
  101. package/adminWww/assets/Users-CDcWqTfZ.js +0 -1
  102. package/adminWww/assets/ace-BG5WYul1.js +0 -985
  103. package/adminWww/assets/blueGrey-DYsiMDOn.js +0 -29
  104. package/adminWww/assets/emotion-cache.browser.esm-B8BFze5o.js +0 -1
  105. package/adminWww/assets/emotion-react.browser.esm-BCDt9NrH.js +0 -8
  106. package/adminWww/assets/emotion-serialize.esm-BUa21YfQ.js +0 -1
  107. package/adminWww/assets/emotion-styled.browser.esm-CyFqGgyG.js +0 -1
  108. package/adminWww/assets/emotion-utils.browser.esm-pglN4_eI.js +0 -1
  109. package/adminWww/assets/geosearch.module-DH4NhiPj.js +0 -1
  110. package/adminWww/assets/iconBase-C3vi24ZE.js +0 -1
  111. package/adminWww/assets/index-D3IAEXXP.js +0 -10
  112. package/adminWww/assets/index-qcIeekse.js +0 -55
  113. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +0 -5
  114. package/adminWww/assets/leaflet-src-A2ZHl6nF.js +0 -4
  115. package/build-backend/i18n/de.json +0 -18
  116. package/build-backend/i18n/es.json +0 -18
  117. package/build-backend/i18n/fr.json +0 -18
  118. package/build-backend/i18n/it.json +0 -18
  119. package/build-backend/i18n/nl.json +0 -18
  120. package/build-backend/i18n/pl.json +0 -18
  121. package/build-backend/i18n/pt.json +0 -18
  122. package/build-backend/i18n/ru.json +0 -18
  123. package/build-backend/i18n/uk.json +0 -18
  124. package/build-backend/i18n/zh-cn.json +0 -18
  125. package/build-backend/lib/translations.js.map +0 -1
  126. package/build-backend/main.js.map +0 -1
  127. /package/{build-backend → build}/i18n/en.json +0 -0
  128. /package/{build-backend → build}/lib/checkLinuxPass.js +0 -0
  129. /package/{build-backend → build}/lib/checkLinuxPass.js.map +0 -0
  130. /package/{build-backend → build}/lib/utils.js +0 -0
  131. /package/{build-backend → build}/lib/utils.js.map +0 -0
  132. /package/{build-backend → build}/lib/web.js +0 -0
  133. /package/{build-backend → build}/lib/web.js.map +0 -0
package/README.md CHANGED
@@ -84,11 +84,51 @@ This project uses icons from [Flaticon](https://www.flaticon.com/).
84
84
  ioBroker GmbH has a valid license for all used icons.
85
85
  The icons may not be reused in other projects without the proper flaticon license or flaticon subscription.
86
86
 
87
-
87
+ ## Changelog
88
88
  <!--
89
89
  ### **WORK IN PROGRESS**
90
90
  -->
91
- ### 7.7.2 (2025-07-22)
91
+ ### 7.7.3 (2025-09-25)
92
+ - Many GUI changes: See previous changelog below for details
93
+
94
+ ### 7.7.2 (2025-09-24)
95
+ - (@copilot) Fixed JSONCONFIG table validator bug where validation errors persisted after deleting table rows
96
+ - (@GermanBluefox) Made small fix for JsonConfig component `state`
97
+ - (@copilot) Fixed repository refresh issue: repositories are now automatically refreshed when switching repository source (stable/latest) without requiring manual "Check for updates"
98
+ - (@copilot) Added CSV file editing support in file browser - CSV files can now be edited directly in the file manager
99
+ - (@copilot) Implemented sortable columns for instances table (name, status, memory, ID, host, loglevel)
100
+ - (@copilot) Fixed adapter license icon linking to use commercial license URL instead of GitHub license
101
+ - (@copilot) Fixed license icon spacing in list view to maintain consistent layout
102
+ - (@GermanBluefox) Allows entering minus values with JsonConfig number component
103
+ - (@copilot) Fixed textIP checkbox inconsistency between Objects and States tabs for the same host configuration
104
+ - (@GermanBluefox) Added icon to `www` folder for windows
105
+ - (@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
106
+ - (@copilot) Enhanced Copilot instructions to make issue management policy more prominent - no auto-closing issues, manual validation required
107
+ - (@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
108
+ - (@copilot) Fixed jsonConfig port validation to properly account for bind addresses, allowing the same port on different IP addresses
109
+ - (@copilot) Added error indicators to JSON Config tabs and accordions to improve the visibility of validation errors
110
+ - (@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
111
+ - (@copilot) Fixed time difference warning that incorrectly appeared when the browser tab was inactive for a while
112
+ - (@copilot) For GitHub-installed adapters, show version + commit hash instead of just version
113
+ - (@copilot) Fixed table export error when table items contain null values
114
+ - (@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
115
+ - (@copilot) Enhanced GitHub Actions to skip tests when only README.md is changed, speeding up CI for Copilot PRs (tested with mixed file changes)
116
+ - (@GermanBluefox) Added the docker checker in JSON config
117
+ - (@copilot) Fixed js-controller update notifications to use "The js-controller" instead of "Adapter js-controller"
118
+ - (@copilot) Fixed JSONConfig sendTo jsonData attribute parser problem where backslashes (\) in text inputs caused JSON parsing errors
119
+ - (@copilot) Fixed step type behavior in chart display - "Schritte" now shows value until next point (step after) instead of step before
120
+ - (@copilot) Added all three-step type options (stepStart, stepMiddle, stepEnd) to chart display with clearer descriptions
121
+ - (@copilot) Fixed React error #62 in the Files tab caused by malformed CSS calc() function
122
+ - (@copilot) Added loading indicator to JSONConfig autocompleteSendTo component during sendTo operations
123
+ - (@copilot) Mark adapters removed from repository with "not maintained" text instead of empty version field
124
+ - (@copilot) Enhanced responsive design: modals and popups now use full screen on xs and sm breakpoints
125
+ - (@copilot) Added logout dropdown menu to user icon for improved user experience
126
+ - (@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
127
+ - (@copilot) Only show adapters with satisfied dependencies in update all dialog
128
+ - (@copilot) Added new `readOnly` attribute for jsonEditor in jsonConfig - allows opening the editor to view JSON content without allowing modifications
129
+ - (@GermanBluefox) Reading of same instances was optimized in GUI
130
+ - (@GermanBluefox) Do not show the http page if admin is secured
131
+ - (@GermanBluefox) Show loading progress for custom tabs
92
132
  - (@GermanBluefox) Fixing change of the language in the admin
93
133
 
94
134
  ### 7.7.1 (2025-06-20)
@@ -101,12 +141,6 @@ The icons may not be reused in other projects without the proper flaticon licens
101
141
  - (@GermanBluefox) Allowed using of * in the filter of objects
102
142
  - (@GermanBluefox) Small GUI improvements
103
143
 
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
144
  ## License
111
145
 
112
146
  The MIT License (MIT)
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
  },
@@ -1,2 +1,2 @@
1
- import{j as t}from"./DefaultPropsProvider-u5xB1Fxz.js";import{i as y}from"./iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js";import{s as f,ac as C,I as k,i as s,a as u,U as D}from"./bootstrap-BYQTdf9r.js";import{h as T}from"./zh-cn-vvAC9zpl.js";import{S as I}from"./State-BqfD2ABf.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 B(l,e,p,n){let c=null;return l&&l.forEach(i=>{var x,j;let d=!((x=i.condition)!=null&&x.rules);if((j=i.condition)!=null&&j.rules){const v=(Array.isArray(i.condition.rules)?i.condition.rules:[i.condition.rules]).map(o=>{let r,h,g;if(o.includes("oldVersion"))r=e,o=o.substring(10);else if(o.includes("newVersion"))r=p,o=o.substring(10);else{if(o==="installed")return!!e;if(o==="!"||o==="not-installed")return!e;if(n){const _=o.match(/([a-z][-a-z_0-9]+)([!=<>]+)([.\d]+)/);if(_){const m=Object.keys(n).find(b=>{var w;return((w=n[b])==null?void 0:w.name)===_[1]});if(m){r=n[m].version,h=_[2],g=_[3];try{return h==="=="?f.eq(r,g):h===">"?f.gt(r,g):h==="<"?f.lt(r,g):h===">="?f.gte(r,g):h==="<="?f.lte(r,g):h==="!="?f.neq(r,g):(console.warn(`Unknown rule ${r}${o}`),!1)}catch{return console.warn(`Cannot compare ${r}${o}`),!1}}}else if(o.match(/^[!=<>]+/)){if(o.startsWith("!")){const m=o.substring(1);if(!Object.keys(n).find(b=>{var w;return((w=n[b])==null?void 0:w.name)===m}))return!0}}else if(Object.keys(n).find(m=>{var b;return((b=n[m])==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(r,g);if(h===">")return f.gt(r,g);if(h==="<")return f.lt(r,g);if(h===">=")return f.gte(r,g);if(h==="<=")return f.lte(r,g);if(h==="!=")return f.neq(r,g);console.warn(`Unknown rule ${r}${o}`)}catch{console.warn(`Cannot compare ${r}${o}`)}return!1});i.condition.operand==="or"?d=v.find(o=>o):d=v.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 V extends y.Component{t;mobile;messages;lang;constructor(e){var n,c;super(e),this.t=e.t,this.mobile=window.innerWidth<C,this.state={showMessageDialog:!1};const p=!1;this.messages=B(((n=this.props.adapterObject)==null?void 0:n.messages)||p,this.props.installedVersion,(c=this.props.adapterObject)==null?void 0:c.version,this.props.instances),this.lang=k.getLanguage(),T.locale(this.lang)}getDependencies(){return(this.props.dependencies||[]).map(e=>t.jsx(I,{state:e.rightVersion,children:`${e.name}${e.version?` (${e.version})`:""}: ${e.installed?e.installedVersion:"-"}`},e.name))}getNews(){var c;const e=[];let p,n;return this.props.isStable!==void 0&&(this.props.isStable?(p=this.props.adapterObject.version,n=this.props.adapterObject.latestVersion):(p=this.props.adapterObject.stable,n=this.props.adapterObject.version)),(c=this.props.news)==null||c.forEach(i=>{var x,j,v;const d=(i.news?i.news.split(`
1
+ import{j as t}from"./DefaultPropsProvider-BxjOYH1h.js";import{i as y}from"./iobroker_admin__loadShare__react__loadShare__-CuzHmAOj.js";import{s as f,ac as C,I as k,i as s,a as u,U as D}from"./bootstrap-B3ZI_-0g.js";import{h as T}from"./zh-cn-heTcsLnU.js";import{S as I}from"./State-CrcWiBdx.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 B(l,e,p,n){let c=null;return l&&l.forEach(i=>{var x,j;let d=!((x=i.condition)!=null&&x.rules);if((j=i.condition)!=null&&j.rules){const v=(Array.isArray(i.condition.rules)?i.condition.rules:[i.condition.rules]).map(o=>{let r,h,g;if(o.includes("oldVersion"))r=e,o=o.substring(10);else if(o.includes("newVersion"))r=p,o=o.substring(10);else{if(o==="installed")return!!e;if(o==="!"||o==="not-installed")return!e;if(n){const _=o.match(/([a-z][-a-z_0-9]+)([!=<>]+)([.\d]+)/);if(_){const m=Object.keys(n).find(b=>{var w;return((w=n[b])==null?void 0:w.name)===_[1]});if(m){r=n[m].version,h=_[2],g=_[3];try{return h==="=="?f.eq(r,g):h===">"?f.gt(r,g):h==="<"?f.lt(r,g):h===">="?f.gte(r,g):h==="<="?f.lte(r,g):h==="!="?f.neq(r,g):(console.warn(`Unknown rule ${r}${o}`),!1)}catch{return console.warn(`Cannot compare ${r}${o}`),!1}}}else if(o.match(/^[!=<>]+/)){if(o.startsWith("!")){const m=o.substring(1);if(!Object.keys(n).find(b=>{var w;return((w=n[b])==null?void 0:w.name)===m}))return!0}}else if(Object.keys(n).find(m=>{var b;return((b=n[m])==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(r,g);if(h===">")return f.gt(r,g);if(h==="<")return f.lt(r,g);if(h===">=")return f.gte(r,g);if(h==="<=")return f.lte(r,g);if(h==="!=")return f.neq(r,g);console.warn(`Unknown rule ${r}${o}`)}catch{console.warn(`Cannot compare ${r}${o}`)}return!1});i.condition.operand==="or"?d=v.find(o=>o):d=v.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 V extends y.Component{t;mobile;messages;lang;constructor(e){var n,c;super(e),this.t=e.t,this.mobile=window.innerWidth<C,this.state={showMessageDialog:!1};const p=!1;this.messages=B(((n=this.props.adapterObject)==null?void 0:n.messages)||p,this.props.installedVersion,(c=this.props.adapterObject)==null?void 0:c.version,this.props.instances),this.lang=k.getLanguage(),T.locale(this.lang)}getDependencies(){return(this.props.dependencies||[]).map(e=>t.jsx(I,{state:e.rightVersion,children:`${e.name}${e.version?` (${e.version})`:""}: ${e.installed?e.installedVersion:"-"}`},e.name))}getNews(){var c;const e=[];let p,n;return this.props.isStable!==void 0&&(this.props.isStable?(p=this.props.adapterObject.version,n=this.props.adapterObject.latestVersion):(p=this.props.adapterObject.stable,n=this.props.adapterObject.version)),(c=this.props.news)==null||c.forEach(i=>{var x,j,v;const d=(i.news?i.news.split(`
2
2
  `):[]).map(o=>o.trim().replace(/^\*\s*/,"").replace(/<!--[^>]*->/,"").replace(/<! -[^>]*->/,"").replace(/<!--|--!?>/g,"").trim()).filter(o=>!!o);(x=this.props.adapterObject)!=null&&x.version&&i.version&&f.gt(i.version,(j=this.props.adapterObject)==null?void 0:j.version)||e.push(t.jsxs(s.Grid2,{children:[t.jsxs(s.Typography,{sx:a.version,children:[i.version,n&&n===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.t("stable")})`}):null,((v=this.props.adapterObject)==null?void 0:v.version)===i.version?t.jsxs("span",{style:a.versionTime,children:["(",T(this.props.adapterObject.versionDate).fromNow(),")"]}):null]}),d.map((o,r)=>t.jsx(s.Typography,{component:"div",variant:"body2",children:`• ${o}`},`${i.version}-${r}`))]},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 n;if(!this.state.showMessageDialog)return null;const e=this.messages.find(c=>c.buttons),p=(n=this.props.adapterObject)==null?void 0:n.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),n=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:D.getStyle(this.props.theme,a.languageButton,this.props.noTranslation&&a.languageButtonActive),onClick:this.props.toggleTranslation,title:k.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()]}),n.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:n})]}):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(x=>x.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(x=>x.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{V as A,B as c};
@@ -0,0 +1,9 @@
1
+ import{j as e,p as pt,n as mt,w as xt}from"./DefaultPropsProvider-BxjOYH1h.js";import{i as N,a as q}from"./iobroker_admin__loadShare__react__loadShare__-CuzHmAOj.js";import{s as V,i as o,U as L,I as w,a as g,C as ft,G as yt,b as z,H as wt,L as bt,c as U,A as jt,d as Ct,e as Z,f as dt,T as vt,S as st,g as Tt,h as At}from"./bootstrap-B3ZI_-0g.js";import{F as ct}from"./index-CU6eZCem.js";import{M as St,s as It,C as it}from"./sentry-B6yHtsbd.js";import{c as Q,A as kt}from"./AdapterUpdateDialog-BQUTMe7v.js";import{C as Dt}from"./CustomModal-UQ6ICKdg.js";import{a as ht}from"./ThemeProvider-DHntAcOp.js";import"./iobroker_admin__loadShare__prop_mf_2_types__loadShare__-pDONiJUe.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-CHE4rLsT.js";import"./emotion-serialize.esm-Q4o_CgeF.js";import"./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-CXogaIXO.js";import"./ace-1DqSbvTN.js";import"./FilledInput-B9JSi0Ta.js";import"./preload-helper-Dp1pzeXC.js";import"./iobroker_admin__loadShare__leaflet__loadShare__-DIpcqFbm.js";import"./extends-CF3RwP-h.js";import"./iconBase-BAOnvyiQ.js";import"./zh-cn-heTcsLnU.js";import"./State-CrcWiBdx.js";import"./emotion-cache.browser.esm-BgJfNZJN.js";const A={smallAvatar:{width:24,height:24},listItem:p=>({mb:"2px",background:p.palette.background,"@media screen and (max-width: 400px)":{pl:"2px"}}),toVersion:p=>({color:p.palette.mode==="dark"?"#00dc00":"#008100",fontWeight:"bold",ml:"4px"}),updateDone:{background:"#5ef05e80",opacity:.7},minWidthCss:{"@media screen and (max-width: 400px)":{minWidth:32}},wrapperButton:{},typography:{paddingRight:30},versions:{minWidth:110,display:"inline-block"},closeButton:p=>({position:"absolute",right:8,top:8,color:p.palette.grey[500]}),languageButton:{position:"absolute",right:60,top:8},languageButtonActive:p=>({color:p.palette.primary.main}),versionHeader:p=>({background:"#4dabf5",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:p.palette.mode==="dark"?"black":"white"}),repoStableVersionText:p=>({color:p.palette.mode==="dark"?"#8dff7a":"#2b9800",fontWeight:"bold",marginLeft:"4px"}),repoLatestVersionText:p=>({color:p.palette.mode==="dark"?"#a3fcff":"#005498",fontWeight:"bold",marginLeft:"4px"})};class tt extends N.Component{updateAvailable;initialVersions;currentRef;current;constructor(t){super(t),this.updateAvailable=this.detectUpdates(),this.initialVersions={},this.updateAvailable.forEach(s=>this.initialVersions[s]=this.props.installed[s].version),this.state={showNews:null},this.currentRef=q.createRef(),this.current=t.current,this.props.onUpdateSelected([...this.updateAvailable],this.updateAvailable)}static isUpdateAvailable(t){const{oldVersion:s,newVersion:i,name:n}=t;try{return V.gt(i,s)}catch{return console.warn(`Cannot compare "${i}" and "${s}" of adapter ${n}`),!1}}detectUpdates(){const t=[];return Object.keys(this.props.repository).forEach(s=>{const i=this.props.installed[s];s==="js-controller"||s==="admin"||i&&this.props.repository[s].version&&i.ignoreVersion!==this.props.repository[s].version&&tt.isUpdateAvailable({oldVersion:i.version,newVersion:this.props.repository[s].version,name:s})&&(Q(this.props.repository[s].messages,i.version,this.props.repository[s].version)?console.log(`Adapter ${s} is filtered out from update all functionality, because it has messages which need to be read before update`):this.props.rightDependenciesFunc(s)?t.push(s):console.log(`Adapter ${s} is filtered out from update all functionality, because its dependencies are not met`))}),t.sort(),t}getNews(t){const s=this.props.repository[t],i=this.props.installed[t],n=[];return i&&(s!=null&&s.news)&&Object.keys(s.news).forEach(r=>{try{V.gt(r,i.version)&&n.push({version:r,news:this.props.noTranslation?s.news[r].en:s.news[r][this.props.lang]||s.news[r].en})}catch{console.warn(`Cannot compare "${r}" and "${i.version}"`)}}),n}renderOneAdapter(t){const s=this.props.selected.includes(t);if((this.props.finished||this.props.inProcess)&&!s||!this.props.installed[t])return null;const i=`.${this.props.installed[t].localIcon}`;return e.jsxs(o.ListItem,{dense:!0,sx:{"&.MuiListItem-root":L.getStyle(this.props.theme,A.listItem,this.props.updated.includes(t)&&A.updateDone)},ref:this.props.current===t?this.currentRef:null,secondaryAction:!this.props.finished&&!this.props.inProcess?e.jsx(o.Checkbox,{edge:"end",checked:s,tabIndex:-1,disableRipple:!0,disabled:this.props.inProcess,onClick:()=>{const n=[...this.props.selected],r=n.indexOf(t);r!==-1?n.splice(r,1):(n.push(t),n.sort()),this.props.onUpdateSelected(n)}}):this.props.current===t&&!this.props.stopped&&!this.props.finished&&e.jsx(o.CircularProgress,{}),children:[e.jsx(o.ListItemIcon,{sx:A.minWidthCss,children:e.jsx(o.Avatar,{variant:"square",alt:t,src:i,style:A.smallAvatar})}),e.jsx(o.ListItemText,{primary:t,title:this.getNews(t).map(n=>`${n.version}: ${n.news}`).join(`
2
+ `),secondary:e.jsxs("span",{children:[e.jsxs("div",{style:A.versions,children:[this.initialVersions[t]," →",e.jsx(o.Box,{component:"span",sx:A.toVersion,children:this.props.repository[t].version})]}),e.jsx(o.IconButton,{title:w.t("Show change log"),onClick:()=>this.setState({showNews:{adapter:t,version:this.props.repository[t].version,fromVersion:this.initialVersions[t]}}),size:"small",children:e.jsx(g.Info,{})})]})})]},t)}getReactNews(t,s){var d,l,u,m;const i=this.props.repository[t],n=this.props.installed[t];s=s||n.version;const r=[];let a,c;const h=this.props.repository._repoInfo;return h!=null&&h.stable?(a=(d=this.props.repository[t])==null?void 0:d.version,c=(l=this.props.repository[t])==null?void 0:l.latestVersion):(a=(u=this.props.repository[t])==null?void 0:u.stable,c=(m=this.props.repository[t])==null?void 0:m.version),n&&(i!=null&&i.news)&&Object.keys(i.news).forEach(x=>{try{if(V.gt(x,s)&&i.news[x]){const b=(this.props.noTranslation?i.news[x].en||"":i.news[x][this.props.lang]||i.news[x].en||"").split(`
3
+ `).map(I=>I.trim().replace(/^\*\s?/,"").replace(/<!--[^>]*->/g,"").replace(/<! -[^>]*->/g,"").trim()).filter(I=>!!I);r.push(e.jsxs(o.Grid2,{children:[e.jsxs(o.Typography,{sx:A.versionHeader,children:[x,c===x?e.jsx(o.Box,{component:"span",sx:A.repoLatestVersionText,children:"(latest)"}):null,a===x?e.jsx(o.Box,{component:"span",sx:A.repoStableVersionText,children:`(${w.t("stable")})`}):null]}),b.map((I,T)=>e.jsx(o.Typography,{component:"div",variant:"body2",children:`• ${I}`},`${x}-${T}`))]},x))}}catch{console.warn(`Cannot compare "${x}" and "${s}"`)}}),r}renderShowNews(){if(this.state.showNews){const t=this.getReactNews(this.state.showNews.adapter,this.state.showNews.fromVersion),s=L.getStyle(this.props.theme,A.closeButton),i=L.getStyle(this.props.theme,A.languageButtonActive);return e.jsxs(o.Dialog,{onClose:()=>this.setState({showNews:null}),open:!0,children:[e.jsx(o.DialogTitle,{children:e.jsxs(o.Typography,{component:"h2",variant:"h6",sx:{"&.MuiTypography-root":A.typography},children:[e.jsx("div",{style:{width:"calc(100% - 60px)"},children:w.t('Update "%s" to v%s',this.state.showNews.adapter,this.state.showNews.version)}),e.jsx(o.IconButton,{size:"large",style:s,onClick:()=>this.setState({showNews:null}),children:e.jsx(g.Close,{})}),w.getLanguage()!=="en"&&this.props.toggleTranslation?e.jsx(o.IconButton,{size:"large",style:{...A.languageButton,...this.props.noTranslation?i:void 0},onClick:this.props.toggleTranslation,title:w.t("Disable/Enable translation"),children:e.jsx(g.Language,{})}):null]})}),e.jsx(o.DialogContent,{dividers:!0,children:e.jsx(o.Grid2,{container:!0,direction:"column",spacing:2,wrap:"nowrap",children:t.length?e.jsxs(o.Grid2,{children:[e.jsx(o.Typography,{variant:"h6",gutterBottom:!0,children:w.t("Change log")}),e.jsx(o.Grid2,{container:!0,spacing:2,direction:"column",wrap:"nowrap",children:t})]}):w.t("No change log available")})}),e.jsx(o.DialogActions,{style:A.wrapperButton,children:e.jsx(o.Button,{variant:"contained",onClick:()=>this.setState({showNews:null}),color:"grey",startIcon:e.jsx(g.Close,{}),children:w.t("Close")})})]})}return null}render(){return this.current!==this.props.current&&(this.current=this.props.current,setTimeout(()=>{var t;return(t=this.currentRef.current)==null?void 0:t.scrollIntoView()},200)),e.jsxs(o.List,{style:A.root,children:[this.updateAvailable.map(t=>this.renderOneAdapter(t)),this.renderShowNews()]})}}const F={dialogRoot:{height:"calc(100% - 64px)"},wrapperHead:{justifyContent:"space-between",display:"flex"},checkbox:{marginRight:10},appBar:p=>({flexWrap:"wrap",position:"sticky",bottom:-10,pl:1,background:p.name==="blue"?"#5d6467":p.name==="dark"?"#5b5b5b":"#FFF"}),container:{overflow:"hidden",height:"calc(100% - 48px)","@media screen and (max-width: 602px)":{height:"auto"}},content:{"@media screen and (max-width: 500px)":{p:1}},languageButton:{position:"absolute",right:73,top:11},languageButtonActive:p=>({color:p.palette.primary.main})};class Vt extends N.Component{updateAvailable=[];onAdapterFinished;processList;constructor(t){super(t),this.state={selected:[],inProcess:!1,finished:!1,current:"",updated:[],stopped:!1,debug:(window._localStorage||window.localStorage).getItem("AdaptersUpdaterDialog.debug")==="true",stopOnError:(window._localStorage||window.localStorage).getItem("AdaptersUpdaterDialog.stopOnError")!=="false",closeOnFinished:(window._localStorage||window.localStorage).getItem("AdaptersUpdaterDialog.closeOnFinished")==="true",currentVersion:""},this.updateAvailable=[]}updateAdapter(t,s,i){this.onAdapterFinished=i,this.setState({current:t,currentVersion:s})}onStartUpdate(){this.setState({inProcess:!0},()=>{this.props.onSetCommandRunning(!0),this.processList=[...this.state.selected].map(t=>{var s;return{adapter:t,version:(s=this.props.repository[t])==null?void 0:s.version}}),this.updateAdapters(()=>{this.setState({inProcess:!1,finished:!0},()=>{this.props.onSetCommandRunning(!1),this.state.closeOnFinished&&this.props.onClose(!!this.state.updated.length)})})})}updateAdapters(t){if(!this.processList||!this.processList.length||this.state.stopped)t&&t();else{const{adapter:s,version:i}=this.processList.shift();this.updateAdapter(s,i,()=>{const n=[...this.state.updated];n.push(s),this.setState({updated:n},()=>setTimeout(()=>this.updateAdapters(t),200))})}}render(){const t=this.props.noTranslation?L.getStyle(this.props.theme,F.languageButtonActive):void 0;return e.jsxs(o.Dialog,{open:!0,maxWidth:"lg",fullWidth:!!this.state.current,onClose:()=>this.props.onClose(!!this.state.updated.length),"aria-labelledby":"update-dialog-title","aria-describedby":"update-dialog-description",sx:{"& .MuiPaper-root":F.dialogRoot},scroll:"paper",children:[e.jsx(o.DialogTitle,{id:"update-dialog-title",children:e.jsxs("div",{style:F.wrapperHead,children:[this.props.t("Update %s adapter(s)",this.state.selected.length),!this.state.finished&&!this.state.inProcess&&e.jsx(o.Tooltip,{title:this.props.t("Select/Unselect all"),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:e.jsx(o.Checkbox,{checked:this.state.selected.length===this.updateAvailable.length,style:F.checkbox,tabIndex:-1,indeterminate:this.state.selected.length!==this.updateAvailable.length&&this.state.selected.length!==0,disableRipple:!0,onClick:()=>{let s=[];this.state.selected.length!==this.updateAvailable.length&&(s=[...this.updateAvailable]),this.setState({selected:s})}})}),w.getLanguage()!=="en"&&this.props.toggleTranslation?e.jsx(o.IconButton,{size:"large",style:{...F.languageButton,...t},onClick:()=>this.props.toggleTranslation(),title:w.t("Disable/Enable translation"),children:e.jsx(g.Language,{})}):null]})}),e.jsxs(o.DialogContent,{sx:{"&.MuiDialogContent-root":F.content},style:{height:"100%"},children:[e.jsxs(o.Grid2,{container:!0,direction:"row",sx:F.container,children:[e.jsx(o.Grid2,{style:{height:"100%",overflow:"hidden",width:this.state.current?250:"100%"},children:e.jsx("div",{style:{height:"100%",overflow:"auto"},children:e.jsx(tt,{finished:this.state.finished,inProcess:this.state.inProcess,selected:this.state.selected,current:this.state.current,stopped:this.state.stopped,updated:this.state.updated,lang:this.props.lang,installed:this.props.installed,repository:this.props.repository,noTranslation:this.props.noTranslation,toggleTranslation:this.props.toggleTranslation,onUpdateSelected:(s,i)=>{i&&(this.updateAvailable=i),this.setState({selected:s})},theme:this.props.theme,rightDependenciesFunc:this.props.rightDependenciesFunc})})}),!!this.state.current&&e.jsx(o.Grid2,{style:{height:"100%",overflow:"hidden",width:"calc(100% - 260px)",minWidth:240},children:e.jsx(ft,{noSpacing:!0,ready:!0,host:this.props.currentHost,socket:this.props.socket,t:this.props.t,cmd:`upgrade ${this.state.current}@${this.state.currentVersion}${this.state.debug?" --debug":""}`,onFinished:()=>this.onAdapterFinished(),errorFunc:()=>{this.state.stopOnError?(this.setState({stopped:!0,finished:!0}),this.onAdapterFinished=null,this.props.onSetCommandRunning(!1)):this.onAdapterFinished()}},this.state.current)})]}),e.jsxs(o.Toolbar,{variant:"dense",disableGutters:!0,sx:F.appBar,children:[e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{disabled:this.state.finished,checked:this.state.stopOnError,onChange:()=>{(window._localStorage||window.localStorage).setItem("AdaptersUpdaterDialog.stopOnError",this.state.stopOnError?"false":"true"),this.setState({stopOnError:!this.state.stopOnError})}}),label:this.props.t("Stop on error")}),e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{disabled:this.state.finished,checked:this.state.closeOnFinished,onChange:()=>{(window._localStorage||window.localStorage).setItem("AdaptersUpdaterDialog.closeOnFinished",this.state.closeOnFinished?"false":"true"),this.setState({closeOnFinished:!this.state.closeOnFinished})}}),label:this.props.t("Close on finished")}),e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{disabled:this.state.finished||this.state.inProcess,checked:this.state.debug,onChange:()=>{(window._localStorage||window.localStorage).setItem("AdaptersUpdaterDialog.debug",this.state.debug?"false":"true"),this.setState({debug:!this.state.debug})}}),label:this.props.t("Debug info")})]})]}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{id:"adapters-update-dialog-update",variant:"contained",disabled:this.state.stopped||this.state.inProcess||this.state.finished||!this.state.selected.length,onClick:()=>this.onStartUpdate(),color:"primary",autoFocus:!0,startIcon:e.jsx(g.Check,{}),children:this.props.t("Update")}),e.jsx(o.Button,{id:"adapters-update-dialog-cancel",variant:"contained",disabled:!this.state.inProcess,color:"grey",startIcon:e.jsx(g.Cancel,{}),onClick:()=>{this.setState({stopped:!0,finished:!0}),this.props.onSetCommandRunning(!1)},children:this.props.t("Cancel")}),e.jsx(o.Button,{id:"adapters-update-dialog-close",variant:"contained",onClick:()=>this.props.onClose(!!this.state.updated.length),disabled:this.state.inProcess&&!this.state.stopped,color:this.state.stopped?"error":"grey",startIcon:e.jsx(g.Close,{}),children:this.props.t("Close")})]})]})}}class ot extends yt{host;prefix;constructor(t,s){super(t,`${s}.adapter`,"adapter"),this.prefix=`${s}.adapter.`,this.host=s}getObject(t){return this.objects&&this.objects[this.prefix+t]||null}getHost(){return this.host}}const Rt="data:image/svg+xml,%3csvg%20viewBox='0%200%202500%202500'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0%200h2500v2500H0z'%20fill='%23c00'/%3e%3cpath%20d='M1241.5%20268.5h-973v1962.9h972.9V763.5h495v1467.9h495V268.5z'%20fill='%23fff'/%3e%3c/svg%3e";function Y(p){return{id:`github-install-dialog-tab-${p}`,"aria-controls":`github-install-dialog-panel-${p}`}}const C={root:p=>({backgroundColor:p.palette.background.paper,width:"100%",height:"100%"}),paper:{maxWidth:1e3},tabPaper:{padding:16},title:p=>({mt:"10px",p:1,ml:1,fontSize:18,color:p.palette.primary.main}),warningText:{color:"#f53939"},noteText:{marginTop:16},errorTextNoGit:{fontSize:13,color:"#ff1616"},listIcon:{width:24,height:24},listIconWithMargin:{width:24,height:24,marginRight:8},tabSelected:p=>({color:p.palette.mode==="dark"?p.palette.secondary.contrastText:"#222 !important"})};function Lt(p){const t=[];for(let s=0;s<p.length;s++)typeof p[s]=="object"?p[s].forEach(i=>t.push(i)):t.push(p[s]);return t}const nt=10;class Nt extends q.Component{constructor(t){super(t);let s=[];const i=(window._localstorage||window.localStorage).getItem("App.npmHistory");if(i)try{s=JSON.parse(i)}catch{}this.state={autoCompleteValue:(window._localstorage||window.localStorage).getItem("App.autocomplete")||null,debug:(window._localstorage||window.localStorage).getItem("App.gitDebug")==="true",url:(window._localstorage||window.localStorage).getItem("App.userUrl")||"",currentTab:(window._localstorage||window.localStorage).getItem("App.gitTab")||"npm",customHistory:s}}renderNpm(){return this.state.currentTab==="npm"?e.jsxs(o.Paper,{style:C.tabPaper,id:"github-install-dialog-panel-npm",children:[e.jsx("div",{style:{display:"flex",alignItems:"center"},children:e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{checked:this.state.debug,onChange:t=>{(window._localstorage||window.localStorage).setItem("App.gitDebug",t.target.checked?"true":"false"),this.setState({debug:t.target.checked})}}),label:this.props.t("Debug outputs")})}),e.jsxs("div",{style:{display:"flex",alignItems:"flex-end"},children:[e.jsx(g.Sms,{style:{marginRight:10}}),e.jsx(o.Autocomplete,{fullWidth:!0,value:this.state.autoCompleteValue,onChange:(t,s)=>{(window._localstorage||window.localStorage).setItem("App.autocomplete",s),this.setState({autoCompleteValue:s})},options:this.getList(),getOptionLabel:t=>(t==null?void 0:t.name)??"",renderInput:t=>{var i;const s={...t};return s.InputProps=s.InputProps||{},s.InputProps.startAdornment=e.jsx(o.InputAdornment,{position:"start",children:e.jsx(z,{src:((i=this.state.autoCompleteValue)==null?void 0:i.icon)||"",style:C.listIcon})}),e.jsx(o.TextField,{variant:"standard",...t,label:w.t("Select adapter")})},renderOption:(t,s)=>e.jsxs(o.Box,{component:"li",sx:{"& > img":{mr:2,flexShrink:0}},...t,children:[e.jsx(z,{src:(s==null?void 0:s.icon)||"",style:C.listIconWithMargin}),(s==null?void 0:s.name)??""]})})]}),e.jsx("div",{style:{fontSize:24,fontWeight:"bold",marginTop:40},children:this.props.t("Warning!")}),e.jsx("div",{style:C.warningText,children:this.props.t("npm_warning","NPM","NPM")}),e.jsx("div",{style:C.noteText,children:this.props.t("github_note")})]}):null}renderGitHub(){return this.state.currentTab==="GitHub"?e.jsxs(o.Paper,{style:C.tabPaper,id:"github-install-dialog-panel-github",children:[e.jsx("div",{style:{display:"flex",alignItems:"center"},children:e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{checked:this.state.debug,onChange:t=>{(window._localstorage||window.localStorage).setItem("App.gitDebug",t.target.checked?"true":"false"),this.setState({debug:t.target.checked})}}),label:this.props.t("Debug outputs")})}),e.jsxs("div",{style:{display:"flex",alignItems:"flex-end"},children:[e.jsx(g.Sms,{style:{marginRight:10}}),e.jsx(o.Autocomplete,{fullWidth:!0,value:this.state.autoCompleteValue,getOptionDisabled:t=>!!(t!=null&&t.nogit),renderOption:(t,s)=>e.jsxs(o.Box,{component:"li",sx:{"& > img":{mr:2,flexShrink:0}},...t,children:[e.jsx(z,{src:(s==null?void 0:s.icon)||"",style:C.listIconWithMargin}),(s==null?void 0:s.name)??"",(s==null?void 0:s.nogit)&&e.jsx("div",{style:C.errorTextNoGit,children:w.t("This adapter cannot be installed from git as must be built before installation.")})]}),onChange:(t,s)=>{(window._localstorage||window.localStorage).setItem("App.autocomplete",s),this.setState({autoCompleteValue:s})},options:this.getList(),getOptionLabel:t=>(t==null?void 0:t.name)??"",renderInput:t=>{var i;const s={...t};return s.InputProps=s.InputProps||{},s.InputProps.startAdornment=e.jsx(o.InputAdornment,{position:"start",children:e.jsx(z,{src:((i=this.state.autoCompleteValue)==null?void 0:i.icon)||"",style:C.listIconWithMargin})}),e.jsx(o.TextField,{variant:"standard",...t,label:w.t("Select adapter")})}})]}),e.jsx("div",{style:{fontSize:24,fontWeight:"bold",marginTop:40},children:this.props.t("Warning!")}),e.jsx("div",{style:C.warningText,children:this.props.t("github_warning","GitHub","GitHub")}),e.jsx("div",{style:C.noteText,children:this.props.t("github_note")})]}):null}renderCustom(){return this.state.currentTab==="URL"?e.jsxs(o.Paper,{style:C.tabPaper,id:"github-install-dialog-panel-custom",children:[e.jsx("div",{style:{display:"flex",alignItems:"center"},children:e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{checked:this.state.debug,onChange:t=>{(window._localstorage||window.localStorage).setItem("App.gitDebug",t.target.checked?"true":"false"),this.setState({debug:t.target.checked})}}),label:this.props.t("Debug outputs")})}),e.jsx("div",{style:{display:"flex",alignItems:"center"},children:e.jsx(o.Autocomplete,{fullWidth:!0,value:this.state.url||"",onInputChange:(t,s)=>{(window._localstorage||window.localStorage).setItem("App.userUrl",s||""),this.setState({url:s})},onChange:(t,s)=>{(window._localstorage||window.localStorage).setItem("App.userUrl",s||""),this.setState({url:s})},renderOption:(t,s)=>e.jsxs(o.Box,{component:"li",...t,style:{display:"flex",alignItems:"left"},children:[s,e.jsx("div",{style:{flexGrow:1}}),e.jsx(o.IconButton,{size:"small",onClick:i=>{i.stopPropagation();const n=this.state.customHistory.filter(r=>r!==s);(window._localstorage||window.localStorage).setItem("App.npmHistory",JSON.stringify(n)),this.setState({customHistory:n})},children:e.jsx(g.Delete,{})})]}),freeSolo:!0,options:this.state.customHistory,renderInput:t=>e.jsx(o.TextField,{variant:"standard",...t,onKeyUp:s=>{if(s.key==="Enter"&&this.state.url){const i=this.state.customHistory.filter(n=>n!==this.state.url);i.unshift(this.state.url),i.length>nt&&i.pop(),(window._localstorage||window.localStorage).setItem("App.npmHistory",JSON.stringify(i)),this.state.url.includes(".")?this.props.installFromUrl(this.state.url,this.state.debug,!0):this.props.installFromUrl(`iobroker.${this.state.url}`,this.state.debug,!0),this.setState({autoCompleteValue:null,url:""}),this.props.onClose()}},helperText:this.props.t("URL or file path"),label:this.props.t("URL")})})}),e.jsx("div",{style:{fontSize:24,fontWeight:"bold",marginTop:40},children:this.props.t("Warning!")}),e.jsx("div",{style:C.warningText,children:this.props.t("github_warning","URL","URL")}),e.jsx("div",{style:C.noteText,children:this.props.t("github_note")})]}):null}getList(){const t=this.props.categories.map(i=>i.adapters),s=Lt(t);return s.sort(),s.map((i,n)=>{if(n&&s[n-1]===i)return null;const r=this.props.repository[i];if(!(r!=null&&r.controller)){const a=(r.extIcon||r.meta||r.readme||"").toString().split("/");let c=r==null?void 0:r.name;c||(c=r.titleLang,c&&typeof c=="object"?c=c[w.getLanguage()]||c.en:c=r.title||i);const h={value:`${i}/${a[3]}`,name:`${c} [${a[3]}]`,icon:r.extIcon||r.icon,nogit:!!r.nogit,title:i};return this.props.installed[c]&&c!=="admin"&&(h.icon=`/adapter/${i}/${r.icon.split("/admin/").pop()}`),h}return null}).filter(i=>i).sort((i,n)=>i.name<n.name?-1:i.name>n.name?1:0)}render(){var s;const t=()=>this.setState({autoCompleteValue:null,url:""});return e.jsxs(o.Dialog,{onClose:()=>this.props.onClose(),open:!0,sx:{"& .MuiDialog-paper":C.paper},children:[e.jsx(o.DialogContent,{dividers:!0,children:e.jsxs(o.Box,{component:"div",sx:C.root,children:[e.jsx(o.AppBar,{position:"static",color:"default",children:e.jsxs(o.Tabs,{value:this.state.currentTab,onChange:(i,n)=>{(window._localstorage||window.localStorage).setItem("App.gitTab",n),this.setState({currentTab:n})},variant:"fullWidth",indicatorColor:"secondary",children:[e.jsx(o.Tab,{label:this.props.t("From npm"),wrapped:!0,sx:{"&.Mui-selected":C.tabSelected},icon:e.jsx("img",{src:Rt,alt:"npm",width:24,height:24}),...Y("npm"),value:"npm"}),e.jsx(o.Tab,{label:this.props.t("From github"),wrapped:!0,sx:{"&.Mui-selected":C.tabSelected},icon:e.jsx(ct,{style:{width:24,height:24},width:24,height:24}),...Y("github"),value:"GitHub"}),e.jsx(o.Tab,{label:this.props.t("Custom"),wrapped:!0,sx:{"&.Mui-selected":C.tabSelected},icon:e.jsx(g.Language,{width:24,height:24}),...Y("custom"),value:"URL"})]})}),e.jsx(o.Box,{component:"div",sx:C.title,children:this.props.t("Install or update the adapter from %s",this.state.currentTab||"npm")}),this.renderNpm(),this.renderGitHub(),this.renderCustom()]})}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{id:"github-install-dialog-ok",variant:"contained",disabled:(this.state.currentTab==="GitHub"||this.state.currentTab==="npm")&&!((s=this.state.autoCompleteValue)!=null&&s.value)||this.state.currentTab==="URL"&&!this.state.url,autoFocus:!0,onClick:async()=>{var i,n;if(this.state.currentTab==="GitHub"){const r=(((i=this.state.autoCompleteValue)==null?void 0:i.value)||"").split("/"),a=`${r[1]}/ioBroker.${r[0]}`;this.props.installFromUrl(a,this.state.debug,!0)}else if(this.state.currentTab==="URL"){const r=this.state.customHistory.filter(a=>a!==this.state.url);r.unshift(this.state.url),r.length>nt&&r.pop(),(window._localstorage||window.localStorage).setItem("App.npmHistory",JSON.stringify(r)),this.state.url.includes(".")?this.props.installFromUrl(this.state.url,this.state.debug,!0):this.props.installFromUrl(`iobroker.${this.state.url}`,this.state.debug,!0)}else if(this.state.currentTab==="npm"){const r=(((n=this.state.autoCompleteValue)==null?void 0:n.value)||"").split("/")[0],a=r.includes(".")?r.split(".")[1]:r;try{await this.props.installFromUrl(`iobroker.${a}@latest`,this.state.debug,!0),this.props.upload(a)}catch(c){console.error(`Installation from url failed: ${c.message}`)}}this.props.onClose(),t()},color:"primary",startIcon:e.jsx(g.Check,{}),children:this.props.t("Install")}),e.jsx(o.Button,{id:"github-install-dialog-close",variant:"contained",onClick:()=>{this.props.onClose(),t()},color:"grey",startIcon:e.jsx(g.Close,{}),children:this.props.t("Close")})]})]})}}const $={formControl:{marginTop:24,width:100},closeButton:p=>({position:"absolute",right:8,top:8,color:p.palette.grey[500]}),languageButton:{position:"absolute",right:60,top:8},languageButtonActive:p=>({color:p.palette.primary.main}),paper:{},typography:{pr:"30px"},messageText:{},messageColor_warn:{color:"#cb7642"},messageColor_error:{color:"#f5614d"},messageColor_info:{color:"#5abd29"},messageTitle_warn:p=>({background:"#cb7642",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:p.palette.mode==="dark"?"black":"white"}),messageTitle_error:p=>({background:"#f5614d",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:p.palette.mode==="dark"?"black":"white"}),messageTitle_info:p=>({background:"#5abd29",borderRadius:"3px",pl:"10px",fontWeight:"bold",color:p.palette.mode==="dark"?"black":"white"}),deps:p=>({m:"10px",fontSize:16,color:p.palette.mode==="dark"?"#e70000":"#840101"})};class Ot extends N.Component{t;messages=null;lang;constructor(t){super(t),this.state={instanceNumbers:[]},this.t=t.t,this.lang=w.getLanguage(),this.messages=Q(t.adapterObject.messages,null,t.adapterObject.version,t.instances)}componentDidMount(){this.props.instancesWorker.getObjects().then(t=>{const s=Object.keys(t).filter(i=>{var n,r;return((r=(n=t[i])==null?void 0:n.common)==null?void 0:r.name)===this.props.adapter}).map(i=>i.substring(i.lastIndexOf(".")+1));this.setState({instanceNumbers:s})})}getAvailableInstances(){const t=[];t.push(e.jsx(o.MenuItem,{value:"auto",children:this.t("auto")},"auto"));for(let s=0;s<=100&&(this.state.instanceNumbers.includes(s.toString())||t.push(e.jsx(o.MenuItem,{value:s.toString(),children:s},s)),!(t.length>11));s++);return t}checkDependencies(t=this.props.dependencies){if(!t)return"";const s=[];for(const i of t)i.installedVersion?i.rightVersion||s.push(`${this.props.t("Invalid version of %s. Required %s. Current ",i.name,i.version)}${i.installedVersion}`):s.push(this.props.t("No version of %s",i.name,i.name));return s.length?s.map(i=>e.jsx("div",{children:i},i)):""}getText(t,s){return t&&typeof t=="object"?s?t.en:t[this.lang]||t.en:typeof t=="object"?"":t}renderOneMessage(t,s){return e.jsxs(o.Grid2,{children:[e.jsx(o.Typography,{sx:$[`messageTitle_${t.level||"warn"}`],children:this.getText(t.title,this.props.noTranslation)||""}),e.jsx(o.Typography,{component:"div",variant:"body2",style:$.messageText,children:this.getText(t.text,this.props.noTranslation)||""}),t.link?e.jsx(o.Button,{onClick:()=>{window.open(t.link,"_blank").focus()},startIcon:e.jsx(g.Public,{}),variant:"contained",color:"grey",children:this.getText(t.linkText,this.props.noTranslation)||this.props.t("More info")}):null]},s)}renderMessages(){return this.messages?e.jsx(o.Grid2,{container:!0,spacing:2,direction:"column",wrap:"nowrap",sx:{marginBottom:1},children:this.messages.map((t,s)=>this.renderOneMessage(t,s))}):null}render(){const t=this.checkDependencies();return e.jsxs(o.Dialog,{onClose:()=>{},open:!0,sx:{"& .MuiDialog-paper":$.paper},children:[e.jsx(o.DialogTitle,{children:e.jsxs(o.Typography,{component:"h2",variant:"h6",sx:{"&.MuiTypography-root":$.typography},children:[this.t("You are going to add new instance:")," ",this.props.adapter,e.jsx(o.IconButton,{size:"large",sx:$.closeButton,onClick:()=>this.props.onClose(!1),children:e.jsx(g.Close,{})}),this.messages&&this.lang!=="en"&&this.props.toggleTranslation?e.jsx(o.IconButton,{size:"large",style:L.getStyle(this.props.theme,$.languageButton,this.props.noTranslation&&$.languageButtonActive),onClick:this.props.toggleTranslation,title:w.t("Disable/Enable translation"),children:e.jsx(g.Language,{})}):null]})}),e.jsxs(o.DialogContent,{dividers:!0,children:[this.renderMessages(),!t&&this.props.expertMode?e.jsxs(o.Grid2,{container:!0,direction:"column",children:[e.jsx(wt,{tooltip:this.t("Select host to add the instance"),expertMode:!0,socket:this.props.socket,hostsWorker:this.props.hostsWorker,currentHost:this.props.currentHost,setCurrentHost:(s,i)=>this.props.onHostChange(i.replace(/^system\.host\./,""))}),e.jsxs(o.FormControl,{variant:"standard",style:$.formControl,children:[e.jsx(o.InputLabel,{id:"instance-label",children:this.t("Instance")}),e.jsx(o.Select,{variant:"standard",labelId:"instance-label",value:this.props.currentInstance,onChange:this.props.onInstanceChange,children:this.getAvailableInstances()})]})]}):null,e.jsx(o.Box,{component:"div",sx:$.deps,children:t})]}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{id:"instance-add-dialog-ok",variant:"contained",autoFocus:!0,disabled:!!t,onClick:()=>this.props.onClose(!0),color:"primary",startIcon:e.jsx(g.Add,{}),children:this.t("Add")}),e.jsx(o.Button,{id:"instance-add-dialog-cancel",variant:"contained",onClick:()=>this.props.onClose(!1),color:"grey",startIcon:e.jsx(g.Close,{}),children:this.t("Close")})]})]})}}function K(p){var s;if(!p)return"";if((s=p.licenseInformation)!=null&&s.link)return p.licenseInformation.link;let t=p.licenseUrl;if(!t||!t.includes("/LICENSE")||!t.includes("raw.githubusercontent.com")){if(t=p.extIcon,!t){if(t=p.readme,!t)return console.error(`No extIcon for ${p.name||JSON.stringify(p)}`),"";t=t.replace("github.com","raw.githubusercontent.com").replace("/blob/","/"),t.includes("/main")?t=`${t.split("/main")[0]}/main/LICENSE`:t.includes("/master")&&(t=`${t.split("/master")[0]}/master/LICENSE`)}if(t.includes("/main"))t=`${t.split("/main")[0]}/main/LICENSE`;else if(t.includes("/master"))t=`${t.split("/master")[0]}/master/LICENSE`;else return""}return t}class M extends N.Component{constructor(t){super(t),this.state={showDialog:!1,showLicenseDialog:null,addInstanceHostName:"",addInstanceId:"auto",addInstanceDialog:""}}renderLicenseDialog(t){return this.state.showLicenseDialog?e.jsx(bt,{licenseType:this.state.showLicenseDialog.licenseType,url:this.state.showLicenseDialog.url,onClose:s=>{const i=s?this.state.showLicenseDialog:null;this.setState({showLicenseDialog:null,showDialog:!1},()=>{i&&(i.upload?M.upload(i.adapterName,t):this.addInstance({adapterName:i.adapterName,context:t}).catch(n=>window.alert(`Cannot add instance: ${n}`)))})}}):null}async addInstance(t){if(!t.customUrl){const i=t.context.repository[t.adapterName],n=Q(i.messages,null,i.version,t.context.compactInstances);if(!t.instance&&(t.context.expertMode||n)){this.setState({addInstanceDialog:t.adapterName,showDialog:!0,addInstanceHostName:t.context.currentHost.replace(/^system\.host\./,""),addInstanceId:t.instance||"auto"});return}if(t.instance){const r=await t.context.instancesWorker.getObjects();if(r&&r[`system.adapter.${t.adapterName}.${t.instance}`]){window.alert(t.context.t("Instance %s already exists",`${t.adapterName}.${t.instance}`));return}}}const s=(this.state.addInstanceHostName||t.context.currentHost).replace(/^system\.host\./,"");try{await new Promise((i,n)=>{t.context.executeCommand(`${t.customUrl?"url":"add"} ${t.adapterName} ${t.instance?`${t.instance} `:""}--host ${s} ${t.debug||t.context.expertMode?"--debug":""}`,s,r=>r?n(new Error(`The process returned an exit code of ${r}`)):i())})}catch(i){window.alert(`${w.t("Cannot install")}: ${i}`)}}static getDependencies(t,s){var r,a;const i=s.repository[t],n=[];if(i){i.dependencies&&!Array.isArray(i.dependencies)&&(i.dependencies=[i.dependencies]),i.globalDependencies&&!Array.isArray(i.globalDependencies)&&(i.globalDependencies=[i.globalDependencies]);const c=i.node;if((r=i.dependencies)!=null&&r.length)for(const d of i.dependencies){const l={name:"",version:null,installed:!1,installedVersion:null,rightVersion:!1},u=typeof d!="string",m=Object.keys(d);if(l.name=u?m?m[0]:null:d,l.version=u?d[l.name]:null,l.name){const x=s.installed[l.name];l.installed=!!x,l.installedVersion=x?x.version:null;try{l.rightVersion=x?u?V.satisfies(x.version,l.version,{includePrerelease:!0}):!0:!1}catch{l.rightVersion=!0}}n.push(l)}if((a=i.globalDependencies)!=null&&a.length)for(const d of i.globalDependencies){const l={name:"",version:null,installed:!1,installedVersion:null,rightVersion:!1},u=typeof d!="string",m=Object.keys(d);if(l.name=u?m?m[0]:null:d,l.version=u?d[l.name]:null,l.name){const x=s.installedGlobal[l.name];l.installed=!!x,l.installedVersion=x?x.version:null;try{l.rightVersion=x?u?V.satisfies(x.version,l.version,{includePrerelease:!0}):!0:!1}catch{l.rightVersion=!0}}n.push(l)}const h=i.ifInstalledDependencies;if(h&&typeof h=="object"&&!Array.isArray(h)){const d=Object.keys(h);for(const l of d){const u={name:l,version:h[l],installed:!1,installedVersion:null,rightVersion:!1};if(u.name){const m=s.installedGlobal[u.name];u.installed=!!m,u.installedVersion=m?m.version:null;try{u.rightVersion=m?V.satisfies(m.version,u.version,{includePrerelease:!0}):!0}catch{u.rightVersion=!0}}n.push(u)}}if(c){const d={name:"node",version:c,installed:!0,installedVersion:s.nodeJsVersion,rightVersion:!1};try{d.rightVersion=V.satisfies(s.nodeJsVersion,c)}catch{d.rightVersion=!0}n.push(d)}}return n}renderAddInstanceDialog(t){return this.state.addInstanceDialog?e.jsx(Ot,{adapter:this.state.addInstanceDialog,socket:t.socket,hostsWorker:t.hostsWorker,instancesWorker:t.instancesWorker,dependencies:M.getDependencies(this.state.addInstanceDialog,t),currentHost:`system.host.${this.state.addInstanceHostName}`,currentInstance:this.state.addInstanceId,t:t.t,onClose:s=>{const i=s?this.state.addInstanceDialog:"",n=s?this.state.addInstanceId:"";this.setState({addInstanceDialog:"",addInstanceId:"auto",showDialog:!1},()=>{if(i)try{this.addInstance({adapterName:i,instance:n,context:t})}catch(r){window.alert(`Cannot add instance: ${r}`)}})},onHostChange:s=>this.setState({addInstanceHostName:s.replace(/^system\.host\./,"")}),onInstanceChange:s=>this.setState({addInstanceId:s.target.value.toString()}),adapterObject:t.repository[this.state.addInstanceDialog],instances:t.compactInstances,toggleTranslation:t.toggleTranslation,noTranslation:this.props.noTranslation,expertMode:t.expertMode,theme:t.theme}):null}static upload(t,s){s.executeCommand(`upload ${t}${s.expertMode?" --debug":""}`)}onAddInstance(t,s){var a;const i=s.repository[t],n=K(i),r=((a=i.licenseInformation)==null?void 0:a.license)||i.license;r==="MIT"?this.addInstance({adapterName:t,context:s}).catch(c=>window.alert(`Cannot add instance: ${c}`)):this.setState({showLicenseDialog:{url:n,adapterName:t,licenseType:r},showDialog:!0})}renderDialogs(t){return this.state.showDialog?e.jsxs(e.Fragment,{children:[this.renderAddInstanceDialog(t),this.renderLicenseDialog(t)]}):null}}const _={name:{flexWrap:"nowrap",width:300,marginTop:0},nameDiv:{display:"flex",alignItems:"center"},categoryName:{fontWeight:"bold",cursor:"pointer"},green:{color:pt[500]},blue:{color:mt[700]},category:{backgroundColor:"background.default"},marginRight5:{marginRight:5}};function Ut(p){const{installedCount:t,name:s,categoryName:i}=p;return e.jsxs(o.TableRow,{hover:!1,sx:_.category,children:[e.jsx(o.TableCell,{children:e.jsx(o.Grid2,{container:!0,spacing:1,alignItems:"center",style:_.name,children:e.jsx(o.Grid2,{component:"div",children:e.jsx(o.IconButton,{size:"small",onClick:p.onToggle,children:p.expanded?e.jsx(g.ExpandMore,{}):e.jsx(g.ChevronRight,{})})})})}),e.jsx(o.TableCell,{onClick:p.onToggle,children:e.jsxs("div",{style:{..._.nameDiv,..._.categoryName},children:[e.jsx(St,{iconName:i,style:_.marginRight5}),s]})}),e.jsxs(o.TableCell,{colSpan:p.descHidden?5:6,children:[e.jsx(o.Typography,{component:"span",variant:"body2",style:_.green,children:t}),` ${p.t("of")} `,e.jsx(o.Typography,{component:"span",variant:"body2",style:_.blue,children:p.count}),` ${p.t("Adapters from this Group installed")}`]})]})}const S={rating:{marginBottom:20},listRating:{marginRight:8},listTime:{opacity:.5,fontStyle:"italic"},list:{},listOwn:p=>({backgroundColor:p.name==="colored"||p.name==="light"?"#16516e2e":p.palette.secondary.dark}),listTitle:p=>({backgroundColor:p.palette.primary.dark,pt:"4px",pb:"4px",mb:"4px",color:"#ffffff",textAlign:"center"}),languageFilter:{width:300},ratingTextControl:{width:"calc(100% - 138px)",marginRight:8},ratingLanguageControl:{width:130},noComments:{width:"100%",textAlign:"center",marginTop:16},commentCount:{marginTop:2,marginLeft:8,opacity:.8,fontSize:10,float:"right"},infoText:{textAlign:"left",fontSize:"14px"},infoTextContainer:{display:"flex",paddingBottom:"10px",alignItems:"center",gap:"10px"}},rt=[{id:"en",title:"English"},{id:"de",title:"Deutsch"},{id:"ru",title:"русский"},{id:"pt",title:"Portugues"},{id:"nl",title:"Nederlands"},{id:"fr",title:"français"},{id:"it",title:"Italiano"},{id:"es",title:"Espanol"},{id:"pl",title:"Polski"},{id:"uk",title:"Українська"},{id:"zh-cn",title:"简体中文"}];class Bt extends N.Component{constructor(t){super(t),this.state={ratingNumber:0,ratingComment:"",votings:null,ratingLang:this.props.lang,filterLang:(window._localStorage||window.localStorage).getItem("app.commentLang")||this.props.lang,commentsByLanguage:{}}}componentDidMount(){fetch(`https://rating.iobroker.net/adapter/${this.props.adapter}?uuid=${this.props.uuid}`).then(t=>t.json()).then(t=>{t=t||{},t.rating=t.rating||{};const s=Object.keys(t.rating);s.sort((n,r)=>t.rating[n].ts>t.rating[r].ts?-1:t.rating[n].ts<t.rating[r].ts?1:0);const i={};if(t.comments&&(t.comments.sort((n,r)=>n.ts>r.ts?-1:n.ts<r.ts?1:0),t.comments.forEach(n=>{i[n.lang]=i[n.lang]||0,i[n.lang]++})),s.length){const n=t.rating[s[0]];this.setState({votings:t,ratingNumber:n?n.r:0,commentsByLanguage:i})}else this.setState({votings:t,commentsByLanguage:i})})}setAdapterRating(t,s,i,n,r){return fetch("https://rating.iobroker.net/vote",{method:"POST",headers:{"Content-Type":"application/json"},redirect:"follow",body:JSON.stringify({uuid:this.props.uuid,adapter:t,version:s,rating:i,comment:n,lang:r})}).then(a=>a.json()).then(a=>(window.alert(`${this.props.t("Vote:")} ${t}@${s}=${i}`),delete a.adapter,a)).catch(a=>(window.alert(`Cannot vote: ${a}`),null))}renderInfoText(){return e.jsxs("div",{style:S.infoTextContainer,children:[e.jsx(g.Info,{}),e.jsx(o.Typography,{style:S.infoText,children:this.props.t("use GitHub for issues")})]})}renderComments(){var t;if((t=this.state.votings)!=null&&t.comments&&this.state.votings.comments.length){const s=this.state.votings.comments.find(i=>!(this.state.filterLang&&this.state.filterLang!=="_"&&i.lang!==this.state.filterLang));return e.jsxs("div",{style:{width:"100%",textAlign:"left"},children:[e.jsx(o.Box,{component:"h3",sx:S.listTitle,children:this.props.t("Comments")}),e.jsxs(o.FormControl,{variant:"standard",style:S.languageFilter,children:[e.jsx(o.InputLabel,{children:this.props.t("Show comments in language")}),e.jsxs(o.Select,{variant:"standard",value:this.state.filterLang,onChange:i=>{(window._localStorage||window.localStorage).setItem("app.commentLang",i.target.value),this.setState({filterLang:i.target.value})},children:[e.jsxs(o.MenuItem,{value:"_",children:[this.props.t("All")," ",e.jsx("span",{style:S.commentCount,children:this.state.votings.comments.length})]}),rt.map(i=>e.jsxs(o.MenuItem,{value:i.id,children:[i.title," ",this.state.commentsByLanguage[i.id]?e.jsx("span",{style:S.commentCount,children:this.state.commentsByLanguage[i.id]}):null]},i.id))]})]}),e.jsxs(o.List,{style:S.list,dense:!0,disablePadding:!0,children:[s&&this.state.votings.comments.map((i,n)=>this.state.filterLang&&this.state.filterLang!=="_"&&i.lang!==this.state.filterLang?null:i?e.jsxs(o.ListItem,{title:i.uuid?this.props.t("Your comment"):"",sx:{"&.MuiListItem-root":i.uuid?S.listOwn:void 0},dense:!0,children:[e.jsx(o.ListItemAvatar,{style:S.listRating,children:e.jsx(o.Rating,{readOnly:!0,defaultValue:i.rating,size:"small"})}),e.jsx(o.ListItemText,{primary:i.comment,secondary:`${new Date(i.ts).toLocaleString()} / v${i.version}`,sx:{"& .MuiListItemText-secondary":S.listTime}})]},n):null),!s&&e.jsx("div",{style:S.noComments,children:this.props.t("No comments in selected language")})]})]})}return null}render(){var i,n,r;let t,s;if(this.state.votings){const a=this.state.votings.rating;s=Object.keys(a),s.sort((c,h)=>a[c].ts>a[h].ts?-1:a[c].ts<a[h].ts?1:0),s.length&&(t=a[s[0]])}return e.jsxs(o.Dialog,{open:!0,onClose:()=>this.props.onClose(),children:[e.jsx(o.DialogTitle,{children:`${this.props.t("Review")} ${this.props.adapter}${this.props.version?`@${this.props.version}`:""}`}),e.jsxs(o.DialogContent,{style:{textAlign:"center"},title:((i=this.props.currentRating)==null?void 0:i.title)||"",children:[this.renderInfoText(),e.jsx(o.Rating,{style:S.rating,name:this.props.adapter,value:this.props.version?this.state.ratingNumber:(r=(n=this.props.currentRating)==null?void 0:n.rating)==null?void 0:r.r,size:"large",readOnly:!this.props.version,onChange:(a,c)=>this.setState({ratingNumber:c})}),this.props.version?e.jsxs("div",{style:{width:"100%",textAlign:"left"},children:[e.jsx(o.TextField,{variant:"standard",style:S.ratingTextControl,value:this.state.ratingComment,label:this.props.t("Comment to version"),helperText:this.props.t("Max length %s characters",200),onChange:a=>this.setState({ratingComment:a.target.value}),slotProps:{input:{endAdornment:this.state.ratingComment?e.jsx(o.InputAdornment,{position:"end",children:e.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>this.setState({ratingComment:""}),children:e.jsx(g.Close,{})})}):null},htmlInput:{maxLength:200}}}),e.jsxs(o.FormControl,{variant:"standard",style:S.ratingLanguageControl,children:[e.jsx(o.InputLabel,{children:this.props.t("Language")}),e.jsx(o.Select,{variant:"standard",value:this.state.ratingLang,onChange:a=>this.setState({ratingLang:a.target.value}),children:rt.map(a=>e.jsx(o.MenuItem,{value:a.id,children:a.title},a.id))})]})]}):null,this.props.version?e.jsx("div",{style:{paddingTop:20,paddingBottom:16},children:this.props.t("Rate how good this version of the adapter works on your system. You can vote for every new version.")}):null,s&&t?e.jsx("div",{children:this.props.t("You voted for %s on %s",s[0],new Date(t.ts).toLocaleDateString())}):null,this.renderComments()]}),e.jsxs(o.DialogActions,{children:[this.props.version&&e.jsx(o.Button,{variant:"contained",autoFocus:!0,color:"primary",disabled:!this.state.ratingNumber||this.state.votings===null,onClick:()=>{this.state.ratingNumber!==(t==null?void 0:t.r)||this.state.ratingComment?this.setAdapterRating(this.props.adapter,this.props.version,this.state.ratingNumber,this.state.ratingComment,this.state.ratingLang).then(a=>this.props.onClose(a)):this.props.onClose()},startIcon:e.jsx(g.HowToVote,{}),children:this.props.t("Rate")}),e.jsx(o.Button,{autoFocus:!this.props.version,variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:e.jsx(g.Close,{}),children:this.props.t("Close")})]})]})}}const at={closeButton:p=>({position:"absolute",right:8,top:8,color:p.palette.grey[500]}),typography:{paddingRight:30}};class $t extends N.Component{t;constructor(t){super(t),this.state={deleteCustom:!1,deleteCustomSupported:!1},this.t=t.t}componentDidMount(){this.props.socket.checkFeatureSupported("DEL_INSTANCE_CUSTOM").then(t=>{if(t)return this.props.socket.getObject(`system.adapter.${this.props.adapter}`).then(s=>{s!=null&&s.common?s.common.supportCustoms&&this.setState({deleteCustomSupported:s.common.supportCustoms}):this.setState({deleteCustomSupported:!0})})})}render(){return e.jsxs(o.Dialog,{onClose:this.props.onClose,open:!0,children:[e.jsx(o.DialogTitle,{children:e.jsxs(o.Typography,{component:"h2",variant:"h6",sx:{"&.MuiTypography-root":at.typography},children:[this.t("Please confirm"),e.jsx(o.IconButton,{size:"large",sx:at.closeButton,onClick:this.props.onClose,children:e.jsx(g.Close,{})})]})}),e.jsxs(o.DialogContent,{dividers:!0,children:[e.jsx(o.Typography,{gutterBottom:!0,children:this.t("Are you sure you want to delete adapter %s?",this.props.adapter)}),this.state.deleteCustomSupported&&e.jsx(o.FormControlLabel,{control:e.jsx(o.Checkbox,{checked:this.state.deleteCustom,onChange:t=>this.setState({deleteCustom:t.target.checked})}),label:this.t("Delete all custom object settings of this adapter too")})]}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{id:"adapter-delete-dialog-ok",variant:"contained",autoFocus:!0,onClick:()=>{this.props.onClick(this.state.deleteCustom),this.props.onClose()},color:"primary",startIcon:e.jsx(g.Check,{}),children:this.t("Ok")}),e.jsx(o.Button,{id:"adapter-delete-dialog-cancel",variant:"contained",autoFocus:!0,onClick:()=>this.props.onClose(),color:"grey",startIcon:e.jsx(g.Close,{}),children:this.t("Close")})]})]})}}const ut={none:e.jsx(g.HorizontalRule,{}),patch:e.jsx(g.KeyboardDoubleArrowUp,{style:{color:"green"}}),minor:e.jsx(g.North,{style:{color:"orange"}}),major:e.jsx(g.VerticalAlignTop,{style:{color:"red"}})};class Wt extends q.Component{constructor(t){super(t),this.state={currentSavedPolicy:"none",policy:"none",repositories:[],supported:!0}}async componentDidMount(){await this.getConfiguredRepositories(),await this.getCurrentAutoUpgradeSetting()}async getConfiguredRepositories(){var i;const t=await this.props.socket.getObject("system.config");if(!((i=t==null?void 0:t.common)!=null&&i.adapterAutoUpgrade))return;const s=Object.entries(t.common.adapterAutoUpgrade.repositories).filter(([,n])=>n).map(([n])=>n);this.setState({repositories:s})}getAdapterId(){return`${this.props.hostId}.adapter.${this.props.adapter}`}async getCurrentAutoUpgradeSetting(){const t=await this.props.socket.getObject(this.getAdapterId());if(!t){console.error("no adapter object existing"),this.setState({supported:!1});return}this.setState({policy:t.common.automaticUpgrade||"none",currentSavedPolicy:t.common.automaticUpgrade||"none"})}async save(){const t=await this.props.socket.getObject(this.getAdapterId());if(!t){console.error("no adapter object existing"),this.setState({supported:!1});return}t.common.automaticUpgrade=this.state.policy,await this.props.socket.setObject(this.getAdapterId(),t),this.setState({currentSavedPolicy:this.state.policy},()=>this.props.onClose())}render(){return e.jsxs(o.Dialog,{open:!0,maxWidth:"md",fullWidth:!0,children:[e.jsx(o.DialogTitle,{children:w.t("Auto upgrade policy for %s",this.props.adapter)}),e.jsxs(o.DialogContent,{style:{padding:"0 20px",overflow:"hidden"},children:[e.jsx(U,{value:!this.state.supported,children:e.jsx(o.Typography,{children:w.t("This feature is supported up from js-controller Kiera (Version 6)!")})}),e.jsxs(U,{value:this.state.supported,children:[e.jsx(o.Typography,{children:w.t("Allow only the following upgrades to be performed automatically:")}),e.jsx(o.Select,{variant:"standard",style:{marginTop:20,minWidth:150,marginBottom:8},value:this.state.policy,onChange:t=>this.setState({policy:t.target.value}),children:jt.map(t=>e.jsx(o.MenuItem,{value:t,children:e.jsxs("div",{style:{display:"flex",gap:8},children:[ut[t],Ct[t]]})},t))}),e.jsx(U,{value:this.state.repositories.includes("beta")&&this.state.policy!=="none",children:e.jsx(Z,{type:"warning",children:w.t("repo_update_hint")})}),e.jsx(U,{value:this.state.policy==="major",children:e.jsx(Z,{type:"warning",children:w.t("The current selected configuration will allow to automatically pull in incompatible changes of this adapter!")})})]})]}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{disabled:this.state.currentSavedPolicy===this.state.policy,color:"primary",variant:"contained",startIcon:e.jsx(g.Save,{}),onClick:()=>this.save(),children:w.t("Save")}),e.jsx(o.Button,{variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:e.jsx(g.Close,{}),children:w.t("Close")})]})]})}}const gt={hidden:{display:"none"},buttonUpdate:{border:"1px solid",padding:"0px 7px",borderRadius:5,display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},classPoll:{color:"orange"},classPush:{color:"green"},classAssumption:{color:"red",transform:"rotate(90deg)"},marginLeft5:{marginLeft:5},ratingSet:{cursor:"pointer"},sentry:{width:21,height:21,objectFit:"fill",marginTop:3,filter:"invert(0%) sepia(90%) saturate(1267%) hue-rotate(-260deg) brightness(99%) contrast(97%)"},tooltip:{pointerEvents:"none"},wrongDependencies:{color:xt[700]},updateAvailable:{color:pt[700]},currentVersion:p=>({cursor:"pointer",mb:"6px",mr:"8px",mt:"4px","&:hover":{background:p.palette.primary.dark}}),header:p=>({fontWeight:"bold",background:p.palette.secondary.main,p:"10px"}),modalDialog:{height:"calc(100% - 64px)",overflowY:"hidden"},currentVersionText:p=>({color:p.palette.mode==="dark"?"#a3ffa3":"#009800",fontWeight:"bold",marginLeft:"4px"}),repoStableVersionText:p=>({color:p.palette.mode==="dark"?"#8dff7a":"#2b9800",fontWeight:"bold",marginLeft:"4px"}),repoLatestVersionText:p=>({color:p.palette.mode==="dark"?"#a3fcff":"#005498",fontWeight:"bold",marginLeft:"4px"}),rating:{},containerVersion:{},containerSpecificVersion:{},versionWarn:{color:ht[500]},cardContentFlexBetween:{},cardContentFlex:{}};class E extends M{installedVersion="";constructor(t){super(t),Object.assign(this.state,{autoUpgradeDialogOpen:!1,showUpdateDialog:!1,adapterDeletionDialog:!1,adapterInstallSpecificVersion:"",showInstallVersion:!1,showSetRating:null})}static renderImage(t){const{style:s,alt:i,...n}=t,r=s.backgroundImage.substring(5,s.backgroundImage.length-2);return e.jsx("img",{...n,alt:i,src:r,onError:a=>{a.target&&(a.target.onerror=null,a.target.src="img/no-image.svg")}})}renderAddInstanceButton(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterInstall:!0;return e.jsx(U,{value:t,children:e.jsx(o.Tooltip,{title:this.props.context.t("Add instance"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",disabled:this.props.commandRunning,style:this.props.cached.rightOs?void 0:this.styles.hidden,onClick:this.props.cached.rightOs?()=>this.onAddInstance(this.props.adapterName,this.props.context):void 0,children:e.jsx(g.Add,{})})})})}renderAutoUpgradeButton(){var i;const t=this.props.context.hostAdapterWorker.getObject(this.props.adapterName);if(!t)return e.jsx("div",{style:{width:34,height:34,display:"inline-block"}});const s=(i=t.common)==null?void 0:i.automaticUpgrade;return e.jsx(o.Tooltip,{title:this.props.context.t("Automatic Upgrade Policy")+(s?`: ${s}`:""),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",onClick:()=>this.setState({autoUpgradeDialogOpen:!0,showDialog:!0}),children:!s||s==="none"?e.jsx(g.KeyboardArrowUp,{}):ut[s]})})}renderReadmeButton(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterReadme:!0;return e.jsx(U,{value:t,children:e.jsx(o.Tooltip,{title:this.props.context.t("Readme"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",onClick:()=>this.openInfoDialog(),children:e.jsx(g.Help,{})})})})}renderRating(){var i,n,r;const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterRating:!0;return this.props.context.isTileView&&(this.props.context.sortPopularFirst||this.props.context.sortRecentlyUpdated)||!this.props.context.repository[this.props.adapterName].stat||t===!1?null:e.jsx("div",{onClick:()=>this.setState({showSetRating:{version:this.installedVersion,rating:this.props.context.repository[this.props.adapterName].rating},showDialog:!0}),style:{...this.styles.rating,...this.styles.ratingSet},title:(i=this.props.context.repository[this.props.adapterName].rating)==null?void 0:i.title,children:e.jsx(o.Rating,{name:this.props.adapterName,precision:.5,size:"small",readOnly:!0,value:((r=(n=this.props.context.repository[this.props.adapterName].rating)==null?void 0:n.rating)==null?void 0:r.r)||0})})}renderConnectionType(){var s;const t=(s=this.props.context.repository[this.props.adapterName])==null?void 0:s.connectionType;return t==="cloud"?e.jsx(o.Tooltip,{title:this.props.context.t("Adapter requires the specific cloud access for these devices/service"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.Cloud,{})}):t==="local"?e.jsx(o.Tooltip,{title:this.props.context.t("Adapter does not use the cloud for these devices/service"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.CloudOff,{})}):null}renderDataSource(){var s;const t=(s=this.props.context.repository[this.props.adapterName])==null?void 0:s.dataSource;return t?e.jsx("div",{style:this.styles.marginLeft5,children:t==="poll"?e.jsx(o.Tooltip,{title:this.props.context.t("The device or service will be periodically asked"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.ArrowUpward,{style:this.styles.classPoll})}):t==="push"?e.jsx(o.Tooltip,{title:this.props.context.t("The device or service delivers the new state actively"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.ArrowDownward,{style:this.styles.classPush})}):t==="assumption"?e.jsx(o.Tooltip,{slotProps:{popper:{sx:this.styles.tooltip}},title:this.props.context.t("Adapter cannot request the exactly device status and the status will be guessed on the last sent command"),children:e.jsx(g.Remove,{style:this.styles.classAssumption})}):null}):null}renderLicenseInfo(t=!1){var r,a,c,h;const s=this.props.context.repository[this.props.adapterName],i=K(s),n=(r=s.licenseInformation)!=null&&r.type?e.jsx(o.Link,{href:i,target:"_blank",rel:"noopener",sx:(d=>({color:d.palette.mode==="dark"?"white":"black","&:hover":{color:d.palette.mode==="dark"?"white":"black"}})),children:((a=s.licenseInformation)==null?void 0:a.type)==="paid"?e.jsx(o.Tooltip,{title:this.props.context.t("The adapter requires a paid license."),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.MonetizationOn,{})}):((c=s.licenseInformation)==null?void 0:c.type)==="commercial"?e.jsx(o.Tooltip,{slotProps:{popper:{sx:this.styles.tooltip}},title:this.props.context.t("The adapter requires a paid license for commercial use."),children:e.jsx(g.MonetizationOn,{opacity:.5})}):((h=s.licenseInformation)==null?void 0:h.type)==="limited"?e.jsx(o.Tooltip,{slotProps:{popper:{sx:this.styles.tooltip}},title:this.props.context.t("The adapter has a limited functionality without a paid license."),children:e.jsx(g.MonetizationOn,{opacity:.5})}):null}):null;return!n&&t?e.jsx("div",{style:{width:24,height:24}}):n}renderSentryInfo(){var s,i;return((i=(s=this.props.context.repository[this.props.adapterName])==null?void 0:s.plugins)==null?void 0:i.sentry)?e.jsx("div",{style:this.styles.marginLeft5,children:e.jsx(o.Tooltip,{title:"sentry",slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.CardMedia,{style:this.styles.sentry,component:"img",image:It})})}):null}getDependencies(){const t=M.getDependencies(this.props.adapterName,this.props.context);if(!t)return null;const s=[];for(const i of t)i.installedVersion?i.rightVersion||s.push(`${this.props.context.t("Invalid version of %s. Required %s. Current ",i.name,i.version)}${i.installedVersion}`):s.push(this.props.context.t("No version of %s",i.name,i.name));return s.push(this.props.context.t("Wrong dependencies")),s.map((i,n)=>e.jsx("div",{style:n?void 0:{fontWeight:"bold",fontSize:"larger"},children:i},i))}renderVersion(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterUpdate:!0,s=this.props.context.repository[this.props.adapterName],i=s==null?void 0:s.version;return i?!this.props.commandRunning&&this.props.cached.updateAvailable&&t!==!1?e.jsx(o.Tooltip,{title:this.props.context.t("Update"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsxs("div",{onClick:()=>this.setState({showUpdateDialog:!0,showDialog:!0}),style:{...this.styles.buttonUpdate,...this.props.cached.rightDependencies?this.styles.updateAvailable:void 0},children:[e.jsx(o.IconButton,{style:this.styles.buttonUpdateIcon,size:"small",children:e.jsx(g.Refresh,{})}),i]})}):e.jsx(o.Tooltip,{title:this.getDependencies(),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx("span",{style:this.props.cached.rightDependencies?void 0:this.styles.wrongDependencies,children:i})}):e.jsx("span",{style:this.styles.wrongDependencies,children:this.props.context.t("not maintained")})}static extractGitHubCommitHash(t){if(!t)return null;const s=t.indexOf("#");if(s===-1)return null;const i=t.substring(s+1);return i.length>=7?i.substring(0,7):i}renderInstalledVersion(t){var h,d;const s=this.props.context.installed[this.props.adapterName],i=(d=(h=this.props.context.adapters[`system.adapter.${this.props.adapterName}`])==null?void 0:h.common)==null?void 0:d.installedFrom,{adapterName:n}=this.props,r=i&&!i.startsWith(`iobroker.${n}@`),a=r?E.extractGitHubCommitHash(i):null,c=r&&a?`${this.installedVersion}+${a}`:this.installedVersion;if(t){const l=s==null?void 0:s.enabled,u=s==null?void 0:s.count;return e.jsxs(o.Grid2,{container:!0,wrap:"nowrap",alignItems:"center",spacing:1,children:[this.installedVersion?e.jsx(o.Grid2,{children:c+(u?` (${u}${u!==l?"~":""})`:"")}):null,r&&e.jsx(o.Grid2,{container:!0,children:e.jsx(o.Tooltip,{title:`${this.props.context.t("Non-NPM-Version")}: ${i}`,slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.GitHub,{fontSize:"small",style:this.styles.versionWarn})})})]})}return this.installedVersion?e.jsxs(o.Typography,{component:"span",style:this.styles.cardContentFlexBetween,children:[e.jsxs("div",{children:[this.props.context.t("Installed version"),":"]}),e.jsxs("div",{style:this.styles.cardContentFlex,children:[r&&e.jsx(o.Tooltip,{title:`${this.props.context.t("Non-NPM-Version")}: ${i}`,slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(g.GitHub,{fontSize:"small",style:this.styles.versionWarn})}),c]})]}):null}renderUploadButton(){return this.props.context.expertMode&&this.installedVersion?e.jsx(o.Tooltip,{title:this.props.context.t("Upload"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",disabled:this.props.commandRunning,onClick:()=>this.onUpload(),children:e.jsx(g.Publish,{})})}):null}renderDeleteButton(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterDelete:!0;return e.jsx(U,{value:!!this.installedVersion&&t,children:e.jsx(o.Tooltip,{title:this.props.context.t("Delete adapter"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",disabled:this.props.commandRunning,onClick:()=>this.setState({adapterDeletionDialog:!0,showDialog:!0}),children:e.jsx(g.DeleteForever,{})})})})}renderInstallSpecificVersionButton(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterUpdate:!0;return this.props.context.expertMode&&t!==!1&&this.installedVersion&&e.jsx(o.Tooltip,{title:this.props.context.t("Install a specific version"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{disabled:this.props.commandRunning,size:"small",onClick:()=>this.setState({showInstallVersion:!0,showDialog:!0}),children:e.jsx(g.AddToPhotos,{})})})}renderRebuildButton(){return!this.props.context.expertMode||!this.installedVersion?null:e.jsx(o.Tooltip,{title:this.props.context.t("Rebuild"),children:e.jsx(o.IconButton,{size:"small",disabled:this.props.commandRunning,onClick:()=>this.rebuild(),children:e.jsx(g.Build,{})})})}renderAutoUpdateDialog(){return this.state.autoUpgradeDialogOpen?e.jsx(Wt,{onClose:()=>this.setState({autoUpgradeDialogOpen:!1,showDialog:!1}),adapter:this.props.adapterName,hostId:this.props.context.adminHost,socket:this.props.context.socket}):null}renderUpdateAdapterDialog(){var t;return this.state.showUpdateDialog?(this.installedVersion=(t=this.props.context.installed[this.props.adapterName])==null?void 0:t.version,e.jsx(kt,{adapter:this.props.adapterName,adapterObject:this.props.context.repository[this.props.adapterName],t:this.props.context.t,dependencies:M.getDependencies(this.props.adapterName,this.props.context),rightDependencies:this.props.context.rightDependenciesFunc(this.props.adapterName),news:this.getNews(),toggleTranslation:this.props.context.toggleTranslation,noTranslation:this.props.noTranslation,installedVersion:this.installedVersion,onUpdate:s=>this.setState({showUpdateDialog:!1,showDialog:!1},()=>this.update(s)),isStable:this.props.context.repository._repoInfo.stable,onIgnore:s=>this.setState({showUpdateDialog:!1,showDialog:!1},()=>this.props.context.socket.getObject(`system.adapter.${this.props.adapterName}`).then(i=>{i!=null&&i.common?(i.common.ignoreVersion=s,this.props.context.socket.setObject(i._id,i).catch(n=>window.alert(`Cannot write object: ${n}`))):window.alert(`Adapter "${this.props.adapterName}" does not exist!`)}).then(()=>this.props.context.removeUpdateAvailable(this.props.adapterName))),onClose:()=>this.setState({showUpdateDialog:!1,showDialog:!1}),instances:this.props.context.compactInstances,theme:this.props.context.theme})):null}static formatNews(t){return(t||"").toString().split(`
4
+ `).map(i=>i.trim().replace(/^\*+/,"").replace(/^-/,"").replace(/\*+$/,"").replace(/\r/g,"").trim()).filter(i=>i).map((i,n)=>e.jsxs("div",{style:{},children:[e.jsx("span",{children:"- "}),i]},n))}renderAdapterInstallVersion(){var n,r,a,c;if(!this.state.showInstallVersion)return null;let t,s;const i=this.props.context.repository._repoInfo;return i!=null&&i.stable?(t=(n=this.props.context.repository[this.props.adapterName])==null?void 0:n.version,s=(r=this.props.context.repository[this.props.adapterName])==null?void 0:r.latestVersion):(t=(a=this.props.context.repository[this.props.adapterName])==null?void 0:a.stable,s=(c=this.props.context.repository[this.props.adapterName])==null?void 0:c.version),e.jsx(Dt,{title:this.props.context.t("Please select specific version of %s",this.props.adapterName),applyButton:!1,onClose:()=>this.setState({showInstallVersion:!1,adapterInstallSpecificVersion:"",showDialog:!1}),theme:this.props.context.theme,toggleTranslation:this.props.context.toggleTranslation,noTranslation:this.props.noTranslation,children:e.jsxs("div",{style:{height:"100%",overflowY:"hidden"},children:[e.jsxs("div",{style:this.styles.containerSpecificVersion,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx(o.TextField,{variant:"standard",style:{flexGrow:1},label:this.props.context.t("Enter version manually"),value:this.state.adapterInstallSpecificVersion,onChange:h=>this.setState({adapterInstallSpecificVersion:h.target.value}),slotProps:{input:{endAdornment:this.state.adapterInstallSpecificVersion?e.jsx(o.InputAdornment,{position:"end",children:e.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>this.setState({adapterInstallSpecificVersion:""}),children:e.jsx(g.Close,{})})}):null}}}),e.jsx(o.Button,{color:"primary",variant:"contained",size:"small",disabled:!this.state.adapterInstallSpecificVersion,onClick:()=>{this.state.adapterInstallSpecificVersion&&(this.update(this.state.adapterInstallSpecificVersion),this.setState({showInstallVersion:!1,adapterInstallSpecificVersion:"",showDialog:!1}))},children:this.props.context.t("Install")})]}),e.jsx(o.Tooltip,{title:this.props.context.t("npmjs.com"),slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.IconButton,{size:"small",onClick:()=>{window.open(`https://www.npmjs.com/package/iobroker.${this.props.adapterName}?activeTab=versions`,this.props.adapterName).focus()},children:e.jsx(g.Link,{})})})]}),e.jsx(o.Box,{component:"div",sx:this.styles.header,children:this.props.context.t("Or select from the list")}),e.jsx("div",{style:{...this.styles.containerVersion,height:"calc(100% - 122px)",overflowY:"auto"},children:this.getNews(!0).map(({version:h,news:d})=>e.jsx(o.Card,{variant:"outlined",sx:this.styles.currentVersion,onClick:()=>{this.update(h),this.setState({showInstallVersion:!1,showDialog:!1})},children:e.jsxs(o.CardContent,{children:[e.jsxs(o.Typography,{sx:L.getStyle(this.props.context.theme,this.installedVersion===h&&this.styles.currentVersionText,{fontSize:16,fontWeight:"bold"}),color:"text.secondary",gutterBottom:!0,children:[h,this.installedVersion===h?e.jsx(o.Box,{component:"span",sx:this.styles.currentVersionText,children:`(${this.props.context.t("current")})`}):null,s===h?e.jsx(o.Box,{component:"span",sx:this.styles.repoLatestVersionText,children:"(latest)"}):null,t===h?e.jsx(o.Box,{component:"span",sx:this.styles.repoStableVersionText,children:`(${this.props.context.t("stable")})`}):null]}),e.jsx(o.Typography,{variant:"body2",style:{opacity:.7},children:E.formatNews(d)})]})},h))})]})})}renderSetRatingDialog(){return this.state.showSetRating?e.jsx(Bt,{t:this.props.context.t,lang:this.props.context.lang,version:this.state.showSetRating.version,adapter:this.props.adapterName,currentRating:this.state.showSetRating.rating,onClose:t=>{t&&this.props.context.updateRating(this.props.adapterName,t),this.setState({showSetRating:null,showDialog:!1})},uuid:this.props.context.uuid}):null}renderAdapterDeletionDialog(){return this.state.adapterDeletionDialog?e.jsx($t,{adapter:this.props.adapterName,socket:this.props.context.socket,t:this.props.context.t,onClick:t=>this.delete(t),onClose:()=>this.setState({adapterDeletionDialog:!1,showDialog:!1})}):null}openInfoDialog(){var i;const s=(i=this.props.context.repository[this.props.adapterName].docs)!=null&&i[this.props.context.lang]?this.props.context.lang:"en";window.open(dt.getDocsLinkForAdapter({lang:s,adapterName:this.props.adapterName}),"help")}getNews(t=!1){const s=this.props.context.repository[this.props.adapterName],i=this.props.context.installed[this.props.adapterName],n=[];return i&&(s!=null&&s.news)&&Object.keys(s.news).forEach(r=>{try{if(V.gt(r,i.version)||t){let a;typeof s.news[r]=="object"?a=this.props.noTranslation?s.news[r].en:s.news[r][this.props.context.lang]||s.news[r].en:a=s.news[r],n.push({version:r,news:a})}}catch{console.warn(`[ADAPTERS] Cannot compare "${r}" and "${i.version}" (${this.props.adapterName})`)}}),n}onUpload(){var n;const t=this.props.context.repository[this.props.adapterName],s=K(t),i=((n=t.licenseInformation)==null?void 0:n.license)||t.license;i!=="MIT"?this.setState({showLicenseDialog:{url:s,upload:!0,adapterName:this.props.adapterName,licenseType:i},showDialog:!0}):M.upload(this.props.adapterName,this.props.context)}delete(t){this.props.context.executeCommand(`del ${this.props.adapterName}${t?" --custom":""}${this.props.context.expertMode?" --debug":""}`)}async update(t){if(this.props.adapterName==="admin"&&this.props.context.adminHost===this.props.context.currentHost&&await this.props.context.socket.checkFeatureSupported("ADAPTER_WEBSERVER_UPGRADE")){this.props.context.setAdminUpgradeTo(t);return}this.props.context.executeCommand(`upgrade ${this.props.adapterName}@${t}${this.props.context.expertMode?" --debug":""}`)}rebuild(){this.props.context.executeCommand(`rebuild ${this.props.adapterName}${this.props.context.expertMode?" --debug":""}`)}renderDialogs(){return this.state.showDialog?e.jsxs(e.Fragment,{children:[this.renderAddInstanceDialog(this.props.context),this.renderLicenseDialog(this.props.context),this.renderUpdateAdapterDialog(),this.renderAdapterInstallVersion(),this.renderSetRatingDialog(),this.renderAdapterDeletionDialog(),this.renderAutoUpdateDialog()]}):null}}const Pt="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",Ft="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",Mt={...gt,type:{color:"tile"},root:p=>({position:"relative",m:"10px",width:300,minHeight:200,background:p.palette.background.default,boxShadow:Pt,display:"flex",flexDirection:"column",transition:"box-shadow 0.5s","&:hover":{boxShadow:Ft}}),imageBlock:p=>({background:p.palette.mode==="dark"?"#848484":"#c0c0c0",minHeight:60,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",color:"#000"}),img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.svg") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},installed:{background:"#77c7ff8c"},update:{background:"#10ff006b"},fab:{position:"absolute",bottom:-20,width:40,height:40,right:20},greenText:p=>({color:p.palette.success.dark}),collapse:{height:"100%",backgroundColor:"silver",position:"absolute",width:"100%",zIndex:3,marginTop:"auto",bottom:0,justifyContent:"space-between",display:"flex",flexDirection:"column"},close:{width:20,height:20,opacity:.9,cursor:"pointer",position:"relative",marginLeft:"auto",mb:"10px",transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"rgba(0, 0, 0, 0.54)",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"rgba(0, 0, 0, 0.54)",transform:"rotate(-45deg)"}},footerBlock:p=>({background:p.palette.background.default,p:"10px",display:"flex",justifyContent:"space-between"}),versionDate:{alignSelf:"center"},adapter:p=>({width:"100%",fontWeight:"bold",fontSize:16,verticalAlign:"middle",pl:1,pt:2,color:(p.palette.mode==="dark","#333")}),adapterWithAgo:{width:"calc(100% - 145px)"},description:p=>({color:p.palette.mode==="dark"?"#222":"inherit"}),cardContent:{overflow:"auto"},cardContentDiv:{position:"sticky",right:0,top:0,background:"silver"},cardContentFlex:{display:"flex"},cardContentFlexBetween:{display:"flex",justifyContent:"space-between"},cardContent2:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},cardMargin10:{marginTop:10},availableVersion:{display:"flex",justifyContent:"space-between"},curdContentFlexCenter:{display:"flex",alignItems:"center"},versionWarn:{color:ht[500],marginRight:5},rating:{marginTop:20}};class Ht extends E{styles=Mt;constructor(t){super(t),Object.assign(this.state,{openCollapse:!1})}renderInfoCard(){return e.jsxs("div",{style:this.styles.collapse,children:[e.jsxs(o.CardContent,{style:this.styles.cardContent,children:[e.jsx("div",{style:this.styles.cardContentDiv,children:e.jsx(o.Box,{component:"div",sx:this.styles.close,onClick:()=>this.setState({openCollapse:!this.state.openCollapse})})}),e.jsx(o.Typography,{gutterBottom:!0,component:"span",variant:"body2",sx:this.styles.description,children:this.props.cached.desc})]}),e.jsxs(o.Box,{component:"div",sx:this.styles.footerBlock,children:[this.renderAddInstanceButton(),e.jsxs("div",{style:this.styles.cardContentFlex,children:[this.renderAutoUpgradeButton(),this.renderReadmeButton(),this.renderUploadButton(),this.renderDeleteButton(),this.renderInstallSpecificVersionButton()]})]})]})}renderCardMedia(){const t=this.props.context.repository[this.props.adapterName],s=t==null?void 0:t.version;return e.jsxs(o.Box,{component:"div",sx:L.getStyle(this.props.context.theme,this.styles.imageBlock,this.installedVersion&&this.styles.installed,this.installedVersion&&s&&this.installedVersion!==s&&this.props.cached.updateAvailable&&this.styles.update),children:[e.jsx(o.CardMedia,{sx:this.styles.img,component:i=>E.renderImage(i),src:this.props.cached.image||"img/no-image.svg",image:this.props.cached.image||"img/no-image.svg"}),e.jsx(o.Box,{component:"div",sx:L.getStyle(this.props.context.theme,this.styles.adapter,(t.stat||this.props.context.sortRecentlyUpdated)&&this.styles.adapterWithAgo),children:this.props.adapterName}),this.props.context.sortPopularFirst?e.jsx("div",{style:this.styles.versionDate,children:t.stat}):null,this.props.context.sortRecentlyUpdated?e.jsx("div",{style:this.styles.versionDate,children:this.props.cached.daysAgoText}):null,!this.props.context.sortPopularFirst&&!this.props.context.sortRecentlyUpdated?this.renderRating():null,this.state.openCollapse?null:e.jsx(o.Tooltip,{title:this.props.context.t("Info"),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:e.jsx(o.Fab,{onClick:()=>this.setState({openCollapse:!this.state.openCollapse}),style:this.styles.fab,color:"primary","aria-label":"add",children:e.jsx(g.MoreVert,{})})})]})}renderCardContent(){const t=this.props.context.repository[this.props.adapterName]?this.props.context.repository[this.props.adapterName].allowAdapterUpdate:!0,s=this.props.context.installed[this.props.adapterName];return e.jsxs(o.CardContent,{style:this.styles.cardContent2,children:[e.jsx(o.Typography,{gutterBottom:!0,variant:"h5",component:"h5",children:this.props.cached.title}),e.jsxs("div",{style:this.styles.cardContentFlex,children:[this.renderConnectionType(),this.renderDataSource(),e.jsx("div",{children:this.renderLicenseInfo()}),this.renderSentryInfo()]}),e.jsxs("div",{style:this.styles.cardMargin10,children:[s!=null&&s.count?e.jsxs(o.Typography,{component:"span",style:this.styles.cardContentFlexBetween,children:[e.jsxs("div",{children:[this.props.context.t("Installed instances"),":"]}),e.jsx("div",{children:s.count})]}):null,e.jsx(U,{value:t,children:e.jsxs(o.Typography,{component:"span",style:this.styles.availableVersion,children:[e.jsx("div",{children:this.props.context.t("Available version:")}),e.jsx(o.Box,{component:"div",sx:L.getStyle(this.props.context.theme,this.props.cached.updateAvailable&&this.styles.greenText,this.styles.curdContentFlexCenter),children:this.renderVersion()})]})}),this.renderInstalledVersion()]})]})}render(){var t;return this.installedVersion=(t=this.props.context.installed[this.props.adapterName])==null?void 0:t.version,e.jsxs(o.Card,{sx:this.styles.root,children:[this.state.openCollapse?this.renderInfoCard():null,this.renderCardMedia(),this.renderCardContent(),this.renderDialogs()]})}}const _t={...gt,type:{color:"line"},smallAvatar:{width:32,height:32,marginLeft:4},paddingNone:{padding:"0 !important"},name:{flexWrap:"nowrap",width:300,marginTop:0},flex:{display:"flex"},nameCell:{paddingTop:"0 !important",paddingBottom:"0 !important"}};class Et extends E{styles=_t;render(){var i,n;const t=this.props.context.repository[this.props.adapterName],s=t?t.allowAdapterRating:!0;return this.installedVersion=(i=this.props.context.installed[this.props.adapterName])==null?void 0:i.version,e.jsxs(o.TableRow,{hover:!0,children:[e.jsx(o.TableCell,{}),e.jsx(o.TableCell,{children:e.jsxs(o.Grid2,{container:!0,spacing:1,alignItems:"center",style:this.styles.name,children:[e.jsx(o.Tooltip,{title:this.props.adapterName,slotProps:{popper:{sx:this.styles.tooltip}},children:e.jsx(o.Grid2,{style:this.styles.paddingNone,children:e.jsx(o.Avatar,{variant:"square",alt:this.props.cached.title,src:this.props.cached.image,style:this.styles.smallAvatar})})}),s!==!1?e.jsxs(o.Grid2,{style:this.styles.nameCell,children:[e.jsx("div",{children:this.props.cached.title}),this.renderRating()]}):e.jsx(o.Grid2,{children:this.props.cached.title})]})}),!this.props.context.descHidden&&e.jsx(o.TableCell,{title:this.props.cached.desc,style:{width:20,wordWrap:"break-word"},children:this.props.cached.desc}),e.jsx(o.TableCell,{children:e.jsxs("div",{style:this.styles.flex,children:[this.renderConnectionType()||e.jsx("div",{style:{marginLeft:5,width:24,height:24}}),this.renderDataSource()||e.jsx("div",{style:{width:24,height:24}}),this.renderSentryInfo()||e.jsx("div",{style:{width:24,height:24}}),this.renderLicenseInfo(!0)]})}),e.jsx(o.TableCell,{children:this.renderInstalledVersion(!0)}),e.jsx(o.TableCell,{children:e.jsx(o.Grid2,{container:!0,alignItems:"center",children:this.renderVersion()})}),e.jsx(o.TableCell,{style:{fontSize:"smaller"},children:((n=t==null?void 0:t.licenseInformation)==null?void 0:n.license)||(t==null?void 0:t.license)}),e.jsxs(o.TableCell,{children:[this.renderAddInstanceButton(),this.renderAutoUpgradeButton(),this.renderReadmeButton(),this.renderUploadButton(),this.renderDeleteButton(),this.renderInstallSpecificVersionButton(),this.renderRebuildButton()]}),this.renderDialogs()]})}}const X=246,W={emptyBlock:50,name:300,connectionType:120,installed:120,available:120,update:40,license:80,install:X},J=Object.keys(W).reduce((p,t)=>p+W[t],0),k={container:{height:"100%",width:"100%"},containerNotFullHeight:{height:"calc(100% - 50px)"},containerFullHeight:{height:"100%"},table:{width:"100%",tableLayout:"fixed",minWidth:960,"& td":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",pt:"2px",pb:"2px",pr:"4px",pl:"4px"},"& th":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",pt:"2px",pb:"2px",pr:"4px",pl:"4px"}},name:{flexWrap:"nowrap",width:W.name},emptyBlock:{flexWrap:"nowrap",width:W.emptyBlock},description:{width:`calc(100% - ${J+2}px)`},connectionType:{width:W.connectionType},installed:{width:W.installed},available:{width:W.available,paddingRight:6},license:{width:W.license},install:{width:W.install},viewModeDiv:{display:"flex",flexFlow:"wrap",overflow:"auto",justifyContent:"center"}};class Gt extends N.Component{lastRenderCounter=-1;constructor(t){super(t),this.state={descWidth:t.descWidth,repoName:t.repoName,systemConfig:!!t.systemConfig,tableViewMode:t.tableViewMode,oneListView:t.oneListView,categoriesExpanded:JSON.stringify(t.categoriesExpanded),cachedAdapters:t.cachedAdapters?Object.keys(t.cachedAdapters).length:0,update:t.update,sortByName:t.sortByName,sortPopularFirst:t.sortPopularFirst,sortRecentlyUpdated:t.sortRecentlyUpdated,renderCounter:0,listOfVisibleAdapter:JSON.stringify(t.listOfVisibleAdapter),expertMode:t.context.expertMode,commandRunning:t.commandRunning,noTranslation:t.noTranslation}}getRow(t,s){const i=this.props.cachedAdapters[t];return i?e.jsx(Et,{context:s,adapterName:t,cached:i,commandRunning:this.state.commandRunning,noTranslation:this.state.noTranslation},`adapter-${t}`):null}getRows(t){var n;if(!this.props.listOfVisibleAdapter)return e.jsx(o.TableRow,{children:e.jsx(o.TableCell,{colSpan:8,children:e.jsx(o.LinearProgress,{})})});let s=0,i=[];if(this.props.oneListView){for(let r=0;r<this.props.listOfVisibleAdapter.length;r++){const a=this.props.listOfVisibleAdapter[r];i.length>50&&!((n=this.props.context.installed[a])!=null&&n.version)||i.push(this.getRow(a,t))}if(s=i.length,s&&this.props.listOfVisibleAdapter.length>i.length){const r=this.props.listOfVisibleAdapter.length-i.length,a=r===1?this.props.context.t("Filter adapters to see others. There is %s more",1):this.props.context.t("Filter adapters to see others. There are %s more",r);i.push(e.jsx(o.TableRow,{children:e.jsx(o.TableCell,{colSpan:8,style:{fontSize:20,padding:20,textAlign:"center"},children:a})},"more"))}}else i=this.props.categories.map(r=>{if(!r.adapters.find(d=>this.props.listOfVisibleAdapter.includes(d)))return null;const c=r.name,h=this.props.categoriesExpanded[c];return s++,e.jsxs(N.Fragment,{children:[e.jsx(Ut,{categoryName:c,count:r.count,expanded:h,installedCount:r.installed,name:r.translation,descHidden:t.descHidden,onToggle:()=>this.props.toggleCategory(c),t:this.props.context.t},`category-${c}1`),h&&r.adapters.map(d=>{const l=this.getRow(d,t);return l&&s++,l})]},`category-${c} ${r.adapters.length}`)});return s?i:this.props.update?null:e.jsx("tr",{children:e.jsxs("td",{colSpan:8,style:{textAlign:"center"},children:[this.props.searchFilter||this.props.installedListFilter?e.jsx(o.Button,{variant:"outlined",title:this.props.context.t("Click to clear all filters"),onClick:()=>this.props.clearAllFilters(),children:this.props.context.t("all items are filtered out")}):null,this.props.updateListFilter&&(this.props.searchFilter||this.props.installedListFilter)?e.jsx("br",{}):null,this.props.updateListFilter?e.jsx(o.Button,{style:{marginTop:16},variant:"outlined",onClick:()=>this.props.clearAllFilters(!0),startIcon:e.jsx(g.Update,{}),children:this.props.context.t("Remove filter for updatable adapters")}):null]})})}getTiles(t){var i;if(!this.props.listOfVisibleAdapter)return e.jsx(o.LinearProgress,{});if(!this.props.listOfVisibleAdapter.length)return this.props.update?null:e.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:16},children:[this.props.searchFilter||this.props.installedListFilter?e.jsx(o.Tooltip,{title:this.props.context.t("Click to clear all filters"),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:e.jsx(o.Button,{variant:"outlined",onClick:()=>this.props.clearAllFilters(),children:this.props.context.t("all items are filtered out")})}):null,this.props.updateListFilter?e.jsx(o.Button,{variant:"outlined",onClick:()=>this.props.clearAllFilters(!0),startIcon:e.jsx(g.Update,{}),children:this.props.context.t("Remove filter for updatable adapters")}):null]});const s=[];for(let n=0;n<this.props.listOfVisibleAdapter.length;n++){const r=this.props.listOfVisibleAdapter[n],a=this.props.cachedAdapters[r];s.length>50&&!((i=this.props.context.installed[r])!=null&&i.version)||s.push(e.jsx(Ht,{context:t,adapterName:r,cached:a,commandRunning:this.state.commandRunning,noTranslation:this.state.noTranslation},`adapter-${r}`))}return this.props.listOfVisibleAdapter.length>s.length&&(s.push(e.jsx("div",{style:{flexBasis:"100%",height:0}},"newLine")),s.push(e.jsx("div",{style:{fontSize:20,margin:20},children:this.props.context.t("Filter adapters to see others. There is %s more",this.props.listOfVisibleAdapter.length-s.length)},"more"))),s}renderTileView(t,s,i){return e.jsxs(e.Fragment,{children:[t?null:e.jsx(o.Box,{sx:{marginX:2,marginTop:1,width:"calc(100% - 32px)"},children:e.jsx(Z,{type:"warning",children:this.props.context.t('Active repo is "%s"',s)})}),e.jsx("div",{style:k.viewModeDiv,children:this.getTiles(i)})]})}renderTableView(t,s,i){return e.jsxs(vt,{children:[t?null:e.jsx(o.Box,{sx:{marginX:2,marginTop:1,width:"calc(100% - 32px)"},children:e.jsx(Z,{type:"warning",children:this.props.context.t('Active repo is "%s"',s)})}),e.jsx(o.TableContainer,{style:{...k.container,...t?k.containerFullHeight:k.containerNotFullHeight},children:e.jsxs(o.Table,{stickyHeader:!0,size:"small",sx:k.table,children:[e.jsx(o.TableHead,{children:e.jsxs(o.TableRow,{children:[e.jsx(o.TableCell,{style:k.emptyBlock}),e.jsx(o.TableCell,{style:k.name,children:e.jsx(o.Typography,{children:this.props.context.t("Name")})}),!i.descHidden&&e.jsx(o.TableCell,{style:{...k.description,width:this.props.descWidth},children:e.jsx(o.Typography,{children:this.props.context.t("Description")})}),e.jsx(o.TableCell,{style:k.connectionType}),e.jsx(o.TableCell,{style:k.installed,children:e.jsx(o.Typography,{children:this.props.context.t("Installed")})}),e.jsx(o.TableCell,{style:k.available,children:e.jsx(o.Typography,{children:this.props.context.t("Available")})}),e.jsx(o.TableCell,{style:k.license,children:e.jsx(o.Typography,{children:this.props.context.t("License")})}),e.jsx(o.TableCell,{style:{...k.install,width:this.state.expertMode?X:X-68},children:e.jsx(o.Typography,{children:this.props.context.t("Install")})})]})}),e.jsx(o.TableBody,{children:this.getRows(i)})]})})]})}static getDerivedStateFromProps(t,s){let i=!1;t.descWidth!==s.descWidth&&(console.log("Render because of descWidth"),i=!0),t.repoName!==s.repoName&&(console.log("Render because of repoName"),i=!0),!!t.systemConfig!==s.systemConfig&&(console.log("Render because of systemConfig"),i=!0),t.tableViewMode!==s.tableViewMode&&(console.log("Render because of tableViewMode"),i=!0),t.oneListView!==s.oneListView&&(console.log("Render because of oneListView"),i=!0);const n=JSON.stringify(t.categoriesExpanded);n!==s.categoriesExpanded&&(console.log("Render because of categoriesExpanded"),i=!0);const r=t.cachedAdapters?Object.keys(t.cachedAdapters).length:0;r!==s.cachedAdapters&&(console.log(`Render because of cachedAdapters ${r} <> ${s.cachedAdapters}`),i=!0),t.update!==s.update&&(console.log("Render because of update"),i=!0),t.sortByName!==s.sortByName&&(console.log("Render because of sortByName"),i=!0),t.sortPopularFirst!==s.sortPopularFirst&&(console.log("Render because of sortPopularFirst"),i=!0),t.sortRecentlyUpdated!==s.sortRecentlyUpdated&&(console.log("Render because of sortRecentlyUpdated"),i=!0),t.context.expertMode!==s.expertMode&&(console.log("Render because of expertMode"),i=!0);const a=JSON.stringify(t.listOfVisibleAdapter);return a!==s.listOfVisibleAdapter&&(console.log("Render because of listOfVisibleAdapter"),i=!0),t.commandRunning!==s.commandRunning&&(console.log("Render because of commandRunning"),i=!0),t.noTranslation!==s.noTranslation&&(console.log("Render because of commandRunning"),i=!0),i?{descWidth:t.descWidth,repoName:t.repoName,systemConfig:!!t.systemConfig,tableViewMode:t.tableViewMode,oneListView:t.oneListView,categoriesExpanded:n,cachedAdapters:r,update:t.update,sortByName:t.sortByName,sortPopularFirst:t.sortPopularFirst,sortRecentlyUpdated:t.sortRecentlyUpdated,listOfVisibleAdapter:a,renderCounter:s.renderCounter+1,expertMode:t.context.expertMode,commandRunning:t.commandRunning,noTranslation:t.noTranslation}:null}shouldComponentUpdate(t,s){return this.lastRenderCounter!==s.renderCounter?(this.lastRenderCounter=s.renderCounter,!0):!1}render(){var t,s;return(s=(t=this.props.systemConfig)==null?void 0:t.common)!=null&&s.activeRepo?this.props.tableViewMode?this.renderTableView(this.props.stableRepo,this.props.repoName,this.props.context):this.renderTileView(this.props.stableRepo,this.props.repoName,this.props.context):e.jsx(o.LinearProgress,{})}}class zt extends N.Component{updating;interval;startTimeout;textareaRef;link;oldVersion;constructor(t){super(t),this.state={response:null,error:null,starting:!0,upAgain:!1},this.updating=!1,this.textareaRef=q.createRef(),this.link=`${window.location.protocol}//${window.location.host}/`}setUpdating(t){this.updating!==t&&(this.updating=t,this.props.onUpdating(t))}async getWebserverParams(){const t=await this.props.socket.getObject(`system.adapter.${this.props.adminInstance}`);return{useHttps:t.native.secure,port:t.native.port,certPrivateName:t.native.certPrivate,certPublicName:t.native.certPublic}}async componentDidMount(){const{certPrivateName:t,certPublicName:s,port:i,useHttps:n}=await this.getWebserverParams();this.oldVersion=this.props.currentAdminVersion,await this.props.socket.upgradeAdapterWithWebserver(this.props.host,{version:this.props.version,adapterName:"admin",port:i,useHttps:n,certPublicName:s,certPrivateName:t}),this.setUpdating(!0),this.interval=setInterval(()=>this.checkStatus(),1e3),this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.setState({starting:!1})},1e4)}componentWillUnmount(){this.interval&&(clearInterval(this.interval),this.interval=null),this.startTimeout&&(clearTimeout(this.startTimeout),this.startTimeout=null)}async checkVersion(){try{const s=await(await fetch("./version")).text();return s&&s.length<20&&s!==this.oldVersion?(this.interval&&(clearInterval(this.interval),this.interval=null),this.setState({response:{running:!1,success:!0,stderr:[],stdout:[w.t("Version updated to %s",s)]},upAgain:!0,error:null},()=>this.setUpdating(!1)),!0):s===this.oldVersion}catch{return!1}}async checkStatus(){console.log(`Request update status from: ${this.link}`);try{const s=await(await fetch(this.link)).text();if(console.log(`Received status: ${s}`),s.startsWith("{")&&s.endsWith("}"))try{const i=JSON.parse(s);i!=null&&i.stderr&&(i.stderr=i.stderr.filter(n=>n.trim())),i&&!i.running&&i.success&&i.stdout?(i.stdout.push(""),i.stdout.push("---------------------------------------------------"),i.stdout.push(w.t("%s was successfully updated to %s","admin",this.props.version))):i!=null&&i.stdout&&(i.stdout.unshift(""),i.stdout.unshift("---------------------------------------------------"),i.stdout.unshift(w.t("updating %s to %s...","admin",this.props.version))),this.setState({response:i,error:null},()=>{i&&!i.running?(this.interval&&(clearInterval(this.interval),this.interval=null),this.waitForAdapterStart()):i!=null&&i.running&&this.setUpdating(!0),this.textareaRef.current&&setTimeout(()=>this.textareaRef.current.scrollTop=this.textareaRef.current.scrollHeight,100)})}catch(i){console.error(`Cannot parse response: ${i}`),this.setState({error:s},()=>this.setUpdating(!1))}else await this.checkVersion()||console.error(`Response is not JSON: ${s}`)}catch(t){this.state.starting||this.setState({error:t.toString()},()=>this.setUpdating(!1))}}waitForAdapterStart(){this.interval=setInterval(async()=>{try{await fetch(this.link),clearInterval(this.interval),this.interval=null,this.setState({upAgain:!0})}catch{}},1e3)}render(){var t,s,i,n,r;return e.jsxs(o.Dialog,{onClose:(a,c)=>{c!=="escapeKeyDown"&&c!=="backdropClick"&&this.props.onClose()},open:!0,maxWidth:"lg",fullWidth:!0,children:[e.jsx(o.DialogTitle,{children:w.t("Updating %s...","admin")}),e.jsxs(o.DialogContent,{style:{height:400,padding:"0 20px",overflow:"hidden"},children:[(!this.state.response||this.state.response.running)&&!this.state.error?e.jsx(o.LinearProgress,{}):null,this.state.response||this.state.error?e.jsx("textarea",{ref:this.textareaRef,style:{width:"100%",height:"100%",resize:"none",background:this.props.themeType==="dark"?"#000":"#fff",color:this.props.themeType==="dark"?"#EEE":"#111",boxSizing:"border-box",fontFamily:"Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace",border:(t=this.state.response)!=null&&t.success?"2px solid green":this.state.error||this.state.response&&!this.state.response.running&&!this.state.response.success?"2px solid red":void 0},value:this.state.error?this.state.error:this.state.response.stderr&&this.state.response.stderr.length?this.state.response.stderr.join(`
5
+ `):this.state.response.stdout.join(`
6
+ `),readOnly:!0}):null]}),e.jsx(o.DialogActions,{children:e.jsx(o.Button,{variant:"contained",disabled:this.state.starting||!this.state.error&&!this.state.upAgain,onClick:()=>{var a;(a=this.state.response)!=null&&a.success&&window.location.reload(),this.props.onClose()},color:(s=this.state.response)!=null&&s.success?"primary":"grey",startIcon:(i=this.state.response)!=null&&i.success?e.jsx(g.Refresh,{}):e.jsx(g.Close,{}),children:(n=this.state.response)!=null&&n.success&&!this.state.upAgain?e.jsx(o.CircularProgress,{}):(r=this.state.response)!=null&&r.success?w.t("Reload"):w.t("Close")})})]})}}const j={grow:{flexGrow:1},updateAllButton:p=>({position:"relative","& .admin-update-second-icon":{position:"absolute",top:15,left:15,opacity:.4,color:p.palette.mode==="dark"?"#aad5ff":"#007fff"}}),counters:{mr:"10px",minWidth:120,display:"flex","& div":{ml:"3px"}},infoAdapters:p=>({fontSize:10,color:p.palette.mode==="dark"?"#9c9c9c":"#333",cursor:"pointer"}),greenText:{color:"#00a005d1"},tooltip:{pointerEvents:"none"}},lt=[{name:"Description A-Z"},{name:"Name A-Z"},{name:"Popular first",notByList:!0},{name:"Recently updated",notByList:!0}];class D extends M{inputRef;countRef;t;wordCache={};cache={listOfVisibleAdapter:null,adapters:null};listOfVisibleAdapterLength=0;allAdapters=0;installedAdapters=0;recentUpdatedAdapters=0;uuid="";buildCacheTimer=null;updateTimeout=null;typingTimer=null;hostsTimer=null;onHostAdapterTimer=null;tempAdapters=null;tempInstalled=null;tempInstances=null;hostAdapterWorker=null;constructor(t){super(t),Object.assign(this.state,{lastUpdate:0,repository:{},installed:{},installedGlobal:{},adapters:{},compactInstances:{},categories:[],hostData:null,compactRepositories:null,hostOs:"",nodeJsVersion:"",init:!1,update:!1,filterConnectionType:!1,search:(window._localStorage||window.localStorage).getItem("Adapter.search")||"",oneListView:!1,tableViewMode:!1,updateList:!1,installedList:0,categoriesTiles:"All",filterTiles:"Description A-Z",gitHubInstallDialog:!1,updateAvailable:[],filteredList:null,showUpdater:!1,descWidth:300,showStatistics:!1,readTimeoutMs:st.getReadTimeoutMs(),showSlowConnectionWarning:!1,currentHost:t.currentHost,forceUpdateAdapters:t.forceUpdateAdapters,triggerUpdate:t.triggerUpdate,ratings:null,categoriesExpanded:{},adminUpgradeTo:""}),this.inputRef=N.createRef(),this.countRef=N.createRef(),this.t=this.translate}translate=(t,s,i)=>s!==void 0?this.props.t(t,s,i):(this.wordCache[t]||(this.wordCache[t]=this.props.t(t)),this.wordCache[t]);renderSlowConnectionWarning(){return this.state.showSlowConnectionWarning?e.jsx(st,{readTimeoutMs:this.state.readTimeoutMs,t:this.t,onClose:t=>{t?this.setState({showSlowConnectionWarning:!1,readTimeoutMs:t},()=>this.updateAll()):this.setState({showSlowConnectionWarning:!1})}}):null}async componentDidMount(){this.props.ready&&(this.hostAdapterWorker=new ot(this.props.socket,this.props.currentHost),this.hostAdapterWorker.registerHandler(this.onHostAdapterChanged),await this.hostAdapterWorker.getObjects(),await this.updateAll(),this.state.search&&this.filterAdapters(),this.props.adaptersWorker.registerHandler(this.onAdaptersChanged),this.props.instancesWorker.registerHandler(this.onAdaptersChanged))}async updateAll(t,s,i){await this.getAdapters(t,s,i),await this.getAdaptersInfo(t,i)}componentDidUpdate(){const t=this.getDescWidth();this.state.descWidth!==t&&this.setState({descWidth:t}),this.countRef.current&&(this.countRef.current.innerHTML=this.listOfVisibleAdapterLength.toString())}componentWillUnmount(){this.updateTimeout&&(clearTimeout(this.updateTimeout),this.updateTimeout=null),this.buildCacheTimer&&(clearTimeout(this.buildCacheTimer),this.buildCacheTimer=null),this.typingTimer&&(clearTimeout(this.typingTimer),this.typingTimer=null),this.hostsTimer&&(clearTimeout(this.hostsTimer),this.hostsTimer=null),this.onHostAdapterTimer&&(clearTimeout(this.onHostAdapterTimer),this.onHostAdapterTimer=null),this.props.adaptersWorker.unregisterHandler(this.onAdaptersChanged),this.props.instancesWorker.unregisterHandler(this.onAdaptersChanged),this.hostAdapterWorker.destroy(),this.hostAdapterWorker=null}onAdaptersChanged=t=>{this.tempAdapters=this.tempAdapters||JSON.parse(JSON.stringify(this.state.adapters||{})),this.tempInstalled=this.tempInstalled||JSON.parse(JSON.stringify(this.state.installed||{})),this.tempInstances=this.tempInstances||JSON.parse(JSON.stringify(this.state.compactInstances||{})),t.forEach(s=>{if(!!s.id.match(/\.\d+$/))s.type==="deleted"||!s.obj?delete this.tempInstances[s.id]:this.tempInstances[s.id]={enabled:s.obj.common.enabled,icon:s.obj.common.icon,name:s.obj.common.name,adminTab:s.obj.common.adminTab,version:s.obj.common.version};else if(s.type==="deleted"||!s.obj){const n=s.id.split(".");delete this.tempInstalled[n[2]],delete this.tempAdapters[s.id]}else{const n=s.obj.common.name;this.tempInstalled[n]?Object.keys(this.tempInstalled[n]).forEach(r=>{s.obj.common[r]!==void 0&&r!=="installedFrom"&&(this.tempInstalled[n][r]=s.obj.common[r])}):this.tempInstalled[s.id.split(".").pop()]=JSON.parse(JSON.stringify(s.obj.common)),this.tempAdapters[s.id]=s.obj}}),this.updateTimeout&&clearTimeout(this.updateTimeout),this.updateTimeout=setTimeout(()=>{this.updateTimeout=null;const s=this.tempAdapters;this.tempAdapters=null;const i=this.tempInstalled;this.tempInstalled=null;const n=this.tempInstances;this.tempInstances=null,this.analyseInstalled({adapters:s,installedLocal:i,cb:()=>this.calculateInfo(n)})},300)};analyseInstalled(t){let{adapters:s,repository:i}=t;const{cb:n,installedLocal:r}=t;let{installedGlobal:a}=t;s=s||this.state.adapters;const c=r||this.state.installed;a=a||this.state.installedGlobal,i=i||this.state.repository;const h=[];Object.keys(c).forEach(d=>{if(c[d]){const l=c[d].version,u=i[d];u&&u.version!==l&&dt.updateAvailable(l,u.version)&&!h.includes(d)&&h.push(d)}}),this.cache.listOfVisibleAdapter=null,this.setState({adapters:s,updateAvailable:h,installed:c,repository:i,installedGlobal:a},()=>n&&n())}async getInstalled(t){let s,i={};const n=await this.props.socket.getHosts(t);for(const r of n)try{const a=await this.props.socket.getState(`${r._id}.alive`);if(a!=null&&a.val){const c=await this.props.socket.getInstalled(r._id,t,this.state.readTimeoutMs);r._id===this.state.currentHost&&(s=c),i={...i,...c}}}catch(a){window.alert(`Cannot getInstalled from "${r._id}" (timeout ${this.state.readTimeoutMs}ms): ${a}`),a.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})}return{installedLocal:s,installedGlobal:i}}async getAdapters(t,s,i){console.log("[ADAPTERS] getAdapters");const n=this.state.currentHost;t=t||this.props.adaptersWorker.isForceUpdate(),!this.state.update&&(t||i)&&this.setState({update:!0});let r;try{r=await this.props.adaptersWorker.getObjects(t)||{}}catch(d){window.alert(`Cannot getAdapters: ${d}`)}const{installedLocal:a,installedGlobal:c}=await this.getInstalled(t);let h;try{h=await this.props.socket.getRepository(n,{repo:this.props.systemConfig.common.activeRepo,update:s||i},t,this.state.readTimeoutMs)}catch(d){window.alert(`Cannot getRepository: ${d}`),d.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})}return this.analyseInstalled({adapters:r,installedLocal:a,repository:h,installedGlobal:c})}getWordVotes(t){if(t===1)return this.t("vote");if(t>=2&&t<=4)return this.t("votes2");if(t>=5&&t<=20)return this.t("votes");const s=t%10;return s===1?this.t("vote21"):s>=2&&s<=4?this.t("votes2"):this.t("votes")}static getAdapterTitle(t,s,i){if(!s[t])return t;const n=s[t].titleLang||s[t].title;let r;return typeof n=="object"?r=n[i]||n.en:r=n,r=((r||"").toString()||"").replace("ioBroker Visualisation - ",""),r.toLowerCase()}static sortAdapters(t,s,i,n,r,a,c,h){const d={};t.sort((l,u)=>{if(a)return n[u].stat===n[l].stat?(d[l]=d[l]||D.getAdapterTitle(l,n,s),d[u]=d[u]||D.getAdapterTitle(u,n,s),d[l]>d[u]?1:d[l]<d[u]?-1:0):n[u].stat-n[l].stat;if(c)return n[l]?n[u]?n[l].daysAgo===n[u].daysAgo?(d[l]=d[l]||D.getAdapterTitle(l,n,s),d[u]=d[u]||D.getAdapterTitle(u,n,s),d[l]>d[u]?1:d[l]<d[u]?-1:0):n[l].daysAgo-n[u].daysAgo:1:-1;if(h){if(h[l].exact&&!h[u].exact)return-1;if(!h[l].exact&&h[u].exact)return 1}return i[l]&&i[u]?r?l>u?1:l<u?-1:0:(d[l]=d[l]||D.getAdapterTitle(l,n,s),d[u]=d[u]||D.getAdapterTitle(u,n,s),d[l]>d[u]?1:d[l]<d[u]?-1:0):i[l]?-1:i[u]?1:r?l>u?1:l<u?-1:0:(d[l]=d[l]||D.getAdapterTitle(l,n,s),d[u]=d[u]||D.getAdapterTitle(u,n,s),d[l]>d[u]?1:d[l]<d[u]?-1:0)})}calculateInfo(t,s,i,n){i=i||this.state.hostData,s=s||this.state.ratings,t=t||this.state.compactInstances,n!=null&&n._id||(n=this.state.compactRepositories);const r=this.state.adapters,a=JSON.parse(JSON.stringify(this.state.installed)),c=JSON.parse(JSON.stringify(this.state.repository)),h=((i==null?void 0:i["Node.js"])||"").replace("v",""),d=(i==null?void 0:i.os)||"",l={},u=[];let m={};try{m=JSON.parse((window._localStorage||window.localStorage).getItem("Adapters.expandedCategories"))||{}}catch{}Object.keys(a).forEach(f=>{var B,G;const y=a[f];(G=(B=r[f])==null?void 0:B.common)!=null&&G.ignoreVersion&&(y.ignoreVersion=r[f].common.ignoreVersion),!y.controller&&f!=="hosts"&&(c[f]||(c[f]=JSON.parse(JSON.stringify(y)),c[f].version="")),y.count=0,y.enabled=0}),Object.keys(t).forEach(f=>{const y=t[f].name;a[y]&&a[y].count++});const x=Date.now();this.recentUpdatedAdapters=0,this.installedAdapters=0,Object.keys(c).forEach(f=>{var G;if(f==="hosts"||f.startsWith("_"))return;const y=c[f];y.keywords&&(y.keywords=y.keywords.map(R=>R.toLowerCase()));const B=a[f];if(y.rating=s==null?void 0:s[f],(G=y.rating)!=null&&G.rating?y.rating.title=[`${this.t("Total rating:")} ${y.rating.rating.r} (${y.rating.rating.c} ${this.getWordVotes(y.rating.rating.c)})`,B&&B.version&&y.rating[B.version]?`${this.t("Rating for")} v${B.version}: ${y.rating[B.version].r} (${y.rating[B.version].c} ${this.getWordVotes(y.rating.rating.c)})`:""].filter(R=>R).join(`
7
+ `):y.rating={title:this.t("No rating or too few data")},!y.controller){const R=y.type,et=a[f];Math.round((x-new Date(y.versionDate).getTime())/864e5)<=31&&this.recentUpdatedAdapters++,a[f]&&this.installedAdapters++,l[R]?(l[R].count++,l[R].adapters.push(f),et&&l[R].installed++):l[R]={name:R,translation:this.t(`${R}_group`),count:1,installed:et?1:0,adapters:[f]}}}),Object.keys(l).sort((f,y)=>f==="general"&&y!=="general"?-1:f!=="general"&&y==="general"||l[f].translation>l[y].translation?1:l[f].translation<l[y].translation?-1:0).forEach(f=>u.push(l[f]));const v=this.state.filterTiles==="Name A-Z";Object.keys(l).forEach(f=>D.sortAdapters(l[f].adapters,this.props.lang,a,c,v));let b=0;try{b=JSON.parse((window._localStorage||window.localStorage).getItem("Adapters.installedList")),b===!1&&(b=0)}catch{}const I=(window._localStorage||window.localStorage).getItem("Adapters.list")==="true",T=(window._localStorage||window.localStorage).getItem("Adapters.viewMode")==="true",O=(window._localStorage||window.localStorage).getItem("Adapters.updateList")==="true",H=(window._localStorage||window.localStorage).getItem("Adapters.categoriesTiles")||"All";let P=(window._localStorage||window.localStorage).getItem("Adapters.filterTiles")||"Description A-Z";return P==="A-Z"&&(P="Description A-Z"),this.allAdapters=Object.keys(c).length-1,this.cache.listOfVisibleAdapter=null,new Promise(f=>{this.setState({repository:c,installed:a,ratings:s,filterTiles:P,categoriesTiles:H,compactRepositories:n,installedList:b,compactInstances:t,updateList:O,tableViewMode:T,oneListView:I,lastUpdate:Date.now(),hostData:i,hostOs:d,nodeJsVersion:h,categories:u,categoriesExpanded:m,init:!0,update:!1},()=>f())})}async getAdaptersInfo(t,s){var i;if(this.state.currentHost&&Date.now()-this.state.lastUpdate>1e3){console.log("[ADAPTERS] getAdaptersInfo");const n=this.state.currentHost;let r;try{(!this.state.update||s)&&await new Promise(l=>{this.setState({update:!0},()=>l())});const a=await this.props.socket.getHostInfo(n,t,this.state.readTimeoutMs).catch(l=>{window.alert(`Cannot getHostInfo for "${n}": ${l}`),l.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})});if(((i=this.props.adminGuiConfig.admin.adapters)==null?void 0:i.allowAdapterRating)!==!1){try{r=await this.props.socket.getRatings(t)}catch(l){window.alert(`Cannot read ratings: ${l}`)}this.uuid=(r==null?void 0:r.uuid)||null}else r=null;const c=await this.props.socket.getCompactInstances(t).catch(l=>(window.alert(`Cannot read countsOfInstances: ${l}`),{})),d=await this.props.socket.getCompactSystemRepositories(t).catch(l=>(window.alert(`Cannot read getCompactSystemRepositories: ${l}`),{}));await this.calculateInfo(c||{},r,a,d)}catch(a){window.alert(`Cannot get adapters info: ${a}`)}}}toggleCategory(t){this.setState(s=>{const i=s.categoriesExpanded;return i[t]=!i[t],(window._localStorage||window.localStorage).setItem("Adapters.expandedCategories",JSON.stringify(i)),{categoriesExpanded:i}})}rightDependencies=t=>{const s=this.state.repository[t];let i=!0;if(s){const n=s.dependencies,r=s.node;if(n)if(n instanceof Array)n.forEach(c=>{const h=typeof c!="string",d=Object.keys(c),l=h?d?d[0]:null:c;if(i&&l){const u=this.state.installed[l];try{i=u?h?V.satisfies(u.version,c[l],{includePrerelease:!0}):!0:!1}catch{i=!0}}});else if(typeof n=="object"){const c=n;Object.keys(c).forEach(h=>{if(h&&c[h]!==void 0&&i){const d=this.state.installed[h],l=typeof c[h]=="string";try{i=d?l?V.satisfies(d.version,c[h],{includePrerelease:!0}):!0:!1}catch{i=!0}}})}else console.error(`[ADAPTERS] Invalid dependencies for ${t}: ${JSON.stringify(n)}`);const a=s.ifInstalledDependencies;if(a&&typeof a=="object"&&!Array.isArray(a)&&Object.keys(a).forEach(h=>{if(i&&h){const d=this.state.installed[h];try{i=d?V.satisfies(d.version,a[h],{includePrerelease:!0}):!0}catch{i=!0}}}),i&&r)try{i=V.satisfies(this.state.nodeJsVersion,r)}catch{i=!0}}return i};rightOs(t){const s=this.state.repository[t];return s!=null&&s.os?Array.isArray(s.os)?!!s.os.find(i=>this.state.hostOs===i):this.state.hostOs===s.os:!0}handleFilterChange(t){this.typingTimer&&clearTimeout(this.typingTimer),this.typingTimer=setTimeout(s=>{(window._localStorage||window.localStorage).setItem("Adapter.search",s||""),this.typingTimer=null,this.filterAdapters(s)},300,t.target.value)}expandAll(){this.setState(t=>{const s=t.categories,i=t.categoriesExpanded;return s.forEach(n=>i[n.name]=!0),(window._localStorage||window.localStorage).setItem("Adapters.expandedCategories",JSON.stringify(i)),{categoriesExpanded:i}})}collapseAll(){const t={};(window._localStorage||window.localStorage).setItem("Adapters.expandedCategories",JSON.stringify(t)),this.setState({categoriesExpanded:t})}listTable(){const t=!this.state.oneListView;t&&this.expandAll(),(window._localStorage||window.localStorage).setItem("Adapters.list",t?"true":"false"),this.setState({oneListView:t})}changeViewMode(){this.cache.listOfVisibleAdapter=null;const t=!this.state.tableViewMode;let s=this.state.filterTiles;t&&s!=="Description A-Z"&&s!=="Name A-Z"&&(s="Description A-Z",(window._localStorage||window.localStorage).setItem("Adapters.filterTiles",s)),(window._localStorage||window.localStorage).setItem("Adapters.viewMode",t?"true":"false"),this.setState({tableViewMode:t,filterTiles:s})}changeUpdateList(){this.cache.listOfVisibleAdapter=null;const t=!this.state.updateList;(window._localStorage||window.localStorage).setItem("Adapters.updateList",t?"true":"false"),this.setState({updateList:t})}changeInstalledList(t){this.cache.listOfVisibleAdapter=null;let s=this.state.installedList?this.state.installedList<2?2:0:1;!s&&t&&(s=1),(window._localStorage||window.localStorage).setItem("Adapters.installedList",JSON.stringify(s)),this.setState({installedList:s})}changeFilterTiles(t){this.cache.listOfVisibleAdapter=null,(window._localStorage||window.localStorage).setItem("Adapters.filterTiles",t),this.setState({filterTiles:t})}changeCategoriesTiles(t){this.cache.listOfVisibleAdapter=null,(window._localStorage||window.localStorage).setItem("Adapters.categoriesTiles",t),this.setState({categoriesTiles:t})}filterAdapters(t){t=t===void 0?this.state.search:t,t=(t||"").toLowerCase().trim();let s={};t?this.state.categories.forEach(i=>i.adapters.forEach(n=>{var d;const r=this.state.repository[n];if(!r)return;let a,c;const h=r.titleLang||r.title;typeof h=="object"?a=h[this.props.lang]||h.en:a=h,a=((a||"").toString()||"").replace("ioBroker Visualisation - ",""),r.desc?typeof r.desc=="string"?c=r.desc:c=r.desc[this.props.lang]||r.desc.en||"":c="",n.includes(t)?s[n]={exact:n===t,type:"name",start:n.startsWith(t)}:a&&typeof a=="string"&&a.toLowerCase().includes(t)?s[n]={exact:!1,type:"title"}:c&&typeof c=="string"&&c.toLowerCase().includes(t)?s[n]={exact:!1,type:"desc"}:(d=r.keywords)!=null&&d.find(l=>l.includes(t))&&(s[n]={exact:!1,type:"keywords"})})):s=null,this.setState({filteredList:s,search:t},()=>{this.cache.listOfVisibleAdapter=null,this.forceUpdate()})}onHostAdapterChanged=t=>{this.onHostAdapterTimer&&clearTimeout(this.onHostAdapterTimer),this.onHostAdapterTimer=setTimeout(()=>{this.onHostAdapterTimer=null,this.cache.listOfVisibleAdapter=null,this.forceUpdate()},200)};clearAllFilters(t){t?((window._localStorage||window.localStorage).removeItem("Adapters.updateList"),this.setState({updateList:!1},()=>this.filterAdapters())):((window._localStorage||window.localStorage).removeItem("Adapter.search"),(window._localStorage||window.localStorage).removeItem("Adapters.installedList"),(window._localStorage||window.localStorage).removeItem("Adapters.updateList"),this.inputRef.current&&(this.inputRef.current.value=""),this.setState({filteredList:null,updateList:!1,filterConnectionType:!1,installedList:0,search:""},()=>this.filterAdapters()))}getContext(t){return{expertMode:this.props.expertMode,t:this.t,socket:this.props.socket,removeUpdateAvailable:s=>{const i=[...this.state.updateAvailable],n=i.indexOf(s);n!==-1&&(i.splice(n,1),this.setState({updateAvailable:i}))},toggleTranslation:this.props.toggleTranslation,rightDependenciesFunc:this.rightDependencies,lang:this.props.lang,uuid:this.uuid,themeType:this.props.themeType,theme:this.props.theme,onUpdating:this.props.onUpdating,repository:this.state.repository,installed:this.state.installed,installedGlobal:this.state.installedGlobal,compactInstances:this.state.compactInstances||{},adapters:this.state.adapters,nodeJsVersion:this.state.nodeJsVersion,currentHost:this.state.currentHost,adminHost:this.props.adminHost,adminInstance:this.props.adminInstance,instancesWorker:this.props.instancesWorker,hostsWorker:this.props.hostsWorker,executeCommand:this.props.executeCommand,categories:this.state.categories,descHidden:t,sortPopularFirst:!this.state.tableViewMode&&this.state.filterTiles==="Popular first",sortRecentlyUpdated:!this.state.tableViewMode&&this.state.filterTiles==="Recently updated",isTileView:!this.state.tableViewMode,updateRating:(s,i)=>{const n=JSON.parse(JSON.stringify(this.state.repository));Object.assign(n[s].rating,i),this.setState({repository:n})},setAdminUpgradeTo:this.setAdminUpgradeTo,hostAdapterWorker:this.hostAdapterWorker}}setAdminUpgradeTo=t=>this.setState({adminUpgradeTo:t});buildCache(t){this.cache.listOfVisibleAdapter=[],this.cache.adapters={};const s=Date.now(),i=this.t("0 %d days ago"),n=this.t("1 %d days ago"),r=this.t("2 %d days ago"),a=this.t("5 %d days ago");this.state.categories.filter(h=>this.state.tableViewMode||!this.state.categoriesTiles||this.state.categoriesTiles==="All"||h.name===this.state.categoriesTiles).forEach(h=>h.adapters.forEach(d=>{var u;const l=this.state.repository[d];if(l&&!l.controller){const m=l.connectionType?l.connectionType:"-",x=this.state.updateAvailable.includes(d),v=this.state.installed[d];let b=!this.state.filteredList||!!this.state.filteredList[d];if(b&&this.state.filterConnectionType&&(b=m==="local"),b&&this.state.updateList&&(b=x),b&&this.state.installedList&&(b=this.state.installedList<2?!!(v&&v.version):!!(v&&v.version&&!v.count)),b){this.cache.listOfVisibleAdapter.push(d);const I=Math.round((s-new Date(l.versionDate).getTime())/864e4),T=Math.round(I/10),O=l.titleLang||l.title;let H;O&&typeof O=="object"?H=O[this.props.lang]||O.en:H=O||d,H=((H||"").toString()||"").replace("ioBroker Visualisation - ","");let P;l.desc?typeof l.desc=="string"?P=l.desc:P=l.desc[this.props.lang]||l.desc.en||"":P="";const f=T%100<=10||T%100>=20?T%10:5;this.cache.adapters[d]={title:H,desc:P,image:v&&this.state.adapters[`system.adapter.${d}`]?`.${v.localIcon}`:l.extIcon,connectionType:l.connectionType?l.connectionType:"-",updateAvailable:this.state.updateAvailable.includes(d),rightDependencies:this.rightDependencies(d),rightOs:this.rightOs(d),sentry:!!((u=l.plugins)!=null&&u.sentry),daysAgo:I,stat:l.stat||0,daysAgoText:T||T===0?T===0?i:f===1?n.replace("%d",T.toString()):f===2||f===3||f===4?r.replace("%d",T.toString()):a.replace("%d",T.toString()):""}}}})),this.listOfVisibleAdapterLength=this.cache.listOfVisibleAdapter.length;const c=this.state.filterTiles==="Name A-Z";this.state.tableViewMode&&this.state.categories.forEach(h=>D.sortAdapters(h.adapters,this.props.lang,this.state.installed,this.cache.adapters,c)),D.sortAdapters(this.cache.listOfVisibleAdapter,this.props.lang,this.state.installed,this.cache.adapters,c,t.sortPopularFirst,t.sortRecentlyUpdated,this.state.filteredList),console.log(`[ADAPTERS] ${new Date().toISOString()} Update cache!`),this.forceUpdate()}getUpdater(){return this.state.showUpdater?e.jsx(Vt,{theme:this.props.theme,onSetCommandRunning:t=>this.props.onSetCommandRunning(t),t:this.props.t,currentHost:this.state.currentHost,lang:this.props.lang,installed:this.state.installed,repository:this.state.repository,toggleTranslation:this.props.toggleTranslation,noTranslation:this.props.noTranslation,onClose:t=>this.setState({showUpdater:!1},()=>t&&this.updateAll(!0,!1)),socket:this.props.socket,rightDependenciesFunc:this.rightDependencies}):null}getDescWidth(){return this.props.menuOpened?document.body.scrollWidth-J-180+13:this.props.menuClosed?document.body.scrollWidth-J:document.body.scrollWidth-J-50+13}getStatistics(){return this.state.showStatistics?e.jsxs(o.Dialog,{open:!0,onClose:()=>this.setState({showStatistics:!1}),children:[e.jsx(o.DialogTitle,{children:this.t("Statistics")}),e.jsxs(o.DialogContent,{style:{fontSize:16},children:[e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Total adapters"),":"," ",e.jsx("span",{style:{paddingLeft:6,fontWeight:"bold"},children:this.allAdapters})]}),e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Installed adapters"),":"," ",e.jsx("span",{style:{paddingLeft:6,fontWeight:"bold"},children:this.installedAdapters})]}),e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Last month updated adapters"),":"," ",e.jsx("span",{style:{paddingLeft:6,fontWeight:"bold"},children:this.recentUpdatedAdapters})]})]}),e.jsx(o.DialogActions,{children:e.jsx(o.Button,{variant:"contained",onClick:()=>this.setState({showStatistics:!1}),color:"primary",autoFocus:!0,startIcon:e.jsx(g.Close,{}),children:this.props.t("Close")})})]}):null}renderGitHubInstallDialog(t){return this.state.gitHubInstallDialog?e.jsx(Nt,{t:this.t,categories:this.state.categories,installed:this.state.installedGlobal,upload:s=>this.props.executeCommand(`upload ${s}${this.props.expertMode?" --debug":""}`),installFromUrl:(s,i,n)=>this.addInstance({adapterName:s,debug:i,customUrl:n,context:t}),repository:this.state.repository,onClose:()=>{this.setState({gitHubInstallDialog:!1})}}):null}renderRepositoryTimestamp(){var h,d,l,u;const t=(d=(h=this.state.compactRepositories)==null?void 0:h.native)==null?void 0:d.repositories;if(!t)return null;let s=null,i=null;const n=[];if(typeof this.props.systemConfig.common.activeRepo=="string"){const m=(u=(l=t[this.props.systemConfig.common.activeRepo])==null?void 0:l.json)==null?void 0:u._repoInfo;if(m){s=m.repoTime||null,i=m.repoReadTime||null;const x=this.getRepositoryName(m);x&&n.push(x)}}else if(Array.isArray(this.props.systemConfig.common.activeRepo)){let m=null,x=null;this.props.systemConfig.common.activeRepo.forEach(v=>{var I,T;const b=(T=(I=t[v])==null?void 0:I.json)==null?void 0:T._repoInfo;if(b){const O=this.getRepositoryName(b);O&&n.push(O),b.repoTime&&(!m||new Date(b.repoTime)<new Date(m))&&(m=b.repoTime),b.repoReadTime&&(!x||new Date(b.repoReadTime)<new Date(x))&&(x=b.repoReadTime)}}),s=m,i=x}const r=i||s;if(!r)return null;const a=this.formatRepositoryTimestamp(r);let c="";return n.length>1?c=this.t("Repository timestamps (oldest from %s):",n.join(", ")):c=this.t("Repository timestamps:"),s&&(c+=`
8
+ ${this.t("Generated: %s",this.formatRepositoryTimestamp(s))}`),i&&(c+=`
9
+ ${this.t("Last read: %s",this.formatRepositoryTimestamp(i))}`),e.jsx(o.Tooltip,{title:c,slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.Box,{component:"div",sx:{display:"flex",alignItems:"center",marginLeft:1,fontSize:"0.75rem",color:"text.secondary",cursor:"help",whiteSpace:"nowrap"},children:a})})}getRepositoryName(t){return t!=null&&t.name?typeof t.name=="object"?t.name[this.props.lang]||t.name.en:t.name:null}formatRepositoryTimestamp(t){try{const s=new Date(t),n=new Date().getTime()-s.getTime(),r=Math.floor(n/6e4),a=Math.floor(r/60),c=Math.floor(a/24);return r<60?this.t("%s minutes ago",r.toString()):a<24?this.t("%s hours ago",a.toString()):c<30?this.t("%s days ago",c.toString()):s.toLocaleDateString(this.props.lang||"en")}catch{return t}}renderHeader(){var s;let t=!this.props.commandRunning&&!!this.props.ready&&!!this.state.updateList&&this.state.updateAvailable.length>1;return t&&this.state.updateAvailable.length===2&&this.state.updateAvailable.includes("admin")&&(t=!1),e.jsxs(Tt,{children:[e.jsx(o.Tooltip,{title:this.t("Change view mode"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.changeViewMode(),children:this.state.tableViewMode?e.jsx(g.ViewModule,{}):e.jsx(g.ViewList,{})})}),e.jsx(o.Tooltip,{title:this.t("Check adapter for updates"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.updateAll(!0,!0),children:e.jsx(g.Refresh,{})})}),this.renderRepositoryTimestamp(),this.state.tableViewMode&&!this.state.oneListView&&e.jsx(o.Tooltip,{title:this.t("expand all"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.expandAll(),children:e.jsx(g.FolderOpen,{})})}),this.state.tableViewMode&&!this.state.oneListView&&e.jsx(o.Tooltip,{title:this.t("collapse all"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.collapseAll(),children:e.jsx(g.Folder,{})})}),this.state.tableViewMode&&e.jsx(o.Tooltip,{title:this.t("list"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.listTable(),children:e.jsx(g.List,{color:this.state.oneListView?"primary":"inherit"})})}),this.state.updateList?e.jsx(o.IconButton,{size:"large",onClick:()=>this.changeInstalledList(!0),children:e.jsx(g.Star,{color:"primary",style:{opacity:.3,color:this.state.installedList===2?"red":void 0}})}):e.jsx(o.Tooltip,{slotProps:{popper:{sx:j.tooltip}},title:this.t(this.state.installedList?this.state.installedList===1?"Showed only installed adapters":"Showed only installed adapters without instance.":"Show only installed"),children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.changeInstalledList(),children:e.jsx(g.Star,{style:this.state.installedList===2?{color:"red"}:null,color:this.state.installedList===1?"primary":"inherit"})})}),e.jsx(U,{config:this.props.adminGuiConfig.admin,name:"admin.adapters.filterUpdates",children:e.jsx(o.Tooltip,{title:this.t("Filter adapter with updates"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.changeUpdateList(),children:e.jsx(g.Update,{color:this.state.updateList?"primary":"inherit"})})})}),t&&e.jsx(o.Tooltip,{title:this.t("Update all adapters"),slotProps:{popper:{sx:j.tooltip}},children:e.jsxs(o.IconButton,{size:"large",onClick:()=>this.setState({showUpdater:!0}),sx:j.updateAllButton,children:[e.jsx(g.Update,{}),e.jsx(g.Update,{className:"admin-update-second-icon"})]})}),this.props.expertMode&&((s=this.props.adminGuiConfig.admin)==null?void 0:s.adapters.gitHubInstall)!==!1&&e.jsx(o.Tooltip,{title:this.t("Install from custom URL"),slotProps:{popper:{sx:j.tooltip}},children:e.jsx(o.IconButton,{size:"large",onClick:()=>this.setState({gitHubInstallDialog:!0}),children:e.jsx(ct,{})})}),e.jsx("div",{style:j.grow}),e.jsx(o.TextField,{variant:"standard",inputRef:this.inputRef,label:this.t("Filter by name"),defaultValue:this.state.search,onChange:i=>this.handleFilterChange(i),slotProps:{input:{endAdornment:this.state.search?e.jsx(o.InputAdornment,{position:"end",children:e.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>{(window._localStorage||window.localStorage).removeItem("Adapter.search"),this.inputRef.current.value="",this.setState({search:""},()=>this.filterAdapters())},children:e.jsx(g.Close,{})})}):null}}}),!this.state.tableViewMode&&e.jsx(it,{t:this.t,icons:!0,contained:this.state.categoriesTiles!=="All",translateSuffix:"_group",arrayItem:[{name:"All"},...this.state.categories],onClick:i=>this.changeCategoriesTiles(i),value:this.state.categoriesTiles}),e.jsx(it,{t:this.t,arrayItem:this.state.tableViewMode?lt.filter(i=>!i.notByList):lt,onClick:i=>this.changeFilterTiles(i),value:this.state.filterTiles}),e.jsx("div",{style:j.grow}),e.jsx(U,{config:this.props.adminGuiConfig.admin,name:"admin.adapters.statistics",children:e.jsxs(o.Box,{component:"div",sx:L.getStyle(this.props.theme,j.infoAdapters,{display:{sm:"none",md:"inline-block"}}),onClick:()=>this.setState({showStatistics:!0}),children:[e.jsxs(o.Box,{component:"div",sx:{...j.counters,...j.greenText},children:[this.t("Selected adapters"),e.jsx("div",{ref:this.countRef})]}),e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Total adapters"),":",e.jsx("div",{children:this.allAdapters})]}),e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Installed adapters"),":",e.jsx("div",{children:this.installedAdapters})]}),e.jsxs(o.Box,{component:"div",sx:j.counters,children:[this.t("Last month updated adapters"),":",e.jsx("div",{children:this.recentUpdatedAdapters})]})]})})]})}renderWebserverUpgrade(){return this.state.adminUpgradeTo?e.jsx(zt,{socket:this.props.socket,themeType:this.props.themeType,host:this.props.adminHost,onClose:()=>{console.log("Close dialog"),this.setState({adminUpgradeTo:"",showDialog:!1})},version:this.state.adminUpgradeTo,adminInstance:this.props.adminInstance,onUpdating:t=>{this.props.onUpdating(t)},currentAdminVersion:this.props.currentAdminVersion}):null}render(){var r,a,c,h,d,l,u;if(!this.state.init)return e.jsx(o.LinearProgress,{});this.state.triggerUpdate!==this.props.triggerUpdate&&setTimeout(()=>{this.setState({triggerUpdate:this.props.triggerUpdate},()=>this.updateAll(!0))},100),(this.props.currentHost!==this.state.currentHost||this.props.forceUpdateAdapters!==this.state.forceUpdateAdapters)&&(this.hostsTimer=this.hostsTimer||setTimeout(()=>{this.hostsTimer=null,this.setState({currentHost:this.props.currentHost,forceUpdateAdapters:this.props.forceUpdateAdapters},async()=>{this.hostAdapterWorker.getHost()!==this.props.currentHost&&(this.hostAdapterWorker.destroy(),this.hostAdapterWorker=new ot(this.props.socket,this.props.currentHost),this.hostAdapterWorker.registerHandler(this.onHostAdapterChanged),await this.hostAdapterWorker.getObjects()),await this.updateAll(!1,!1,!0)})},200));let t=L.isStableRepository(this.props.systemConfig.common.activeRepo);const s=(a=(r=this.state.compactRepositories)==null?void 0:r.native)==null?void 0:a.repositories;s&&this.props.systemConfig.common.activeRepo&&(Array.isArray(this.props.systemConfig.common.activeRepo)?t=this.props.systemConfig.common.activeRepo.every(m=>{var x,v,b;return m.toLowerCase().startsWith("stable")||((b=(v=(x=s[m])==null?void 0:x.json)==null?void 0:v._repoInfo)==null?void 0:b.stable)}):typeof this.props.systemConfig.common.activeRepo=="string"&&(t=this.props.systemConfig.common.activeRepo.toLowerCase().startsWith("stable")||((d=(h=(c=s[this.props.systemConfig.common.activeRepo])==null?void 0:c.json)==null?void 0:h._repoInfo)==null?void 0:d.stable)));let i;if(!t)if(i=Array.isArray(this.props.systemConfig.common.activeRepo)?this.props.systemConfig.common.activeRepo.join(", "):this.props.systemConfig.common.activeRepo,typeof this.props.systemConfig.common.activeRepo=="string"){const m=s&&((u=(l=s[this.props.systemConfig.common.activeRepo])==null?void 0:l.json)==null?void 0:u._repoInfo);m!=null&&m.name&&(m.name&&typeof m.name=="object"?i=m.name[this.props.lang]||m.name.en:i=m.name)}else this.props.systemConfig.common.activeRepo&&typeof this.props.systemConfig.common.activeRepo!="string"&&(i=this.props.systemConfig.common.activeRepo.map(m=>{var v,b;const x=s&&((b=(v=s[m])==null?void 0:v.json)==null?void 0:b._repoInfo);return x!=null&&x.name?x.name&&typeof x.name=="object"?x.name[this.props.lang]||x.name.en:x.name:m}).join(", "));const n=this.getContext(this.state.descWidth<50);return this.cache.listOfVisibleAdapter||(this.buildCacheTimer=this.buildCacheTimer||setTimeout(()=>{this.buildCacheTimer=null,this.buildCache(n)},0)),e.jsxs(At,{children:[this.state.update&&e.jsx(o.Grid2,{children:e.jsx(o.LinearProgress,{})}),this.renderHeader(),e.jsx(Gt,{stableRepo:t,repoName:i,context:n,noTranslation:this.props.noTranslation,systemConfig:this.props.systemConfig,tableViewMode:this.state.tableViewMode,oneListView:this.state.oneListView,update:this.state.update,updateListFilter:this.state.updateList,searchFilter:this.state.search,installedListFilter:this.state.installedList,cachedAdapters:this.cache.adapters,categories:this.state.categories,categoriesExpanded:this.state.categoriesExpanded,listOfVisibleAdapter:this.cache.listOfVisibleAdapter,toggleCategory:m=>this.toggleCategory(m),clearAllFilters:m=>this.clearAllFilters(m),descWidth:this.state.descWidth,sortByName:this.state.filterTiles==="Name A-Z",sortPopularFirst:n.sortPopularFirst,sortRecentlyUpdated:n.sortRecentlyUpdated,commandRunning:this.props.commandRunning}),this.getUpdater(),this.getStatistics(),this.renderSlowConnectionWarning(),this.renderGitHubInstallDialog(n),this.renderWebserverUpgrade(),this.renderDialogs(n)]})}}export{D as default};