zigbee2mqtt-windfront 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/README.md +1 -3
  2. package/dist/assets/{About-CjM5WomG.js → About-4agra-GV.js} +2 -2
  3. package/dist/assets/About-4agra-GV.js.br +0 -0
  4. package/dist/assets/Availability-Y2hfFgNf.js +1 -0
  5. package/dist/assets/Availability-Y2hfFgNf.js.br +0 -0
  6. package/dist/assets/Bind-Bc4tRdR2.js +1 -0
  7. package/dist/assets/Bind-Bc4tRdR2.js.br +0 -0
  8. package/dist/assets/Bridge-LybRVH8O.js +1 -0
  9. package/dist/assets/Bridge-LybRVH8O.js.br +0 -0
  10. package/dist/assets/{CheckboxField-De0QHbsG.js → CheckboxField-c8y6Hi-x.js} +1 -1
  11. package/dist/assets/CheckboxField-c8y6Hi-x.js.br +0 -0
  12. package/dist/assets/{ClusterSinglePicker-Di8d-bx5.js → ClusterSinglePicker-2WbdnphV.js} +1 -1
  13. package/dist/assets/ClusterSinglePicker-2WbdnphV.js.br +0 -0
  14. package/dist/assets/{Clusters-EXal5imX.js → Clusters-BUBvyVhe.js} +1 -1
  15. package/dist/assets/Clusters-BUBvyVhe.js.br +0 -0
  16. package/dist/assets/Dashboard-DJeYXVH8.js +1 -0
  17. package/dist/assets/Dashboard-DJeYXVH8.js.br +0 -0
  18. package/dist/assets/{DashboardFeatureWrapper-TlB_F76s.js → DashboardFeatureWrapper-BZFJ0bd5.js} +1 -1
  19. package/dist/assets/DashboardFeatureWrapper-BZFJ0bd5.js.br +0 -0
  20. package/dist/assets/{DebouncedInput-C8tkXJ7U.js → DebouncedInput-DTeMxENR.js} +1 -1
  21. package/dist/assets/DebouncedInput-DTeMxENR.js.br +0 -0
  22. package/dist/assets/DevConsole-DJyJeofX.js +20 -0
  23. package/dist/assets/DevConsole-DJyJeofX.js.br +0 -0
  24. package/dist/assets/{DevConsole-BCcxO2rX.js → DevConsole-wRVw8Cq_.js} +1 -1
  25. package/dist/assets/DevConsole-wRVw8Cq_.js.br +0 -0
  26. package/dist/assets/DeviceCard-BrVsgP8G.js +1 -0
  27. package/dist/assets/DeviceCard-BrVsgP8G.js.br +0 -0
  28. package/dist/assets/{DeviceControlEditName-BObC136U.js → DeviceControlEditName-B8o0IduC.js} +1 -1
  29. package/dist/assets/DeviceControlEditName-B8o0IduC.js.br +0 -0
  30. package/dist/assets/DeviceImage-DEOMWWIY.js +1 -0
  31. package/dist/assets/DeviceImage-DEOMWWIY.js.br +0 -0
  32. package/dist/assets/{DeviceInfo-V522QLe7.js → DeviceInfo-kYR-Fqd1.js} +2 -2
  33. package/dist/assets/DeviceInfo-kYR-Fqd1.js.br +0 -0
  34. package/dist/assets/DevicePage-C7MMwXoy.js +2 -0
  35. package/dist/assets/DevicePage-C7MMwXoy.js.br +0 -0
  36. package/dist/assets/{DevicePicker-DUSP1774.js → DevicePicker-u_bCapsU.js} +1 -1
  37. package/dist/assets/DevicePicker-u_bCapsU.js.br +0 -0
  38. package/dist/assets/{DeviceSettings-BPsmP0OM.js → DeviceSettings-r4QQ16Y_.js} +1 -1
  39. package/dist/assets/DeviceSettings-r4QQ16Y_.js.br +0 -0
  40. package/dist/assets/{DeviceSpecificSettings-eDupl8hE.js → DeviceSpecificSettings-DB58V_mT.js} +1 -1
  41. package/dist/assets/DeviceSpecificSettings-DB58V_mT.js.br +0 -0
  42. package/dist/assets/Devices-DfNm8Rdn.js +1 -0
  43. package/dist/assets/Devices-DfNm8Rdn.js.br +0 -0
  44. package/dist/assets/{DevicesPage-DCVj8eRe.js → DevicesPage-BQiqyniU.js} +1 -1
  45. package/dist/assets/DevicesPage-BQiqyniU.js.br +0 -0
  46. package/dist/assets/{DisplayValue-CfKoGI0j.js → DisplayValue-Bu9bCcMH.js} +1 -1
  47. package/dist/assets/DisplayValue-Bu9bCcMH.js.br +0 -0
  48. package/dist/assets/{Donate-B_P_Qsjc.js → Donate-CRlQpgvc.js} +1 -1
  49. package/dist/assets/Donate-CRlQpgvc.js.br +0 -0
  50. package/dist/assets/{EndpointPicker-CKjImsmQ.js → EndpointPicker-Bah7UQwn.js} +1 -1
  51. package/dist/assets/EndpointPicker-Bah7UQwn.js.br +0 -0
  52. package/dist/assets/{Exposes-CY4p-R2G.js → Exposes-D-oJ8AUZ.js} +1 -1
  53. package/dist/assets/Exposes-D-oJ8AUZ.js.br +0 -0
  54. package/dist/assets/Feature-w83aNOC8.js +1 -0
  55. package/dist/assets/Feature-w83aNOC8.js.br +0 -0
  56. package/dist/assets/{Frontend-V9wqeWFl.js → Frontend-LFh1gxKL.js} +1 -1
  57. package/dist/assets/Frontend-LFh1gxKL.js.br +0 -0
  58. package/dist/assets/GroupPage-CinFVcrB.js +2 -0
  59. package/dist/assets/GroupPage-CinFVcrB.js.br +0 -0
  60. package/dist/assets/{GroupSettings-C9hZwz-c.js → GroupSettings-CNbZmiPj.js} +1 -1
  61. package/dist/assets/GroupSettings-CNbZmiPj.js.br +0 -0
  62. package/dist/assets/{Groups-BBXSMxiv.js → Groups-Bb0Ru3Zf.js} +1 -1
  63. package/dist/assets/Groups-Bb0Ru3Zf.js.br +0 -0
  64. package/dist/assets/{GroupsPage-Bjp4L8m8.js → GroupsPage-D4PCV1bo.js} +1 -1
  65. package/dist/assets/GroupsPage-D4PCV1bo.js.br +0 -0
  66. package/dist/assets/{Health-DaYm6W6j.js → Health-OnUE9QWE.js} +1 -1
  67. package/dist/assets/Health-OnUE9QWE.js.br +0 -0
  68. package/dist/assets/HomePage-Djij8p1L.js +1 -0
  69. package/dist/assets/HomePage-Djij8p1L.js.br +0 -0
  70. package/dist/assets/{InputField-D4dIbfoE.js → InputField-jq2OxQIa.js} +1 -1
  71. package/dist/assets/InputField-jq2OxQIa.js.br +0 -0
  72. package/dist/assets/{Json-CL1gHmYN.js → Json-DCzRwgfL.js} +1 -1
  73. package/dist/assets/Json-DCzRwgfL.js.br +0 -0
  74. package/dist/assets/{LastSeen-CUs1Vb2e.js → LastSeen-B1biXrw2.js} +1 -1
  75. package/dist/assets/LastSeen-B1biXrw2.js.br +0 -0
  76. package/dist/assets/{LogsPage-Rn9K7jry.js → LogsPage-DM61Tzgs.js} +1 -1
  77. package/dist/assets/LogsPage-DM61Tzgs.js.br +0 -0
  78. package/dist/assets/{Lqi-DXzNBOZd.js → Lqi-CRLHxVMN.js} +1 -1
  79. package/dist/assets/Lqi-CRLHxVMN.js.br +0 -0
  80. package/dist/assets/{NetworkPage-B-vdyAjg.js → NetworkPage-DaFugp_C.js} +2 -2
  81. package/dist/assets/NetworkPage-DaFugp_C.js.br +0 -0
  82. package/dist/assets/{NumberField-1g9cUedG.js → NumberField-CV22qokC.js} +1 -1
  83. package/dist/assets/NumberField-CV22qokC.js.br +0 -0
  84. package/dist/assets/{OtaPage-xoAmQlkN.js → OtaPage-ClJoXAFj.js} +1 -1
  85. package/dist/assets/OtaPage-ClJoXAFj.js.br +0 -0
  86. package/dist/assets/{PowerSource-DHbzVhTD.js → PowerSource-B-NPFalK.js} +1 -1
  87. package/dist/assets/PowerSource-B-NPFalK.js.br +0 -0
  88. package/dist/assets/{RawNetworkData-BA35YEdR.js → RawNetworkData-CR2PHbul.js} +9 -9
  89. package/dist/assets/RawNetworkData-CR2PHbul.js.br +0 -0
  90. package/dist/assets/RawNetworkMap-CEs7XNMh.js +4257 -0
  91. package/dist/assets/RawNetworkMap-CEs7XNMh.js.br +0 -0
  92. package/dist/assets/RecallRemove-CS_t6YvC.js +1 -0
  93. package/dist/assets/RecallRemove-CS_t6YvC.js.br +0 -0
  94. package/dist/assets/Reporting-DmZe9vnj.js +1 -0
  95. package/dist/assets/Reporting-DmZe9vnj.js.br +0 -0
  96. package/dist/assets/Scene-CFAEgtv6.js +1 -0
  97. package/dist/assets/Scene-CFAEgtv6.js.br +0 -0
  98. package/dist/assets/{SelectField-BFSZ1jgU.js → SelectField-Dz20jbSb.js} +1 -1
  99. package/dist/assets/SelectField-Dz20jbSb.js.br +0 -0
  100. package/dist/assets/{Settings-8U06br4I.js → Settings-CwhHOfip.js} +1 -1
  101. package/dist/assets/Settings-CwhHOfip.js.br +0 -0
  102. package/dist/assets/{SettingsList-B5lRPdmf.js → SettingsList-CyvgIGqz.js} +1 -1
  103. package/dist/assets/SettingsList-CyvgIGqz.js.br +0 -0
  104. package/dist/assets/{SettingsPage-JGHlT8fi.js → SettingsPage-C0R-aayz.js} +2 -2
  105. package/dist/assets/SettingsPage-C0R-aayz.js.br +0 -0
  106. package/dist/assets/State-DxJfpA-4.js +1 -0
  107. package/dist/assets/State-DxJfpA-4.js.br +0 -0
  108. package/dist/assets/{Table-BvIilxHn.js → Table-Rnmw7IBM.js} +1 -1
  109. package/dist/assets/Table-Rnmw7IBM.js.br +0 -0
  110. package/dist/assets/{TextareaField-DgNWd4bB.js → TextareaField-2ongT4h2.js} +1 -1
  111. package/dist/assets/TextareaField-2ongT4h2.js.br +0 -0
  112. package/dist/assets/{Tools-BQw74JrP.js → Tools-CYm6CKXl.js} +1 -1
  113. package/dist/assets/Tools-CYm6CKXl.js.br +0 -0
  114. package/dist/assets/TouchlinkPage-Dk0ug2lT.js +1 -0
  115. package/dist/assets/TouchlinkPage-Dk0ug2lT.js.br +0 -0
  116. package/dist/assets/{VendorLink-AmsYWJKL.js → VendorLink-jEsCmgvA.js} +1 -1
  117. package/dist/assets/VendorLink-jEsCmgvA.js.br +0 -0
  118. package/dist/assets/{_createCompounder-CDCf6N6Y.js → _createCompounder-lE4q6Zdw.js} +1 -1
  119. package/dist/assets/_createCompounder-lE4q6Zdw.js.br +0 -0
  120. package/dist/assets/apple-touch-icon-TxoCylrI.png +0 -0
  121. package/dist/assets/envs-CRUy-_iG.js +1 -0
  122. package/dist/assets/favicon-96x96-BP9bzx2f.png +0 -0
  123. package/dist/assets/favicon-C0HgnjBI.ico +0 -0
  124. package/dist/assets/favicon-D2_AfdO8.svg +3 -0
  125. package/dist/assets/favicon-D2_AfdO8.svg.br +0 -0
  126. package/dist/assets/{format-CFXT8pE2.js → format-C46-otnl.js} +1 -1
  127. package/dist/assets/format-C46-otnl.js.br +2 -0
  128. package/dist/assets/{index-DGcjwAm-.css → index-CJXgmHmo.css} +1 -1
  129. package/dist/assets/index-CJXgmHmo.css.br +0 -0
  130. package/dist/assets/index-DojwNtOp.js +645 -0
  131. package/dist/assets/index-DojwNtOp.js.br +0 -0
  132. package/dist/assets/{index-Dncflq5A.js → index-ecUrAuQ7.js} +1 -1
  133. package/dist/assets/index-ecUrAuQ7.js.br +2 -0
  134. package/dist/assets/{jszip.min-D1cnnDNI.js → jszip.min-CtGBfDMw.js} +1 -1
  135. package/dist/assets/jszip.min-CtGBfDMw.js.br +0 -0
  136. package/dist/assets/site-DTEhrq36.webmanifest +21 -0
  137. package/dist/assets/snakeCase-BAKhf4f1.js +1 -0
  138. package/dist/assets/snakeCase-BAKhf4f1.js.br +0 -0
  139. package/dist/index.html +11 -8
  140. package/dist/index.html.br +0 -0
  141. package/package.json +13 -6
  142. package/dist/assets/About-CjM5WomG.js.br +0 -0
  143. package/dist/assets/Availability-BiumPUeO.js +0 -1
  144. package/dist/assets/Availability-BiumPUeO.js.br +0 -0
  145. package/dist/assets/Bind-DjOXtTM6.js +0 -1
  146. package/dist/assets/Bind-DjOXtTM6.js.br +0 -0
  147. package/dist/assets/Bridge-D1gYoITl.js +0 -1
  148. package/dist/assets/Bridge-D1gYoITl.js.br +0 -0
  149. package/dist/assets/CheckboxField-De0QHbsG.js.br +0 -0
  150. package/dist/assets/ClusterSinglePicker-Di8d-bx5.js.br +0 -0
  151. package/dist/assets/Clusters-EXal5imX.js.br +0 -0
  152. package/dist/assets/Dashboard-DNnODdKY.js +0 -1
  153. package/dist/assets/Dashboard-DNnODdKY.js.br +0 -0
  154. package/dist/assets/DashboardFeatureWrapper-TlB_F76s.js.br +0 -0
  155. package/dist/assets/DebouncedInput-C8tkXJ7U.js.br +0 -0
  156. package/dist/assets/DevConsole-BCcxO2rX.js.br +0 -0
  157. package/dist/assets/DevConsole-YqbpD45I.js +0 -20
  158. package/dist/assets/DevConsole-YqbpD45I.js.br +0 -0
  159. package/dist/assets/DeviceCard-C9vw9b6F.js +0 -1
  160. package/dist/assets/DeviceCard-C9vw9b6F.js.br +0 -0
  161. package/dist/assets/DeviceControlEditName-BObC136U.js.br +0 -0
  162. package/dist/assets/DeviceImage-DshByPQQ.js +0 -1
  163. package/dist/assets/DeviceImage-DshByPQQ.js.br +0 -0
  164. package/dist/assets/DeviceInfo-V522QLe7.js.br +0 -0
  165. package/dist/assets/DevicePage-BGbRRkF3.js +0 -2
  166. package/dist/assets/DevicePage-BGbRRkF3.js.br +0 -0
  167. package/dist/assets/DevicePicker-DUSP1774.js.br +0 -0
  168. package/dist/assets/DeviceSettings-BPsmP0OM.js.br +0 -0
  169. package/dist/assets/DeviceSpecificSettings-eDupl8hE.js.br +0 -0
  170. package/dist/assets/Devices-TK6OH5en.js +0 -1
  171. package/dist/assets/Devices-TK6OH5en.js.br +0 -0
  172. package/dist/assets/DevicesPage-DCVj8eRe.js.br +0 -0
  173. package/dist/assets/DisplayValue-CfKoGI0j.js.br +0 -0
  174. package/dist/assets/Donate-B_P_Qsjc.js.br +0 -0
  175. package/dist/assets/EndpointPicker-CKjImsmQ.js.br +0 -0
  176. package/dist/assets/Exposes-CY4p-R2G.js.br +0 -3
  177. package/dist/assets/Feature-DKsa0Oda.js +0 -1
  178. package/dist/assets/Feature-DKsa0Oda.js.br +0 -0
  179. package/dist/assets/Frontend-V9wqeWFl.js.br +0 -0
  180. package/dist/assets/GroupPage-NDEFGCAo.js +0 -2
  181. package/dist/assets/GroupPage-NDEFGCAo.js.br +0 -0
  182. package/dist/assets/GroupSettings-C9hZwz-c.js.br +0 -0
  183. package/dist/assets/Groups-BBXSMxiv.js.br +0 -0
  184. package/dist/assets/GroupsPage-Bjp4L8m8.js.br +0 -0
  185. package/dist/assets/Health-DaYm6W6j.js.br +0 -0
  186. package/dist/assets/HomePage-_eUNylSo.js +0 -1
  187. package/dist/assets/HomePage-_eUNylSo.js.br +0 -0
  188. package/dist/assets/InputField-D4dIbfoE.js.br +0 -0
  189. package/dist/assets/Json-CL1gHmYN.js.br +0 -0
  190. package/dist/assets/LastSeen-CUs1Vb2e.js.br +0 -0
  191. package/dist/assets/LogsPage-Rn9K7jry.js.br +0 -0
  192. package/dist/assets/Lqi-DXzNBOZd.js.br +0 -0
  193. package/dist/assets/NetworkPage-B-vdyAjg.js.br +0 -0
  194. package/dist/assets/NumberField-1g9cUedG.js.br +0 -0
  195. package/dist/assets/OtaPage-xoAmQlkN.js.br +0 -0
  196. package/dist/assets/PowerSource-DHbzVhTD.js.br +0 -0
  197. package/dist/assets/RawNetworkData-BA35YEdR.js.br +0 -0
  198. package/dist/assets/RawNetworkMap-IKJdBkYI.js +0 -4256
  199. package/dist/assets/RawNetworkMap-IKJdBkYI.js.br +0 -0
  200. package/dist/assets/RecallRemove-UfYYwosz.js +0 -1
  201. package/dist/assets/RecallRemove-UfYYwosz.js.br +0 -0
  202. package/dist/assets/Reporting-D-T0p7pR.js +0 -1
  203. package/dist/assets/Reporting-D-T0p7pR.js.br +0 -0
  204. package/dist/assets/Scene-CBkAt36p.js +0 -1
  205. package/dist/assets/Scene-CBkAt36p.js.br +0 -0
  206. package/dist/assets/SelectField-BFSZ1jgU.js.br +0 -5
  207. package/dist/assets/Settings-8U06br4I.js.br +0 -0
  208. package/dist/assets/SettingsList-B5lRPdmf.js.br +0 -0
  209. package/dist/assets/SettingsPage-JGHlT8fi.js.br +0 -0
  210. package/dist/assets/State-qRhsFF8C.js +0 -1
  211. package/dist/assets/State-qRhsFF8C.js.br +0 -0
  212. package/dist/assets/Table-BvIilxHn.js.br +0 -0
  213. package/dist/assets/TextareaField-DgNWd4bB.js.br +0 -0
  214. package/dist/assets/Tools-BQw74JrP.js.br +0 -0
  215. package/dist/assets/TouchlinkPage-Dkq8XRUw.js +0 -1
  216. package/dist/assets/TouchlinkPage-Dkq8XRUw.js.br +0 -0
  217. package/dist/assets/VendorLink-AmsYWJKL.js.br +0 -0
  218. package/dist/assets/_createCompounder-CDCf6N6Y.js.br +0 -0
  219. package/dist/assets/apple-touch-icon-DxTaGN3y.png +0 -0
  220. package/dist/assets/envs-DFlyG_dH.js +0 -1
  221. package/dist/assets/favicon-B0wWasf1.ico +0 -0
  222. package/dist/assets/format-CFXT8pE2.js.br +0 -0
  223. package/dist/assets/index-DGcjwAm-.css.br +0 -0
  224. package/dist/assets/index-Dncflq5A.js.br +0 -1
  225. package/dist/assets/index-iXNIEDco.js +0 -644
  226. package/dist/assets/index-iXNIEDco.js.br +0 -0
  227. package/dist/assets/jszip.min-D1cnnDNI.js.br +0 -0
  228. package/dist/assets/snakeCase-2EvkzqTo.js +0 -1
  229. package/dist/assets/snakeCase-2EvkzqTo.js.br +0 -0
Binary file
@@ -1 +1 @@
1
- import{cj as t}from"./index-iXNIEDco.js";const n=""+new URL("generic-zigbee-device-Dj-9sUqG.png",import.meta.url).href,s="https://www.zigbee2mqtt.io/images/devices/",a=i=>{const e=t(i.definition?.model);return e==="NA"?n:`${s}${e}.png`};export{n as a,a as g};
1
+ import{ck as t}from"./index-DojwNtOp.js";const n=""+new URL("generic-zigbee-device-Dj-9sUqG.png",import.meta.url).href,s="https://www.zigbee2mqtt.io/images/devices/",a=i=>{const e=t(i.definition?.model);return e==="NA"?n:`${s}${e}.png`};export{n as a,a as g};
@@ -0,0 +1,2 @@
1
+  ����)i�ow4{ ��D��������֢��4����`>��`���P h7�^J9-��A����O��hu�
2
+ ��9ye�vT� �d�^���m��.!����L�C��?���
@@ -1,4 +1,4 @@
1
- import{af as bt,ag as It}from"./index-iXNIEDco.js";function vt(yt){throw new Error('Could not dynamically require "'+yt+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var kt={exports:{}};/*!
1
+ import{ag as bt,ah as It}from"./index-DojwNtOp.js";function vt(yt){throw new Error('Could not dynamically require "'+yt+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var kt={exports:{}};/*!
2
2
 
3
3
  JSZip v3.10.1 - A JavaScript class for generating and reading zip files
4
4
  <http://stuartk.com/jszip>
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "Zigbee2MQTT WindFront",
3
+ "short_name": "Z2M WindFront",
4
+ "icons": [
5
+ {
6
+ "src": "/images/web-app-manifest-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png",
9
+ "purpose": "maskable"
10
+ },
11
+ {
12
+ "src": "/images/web-app-manifest-512x512.png",
13
+ "sizes": "512x512",
14
+ "type": "image/png",
15
+ "purpose": "maskable"
16
+ }
17
+ ],
18
+ "theme_color": "#ffffff",
19
+ "background_color": "#ffffff",
20
+ "display": "standalone"
21
+ }
@@ -0,0 +1 @@
1
+ import{ah as u}from"./index-DojwNtOp.js";import{a as C}from"./_createCompounder-lE4q6Zdw.js";var e,r;function i(){if(r)return e;r=1;var a=C(),s=a(function(o,n,t){return o+(t?"_":"")+n.toLowerCase()});return e=s,e}var m=i();const k=u(m);export{k as s};
package/dist/index.html CHANGED
@@ -6,15 +6,18 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
7
  <meta name="robots" content="noindex">
8
8
 
9
- <title>Zigbee2MQTT</title>
10
-
11
- <link rel="icon" type="image/x-icon" href="./assets/favicon-B0wWasf1.ico">
12
- <link rel="apple-touch-icon" href="./assets/apple-touch-icon-DxTaGN3y.png" sizes="150x150">
13
-
9
+ <title>Zigbee2MQTT WindFront</title>
14
10
 
15
- <script type="module" crossorigin src="./assets/index-iXNIEDco.js"></script>
16
- <link rel="modulepreload" crossorigin href="./assets/envs-DFlyG_dH.js">
17
- <link rel="stylesheet" crossorigin href="./assets/index-DGcjwAm-.css">
11
+ <link rel="icon" type="image/png" href="./assets/favicon-96x96-BP9bzx2f.png" sizes="96x96" />
12
+ <link rel="icon" type="image/svg+xml" href="./assets/favicon-D2_AfdO8.svg" />
13
+ <link rel="shortcut icon" href="./assets/favicon-C0HgnjBI.ico" />
14
+ <link rel="apple-touch-icon" sizes="180x180" href="./assets/apple-touch-icon-TxoCylrI.png" />
15
+ <meta name="apple-mobile-web-app-title" content="Zigbee2MQTT WindFront" />
16
+ <link rel="manifest" href="./assets/site-DTEhrq36.webmanifest" />
17
+
18
+ <script type="module" crossorigin src="./assets/index-DojwNtOp.js"></script>
19
+ <link rel="modulepreload" crossorigin href="./assets/envs-CRUy-_iG.js">
20
+ <link rel="stylesheet" crossorigin href="./assets/index-CJXgmHmo.css">
18
21
  </head>
19
22
 
20
23
  <body>
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee2mqtt-windfront",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "license": "GPL-3.0-or-later",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -22,12 +22,15 @@
22
22
  "build": "vite build",
23
23
  "preview": "vite preview",
24
24
  "start": "vite dev",
25
+ "start:envs": "VITE_Z2M_API_URLS=localhost:5173/api,bogus.local:8080/api VITE_Z2M_API_NAMES=one,two npm start",
25
26
  "test": "vitest run",
26
27
  "test:cov": "vitest run --coverage",
27
28
  "typecheck": "tsc --noEmit",
28
29
  "check": "biome check --write .",
29
30
  "check:ci": "biome check .",
30
- "prepack": "npm run clean && npm run build"
31
+ "prepack": "npm run clean && npm run build",
32
+ "storybook": "storybook dev -p 6006",
33
+ "build-storybook": "storybook build"
31
34
  },
32
35
  "devDependencies": {
33
36
  "@biomejs/biome": "^2.1.3",
@@ -36,6 +39,9 @@
36
39
  "@fortawesome/free-solid-svg-icons": "^7.0.0",
37
40
  "@fortawesome/react-fontawesome": "^0.2.3",
38
41
  "@reduxjs/toolkit": "^2.8.2",
42
+ "@storybook/addon-a11y": "^9.1.1",
43
+ "@storybook/addon-docs": "^9.1.1",
44
+ "@storybook/react-vite": "^9.1.1",
39
45
  "@tailwindcss/vite": "^4.1.11",
40
46
  "@tanstack/react-table": "^8.21.3",
41
47
  "@types/file-saver": "^2.0.7",
@@ -44,7 +50,7 @@
44
50
  "@types/react": "^19.1.9",
45
51
  "@types/react-dom": "^19.1.7",
46
52
  "@types/ws": "^8.18.1",
47
- "@vitejs/plugin-react": "^4.7.0",
53
+ "@vitejs/plugin-react": "^5.0.0",
48
54
  "@vitest/coverage-v8": "^3.2.4",
49
55
  "daisyui": "^5.0.50",
50
56
  "file-saver": "^2.0.5",
@@ -61,12 +67,13 @@
61
67
  "react-redux": "^9.2.0",
62
68
  "react-router": "^7.7.1",
63
69
  "react-use-websocket": "^4.13.0",
64
- "reagraph": "^4.27.0",
70
+ "reagraph": "^4.29.0",
65
71
  "store2": "^2.14.4",
72
+ "storybook": "^9.1.1",
66
73
  "tailwindcss": "^4.1.4",
67
74
  "timeago.js": "^4.0.2",
68
- "typescript": "^5.8.3",
69
- "vite": "^7.0.6",
75
+ "typescript": "^5.9.2",
76
+ "vite": "^7.1.0",
70
77
  "vite-plugin-compression2": "^2.2.0",
71
78
  "vitest": "^3.1.2",
72
79
  "ws": "^8.18.3",
Binary file
@@ -1 +0,0 @@
1
- import{b,aq as m,j as e,S as d,F as l,au as u,e as j,B as x,x as f,y as p,r as h,av as D}from"./index-iXNIEDco.js";import{D as _,R as w}from"./DeviceControlEditName-BObC136U.js";function C(t){const{device:a,state:i,renameDevice:s,configureDevice:o,interviewDevice:r,removeDevice:v}=t,{t:n}=b(["zigbee","common"]),c=a.interview_state===m.InProgress||a.interview_state===m.Pending||i&&i.update?.state==="updating";return e.jsxs("div",{className:"join join-horizontal",children:[e.jsx(_,{name:a.friendly_name,renameDevice:s,homeassistantEnabled:t.homeassistantEnabled,style:"btn-outline btn-primary join-item btn-square"}),e.jsx(d,{className:"btn btn-outline btn-warning join-item btn-square",onClick:o,item:a.ieee_address,title:n("reconfigure"),modalDescription:n("common:dialog_confirmation_prompt"),modalCancelLabel:n("common:cancel"),disabled:c,children:e.jsx(l,{icon:u})}),e.jsx(d,{className:"btn btn-outline btn-info join-item btn-square",onClick:r,item:a.ieee_address,title:n("interview"),modalDescription:n("common:dialog_confirmation_prompt"),modalCancelLabel:n("common:cancel"),disabled:c,children:e.jsx(l,{icon:j})}),e.jsx(x,{onClick:async()=>await f.show(w,{device:a,removeDevice:v}),className:"btn btn-outline btn-error join-item btn-square",title:n("remove_device"),children:e.jsx(l,{icon:p})})]})}const E=h.memo(t=>{const{t:a}=b("availability"),{availability:i,availabilityFeatureEnabled:s,availabilityEnabledForDevice:o,disabled:r}=t;return r?e.jsx("span",{children:a("disabled")}):o??s?e.jsx("span",{className:i.state==="online"?"text-success":"text-error animate-pulse",children:a(i.state)}):e.jsx("a",{className:"link link-hover",target:"_blank",rel:"noopener noreferrer",href:D,children:a("disabled")})});export{E as A,C as D};
@@ -1 +0,0 @@
1
- import{r as d,j as s,W as D,b as I,ah as A,ai as k,B as y,F as E,h as O,aj as P,a as B}from"./index-iXNIEDco.js";import{D as T}from"./DevicePicker-DUSP1774.js";import{E as S}from"./EndpointPicker-CKjImsmQ.js";import"./envs-DFlyG_dH.js";import"./SelectField-BFSZ1jgU.js";const F=d.memo(o=>{const{clusters:n,onChange:a,label:l,value:t,disabled:e}=o,p=d.useCallback(r=>{const{checked:h,name:_}=r.target;let b=[...t];h?b.push(_):b=b.filter(v=>v!==_),a(b)},[a,t]),u=d.useMemo(()=>Array.from(n).sort((r,h)=>r.toString().localeCompare(h.toString())).map(r=>s.jsxs("label",{className:"label",title:r,children:[s.jsx("input",{className:"checkbox",type:"checkbox",checked:t.includes(r),name:r,value:r,onChange:p,disabled:e}),r]},r)),[n,p,t,e]);return s.jsxs("fieldset",{className:"fieldset",children:[l&&s.jsx("legend",{className:"fieldset-legend",children:l}),s.jsx("div",{className:"flex flex-row flex-wrap gap-2",children:u})]})}),U=(o,n,a)=>{const{target:l}=o;return l.type==="group"?a.find(t=>t.id===l.id):n.find(t=>t.ieee_address===l.ieee_address)},V=d.memo(o=>{const{devices:n,groups:a,device:l,rule:t}=o,[e,p]=d.useState({rule:t}),{sendMessage:u}=d.useContext(D),{t:r}=I(["common","zigbee"]);d.useEffect(()=>{p({rule:t})},[t]);const h=d.useCallback(i=>{e.rule.source.endpoint=i,p({rule:e.rule})},[e.rule]),_=d.useCallback(i=>{i&&(A(i)?e.rule.target={type:"endpoint",ieee_address:i.ieee_address,endpoint:""}:e.rule.target={type:"group",id:i.id},e.rule.clusters=[],p({rule:e.rule}))},[e.rule]),b=d.useCallback(i=>{e.rule.target.type==="endpoint"&&(e.rule.target.endpoint=i,e.rule.clusters=[],p({rule:e.rule}))},[e.rule]),v=d.useCallback(i=>{e.rule.clusters=i,p({rule:e.rule})},[e.rule]),N=d.useCallback(async i=>{let g="",x;const{target:c}=e.rule;if(c.type==="group"){const m=a.find(C=>C.id===c.id);if(m)g=m.id;else{console.error("Target group does not exist:",c.id);return}}else if(c.type==="endpoint"){const m=n.find(C=>C.ieee_address===c.ieee_address);if(m)g=m.ieee_address,m.type!=="Coordinator"&&(x=c.endpoint);else{console.error("Target device does not exist:",c.ieee_address);return}}const f={from:l.ieee_address,from_endpoint:e.rule.source.endpoint,to:g,to_endpoint:x,clusters:e.rule.clusters};i==="Bind"?await u("bridge/request/device/bind",f):await u("bridge/request/device/unbind",f)},[l,e.rule,u,n,a]),$=d.useMemo(()=>k(l),[l]),j=U(e.rule,n,a),M=d.useMemo(()=>k(j),[j]),R=d.useMemo(()=>{const i=new Set(e.rule.clusters),g=l.endpoints[e.rule.source.endpoint],x=e.rule.target.type==="endpoint"&&e.rule.target.endpoint!=null?j?.endpoints[e.rule.target.endpoint]:void 0,c=e.rule.target.type==="group"||j?.type==="Coordinator";if(g&&(x||c))for(const f of[...g.clusters.input,...g.clusters.output])if(c)i.add(f);else{const m=g.clusters.input.includes(f)&&x?.clusters.output.includes(f),C=g.clusters.output.includes(f)&&x?.clusters.input.includes(f);(m||C||c)&&i.add(f)}return i},[l.endpoints,e,j]),w=d.useMemo(()=>{let i=!1;return e.rule.target.type==="endpoint"?i=!!(e.rule.source.endpoint&&e.rule.target.ieee_address&&e.rule.target.endpoint&&e.rule.clusters.length>0):e.rule.target.type==="group"&&(i=!!(e.rule.source.endpoint&&e.rule.target.id&&e.rule.clusters.length>0)),i},[e]);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex flex-row flex-wrap gap-2",children:[s.jsx(S,{label:r("source_endpoint"),disabled:!e.rule.isNew,values:$,value:e.rule.source.endpoint,onChange:h}),s.jsx(T,{label:r("destination"),disabled:!e.rule.isNew,value:"ieee_address"in e.rule.target?e.rule.target.ieee_address:e.rule.target.id,devices:n,groups:a,onChange:_}),e.rule.target.type==="endpoint"?s.jsx(S,{label:r("destination_endpoint"),disabled:!e.rule.isNew,values:M,value:e.rule.target.endpoint,onChange:b}):null,s.jsx("div",{className:"grow w-128",children:s.jsx(F,{label:r("clusters"),clusters:R,value:e.rule.clusters,onChange:v})}),s.jsxs("fieldset",{className:"fieldset",children:[s.jsx("legend",{className:"fieldset-legend",children:r("actions")}),s.jsxs("div",{className:"join join-horizontal",children:[s.jsxs(y,{item:"Bind",disabled:!w,title:r("bind"),className:"btn btn-primary join-item",onClick:N,children:[s.jsx(E,{icon:O}),r("bind")," "]}),s.jsxs(y,{item:"Unbind",disabled:e.rule.isNew||!w,title:r("unbind"),className:"btn btn-error join-item",onClick:N,children:[s.jsx(E,{icon:P})," ",r("unbind")]})]})]})]}),s.jsx("div",{className:"divider"})]})}),q=o=>`${o.isNew}-${o.source.endpoint}-${o.source.ieee_address}-${"ieee_address"in o.target?o.target.ieee_address:o.target.id}-${o.clusters.join("-")}`,z=o=>{const n={};for(const a in o.endpoints){const l=o.endpoints[a];for(const t of l.bindings){let e="ieee_address"in t.target?`${t.target.ieee_address}-${t.target.endpoint}`:t.target.id;e=`${e}-${a}`,n[e]?n[e].clusters.push(t.cluster):n[e]={source:{ieee_address:o.ieee_address,endpoint:a},target:t.target,clusters:[t.cluster]}}}return Object.values(n)};function J(o){const{device:n}=o,a=B(u=>u.devices),l=B(u=>u.groups),[t,e]=d.useState({isNew:!0,target:{type:"endpoint",ieee_address:"",endpoint:""},source:{ieee_address:n.ieee_address,endpoint:""},clusters:[]}),p=d.useMemo(()=>z(n),[n]);return d.useEffect(()=>{e({isNew:!0,target:{type:"endpoint",ieee_address:"",endpoint:""},source:{ieee_address:n.ieee_address,endpoint:""},clusters:[]})},[n.ieee_address]),s.jsx("div",{className:"flex flex-col",children:[...p,t].map(u=>s.jsx(V,{rule:u,groups:l,device:n,devices:a},q(u)))})}export{J as default};
Binary file
@@ -1 +0,0 @@
1
- import{a as t,j as e}from"./index-iXNIEDco.js";import{J as s}from"./Json-CL1gHmYN.js";import"./envs-DFlyG_dH.js";function a(){const o=t(r=>r.bridgeInfo);return e.jsx(s,{obj:o})}export{a as default};
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{a as v,r as c,W as N,b as S,s as _,v as D,w as C,j as e,B as x,x as F,F as g,y as T,f as R,z as k,A as L,C as I}from"./index-iXNIEDco.js";import{D as M}from"./DashboardFeatureWrapper-TlB_F76s.js";import{D as q}from"./DeviceCard-C9vw9b6F.js";import{D as B,R as $}from"./DeviceControlEditName-BObC136U.js";import{D as W}from"./DebouncedInput-C8tkXJ7U.js";import"./envs-DFlyG_dH.js";import"./Feature-DKsa0Oda.js";import"./DisplayValue-CfKoGI0j.js";import"./_createCompounder-CDCf6N6Y.js";import"./LastSeen-CUs1Vb2e.js";import"./format-CFXT8pE2.js";import"./Lqi-DXzNBOZd.js";import"./PowerSource-DHbzVhTD.js";import"./snakeCase-2EvkzqTo.js";import"./DeviceImage-DshByPQQ.js";import"./index-Dncflq5A.js";import"./CheckboxField-De0QHbsG.js";import"./InputField-D4dIbfoE.js";const K=["schedule_","_mode","_options","_startup","_type","inching_","cyclic_"],U=["battery","linkquality","options","position","programming","strength","voltage","warning","gradient","power_outage_memory","power_on_behavior"],z=["state","brightness","color_temp","mode","sound","occupancy","tamper","alarm","action","contact"],H=(a,i)=>{if(a){if(z.includes(a))return!0;for(const l of K)if(a.includes(l))return!1;if(U.includes(a))return!1}return!0},E=(a,i={})=>{const{property:l,name:o,access:d}=a;if(H(o)){if("features"in a&&a.features&&a.features.length>0){const n=[],f=l?i[l]:i;for(const r of a.features){const u=E(r,f);u&&!n.some(b=>b.property===u.property)&&n.push(u)}return{...a,features:n}}return{...a}}};function le(){const a=v(s=>s.deviceStates),i=v(s=>s.bridgeInfo.config),l=v(s=>s.devices),{sendMessage:o}=c.useContext(N),{t:d}=S(["zigbee","settings"]),[n,f]=c.useState(_.get(D,"")),[r,u]=c.useState(_.get(C,!1));c.useEffect(()=>{_.set(D,n)},[n]);const b=c.useCallback(async(s,t,m)=>{await o("bridge/request/device/rename",{from:s,to:t,homeassistant_rename:m,last:!1})},[o]),j=c.useCallback(async(s,t,m)=>{await o("bridge/request/device/remove",{id:s,force:t,block:m})},[o]),w=c.useCallback(s=>{_.set(C,s),u(s)},[]),A=c.useMemo(()=>{const s=[];for(const t of l)if(!t.disabled&&t.supported&&(!n||t.friendly_name.toLowerCase().includes(n.toLowerCase()))){const m=a[t.friendly_name]??{},h=[];if(t.definition?.exposes)for(const p of t.definition.exposes){const y=E(p,m);if(y&&(h.push(y),h.length===10))break}h.length>0&&s.push(e.jsx("div",{className:`${r?"break-inside-avoid-column mb-3":"w-[23rem]"} card bg-base-200 rounded-box shadow-md`,children:e.jsx(q,{features:h,device:t,deviceState:m,onChange:async p=>await o(`${t.ieee_address}/set`,p),onRead:async p=>await o(`${t.ieee_address}/get`,p),featureWrapperClass:M,lastSeenConfig:i.advanced.last_seen,children:e.jsxs("div",{className:"join join-horizontal",children:[e.jsx(B,{name:t.friendly_name,renameDevice:b,homeassistantEnabled:i.homeassistant.enabled,style:"btn-outline btn-primary btn-square btn-sm join-item"}),e.jsx(x,{onClick:async()=>await F.show($,{device:t,removeDevice:j}),className:"btn btn-outline btn-error btn-square btn-sm join-item",title:d("remove_device"),children:e.jsx(g,{icon:T})})]})})},t.ieee_address))}return s},[l,a,i.advanced.last_seen,i.homeassistant.enabled,o,j,b,d,n,r]);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-row justify-center items-center gap-3 mb-3",children:[e.jsxs("div",{className:"join",children:[e.jsxs("label",{className:"input w-64 join-item",children:[e.jsx(g,{icon:R}),e.jsx(W,{className:"",type:"search",onChange:s=>f(s.toString()),placeholder:d("common:search"),value:n})]}),e.jsx(x,{item:"",onClick:f,className:"btn btn-square join-item",title:d("common:clear"),children:e.jsx(g,{icon:k})})]}),e.jsx(x,{className:"btn btn-square",item:!r,onClick:w,title:`${d("settings:dashboard_column_display")}: ${r}`,children:e.jsx(g,{icon:r?L:I})})]}),e.jsx("div",{className:`${r?"columns-md":"flex flex-row flex-wrap justify-center"} gap-3 mb-3`,children:A})]})}export{le as default};
@@ -1,20 +0,0 @@
1
- import{r as t,j as e,a4 as B,am as G,b as z,B as S,F as J,y as V,ai as K,W as O,a as D,E as H,an as X,S as Y,L as q,ao as Z,ap as R}from"./index-iXNIEDco.js";import{T as M}from"./TextareaField-DgNWd4bB.js";import{J as Q}from"./Json-CL1gHmYN.js";import{I as P}from"./InputField-D4dIbfoE.js";import{C as U,A as ee}from"./ClusterSinglePicker-Di8d-bx5.js";import{E as te}from"./EndpointPicker-CKjImsmQ.js";import"./envs-DFlyG_dH.js";import"./SelectField-BFSZ1jgU.js";const W=t.memo(o=>{const{message:n}=o;return e.jsx("div",{className:"mockup-code w-full",children:e.jsx("pre",{"data-prefix":"~",className:B[n.level],children:e.jsxs("code",{children:["[",n.timestamp,"] ",n.message]})})})}),se=[65,66,67,68];function ne(o){const{value:n,onChange:u,attribute:r,definition:i,...d}=o,b=se.includes(i.type)?"text":"number";return e.jsx("input",{type:b,value:n,onChange:f=>{const p=b==="number"?f.target.valueAsNumber:f.target.value;u(r,Number.isNaN(p)?void 0:p)},...d})}function ae(o){const{device:n,readDeviceAttributes:u,writeDeviceAttributes:r,lastLog:i}=o,[d,b]=t.useState(G(n.endpoints)??""),[f,p]=t.useState(""),[c,x]=t.useState([]),[h,N]=t.useState(""),{t:l}=z(["common","zigbee"]),k=t.useCallback(s=>{p(""),x([]),b(s.toString())},[]),E=t.useCallback(s=>{x([]),p(s)},[]),A=t.useCallback((s,w)=>{if(!c.find(y=>y.attribute===s)){const y=c.concat([{attribute:s,definition:w}]);x(y)}},[c]),a=t.useCallback(s=>{N(s.target.value)},[]),m=t.useCallback(async()=>{await u(n.ieee_address,d,f,c.map(s=>s.attribute),h)},[n.ieee_address,d,f,c,h,u]),_=t.useCallback(async()=>{await r(n.ieee_address,d,f,c)},[n.ieee_address,d,f,c,r]),j=t.useMemo(()=>c.length>0&&e.jsx("fieldset",{className:"fieldset gap-2 p-3 rounded-box shadow-md",children:c.map(({attribute:s,value:w="",definition:y})=>e.jsxs("div",{className:"join join-horizontal min-w-xs",children:[e.jsxs("label",{className:"input join-item",children:[s,e.jsx(ne,{value:w,attribute:s,definition:y,onChange:($,I)=>{const L=Array.from(c),T=L.find(F=>F.attribute===$);T&&(T.value=I),x(L)}})]}),e.jsx(S,{className:"btn btn-error btn-outline join-item",item:s,onClick:$=>{const I=c.filter(L=>L.attribute!==$);x(I)},children:e.jsx(J,{icon:V})})]},s))}),[c]),C=t.useMemo(()=>{const s=new Set;if(d){const w=n.endpoints[Number.parseInt(d,10)];if(w)for(const y of w.clusters.input)s.add(y)}return s},[n,d]),g=c.length===0||f==="",v=t.useMemo(()=>K(n),[n]);return d?e.jsxs("div",{className:"flex-1 flex flex-col gap-3",children:[e.jsx("h2",{className:"text-lg",children:l("zigbee:read_write_attributes")}),e.jsxs("div",{className:"flex flex-row flex-wrap gap-2",children:[e.jsx(te,{label:l("zigbee:endpoint"),values:v,value:d,onChange:k,required:!0}),e.jsx(U,{label:l("cluster"),clusters:C,value:f,onChange:E,required:!0}),e.jsx(ee,{label:l("attribute"),value:"",cluster:f,device:n,onChange:A}),e.jsx(P,{type:"text",name:"state_property",label:l("devConsole:state_property"),value:h,detail:`${l("optional")}. ${l("devConsole:state_property_info")}`,onChange:a})]}),j,e.jsxs("div",{className:"join join-horizontal",children:[e.jsx(S,{disabled:g||c.some(s=>!!s.value),className:"btn btn-success join-item",onClick:m,children:l("read")}),e.jsx(S,{disabled:g,className:"btn btn-error join-item",onClick:_,children:l("write")})]}),i&&e.jsx(W,{message:i})]}):e.jsx("span",{children:"No endpoints"})}const oe=o=>{const{device:n,lastLog:u}=o,{t:r}=z(["common","zigbee"]),[i,d]=t.useState(1),[b,f]=t.useState(""),[p,c]=t.useState(""),[x,h]=t.useState("{}"),{sendMessage:N}=t.useContext(O),l=D(a=>a.bridgeDefinitions),k=t.useMemo(()=>{if(!b||!p)return!1;try{const a=JSON.parse(x);if(typeof a!="object"||Array.isArray(a)&&a.length>0&&typeof a[0]!="object")return!1}catch{return!1}return!0},[x,b,p]),E=t.useMemo(()=>{const a=n.endpoints[i],m=new Set,_=new Set,j=new Set,C=new Set,g=new Set;if(a){for(const s of a.clusters.input)m.add(s),_.add(s);for(const s of a.clusters.output)m.add(s),j.add(s)}if(l.custom_clusters[n.friendly_name])for(const s in l.custom_clusters[n.friendly_name])m.has(s)||(m.add(s),C.add(s));for(const s in l.clusters)m.has(s)||g.add(s);return[{name:"input_clusters",clusters:_},{name:"output_clusters",clusters:j},{name:"custom_clusters",clusters:C},{name:"other_zcl_clusters",clusters:g}]},[n.friendly_name,n.endpoints,i,l]),A=t.useCallback(async()=>{let a=Number.parseInt(p,10);Number.isNaN(a)&&(a=p),await N(`${n.ieee_address}/${i}/set`,{command:{cluster:b,command:a,payload:JSON.parse(x)}})},[b,n.ieee_address,p,x,i,N]);return e.jsxs("div",{className:"flex-1 flex flex-col gap-3",children:[e.jsx("h2",{className:"text-lg",children:r("execute_command")}),e.jsxs("div",{className:"flex flex-row flex-wrap gap-2",children:[e.jsx(P,{type:"number",name:"endpoint",label:r("zigbee:endpoint"),min:1,max:255,value:i,onChange:a=>!!a.target.value&&d(a.target.valueAsNumber),required:!0}),e.jsx(U,{label:r("zigbee:cluster"),clusters:E,value:b,onChange:a=>{f(a)},required:!0}),e.jsx(P,{type:"text",name:"command",label:r("command"),value:p,placeholder:"state, color...",onChange:a=>c(a.target.value),pattern:"^\\d+|^\\w+",required:!0})]}),e.jsx(M,{name:"payload",label:r("payload"),rows:3,value:x,onChange:a=>h(a.target.value),className:"textarea validator w-full",required:!0}),e.jsx("div",{children:e.jsx(S,{onClick:A,disabled:!k,className:"btn btn-success",children:r("execute")})}),u&&e.jsx(W,{message:u})]})},re=/^(zhc:tz: Read result of |z2m: Publish 'set' 'read' to |z2m: Publish 'set' 'write' to |zhc:tz: Wrote )/,ie=t.memo(({device:o,externalDefinition:n})=>{const{t:u}=z("zigbee"),r=D(d=>d.bridgeInfo.zigbee_herdsman_converters.version),i={labels:"new device support",title:`[New device support] ${o.model_id} from ${o.manufacturer}`,body:`<!-- MAKE SURE THIS IS NOT ALREADY POSTED ${R.slice(0,-4)} -->
2
-
3
- ### Link
4
-
5
- ### What does/doesn't work with the external definition?
6
-
7
- ### Details
8
- zigbee-herdsman-converters: \`${r}\`
9
- software_build_id: \`${o.software_build_id}\`
10
- date_code: \`${o.date_code}\`
11
- endpoints:
12
- \`\`\`json
13
- ${JSON.stringify(o.endpoints)}
14
- \`\`\`
15
-
16
- ### External definition:
17
- \`\`\`ts
18
- ${n}
19
- \`\`\`
20
- `};return e.jsx(q,{target:"_blank",rel:"noopener noreferrer",to:`${R}?${new URLSearchParams(i).toString()}`,className:"btn",children:u("request_support")})});function be({device:o}){const n=H(),{sendMessage:u}=t.useContext(O),{t:r}=z(["devConsole","common"]),i=D(m=>m.lastNonDebugLog),[d,b]=t.useState(),[f,p]=t.useState(),[c,x]=t.useState(!1),[h,N]=t.useState(!1),l=D(m=>m.generatedExternalDefinitions[o.ieee_address]);t.useEffect(()=>{x(!1)},[o]),t.useEffect(()=>{i&&(i.message.startsWith("zhc:tz: Invoked ")?p(i):re.test(i.message)&&b(i))},[i]);const k=t.useCallback(async(m,_,j,C,g)=>{const v={read:{cluster:j,attributes:C}};g&&(v.read.state_property=g),await u(`${m}/${_}/set`,v)},[u]),E=t.useCallback(async(m,_,j,C)=>{const g={write:{cluster:j,payload:{}}};for(const v of C)g.write.payload[v.attribute]=v.value;await u(`${m}/${_}/set`,g)},[u]),A=t.useCallback(async()=>{x(!0),await u("bridge/request/device/generate_external_definition",{id:o.ieee_address})},[u,o.ieee_address]),a=t.useCallback(()=>{n(X(o.friendly_name))},[n,o.friendly_name]);return e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-row justify-center items-center gap-2",children:[l?o.supported?null:e.jsx(ie,{device:o,externalDefinition:l}):c?e.jsx("span",{className:"loading loading-infinity loading-xl"}):e.jsx(S,{className:"btn btn-primary",onClick:A,children:r("generate_external_definition")}),e.jsx(S,{item:!h,onClick:N,className:"btn btn-primary",children:r(h?"hide_definition":"show_definition")}),e.jsx(Y,{className:"btn btn-error",onClick:a,title:r("reset_frontend_state"),modalDescription:r("common:dialog_confirmation_prompt"),modalCancelLabel:r("common:cancel"),children:r("reset_frontend_state")})]}),l&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"divider"}),e.jsx(M,{name:"generated_external_definition",label:r("generated_external_definition"),value:l,className:"textarea w-full",rows:8,readOnly:!0}),e.jsx(q,{to:Z,target:"_blank",rel:"noreferrer",className:"link link-primary self-end",children:r("common:documentation")})]}),h&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"divider"}),e.jsx(Q,{obj:o.definition??{},lines:12})]}),e.jsx("div",{className:"divider"}),e.jsxs("div",{className:"flex flex-row flex-wrap justify-evenly gap-4",children:[e.jsx(ae,{device:o,lastLog:d,readDeviceAttributes:k,writeDeviceAttributes:E}),e.jsx(oe,{device:o,lastLog:f})]})]})}export{be as default};
@@ -1 +0,0 @@
1
- import{r as f,b as j,j as s,L as u,F as h,aV as w}from"./index-iXNIEDco.js";import{F as N,g as y}from"./Feature-DKsa0Oda.js";import{L}from"./LastSeen-CUs1Vb2e.js";import{L as F}from"./Lqi-DXzNBOZd.js";import{P as _}from"./PowerSource-DHbzVhTD.js";import{D as $}from"./DeviceImage-DshByPQQ.js";const E=f.memo(({onChange:n,onRead:i,device:e,endpoint:t,deviceState:a,lastSeenConfig:p,features:m,featureWrapperClass:c,children:g})=>{const{t:r}=j(["zigbee","devicePage"]),o=t!=null?e.endpoints[t].name:void 0,b=f.useMemo(()=>{const d=[];for(const l of m){const x=t!=null&&!!l.endpoint;(!x||Number(l.endpoint)===t||l.endpoint===o)&&d.push(s.jsx(N,{feature:l,device:e,deviceState:a,onChange:n,onRead:i,featureWrapperClass:c,minimal:!0,parentFeatures:[],endpointSpecific:x},y(l)))}return d},[o,e,t,a,m,c,n,i]);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"card-body p-2",children:[s.jsxs("div",{className:"flex flex-row items-center gap-3 w-full",children:[s.jsx("div",{className:"flex-none h-11 w-11 overflow-visible",children:s.jsx($,{disabled:!1,device:e,otaState:a.update?.state})}),s.jsxs("div",{className:"min-w-0",children:[s.jsxs(u,{to:`/device/${e.ieee_address}/info`,className:"link link-hover",children:[e.friendly_name,t!=null?` (${r("endpoint")}: ${o?`${o} / `:""}${t})`:""]}),e.description&&s.jsx("div",{className:"text-xs opacity-50 truncate",title:e.description,children:e.description})]})]}),s.jsxs("div",{className:"text-sm w-full p-2",children:[b,s.jsxs("div",{className:"flex flex-row items-center gap-1 mt-3",children:[s.jsx("div",{className:"grow-1"}),s.jsxs(u,{to:`/device/${e.ieee_address}/exposes`,className:"btn btn-xs",children:[r("devicePage:exposes")," ",s.jsx(h,{icon:w,size:"lg"})]})]})]})]}),s.jsxs("div",{className:"flex flex-row flex-wrap gap-1 mx-2 mb-2 justify-around items-center",children:[s.jsx("span",{className:"badge badge-soft badge-ghost cursor-default",title:r("last_seen"),children:s.jsx(L,{lastSeen:a.last_seen,config:p})}),s.jsx("span",{className:"badge badge-soft badge-ghost cursor-default",title:r("lqi"),children:s.jsx(F,{value:a.linkquality})}),s.jsx("span",{className:"badge badge-soft badge-ghost cursor-default",title:r("power"),children:s.jsx(_,{device:e,batteryPercent:a.battery,batteryState:a.battery_state,batteryLow:a.battery_low,showLevel:!0})}),g]})]})});export{E as D};
@@ -1 +0,0 @@
1
- import{j as a,F as l,a2 as x,r as d,b as w,aq as b,as as O,c8 as S,c9 as P,M as N,ca as _}from"./index-iXNIEDco.js";import{g as D,a as y}from"./index-Dncflq5A.js";function I({error:r,children:e}){return r?a.jsx(l,{icon:x,size:"3x",className:"text-error",title:"Missing image"}):e}function p(r){"@babel/helpers - typeof";return p=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(r)}function E(r,e){if(p(r)!="object"||!r)return r;var t=r[Symbol.toPrimitive];if(t!==void 0){var i=t.call(r,e);if(p(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(r)}function A(r){var e=E(r,"string");return p(e)=="symbol"?e:e+""}function L(r,e,t){return(e=A(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var $=function(r){var e=r.crossOrigin,t=e===void 0?"":e;return function(i){return new Promise(function(n,o){var c=new Image;t&&(c.crossOrigin=t),c.onload=function(){c.decode?c.decode().then(n).catch(o):n()},c.onerror=o,c.src=i})}};function j(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function g(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?j(Object(t),!0).forEach(function(i){L(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):j(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}var F=function(e){return e.filter(function(t){return t})},M=function(e){return Array.isArray(e)?e:[e]},u={},T=function(e,t){var i=!1;return new Promise(function(n,o){var c=function(m){return t(m).then(function(){i=!0,n(m)})};e.reduce(function(f,m){return f.catch(function(){if(!i)return c(m)})},c(e.shift())).catch(o)})};function q(r){var e=r.srcList,t=r.imgPromise,i=t===void 0?$({}):t,n=r.useSuspense,o=n===void 0?!0:n,c=d.useState(!1),f=c[1],m=F(M(e)),s=m.join("");if(u[s]||(u[s]={promise:T(m,i),cache:"pending",error:null}),u[s].cache==="resolved")return{src:u[s].src,isLoading:!1,error:null};if(u[s].cache==="rejected"){if(o)throw u[s].error;return{isLoading:!1,error:u[s].error,src:void 0}}if(u[s].promise.then(function(v){u[s]=g(g({},u[s]),{},{cache:"resolved",src:v}),o||f(s)}).catch(function(v){u[s]=g(g({},u[s]),{},{cache:"rejected",error:v}),o||f(s)}),o)throw u[s].promise;return{isLoading:!0,src:void 0,error:null}}const h=d.memo(({device:r={},className:e})=>{const t=r.definition?.icon,i=D(r),n=[];t&&n.push(t),i&&n.push(i),i!==y&&n.push(y);const{src:o}=q({srcList:n});return a.jsx("img",{alt:r.ieee_address,crossOrigin:"anonymous",src:o,className:e})}),k=d.memo(r=>{const{t:e}=w("zigbee"),{device:t={},disabled:i,otaState:n,className:o,noIndicator:c}=r,f=d.useMemo(()=>t.interview_state===b.InProgress?a.jsx(l,{icon:O,spin:!0,title:e("interviewing"),className:"indicator-item indicator-bottom indicator-end text-info"}):t.interview_state===b.Failed?a.jsx(l,{icon:x,beat:!0,title:e("interview_failed"),className:"indicator-item indicator-bottom indicator-end text-error"}):t.definition?.source==="generated"?a.jsx(l,{icon:S,beat:!0,title:e("unsupported"),className:"indicator-item indicator-bottom indicator-end text-warning"}):t.definition?.source==="external"?a.jsx(l,{icon:P,title:e("unsupported"),className:"indicator-item indicator-bottom indicator-end text-info"}):null,[t.interview_state,t.definition,e]);return a.jsx(d.Suspense,{fallback:a.jsx("img",{alt:t.ieee_address,src:y}),children:a.jsx(I,{children:c?a.jsx(h,{device:t,className:`grid place-items-center${o?` ${o}`:""}`}):a.jsxs("div",{className:"indicator w-full",children:[n==="updating"&&a.jsx(l,{icon:N,spin:!0,title:e("updating_firmware"),className:"indicator-item indicator-top indicator-end text-info"}),f,i&&a.jsx(l,{icon:_,title:e("common:disabled"),className:"indicator-item indicator-middle indicator-center text-error",size:"2xl"}),a.jsx(h,{device:t,className:`grid place-items-center${o?` ${o}`:""}`})]})})})});export{k as D};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Bind-DjOXtTM6.js","./index-iXNIEDco.js","./envs-DFlyG_dH.js","./index-DGcjwAm-.css","./DevicePicker-DUSP1774.js","./SelectField-BFSZ1jgU.js","./EndpointPicker-CKjImsmQ.js","./Clusters-EXal5imX.js","./DevConsole-YqbpD45I.js","./TextareaField-DgNWd4bB.js","./Json-CL1gHmYN.js","./InputField-D4dIbfoE.js","./ClusterSinglePicker-Di8d-bx5.js","./DeviceInfo-V522QLe7.js","./snakeCase-2EvkzqTo.js","./_createCompounder-CDCf6N6Y.js","./DeviceControlEditName-BObC136U.js","./CheckboxField-De0QHbsG.js","./Availability-BiumPUeO.js","./DeviceImage-DshByPQQ.js","./index-Dncflq5A.js","./DisplayValue-CfKoGI0j.js","./LastSeen-CUs1Vb2e.js","./format-CFXT8pE2.js","./VendorLink-AmsYWJKL.js","./PowerSource-DHbzVhTD.js","./DeviceSettings-BPsmP0OM.js","./SettingsList-B5lRPdmf.js","./NumberField-1g9cUedG.js","./DeviceSpecificSettings-eDupl8hE.js","./Feature-DKsa0Oda.js","./Exposes-CY4p-R2G.js","./Groups-BBXSMxiv.js","./Reporting-D-T0p7pR.js","./Scene-CBkAt36p.js","./RecallRemove-UfYYwosz.js","./DashboardFeatureWrapper-TlB_F76s.js","./State-qRhsFF8C.js"])))=>i.map(i=>d[i]);
2
- import{r as t,b as p,j as e,L as v,P as x,F as r,f as j,a as f,d as b,u as g,N as n,e as y,g as h,h as N,i as E,k as T,l as w,m as D,n as L,o as P,p as $,q as A,_ as l}from"./index-iXNIEDco.js";import"./envs-DFlyG_dH.js";const I=t.memo(i=>{const{devices:u,currentDevice:a,tab:m="info"}=i,[d,s]=t.useState(""),{t:o}=p("common"),_=t.useMemo(()=>u.filter(c=>c.type!=="Coordinator"&&c.friendly_name.toLowerCase().includes(d.toLowerCase())&&c.ieee_address!==a?.ieee_address).map(c=>e.jsx("li",{children:e.jsx(v,{to:`/device/${c.ieee_address}/${m}`,onClick:()=>s(""),className:"dropdown-item",children:c.friendly_name})},c.ieee_address)),[u,a,d,m]);return e.jsxs(x,{name:"header-device-selector",buttonChildren:`${a?`${a.friendly_name} (${a.ieee_address})`:o("unknown_device")}`,dropdownStyle:"dropdown-start",children:[e.jsxs("label",{className:"input",children:[e.jsx(r,{icon:j}),e.jsx("input",{type:"search",placeholder:o("type_to_filter"),onChange:c=>s(c.target.value),value:d})]},"search"),_]})}),R=t.lazy(async()=>await l(()=>import("./Bind-DjOXtTM6.js"),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url)),C=t.lazy(async()=>await l(()=>import("./Clusters-EXal5imX.js"),__vite__mapDeps([7,1,2,3]),import.meta.url)),O=t.lazy(async()=>await l(()=>import("./DevConsole-YqbpD45I.js"),__vite__mapDeps([8,1,2,3,9,10,11,12,5,6]),import.meta.url)),S=t.lazy(async()=>await l(()=>import("./DeviceInfo-V522QLe7.js"),__vite__mapDeps([13,1,2,3,14,15,16,17,11,18,9,19,20,21,22,23,24,25]),import.meta.url)),z=t.lazy(async()=>await l(()=>import("./DeviceSettings-BPsmP0OM.js"),__vite__mapDeps([26,1,2,3,27,17,11,28,5]),import.meta.url)),V=t.lazy(async()=>await l(()=>import("./DeviceSpecificSettings-eDupl8hE.js"),__vite__mapDeps([29,1,2,3,30,21,15]),import.meta.url)),k=t.lazy(async()=>await l(()=>import("./Exposes-CY4p-R2G.js"),__vite__mapDeps([31,1,2,3,30,21,15]),import.meta.url)),M=t.lazy(async()=>await l(()=>import("./Groups-BBXSMxiv.js"),__vite__mapDeps([32,1,2,3,6,5]),import.meta.url)),F=t.lazy(async()=>await l(()=>import("./Reporting-D-T0p7pR.js"),__vite__mapDeps([33,1,2,3,11,12,5,6]),import.meta.url)),G=t.lazy(async()=>await l(()=>import("./Scene-CBkAt36p.js"),__vite__mapDeps([34,1,2,3,35,36,30,21,15,11,5]),import.meta.url)),B=t.lazy(async()=>await l(()=>import("./State-qRhsFF8C.js"),__vite__mapDeps([37,1,2,3,10]),import.meta.url));function H(){const{t:i}=p(["devicePage","common"]),u=f(c=>c.devices),{deviceId:a,tab:m}=b(),d=g(),s=a?u.find(c=>c.ieee_address===a):void 0;t.useEffect(()=>{s&&(m?s.type==="Coordinator"&&d("/settings/about",{replace:!0}):d(s.type==="Coordinator"?"/settings/about":`/device/${s.ieee_address}/info`,{replace:!0}))},[m,s,d]);const o=({isActive:c})=>c?"tab tab-active":"tab",_=t.useMemo(()=>{if(!s)return e.jsx("div",{className:"flex-auto justify-center items-center",children:i("common:unknown_device")});switch(m){case"info":return e.jsx(S,{device:s});case"exposes":return e.jsx(k,{device:s});case"bind":return e.jsx(R,{device:s});case"reporting":return e.jsx(F,{device:s});case"settings":return e.jsx(z,{device:s});case"settings-specific":return e.jsx(V,{device:s});case"state":return e.jsx(B,{device:s});case"clusters":return e.jsx(C,{device:s});case"groups":return e.jsx(M,{device:s});case"scene":return e.jsx(G,{device:s});case"dev-console":return e.jsx(O,{device:s})}},[s,m,i]);return e.jsxs(e.Fragment,{children:[e.jsx(I,{devices:u,currentDevice:s,tab:m}),e.jsxs("div",{className:"tabs tabs-border mt-2",children:[e.jsxs(n,{to:`/device/${a}/info`,className:o,children:[e.jsx(r,{icon:y,className:"me-2"}),i("about")]}),e.jsxs(n,{to:`/device/${a}/exposes`,className:o,children:[e.jsx(r,{icon:h,className:"me-2"}),i("exposes")]}),e.jsxs(n,{to:`/device/${a}/bind`,className:o,children:[e.jsx(r,{icon:N,className:"me-2"}),i("bind")]}),e.jsxs(n,{to:`/device/${a}/reporting`,className:o,children:[e.jsx(r,{icon:E,className:"me-2"}),i("reporting")]}),e.jsxs(n,{to:`/device/${a}/settings`,className:o,children:[e.jsx(r,{icon:T,className:"me-2"}),i("settings")]}),e.jsxs(n,{to:`/device/${a}/settings-specific`,className:o,children:[e.jsx(r,{icon:w,className:"me-2"}),i("settings_specific")]}),e.jsxs(n,{to:`/device/${a}/state`,className:o,children:[e.jsx(r,{icon:D,className:"me-2"}),i("state")]}),e.jsxs(n,{to:`/device/${a}/clusters`,className:o,children:[e.jsx(r,{icon:L,className:"me-2"}),i("clusters")]}),e.jsxs(n,{to:`/device/${a}/groups`,className:o,children:[e.jsx(r,{icon:P,className:"me-2"}),i("groups")]}),e.jsxs(n,{to:`/device/${a}/scene`,className:o,children:[e.jsx(r,{icon:$,className:"me-2"}),i("scene")]}),e.jsxs(n,{to:`/device/${a}/dev-console`,className:o,children:[e.jsx(r,{icon:A,className:"me-2"}),i("dev_console")]}),e.jsx("div",{className:"tab-content block h-full bg-base-100 p-3",children:_})]})]})}export{H as default};
@@ -1 +0,0 @@
1
- import{r as o,a as b,ai as h,b as C,W as j,j as e,B as S,S as D,F as w,y as k}from"./index-iXNIEDco.js";import{g as y,R as M,A as F}from"./RecallRemove-UfYYwosz.js";import{D as N}from"./DevicePicker-DUSP1774.js";import{E as R}from"./EndpointPicker-CKjImsmQ.js";import{D as E}from"./DashboardFeatureWrapper-TlB_F76s.js";import{D as A}from"./DeviceCard-C9vw9b6F.js";import"./envs-DFlyG_dH.js";import"./Feature-DKsa0Oda.js";import"./DisplayValue-CfKoGI0j.js";import"./_createCompounder-CDCf6N6Y.js";import"./InputField-D4dIbfoE.js";import"./SelectField-BFSZ1jgU.js";import"./LastSeen-CUs1Vb2e.js";import"./format-CFXT8pE2.js";import"./Lqi-DXzNBOZd.js";import"./PowerSource-DHbzVhTD.js";import"./snakeCase-2EvkzqTo.js";import"./DeviceImage-DshByPQQ.js";import"./index-Dncflq5A.js";const G=o.memo(n=>{const[i,m]=o.useState(""),[a,g]=o.useState(""),{group:c}=n,d=b(s=>s.devices),l=o.useMemo(()=>h(d.find(s=>s.ieee_address===a)),[a,d]),{t:r}=C(["groups","zigbee"]),{sendMessage:u}=o.useContext(j),t=o.useCallback(s=>{g(s.ieee_address);const p=h(s);m(p.values().next().value)},[]);return e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"text-lg font-semibold",children:r("add_to_group_header")}),e.jsxs("div",{className:"mb-3",children:[e.jsx(N,{label:r("zigbee:device"),value:a,devices:d,onChange:t}),e.jsx(R,{label:r("zigbee:endpoint"),values:l,value:i,onChange:s=>m(s)})]}),e.jsx(S,{onClick:async()=>await u("bridge/request/group/members/add",{group:c.id.toString(),endpoint:i,device:a}),className:"btn btn-primary",children:r("add_to_group")})]})}),I=o.memo(n=>{const{removeDeviceFromGroup:i,groupMember:m,device:a,deviceState:g,lastSeenConfig:c,setDeviceState:d,getDeviceState:l}=n,{endpoint:r}=m,{t:u}=C(["groups","common"]),t=o.useMemo(()=>{const v=[];for(const _ of a.definition?.exposes??[]){const x=y(_);if(x&&(v.push(x),v.length===10))break}return v},[a]),s=o.useCallback(async v=>await d(a.ieee_address,v),[a.ieee_address,d]),p=o.useCallback(async v=>await l(a.ieee_address,v),[a.ieee_address,l]),f=o.useCallback(async()=>await i(a.ieee_address,r),[a.ieee_address,r,i]);return e.jsx(A,{features:t,device:a,endpoint:r,deviceState:g,onChange:s,onRead:p,featureWrapperClass:E,lastSeenConfig:c,children:e.jsx(D,{onClick:f,className:"btn btn-square btn-outline btn-error btn-sm",title:u("remove_from_group"),modalDescription:u("common:dialog_confirmation_prompt"),modalCancelLabel:u("common:cancel"),children:e.jsx(w,{icon:k})})})}),W=o.memo(n=>{const{group:i}=n,m=b(t=>t.devices),a=b(t=>t.deviceStates),g=b(t=>t.bridgeInfo.config.advanced.last_seen),{sendMessage:c}=o.useContext(j),d=o.useCallback(async(t,s)=>await c("bridge/request/group/members/remove",{device:t,endpoint:s,group:i.id.toString()}),[c,i.id]),l=o.useCallback(async(t,s)=>{await c(`${t}/set`,s)},[c]),r=o.useCallback(async(t,s)=>{await c(`${t}/get`,s)},[c]),u=o.useMemo(()=>{const t=[];for(const s of i.members){const p=m.find(f=>f.ieee_address===s.ieee_address);p&&t.push(e.jsx("div",{className:"w-[23rem] card bg-base-200 rounded-box shadow-md",children:e.jsx(I,{removeDeviceFromGroup:d,device:p,groupMember:s,deviceState:a[p.friendly_name]??{},lastSeenConfig:g,setDeviceState:l,getDeviceState:r})},`${s.ieee_address}-${s.endpoint}`))}return t},[i,m,g,a,d,l,r]);return e.jsx("div",{className:"flex flex-row flex-wrap justify-center gap-3",children:u})});function te({group:n}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-row flex-wrap justify-evenly gap-4 mb-4",children:[e.jsx("div",{className:"flex-1",children:e.jsx(G,{group:n})}),e.jsx("div",{className:"flex-1",children:e.jsx(M,{target:n,deviceState:{}})}),e.jsx("div",{className:"flex-1",children:e.jsx(F,{target:n,deviceState:{}})})]}),e.jsx(W,{group:n})]})}export{te as default};
Binary file
Binary file
@@ -1,3 +0,0 @@
1
-  �\���ym8�dʉ�'n�NMv�J��[�4�/�hF��u�%���x�.��[���j;o�E,�kk:�:>�:hx�>h�!�{N��dr�^�~{qr�W2%�U��BF��D.��}�����]�+%Pb9�F�4����*=��W���b*��ݵuT�c�"E��G������@w�+a���
2
- �N�U����KmqA�G�%,��-��}�_.�i_@��s��%��
3
- ��+�����*�*��R���u����bޒ����Ϸ�V_?BNB'T™QkK���� �#s���
@@ -1 +0,0 @@
1
- import{ag as le,aW as rr,aX as tr,aY as ar,aZ as nr,l as sr,a_ as or,a$ as cr,b0 as ir,b1 as lr,b2 as ur,aO as ue,b3 as me,b4 as mr,b5 as fr,b6 as hr,b7 as pr,b8 as dr,b9 as xr,ba as fe,bb as br,bc as he,bd as gr,be as _r,bf as L,bg as pe,bh as de,a2 as yr,bi as Cr,bj as vr,bk as jr,bl as Sr,bm as Tr,bn as kr,bo as Er,bp as Nr,bq as Rr,br as Ar,bs as wr,bt as Fr,bu as qr,bv as $r,bw as Ir,bx as Br,by as Mr,bz as Vr,bA as Or,bB as F,aQ as Gr,bC as xe,bD as Ur,bE as Hr,bF as Lr,bG as Pr,bH as Be,bI as zr,bJ as Me,bK as Wr,bL as Dr,bM as Xr,bN as Qr,r as i,j as o,b as w,B as S,F as ie,bO as Yr,ax as Jr,bP as Kr,bQ as Zr,M as et}from"./index-iXNIEDco.js";import{D as U}from"./DisplayValue-CfKoGI0j.js";import{r as Ve,a as Oe,b as rt}from"./_createCompounder-CDCf6N6Y.js";var P,be;function tt(){if(be)return P;be=1;function e(a,t,r){var s=-1,n=a.length;t<0&&(t=-t>n?0:n+t),r=r>n?n:r,r<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var u=Array(n);++s<n;)u[s]=a[s+t];return u}return P=e,P}var z,ge;function at(){if(ge)return z;ge=1;var e=tt();function a(t,r,s){var n=t.length;return s=s===void 0?n:s,!r&&s>=n?t:e(t,r,s)}return z=a,z}var W,_e;function Ge(){if(_e)return W;_e=1;var e="\\ud800-\\udfff",a="\\u0300-\\u036f",t="\\ufe20-\\ufe2f",r="\\u20d0-\\u20ff",s=a+t+r,n="\\ufe0e\\ufe0f",u="\\u200d",c=RegExp("["+u+e+s+n+"]");function f(l){return c.test(l)}return W=f,W}var D,ye;function nt(){if(ye)return D;ye=1;function e(a){return a.split("")}return D=e,D}var X,Ce;function st(){if(Ce)return X;Ce=1;var e="\\ud800-\\udfff",a="\\u0300-\\u036f",t="\\ufe20-\\ufe2f",r="\\u20d0-\\u20ff",s=a+t+r,n="\\ufe0e\\ufe0f",u="["+e+"]",c="["+s+"]",f="\\ud83c[\\udffb-\\udfff]",l="(?:"+c+"|"+f+")",d="[^"+e+"]",h="(?:\\ud83c[\\udde6-\\uddff]){2}",m="[\\ud800-\\udbff][\\udc00-\\udfff]",p="\\u200d",x=l+"?",y="["+n+"]?",j="(?:"+p+"(?:"+[d,h,m].join("|")+")"+y+x+")*",N=y+x+j,b="(?:"+[d+c+"?",c,h,m,u].join("|")+")",g=RegExp(f+"(?="+f+")|"+b+N,"g");function C(E){return E.match(g)||[]}return X=C,X}var Q,ve;function ot(){if(ve)return Q;ve=1;var e=nt(),a=Ge(),t=st();function r(s){return a(s)?t(s):e(s)}return Q=r,Q}var Y,je;function ct(){if(je)return Y;je=1;var e=at(),a=Ge(),t=ot(),r=Ve();function s(n){return function(u){u=r(u);var c=a(u)?t(u):void 0,f=c?c[0]:u.charAt(0),l=c?e(c,1).join(""):u.slice(1);return f[n]()+l}}return Y=s,Y}var J,Se;function Ue(){if(Se)return J;Se=1;var e=ct(),a=e("toUpperCase");return J=a,J}var K,Te;function it(){if(Te)return K;Te=1;var e=Ve(),a=Ue();function t(r){return a(e(r).toLowerCase())}return K=t,K}var Z,ke;function lt(){if(ke)return Z;ke=1;var e=it(),a=Oe(),t=a(function(r,s,n){return s=s.toLowerCase(),r+(n?e(s):s)});return Z=t,Z}var ut=lt();const mt=le(ut);var ee,Ee;function ft(){if(Ee)return ee;Ee=1;var e=Oe(),a=Ue(),t=e(function(r,s,n){return r+(n?" ":"")+a(s)});return ee=t,ee}var ht=ft();const pt=le(ht),dt={battery_low:F,humidity:Or,illuminance:L,pressure:Vr,co2:Mr,voltage:Br,state:Ir,brightness:L,occupancy:$r,presence:qr,current:Fr,power:wr,energy:Ar,frequency:Rr,tamper:Nr,smoke:Er,radiation_dose_per_hour:kr,radioactive_events_per_minute:Tr,power_factor:Sr,mode:jr,sound:vr,position:Cr,alarm:yr,color_xy:de,color_hs:de,color_temp:pe,color_temp_startup:pe,illuminance_lux:L,soil_moisture:_r,water_leak:fe,week:gr,workdays_schedule:he,holidays_schedule:he,away_mode:br,vibration:fe,power_outage_count:xr,action:dr,angle_x:pr,angle_y:hr,angle_z:fr,side:mr,humidity_alarm:me,temperature_alarm:me,approach_distance:ue,distance:ue,trigger_count:ur,level_config:lr,station:ir,effect:cr,linkquality:or,system_mode:sr,gradient:nr,sensitivity:ar,test:tr,flow:rr},xt=(e,a)=>{let t=F;return e==null||(e>=85?(t=Be,a.push("text-success")):e>=65?t=zr:e>=40?t=Me:e>=20?t=Wr:(t=F,a.push("text-error"))),t},bt=(e,a)=>{let t=F;switch(e){case"high":{t=Be,a.push("text-success");break}case"medium":{t=Me;break}case"low":{t=F,a.push("text-error");break}}return t},gt=(e,a,t)=>{let r=xe;return e==null||(a==="°F"&&(e=(e-32)/1.8),e>=30?(r=Ur,t.push("text-error")):e>=25?r=Hr:e>=20?r=Lr:e>=15?r=Pr:e<5&&(r=xe,t.push("text-info"))),r},_t=(e,a,t)=>{let r;const s=[],n={};switch(e){case"battery":{r=xt(a,s);break}case"battery_state":{r=bt(a,s);break}case"battery_low":{a&&s.push("text-error");break}case"device_temperature":case"temperature":case"local_temperature":{r=gt(a,t,s);break}case"humidity":{a!=null&&a>60&&s.push("text-info");break}case"contact":{r=a?Xr:Qr,a||s.push("text-primary");break}case"occupancy":{a&&(s.push("text-warning"),n.beat=!0);break}case"presence":{a&&(s.push("text-warning"),n.beat=!0);break}case"tamper":{a&&(s.push("text-error"),n.beatFade=!0,n.shake=!0);break}case"water_leak":{a&&(s.push("text-primary"),n.beatFade=!0);break}case"vibration":{a&&(s.push("text-primary"),n.shake=!0);break}default:{e.includes("cyclic")&&(r=Dr);break}}return r?[r,s.join(" "),n]:(r=dt[e],r?[r,s.join(" "),n]:[Gr,"opacity-0",{}])},He=e=>`${e.type}-${e.name}-${e.label}-${e.property}-${e.access}-${e.category}-${e.endpoint}`;var v=(e=>(e[e.STATE=1]="STATE",e[e.SET=2]="SET",e[e.GET=4]="GET",e[e.STATE_SET=3]="STATE_SET",e[e.STATE_GET=5]="STATE_GET",e[e.ALL=7]="ALL",e))(v||{});const q=i.memo(({feature:e,deviceValue:a})=>o.jsxs("div",{children:[e.property&&o.jsx("span",{className:"font-bold",children:o.jsx(U,{value:a,name:e.name})}),"unit"in e&&o.jsx("span",{className:"text-xs ms-1",children:e.unit})]})),$=i.memo(e=>o.jsxs("div",{className:"alert alert-warning",role:"alert",children:["Unknown access ",o.jsx("pre",{children:e.feature.access})]})),yt=i.memo(e=>{const{feature:{access:a=v.SET,name:t,property:r,value_off:s,value_on:n},deviceValue:u,onChange:c,minimal:f}=e,{t:l}=w("zigbee"),d=i.useCallback(m=>c({[r]:m}),[r,c]),h=i.useCallback(m=>c({[r]:m.target.checked?n:s}),[n,s,r,c]);if(a&v.SET){const m=u!=null,p=!f||f&&!m;return o.jsxs("div",{children:[p&&o.jsx(S,{className:"btn btn-link",item:s,onClick:d,children:o.jsx(U,{value:s,name:t})}),m?o.jsx("input",{className:"toggle",type:"checkbox",checked:u===n,onChange:h}):o.jsx(ie,{icon:Yr,title:l("unknown")}),p&&o.jsx(S,{className:"btn btn-link",item:n,onClick:d,children:o.jsx(U,{value:n,name:t})})]})}return a&v.STATE?o.jsx(q,{...e}):o.jsx($,{...e})}),R=i.memo(e=>{const{feature:a,onChange:t,parentFeatures:r,onRead:s,device:n,deviceState:u,featureWrapperClass:c,minimal:f,endpointSpecific:l,steps:d}=e,{type:h,property:m}=a,[p,x]=i.useState({}),{t:y}=w(["composite","common"]),j=i.useMemo(()=>Jr({},u,p),[u,p]),N="features"in a&&a.features||[],b=i.useMemo(()=>{if(h==="composite"&&r!==void 0){if(r.length===0)return!0;if(r.length===1){const _=r[0].type;return _!=null&&_!=="composite"&&_!=="list"}}return!1},[h,r]);i.useEffect(()=>{x({})},[n.ieee_address]);const g=i.useCallback(_=>{x({...p,..._}),b||t(h==="composite"&&m?{[m]:{...p,..._}}:_)},[p,h,m,b,t]),C=i.useCallback(()=>{const _={...u,...p};t(m?{[m]:_}:_)},[m,t,p,u]),E=i.useCallback(_=>{s?.(h==="composite"&&m?{[m]:_}:_)},[s,h,m]);return o.jsxs(o.Fragment,{children:[N.map(_=>o.jsx(er,{feature:_,parentFeatures:r??[],device:n,deviceState:j,onChange:g,onRead:E,featureWrapperClass:c,minimal:f,endpointSpecific:l,steps:d?.[_.name]},He(_))),b&&o.jsx("div",{className:"self-end float-right",children:o.jsx(S,{className:`btn btn-primary ${f?"btn-sm":""}`,onClick:C,children:y("common:apply")})})]})}),Ct=i.memo(e=>o.jsx(R,{...e}));var re,Ne;function vt(){if(Ne)return re;Ne=1;function e(a,t,r){return a===a&&(r!==void 0&&(a=a<=r?a:r),t!==void 0&&(a=a>=t?a:t)),a}return re=e,re}var te,Re;function jt(){if(Re)return te;Re=1;var e=/\s/;function a(t){for(var r=t.length;r--&&e.test(t.charAt(r)););return r}return te=a,te}var ae,Ae;function St(){if(Ae)return ae;Ae=1;var e=jt(),a=/^\s+/;function t(r){return r&&r.slice(0,e(r)+1).replace(a,"")}return ae=t,ae}var ne,we;function Tt(){if(we)return ne;we=1;var e=St(),a=Kr(),t=rt(),r=NaN,s=/^[-+]0x[0-9a-f]+$/i,n=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;function f(l){if(typeof l=="number")return l;if(t(l))return r;if(a(l)){var d=typeof l.valueOf=="function"?l.valueOf():l;l=a(d)?d+"":d}if(typeof l!="string")return l===0?l:+l;l=e(l);var h=n.test(l);return h||u.test(l)?c(l.slice(2),h?2:8):s.test(l)?r:+l}return ne=f,ne}var se,Fe;function kt(){if(Fe)return se;Fe=1;var e=vt(),a=Tt();function t(r,s,n){return n===void 0&&(n=s,s=void 0),n!==void 0&&(n=a(n),n=n===n?n:0),s!==void 0&&(s=a(s),s=s===s?s:0),e(a(r),s,n)}return se=t,se}var Et=kt();const k=le(Et),Nt=[.412453,.35758,.180423,.212671,.71516,.072169,.019334,.119193,.950227],Rt=[3.2404813432005266,-1.5371515162713183,-.49853632616888777,-.9692549499965684,1.8759900014898907,.041555926558292815,.05564663913517715,-.20404133836651123,1.0573110696453443],Le=.42,Pe=.0031308,ze=12.92,H=.055,O=e=>e<=Pe?ze*e:(1+H)*e**Le-H,At=1/Le,wt=O(Pe),Ft=1/ze,oe=e=>e<=wt?e*Ft:((e+H)/(1+H))**At,We=(e,a)=>{const t=[0,0,0];for(let r=0;r<3;r++){t[r]=0;for(let s=0;s<3;s++)t[r]+=a[r*3+s]*e[s]}return t},qe=(e,a,t)=>{const r=[oe(e),oe(a),oe(t)];return We(r,Nt)},qt=(e,a,t)=>{const r=We([e,a,t],Rt);return[O(r[0]),O(r[1]),O(r[2])]},De=(e,a,t)=>{const r=1-e-a;return qt(t/a*e,t,t/a*r)},Xe=(e,a,t=10)=>{let r=1;for(let s=0;s<t;s++){const n=Math.max(...De(e,a,r));r=r/n}return r},I=(e,a,t)=>{if(e/=255,a/=255,t/=255,e<1e-12&&a<1e-12&&t<1e-12){const[c,f,l]=qe(1,1,1),d=c+f+l;return[c/d,f/d,0]}const[r,s,n]=qe(e,a,t),u=r+s+n;return[r/u,s/u,s]},$t=(e,a,t)=>{t===void 0&&(t=Xe(e,a));const[r,s,n]=De(e,a,t);return[k(r*255,0,255),k(s*255,0,255),k(n*255,0,255)]},B=(e,a,t)=>{e/=255,a/=255,t/=255;const r=Math.max(e,a,t),s=r-Math.min(e,a,t),n=s?(r===e?(a-t)/s+(a<t?6:0):r===a?2+(t-e)/s:4+(e-a)/s)*60:0,u=r?s/r*100:0,c=r*100;return[k(n,0,360),k(u,0,100),k(c,0,100)]},It=(e,a,t)=>{a/=100,t/=100;const r=~~(e/60),s=e/60-r,n=t*(1-a),u=t*(1-a*s),c=t*(1-a*(1-s)),f=r%6,l=[t,u,n,n,c,t][f]*255,d=[c,t,t,u,n,n][f]*255,h=[n,n,c,t,t,u][f]*255;return[k(l,0,255),k(d,0,255),k(h,0,255)]},M=(e,a,t)=>{const[r,s,n]=[e,a,t].map(u=>Math.round(u).toString(16).padStart(2,"0"));return`#${r}${s}${n}`},Bt=e=>(e=e.slice(1),Array.from({length:3}).map((a,t)=>Number.parseInt(e.slice(t*2,t*2+2),16))),A=(e,a)=>{switch(a){case"color_xy":{const{x:t=.313,y:r=.329,Y:s=Xe(t,r===0?.329:r)}=e,n=r===0?[255,255,255]:$t(t,r,s);return{color_rgb:n,color_hs:B(...n),color_xy:[t,r,s],hex:M(...n)}}case"color_hs":{const{hue:t=0,saturation:r=0}=e,s=100,n=It(t,r,s);return{color_rgb:n,color_hs:[t,r,s],color_xy:I(...n),hex:M(...n)}}case"color_rgb":{const{r:t=255,g:r=255,b:s=255}=e;return{color_rgb:[t,r,s],color_hs:B(t,r,s),color_xy:I(t,r,s),hex:M(t,r,s)}}case"hex":{const t=e.hex,r=Bt(t);return{color_rgb:r,color_hs:B(...r),color_xy:I(...r),hex:t}}default:{const t=[255,255,255];return{color_rgb:t,color_hs:B(...t),color_xy:I(...t),hex:M(...t)}}}},$e=(e,a)=>{switch(a){case"color_xy":return{x:e.color_xy[0],y:e.color_xy[1]};case"color_hs":return{hue:e.color_hs[0],saturation:e.color_hs[1]};case"color_rgb":return{r:e.color_rgb[0],g:e.color_rgb[1],b:e.color_rgb[2]};case"hex":return{hex:e.hex}}},Qe=e=>`${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}`,G=e=>`${e[0].toFixed(2)}°, ${e[1].toFixed(2)}%, ${e[2].toFixed(2)}%`,Ye=e=>`${e[0].toFixed(0)}, ${e[1].toFixed(0)}, ${e[2].toFixed(0)}`,Je=e=>e,Ie=e=>({color_xy:Qe(e.color_xy),color_hs:G(e.color_hs),color_rgb:Ye(e.color_rgb),hex:Je(e.hex)}),Mt=e=>{const a=e.match(/\d+(\.\d+)?/gu)??[];return Array.from({length:3}).map((t,r)=>+(a[r]??0))},Vt=e=>{const a=e.match(/\d+(\.\d+)?/gu)??[];return Array.from({length:3}).map((t,r)=>k(+(a[r]??0),0,r?100:360))},Ot=e=>{const a=e.match(/\d+(\.\d+)?/gu)??[];return Array.from({length:3}).map((t,r)=>k(+(a[r]??0),0,255))},ce=(e,a)=>{switch(a){case"color_xy":{const t=Mt(e);return A({x:t[0],y:t[1]},"color_xy")}case"color_hs":{const t=Vt(e);return A({hue:t[0],saturation:t[1]},"color_hs")}case"color_rgb":{const t=Ot(e);return A({r:t[0],g:t[1],b:t[2]},"color_rgb")}case"hex":return A({hex:e},"hex")}},Gt="linear-gradient(to right, white, transparent)",Ut="linear-gradient(to right, rgb(255, 0, 0), rgb(255, 255, 0), rgb(0, 255, 0), rgb(0, 255, 255), rgb(0, 0, 255), rgb(255, 0, 255), rgb(255, 0, 0))",V=i.memo(({label:e,...a})=>o.jsxs("label",{className:"input",children:[e,o.jsx("input",{type:"text",className:"grow",...a})]})),Ke=i.memo(e=>{const{onChange:a,value:t={},format:r,minimal:s}=e,[n,u]=i.useState(A(t,r)),[c,f]=i.useState(Ie(n)),[l,d]=i.useState({color_rgb:!1,color_hs:!1,color_xy:!1,hex:!1});i.useEffect(()=>{const b=A(t,r);u(b),f(Ie(b))},[t,r]),i.useEffect(()=>{if(!l.color_xy){const b=Qe(n.color_xy);f(g=>({...g,color_xy:b}))}},[l.color_xy,n.color_xy]),i.useEffect(()=>{if(!l.color_hs){const b=G(n.color_hs);f(g=>({...g,color_hs:b}))}},[l.color_hs,n.color_hs]),i.useEffect(()=>{if(!l.color_rgb){const b=Ye(n.color_rgb);f(g=>({...g,color_rgb:b}))}},[l.color_rgb,n.color_rgb]),i.useEffect(()=>{if(!l.hex){const b=Je(n.hex);f(g=>({...g,hex:b}))}},[l.hex,n.hex]);const h=i.useCallback(b=>{if(b.target.value){const g=Array.from(n.color_hs);g[1]=b.target.valueAsNumber;const C=G(g);f(E=>({...E,color_hs:C})),u(ce(C,"color_hs"))}},[n.color_hs]),m=i.useCallback(b=>{if(b.target.value){const g=Array.from(n.color_hs),C=g[1];g[1]=C===0?100:C,g[0]=b.target.valueAsNumber;const E=G(g);f(_=>({..._,color_hs:E})),u(ce(E,"color_hs"))}},[n.color_hs]),p=i.useCallback(b=>{const{value:g,name:C}=b.target;f(E=>({...E,[C]:g})),u(ce(g,C))},[]),x=i.useCallback(b=>{d(g=>({...g,[b.target.name]:!0}))},[]),y=i.useCallback(b=>{d(g=>({...g,[b.target.name]:!1})),a($e(n,r))},[n,r,a]),j=i.useCallback(()=>{a($e(n,r))},[n,r,a]),N=i.useMemo(()=>`hsl(${n.color_hs[0]}, 100%, 50%)`,[n.color_hs[0]]);return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"flex flex-row flex-wrap gap-3 items-center",children:o.jsx("div",{className:`w-full${s?" max-w-xs":""}`,children:o.jsx("input",{type:"range",min:0,max:100,value:n.color_hs[1],className:`range [--range-bg:transparent] [--range-fill:0] w-full${s?" range-xs ":""}`,style:{backgroundImage:Gt,backgroundColor:N},onChange:h,onTouchEnd:j,onMouseUp:j})})}),o.jsx("div",{className:"flex flex-row flex-wrap gap-3 items-center",children:o.jsx("div",{className:`w-full${s?" max-w-xs":""}`,children:o.jsx("input",{type:"range",min:0,max:360,value:n.color_hs[0],className:`range [--range-bg:transparent] [--range-fill:0] w-full${s?" range-xs ":""}`,style:{backgroundImage:Ut},onChange:m,onTouchEnd:j,onMouseUp:j})})}),!s&&o.jsxs("div",{className:"flex flex-row flex-wrap gap-2 justify-around",children:[o.jsx(V,{label:"hex",name:"hex",value:c.hex,onChange:p,onFocus:x,onBlur:y}),o.jsx(V,{label:"rgb",name:"color_rgb",value:c.color_rgb,onChange:p,onFocus:x,onBlur:y}),o.jsx(V,{label:"hsv",name:"color_hs",value:c.color_hs,onChange:p,onFocus:x,onBlur:y}),o.jsx(V,{label:"xyY",name:"color_xy",value:c.color_xy,onChange:p,onFocus:x,onBlur:y})]})]})}),Ht=i.memo(e=>{const{deviceValue:a,feature:{name:t,features:r,property:s},onChange:n,minimal:u}=e,c=i.useMemo(()=>{const l={};for(const d of r){const h=Number.parseFloat(a?.[d.name]);l[d.name]=Number.isNaN(h)?0:h}return l},[a,r]),f=i.useCallback(l=>n({[s??"color"]:l}),[s,n]);return o.jsx(Ke,{onChange:f,value:c,format:t,minimal:u})}),Lt={position:[0,25,50,75,100].map(e=>({value:e,name:`${e}`})),tilt:[0,25,50,75,100].map(e=>({value:e,name:`${e}`}))},Pt=i.memo(e=>o.jsx(R,{...e,steps:Lt}));function T(e){return typeof e!="object"}const Ze=i.memo(e=>{const{onChange:a,values:t,value:r,minimal:s}=e,{t:n}=w("common"),u=i.useCallback(c=>{const f=t.find(l=>T(l)?l===c.target.value:l.value===Number.parseInt(c.target.value,10));a(f)},[t,a]);return s?o.jsxs("select",{className:"select",onChange:u,value:T(r)?r:r?.value,children:[o.jsx("option",{value:"",disabled:!0,children:n("select_value")}),t.map(c=>o.jsx("option",{value:T(c)?c:c.value,children:T(c)?c:c.name},T(c)?c:c.name))]}):o.jsx("div",{className:"join join-vertical lg:join-horizontal",children:t.map(c=>o.jsx(S,{className:`btn btn-soft btn-sm join-item${(T(c)?c===r:c.value===(T(r)?r:r?.value))?" btn-active":""}`,onClick:f=>a(f),item:T(c)?c:c.value,title:T(c)?`${c}`:c.description,children:T(c)?o.jsx(U,{value:c,name:""}):c.name},T(c)?c:c.name))})}),zt=6,Wt=i.memo(e=>{const{onChange:a,feature:{access:t=v.SET,values:r,property:s},deviceValue:n,minimal:u}=e;return t&v.SET?o.jsx(Ze,{onChange:c=>a({[s]:c}),values:r,value:n||"",minimal:u||r.length>zt}):t&v.STATE?o.jsx(q,{...e}):o.jsx($,{...e})}),Dt=i.memo(e=>o.jsx(R,{...e})),Xt=i.memo(e=>{const{minimal:a,onChange:t,feature:{length_min:r,length_max:s,property:n},deviceValue:u}=e,{t:c}=w(["gradient","common"]),[f,l]=i.useState(r>0?Array(r).fill("#ffffff"):[]);i.useEffect(()=>{u&&Array.isArray(u)&&u.length>0&&l(u)},[u]);const d=i.useCallback((b,g)=>{const C=Array.from(f);C[b]=g,l(C)},[f]),h=i.useCallback(()=>{const b=Array.from(f);b.push("#ffffff"),l(b)},[f]),m=i.useCallback(b=>{const g=Array.from(f);g.splice(b,1),l(g)},[f]),p=i.useCallback(()=>t({[n??"gradient"]:f}),[f,n,t]),[x,y]=i.useState(!1),[j,N]=i.useState(!1);return i.useEffect(()=>{y(f.length<s),N(f.length>r)},[f,r,s]),o.jsxs("div",{className:"flex flex-col gap-2",children:[f.map((b,g)=>o.jsxs("div",{className:"flex flex-row flex-wrap gap-2 items-center",children:[o.jsx(Ke,{onChange:C=>{d(g,C.hex)},value:{hex:b},format:"hex",minimal:a}),j&&o.jsx(S,{className:"btn btn-sm btn-error",onClick:()=>m(g),children:"-"})]},`${b}-${g}`)),x&&o.jsx("div",{className:"flex flex-row flex-wrap gap-2",children:o.jsx(S,{className:"btn btn-sm btn-success",onClick:h,children:"+"})}),o.jsx("div",{children:o.jsx(S,{className:`btn btn-primary ${a?"btn-sm":""}`,onClick:p,children:c("common:apply")})})]})}),Qt={brightness:[0,25,50,75,100].map(e=>({value:Zr(e,[0,100],[0,255]),name:`${e}%`})),color_temp:[1e3,2e3,3e3,4e3,5e3,6500].map(e=>({value:1e6/e,name:`${e}K`}))},Yt=i.memo(e=>o.jsx(R,{...e,steps:Qt}));function Jt(e){return e.type==="composite"&&(e.name==="color_xy"||e.name==="color_hs")}const Kt=i.memo(e=>{const{t:a}=w("zigbee"),{children:t,feature:r,deviceValue:s,onRead:n,endpointSpecific:u}=e,c=r.unit,f=i.useMemo(()=>_t(r.name,s,c),[c,r.name,s]),l=i.useMemo(()=>r.property&&r.access&v.GET||Jt(r),[r]),d=e.parentFeatures?.[e.parentFeatures.length-1],h=r.name==="state"?r.property:r.name;let m=r.label||pt(mt(h));d?.label&&r.name==="state"&&d.type!=="light"&&d.type!=="switch"&&(m=`${d.label} ${r.label.charAt(0).toLowerCase()}${r.label.slice(1)}`);const p=i.useCallback(x=>{x.property&&n?.({[x.property]:""})},[n]);return o.jsxs("div",{className:"list-row p-3",children:[o.jsx("div",{children:o.jsx(ie,{icon:f[0],fixedWidth:!0,className:f[1],...f[2],size:"2xl"})}),o.jsxs("div",{children:[o.jsxs("div",{title:h,children:[m,!u&&r.endpoint?` (${a("endpoint")}: ${r.endpoint})`:""]}),o.jsx("div",{className:"text-xs font-semibold opacity-60",children:r.description})]}),o.jsx("div",{className:"list-col-wrap flex flex-col gap-2",children:t}),l&&o.jsx(S,{item:r,onClick:p,className:"btn btn-xs btn-square btn-primary",children:o.jsx(ie,{icon:et})})]})}),Zt=i.memo(e=>{const{onChange:a,value:t,feature:r,parentFeatures:s}=e,[n,u]=i.useState(t);i.useEffect(()=>{u(t)},[t]);const c=i.useCallback(h=>{u(h),a(h)},[a]),f=i.useCallback((h,m)=>{const p=Array.from(n);typeof h=="object"&&(h={...n[m],...h}),p[m]=h,c(p)},[n,c]),l=i.useCallback(h=>{const m=Array.from(n);m.splice(h,1),c(m)},[n,c]),d=i.useCallback(()=>u([...n,{}]),[n]);return n.length===0?o.jsx("div",{className:"flex flex-row flex-wrap gap-2",children:o.jsx(S,{className:"btn btn-success col-1",onClick:d,children:"+"})}):n.map((h,m)=>o.jsxs("div",{className:"flex flex-row flex-wrap gap-2",children:[o.jsx(er,{feature:r,device:{},deviceState:h,onChange:p=>f(p,m),featureWrapperClass:Kt,parentFeatures:s}),o.jsxs("div",{className:"join join-vertical lg:join-horizontal",children:[o.jsx(S,{item:m,className:"btn btn-sm btn-error btn-square join-item",onClick:l,children:"-"}),n.length-1===m&&o.jsx(S,{className:"btn btn-sm btn-success btn-square join-item",onClick:d,children:"+"})]})]},m))}),ea=i.memo(e=>{const{t:a}=w(["list","common"]),{feature:t,minimal:r,parentFeatures:s,onChange:n,deviceValue:u}=e,[c,f]=i.useState(t.property?u?.[t.property]??[]:[]),l=i.useMemo(()=>{if(s!==void 0){if(s.length===0)return!0;if(s.length===1){const x=s[0].type;return x!=null&&x!=="composite"&&x!=="list"}}return!1},[s]),d=i.useCallback(x=>{if(f(x),!l){let y=x;if(t.item_type.type!=="composite"&&t.item_type.name){y=[];for(const j of x)y.push(j[t.item_type.name])}n(t.property?{[t.property]:y}:y)}},[t.property,t.item_type,n,l]),h=i.useCallback(()=>{let x=c;if(t.item_type.type!=="composite"&&t.item_type.name){x=[];for(const y of c)x.push(y[t.item_type.name])}n(t.property?{[t.property]:x}:x)},[t.property,t.item_type,n,c]),{access:m=v.SET,item_type:p}=t;return m&v.SET?o.jsxs(o.Fragment,{children:[o.jsx(Zt,{feature:p,parentFeatures:[...s,t],onChange:d,value:c}),l&&o.jsx("div",{children:o.jsx(S,{className:`btn btn-primary ${r?"btn-sm":""}`,onClick:h,disabled:c.length===0,children:a("common:apply")})})]}):m&v.STATE?o.jsx(q,{...e}):o.jsx($,{...e})}),ra=i.memo(e=>o.jsx(R,{...e})),ta=i.memo(e=>{const{onChange:a,value:t,min:r,max:s,unit:n,steps:u,minimal:c,...f}=e,[l,d]=i.useState(t),h=r!=null&&s!=null;i.useEffect(()=>{d(t)},[t]);const m=i.useCallback(x=>{d(x.target.value?x.target.valueAsNumber:"")},[]),p=i.useCallback(x=>!x.target.validationMessage&&a(l===""?null:l),[l,a]);return o.jsxs("div",{className:"flex flex-row flex-wrap gap-3 items-center",children:[!c&&u?o.jsx(Ze,{values:u,onChange:a,value:l}):null,h?o.jsxs("div",{className:"w-full max-w-xs",children:[o.jsx("input",{min:r,max:s,type:"range",className:"range range-xs range-primary validator",value:l,onChange:m,onTouchEnd:p,onMouseUp:p,...f}),o.jsxs("div",{className:"flex justify-between px-1 mt-1 text-xs",children:[o.jsx("span",{children:r}),c&&o.jsx("span",{children:l}),o.jsx("span",{children:s})]})]}):null,(!c||!h)&&o.jsxs("label",{className:"input",children:[o.jsx("input",{type:"number",className:"grow validator",value:l,onChange:m,onBlur:p,min:r,max:s,...f}),n]})]})}),aa=i.memo(e=>{const{feature:{presets:a,access:t=v.SET,property:r,unit:s,value_max:n,value_min:u,value_step:c},deviceValue:f,steps:l,onChange:d,minimal:h}=e;return t&v.SET?o.jsx(ta,{onChange:m=>d({[r]:m}),value:f??"",min:u,max:n,step:c,steps:a?.length?a:l,unit:s,minimal:h}):t&v.STATE?o.jsx(q,{...e}):o.jsx($,{...e})}),na=i.memo(e=>o.jsx(R,{...e})),sa=i.memo(e=>{const{onChange:a,value:t,...r}=e,[s,n]=i.useState(t);return i.useEffect(()=>{n(t)},[t]),o.jsx("input",{type:"text",className:"input validator",value:s,onChange:u=>n(u.target.value),onBlur:u=>!u.target.validationMessage&&a(s),...r})}),oa=i.memo(e=>{const{feature:{access:a=v.SET,property:t},deviceValue:r,onChange:s}=e;return a&v.SET?o.jsx(sa,{onChange:n=>s({[t]:n}),value:r??""}):a&v.STATE?o.jsx(q,{...e}):o.jsx($,{...e})}),er=i.memo(e=>{const{feature:a,device:t,deviceState:r,steps:s,onRead:n,onChange:u,featureWrapperClass:c,minimal:f,endpointSpecific:l,parentFeatures:d}=e,h=i.useMemo(()=>a.property?r[a.property]:void 0,[a.property,r[a.property]]),m=i.useMemo(()=>He(a),[a]),p=i.useMemo(()=>({device:t,deviceValue:h,onChange:u,onRead:n,featureWrapperClass:c,minimal:f,endpointSpecific:l,parentFeatures:d}),[t,h,u,n,c,f,l,d]),x=i.useMemo(()=>({feature:a,onRead:n,deviceValue:h,parentFeatures:d,endpointSpecific:l}),[a,n,h,d,l]);switch(a.type){case"binary":return o.jsx(c,{...x,children:o.jsx(yt,{feature:a,...p},m)},m);case"numeric":return o.jsx(c,{...x,children:o.jsx(aa,{feature:a,...p,steps:s},m)},m);case"list":return a.name==="gradient"&&a.length_min!=null&&a.length_max!=null?o.jsx(c,{...x,children:o.jsx(Xt,{feature:a,...p},m)},m):o.jsx(c,{...x,children:o.jsx(ea,{feature:a,...p},m)},m);case"text":return o.jsx(c,{...x,children:o.jsx(oa,{feature:a,...p},m)},m);case"enum":return o.jsx(c,{...x,children:o.jsx(Wt,{feature:a,...p},m)},m);case"light":return o.jsx(Yt,{feature:a,...p,deviceState:r},m);case"switch":return o.jsx(na,{feature:a,...p,deviceState:r},m);case"cover":return o.jsx(Pt,{feature:a,...p,deviceState:r},m);case"lock":return o.jsx(ra,{feature:a,...p,deviceState:r},m);case"climate":return o.jsx(Ct,{feature:a,...p,deviceState:r},m);case"fan":return o.jsx(Dt,{feature:a,...p,deviceState:r},m);case"composite":{if(a.name==="color_xy"||a.name==="color_hs")return o.jsx(c,{...x,children:o.jsx(Ht,{feature:a,...p},m)},m);const y=d&&a.property?r[a.property]:r;return o.jsx(c,{...x,children:o.jsx(R,{feature:a,...p,deviceState:y},m)},m)}default:return console.error("Unsupported feature",a),o.jsx(c,{...x,children:o.jsx("pre",{children:JSON.stringify(a,null,4)})},m)}});export{er as F,Kt as a,v as b,_t as c,mt as d,He as g,pt as s};
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Devices-TK6OH5en.js","./index-iXNIEDco.js","./envs-DFlyG_dH.js","./index-DGcjwAm-.css","./RecallRemove-UfYYwosz.js","./DashboardFeatureWrapper-TlB_F76s.js","./Feature-DKsa0Oda.js","./DisplayValue-CfKoGI0j.js","./_createCompounder-CDCf6N6Y.js","./InputField-D4dIbfoE.js","./SelectField-BFSZ1jgU.js","./DevicePicker-DUSP1774.js","./EndpointPicker-CKjImsmQ.js","./DeviceCard-C9vw9b6F.js","./LastSeen-CUs1Vb2e.js","./format-CFXT8pE2.js","./Lqi-DXzNBOZd.js","./PowerSource-DHbzVhTD.js","./snakeCase-2EvkzqTo.js","./DeviceImage-DshByPQQ.js","./index-Dncflq5A.js","./GroupSettings-C9hZwz-c.js","./SettingsList-B5lRPdmf.js","./CheckboxField-De0QHbsG.js","./NumberField-1g9cUedG.js"])))=>i.map(i=>d[i]);
2
- import{r as n,b as g,j as e,L as f,P as j,F as m,f as v,u as b,d as h,a as _,N as p,o as N,k as w,_ as x}from"./index-iXNIEDco.js";import"./envs-DFlyG_dH.js";const y=n.memo(u=>{const{groups:r,currentGroup:t,tab:o="devices"}=u,[c,l]=n.useState(""),{t:s}=g("common"),d=n.useMemo(()=>r.filter(a=>a.friendly_name.toLowerCase().includes(c.toLowerCase())&&a.id!==t?.id).map(a=>e.jsx("li",{children:e.jsx(f,{to:`/group/${a.id}/${o}`,onClick:()=>l(""),className:"dropdown-item",children:a.friendly_name})},a.id)),[r,c,t,o]);return e.jsxs(j,{name:"header-group-selector",buttonChildren:`${t?`#${t.id} - ${t.friendly_name}`:s("unknown_group")}`,dropdownStyle:"dropdown-start",children:[e.jsxs("label",{className:"input",children:[e.jsx(m,{icon:v}),e.jsx("input",{type:"search",placeholder:s("type_to_filter"),onChange:a=>l(a.target.value),value:c})]},"search"),d]})}),T=n.lazy(async()=>await x(()=>import("./Devices-TK6OH5en.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),import.meta.url)),$=n.lazy(async()=>await x(()=>import("./GroupSettings-C9hZwz-c.js"),__vite__mapDeps([21,1,2,3,22,23,9,24,10]),import.meta.url));function G(){const u=b(),{t:r}=g(["groups","common"]),{groupId:t,tab:o}=h(),c=_(i=>i.groups),l=Number.parseInt(t,10),s=t?c.find(i=>i.id===l):void 0;n.useEffect(()=>{!o&&s&&u(`/group/${s.id}/devices`,{replace:!0})},[o,s,u]);const d=({isActive:i})=>i?"tab tab-active":"tab",a=n.useMemo(()=>{if(!s)return e.jsx("div",{className:"flex-auto justify-center items-center",children:r("common:unknown_group")});switch(o){case"devices":return e.jsx(T,{group:s});case"settings":return e.jsx($,{group:s})}},[o,s,r]);return e.jsxs(e.Fragment,{children:[e.jsx(y,{groups:c,currentGroup:s,tab:o}),e.jsxs("div",{className:"tabs tabs-border mt-2",children:[e.jsxs(p,{to:`/group/${t}/devices`,className:d,children:[e.jsx(m,{icon:N,className:"me-2"}),r("common:devices")]}),e.jsxs(p,{to:`/group/${t}/settings`,className:d,children:[e.jsx(m,{icon:w,className:"me-2"}),r("settings")]})]}),e.jsx("div",{className:"tab-content block h-full bg-base-100 p-3",children:a})]})}export{G as default};
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{u as a,r as s,s as t,H as r,j as o}from"./index-iXNIEDco.js";import"./envs-DFlyG_dH.js";function d(){const e=a();return s.useEffect(()=>{e(t.get(r)==="dashboard"?"/dashboard":"/devices",{replace:!0})},[e]),o.jsx("div",{})}export{d as default};
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file