homebridge-config-ui-x 5.0.0-beta.4 → 5.0.0-beta.40

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 (302) hide show
  1. package/CHANGELOG.md +224 -20
  2. package/CONTRIBUTING.md +5 -4
  3. package/LICENSE +1 -1
  4. package/config.schema.json +38 -18
  5. package/dist/bin/fork.js +17 -7
  6. package/dist/bin/fork.js.map +1 -1
  7. package/dist/bin/hb-service.d.ts +2 -2
  8. package/dist/bin/hb-service.js +68 -57
  9. package/dist/bin/hb-service.js.map +1 -1
  10. package/dist/bin/platforms/win32.js +4 -2
  11. package/dist/bin/platforms/win32.js.map +1 -1
  12. package/dist/bin/standalone.js +18 -7
  13. package/dist/bin/standalone.js.map +1 -1
  14. package/dist/core/auth/auth.controller.d.ts +2 -0
  15. package/dist/core/auth/auth.controller.js.map +1 -1
  16. package/dist/core/auth/auth.module.js +1 -1
  17. package/dist/core/auth/auth.module.js.map +1 -1
  18. package/dist/core/auth/auth.service.js +10 -10
  19. package/dist/core/auth/auth.service.js.map +1 -1
  20. package/dist/core/auth/jwt.strategy.d.ts +3 -1
  21. package/dist/core/config/config.service.d.ts +3 -0
  22. package/dist/core/config/config.service.js +2 -1
  23. package/dist/core/config/config.service.js.map +1 -1
  24. package/dist/core/config/config.startup.js +2 -2
  25. package/dist/core/config/config.startup.js.map +1 -1
  26. package/dist/core/homebridge-ipc/homebridge-ipc.service.js +3 -3
  27. package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
  28. package/dist/index.js +25 -14
  29. package/dist/index.js.map +1 -1
  30. package/dist/main.js +1 -1
  31. package/dist/main.js.map +1 -1
  32. package/dist/modules/accessories/accessories.controller.js +5 -5
  33. package/dist/modules/accessories/accessories.controller.js.map +1 -1
  34. package/dist/modules/accessories/accessories.service.js +7 -6
  35. package/dist/modules/accessories/accessories.service.js.map +1 -1
  36. package/dist/modules/backup/backup.controller.js +7 -7
  37. package/dist/modules/backup/backup.controller.js.map +1 -1
  38. package/dist/modules/backup/backup.service.js +17 -17
  39. package/dist/modules/backup/backup.service.js.map +1 -1
  40. package/dist/modules/child-bridges/child-bridges.service.js +3 -3
  41. package/dist/modules/child-bridges/child-bridges.service.js.map +1 -1
  42. package/dist/modules/config-editor/config-editor.controller.d.ts +1 -1
  43. package/dist/modules/config-editor/config-editor.controller.js +8 -8
  44. package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
  45. package/dist/modules/config-editor/config-editor.service.d.ts +1 -1
  46. package/dist/modules/config-editor/config-editor.service.js +6 -6
  47. package/dist/modules/config-editor/config-editor.service.js.map +1 -1
  48. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js +11 -9
  49. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js.map +1 -1
  50. package/dist/modules/log/log.service.js +3 -3
  51. package/dist/modules/log/log.service.js.map +1 -1
  52. package/dist/modules/platform-tools/docker/docker.controller.js +3 -3
  53. package/dist/modules/platform-tools/docker/docker.controller.js.map +1 -1
  54. package/dist/modules/platform-tools/docker/docker.service.js +1 -1
  55. package/dist/modules/platform-tools/docker/docker.service.js.map +1 -1
  56. package/dist/modules/platform-tools/hb-service/hb-service.controller.js +2 -2
  57. package/dist/modules/platform-tools/hb-service/hb-service.controller.js.map +1 -1
  58. package/dist/modules/platform-tools/hb-service/hb-service.service.js +6 -6
  59. package/dist/modules/platform-tools/hb-service/hb-service.service.js.map +1 -1
  60. package/dist/modules/platform-tools/linux/linux.controller.js +2 -2
  61. package/dist/modules/platform-tools/linux/linux.controller.js.map +1 -1
  62. package/dist/modules/platform-tools/linux/linux.service.js +2 -2
  63. package/dist/modules/platform-tools/linux/linux.service.js.map +1 -1
  64. package/dist/modules/platform-tools/terminal/terminal.service.js +2 -2
  65. package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
  66. package/dist/modules/plugins/plugins.controller.js +4 -4
  67. package/dist/modules/plugins/plugins.controller.js.map +1 -1
  68. package/dist/modules/plugins/plugins.service.d.ts +3 -1
  69. package/dist/modules/plugins/plugins.service.js +116 -60
  70. package/dist/modules/plugins/plugins.service.js.map +1 -1
  71. package/dist/modules/server/server.controller.d.ts +22 -2
  72. package/dist/modules/server/server.controller.js +96 -18
  73. package/dist/modules/server/server.controller.js.map +1 -1
  74. package/dist/modules/server/server.service.d.ts +24 -6
  75. package/dist/modules/server/server.service.js +186 -59
  76. package/dist/modules/server/server.service.js.map +1 -1
  77. package/dist/modules/status/status.controller.js +3 -3
  78. package/dist/modules/status/status.controller.js.map +1 -1
  79. package/dist/modules/status/status.gateway.d.ts +1 -0
  80. package/dist/modules/status/status.service.d.ts +1 -0
  81. package/dist/modules/status/status.service.js +5 -4
  82. package/dist/modules/status/status.service.js.map +1 -1
  83. package/dist/modules/users/users.controller.js +7 -7
  84. package/dist/modules/users/users.controller.js.map +1 -1
  85. package/dist/self-check.js +6 -6
  86. package/dist/self-check.js.map +1 -1
  87. package/package.json +38 -37
  88. package/public/3rdpartylicenses.txt +87 -61
  89. package/public/assets/hap-icons/airpurifier.svg +49 -16
  90. package/public/assets/hap-icons/airquality.svg +24 -13
  91. package/public/assets/hap-icons/contactsensor-closed.svg +35 -2
  92. package/public/assets/hap-icons/contactsensor-open.svg +80 -2
  93. package/public/assets/hap-icons/door-closed.svg +32 -2
  94. package/public/assets/hap-icons/door-open.svg +48 -2
  95. package/public/assets/hap-icons/fan-off.svg +24 -13
  96. package/public/assets/hap-icons/fan-on.svg +24 -13
  97. package/public/assets/hap-icons/garagedoor.svg +24 -13
  98. package/public/assets/hap-icons/humidity.svg +24 -13
  99. package/public/assets/hap-icons/irrigation-system.svg +47 -18
  100. package/public/assets/hap-icons/leaksensor.svg +52 -2
  101. package/public/assets/hap-icons/light.svg +47 -28
  102. package/public/assets/hap-icons/lightbulb.svg +24 -13
  103. package/public/assets/hap-icons/lock-locked.svg +24 -13
  104. package/public/assets/hap-icons/lock-unlocked.svg +24 -13
  105. package/public/assets/hap-icons/motionsensor.svg +100 -2
  106. package/public/assets/hap-icons/occupancysensor.svg +97 -2
  107. package/public/assets/hap-icons/outlet.svg +24 -13
  108. package/public/assets/hap-icons/securitysystem-active.svg +102 -2
  109. package/public/assets/hap-icons/securitysystem-off.svg +68 -2
  110. package/public/assets/hap-icons/smokesensor.svg +42 -9
  111. package/public/assets/hap-icons/speaker.svg +29 -13
  112. package/public/assets/hap-icons/statelessprogrammableswitch.svg +51 -2
  113. package/public/assets/hap-icons/switch.svg +24 -13
  114. package/public/assets/hap-icons/television.svg +15 -4
  115. package/public/assets/hap-icons/temperature.svg +24 -13
  116. package/public/assets/hap-icons/unknown.svg +24 -13
  117. package/public/assets/hap-icons/valve-generic.svg +27 -16
  118. package/public/assets/hap-icons/valve-irrigation.svg +37 -21
  119. package/public/assets/hap-icons/valve-showerhead.svg +52 -0
  120. package/public/assets/hap-icons/valve-waterfaucet.svg +21 -0
  121. package/public/assets/hap-icons/window-closed.svg +85 -2
  122. package/public/assets/hap-icons/window-open.svg +136 -2
  123. package/public/assets/hap-icons/windowcovering-closed.svg +45 -49
  124. package/public/assets/hap-icons/windowcovering-open.svg +40 -44
  125. package/public/assets/homebridge-color-round.svg +36 -1
  126. package/public/assets/homebridge-logo.svg +11 -1
  127. package/public/assets/mask-icon.svg +5 -1
  128. package/public/{chunk-WHJOLAED.js → chunk-2ARSC6O4.js} +1 -1
  129. package/public/{chunk-WNWWUCCZ.js → chunk-2BBAYFXG.js} +1 -1
  130. package/public/{chunk-WHJSVGC7.js → chunk-2MYACURS.js} +1 -1
  131. package/public/{chunk-76SU4XMO.js → chunk-44LZWM2S.js} +1 -1
  132. package/public/chunk-4ECWVXWO.js +1 -0
  133. package/public/chunk-4NHYE2FR.js +1 -0
  134. package/public/chunk-53FTBKZ2.js +1 -0
  135. package/public/chunk-54CRHY6E.js +1 -0
  136. package/public/{chunk-JZZQRLNW.js → chunk-5CH326YZ.js} +1 -1
  137. package/public/chunk-5OK3UPY6.js +1 -0
  138. package/public/chunk-6D5CGXDI.js +1 -0
  139. package/public/chunk-6E2DKPOC.js +20 -0
  140. package/public/chunk-6EMRSQU4.js +1 -0
  141. package/public/chunk-6IMEZ7FY.js +1 -0
  142. package/public/chunk-6WX6Z5CR.js +1 -0
  143. package/public/chunk-6YPC2AEN.js +5 -0
  144. package/public/chunk-7G5DYE67.js +1 -0
  145. package/public/chunk-7J7D4RFK.js +1 -0
  146. package/public/{chunk-OE6MK722.js → chunk-AOWW4OIM.js} +1 -1
  147. package/public/chunk-BFQLKNRB.js +1 -0
  148. package/public/chunk-BWUSBIAD.js +1 -0
  149. package/public/chunk-DF45VVYA.js +1 -0
  150. package/public/chunk-DMDV5FDH.js +1 -0
  151. package/public/chunk-ELHNJFMR.js +1 -0
  152. package/public/chunk-EPP37PKN.js +1 -0
  153. package/public/{chunk-NW6AFAD7.js → chunk-FFBZNIV4.js} +1 -1
  154. package/public/{chunk-QE7DO6J3.js → chunk-FLTVAPLJ.js} +2 -2
  155. package/public/chunk-FRLSQQFD.js +1 -0
  156. package/public/{chunk-VAW3X7MD.js → chunk-G5GZAWHN.js} +5 -5
  157. package/public/{chunk-MK5BZOUV.js → chunk-GJMAX2VB.js} +2 -2
  158. package/public/{chunk-BKUGARB4.js → chunk-GOHZ4DC4.js} +1 -1
  159. package/public/{chunk-EA5J2VEJ.js → chunk-GQS3624Y.js} +1 -1
  160. package/public/chunk-H7Z4IBKG.js +1 -0
  161. package/public/chunk-HZCDB2XT.js +1 -0
  162. package/public/chunk-I3H24QH7.js +1 -0
  163. package/public/chunk-I6GEQFAT.js +1 -0
  164. package/public/chunk-IH7FZAXF.js +1 -0
  165. package/public/chunk-IHTWEI6M.js +1 -0
  166. package/public/chunk-JZMQ5FID.js +1 -0
  167. package/public/chunk-KA5TFBDD.js +1 -0
  168. package/public/chunk-KXPEHDL7.js +1 -0
  169. package/public/chunk-LKGOWE5W.js +8 -0
  170. package/public/chunk-M5W2I2BE.js +1 -0
  171. package/public/chunk-MDCNYIS7.js +1 -0
  172. package/public/chunk-MOAVQNSZ.js +1 -0
  173. package/public/chunk-NZL2QIFO.js +2 -0
  174. package/public/chunk-O22A7NB6.js +1 -0
  175. package/public/chunk-O5XTXPP3.js +1 -0
  176. package/public/chunk-OXVPJJQX.js +1 -0
  177. package/public/chunk-P2P3GCNU.js +1 -0
  178. package/public/chunk-P6BRMZWX.js +1 -0
  179. package/public/chunk-PMMW3JTB.js +1 -0
  180. package/public/{chunk-CGQI6VDR.js → chunk-POPRPNGN.js} +1 -1
  181. package/public/chunk-PSPML5VW.js +1 -0
  182. package/public/chunk-PTWEXIAR.js +1 -0
  183. package/public/chunk-PYFJNWPU.js +1 -0
  184. package/public/chunk-PYUYYML6.js +1 -0
  185. package/public/chunk-Q3MPBSDZ.js +1 -0
  186. package/public/chunk-QH4HLTWE.js +1 -0
  187. package/public/chunk-QW6PJ27Z.js +1 -0
  188. package/public/chunk-R472JQFQ.js +1 -0
  189. package/public/chunk-RXML52B3.js +14 -0
  190. package/public/chunk-SLPB5ZSZ.js +1 -0
  191. package/public/chunk-SM4YBIEF.js +1 -0
  192. package/public/chunk-SSMNJVEP.js +1 -0
  193. package/public/chunk-SYEG3RCH.js +1 -0
  194. package/public/chunk-T7WHHJXM.js +1 -0
  195. package/public/chunk-U3FAOEAT.js +1 -0
  196. package/public/{chunk-7EUQWCP5.js → chunk-UFFY2L3W.js} +1 -1
  197. package/public/{chunk-6TCHCTXZ.js → chunk-V5R6RQCC.js} +1 -1
  198. package/public/chunk-VRNVEPFN.js +7 -0
  199. package/public/chunk-W27OUA7Y.js +1 -0
  200. package/public/chunk-WBTQONWJ.js +5 -0
  201. package/public/chunk-WKPZS7OX.js +1 -0
  202. package/public/chunk-WNR5LBIY.js +32 -0
  203. package/public/chunk-XRLB2LD5.js +1 -0
  204. package/public/chunk-XTCHYX2M.js +1 -0
  205. package/public/chunk-XXIHDRQS.js +1 -0
  206. package/public/chunk-Y5Y7DDHQ.js +1 -0
  207. package/public/chunk-YHMNHDNW.js +1 -0
  208. package/public/chunk-YPQN2F2L.js +1 -0
  209. package/public/{chunk-CCUID66K.js → chunk-ZDFTIT3A.js} +1 -1
  210. package/public/chunk-ZYAECXAT.js +6 -0
  211. package/public/index.html +2 -2
  212. package/public/main-NRSJXXDK.js +1 -0
  213. package/public/media/fa-brands-400-Q3XCMWHQ.woff2 +0 -0
  214. package/public/media/{fa-brands-400-KOKGDU7E.ttf → fa-brands-400-R2XQZCET.ttf} +0 -0
  215. package/public/media/fa-regular-400-QSNYFYRT.woff2 +0 -0
  216. package/public/media/{fa-regular-400-IPMAEX5Y.ttf → fa-regular-400-XUOPSR7E.ttf} +0 -0
  217. package/public/media/fa-solid-900-5ZUYHGA7.woff2 +0 -0
  218. package/public/media/{fa-solid-900-SRFFQLRM.ttf → fa-solid-900-PJNKLK6W.ttf} +0 -0
  219. package/public/styles-5ZGAUY5X.css +1 -0
  220. package/scripts/upgrade-install-plugin.sh +1 -1
  221. package/public/chunk-2FJGS2P4.js +0 -1
  222. package/public/chunk-2PVYUZMG.js +0 -1
  223. package/public/chunk-2VTFU3NZ.js +0 -6
  224. package/public/chunk-3FUV2YFB.js +0 -1
  225. package/public/chunk-3IX3CLER.js +0 -1
  226. package/public/chunk-43QJK3CH.js +0 -1
  227. package/public/chunk-4AYTHKYE.js +0 -1
  228. package/public/chunk-4JQFZGIU.js +0 -1
  229. package/public/chunk-5L7KCDO7.js +0 -1
  230. package/public/chunk-5SGGTYVP.js +0 -1
  231. package/public/chunk-64I555F6.js +0 -1
  232. package/public/chunk-6F552PS2.js +0 -14
  233. package/public/chunk-6GDRRHLT.js +0 -1
  234. package/public/chunk-7C3EOONK.js +0 -1
  235. package/public/chunk-7I2U653A.js +0 -1
  236. package/public/chunk-A6RDT6EE.js +0 -32
  237. package/public/chunk-ACHJ26XR.js +0 -1
  238. package/public/chunk-AMGSXBKP.js +0 -1
  239. package/public/chunk-AX2NKG76.js +0 -1
  240. package/public/chunk-BPMSJ2VF.js +0 -1
  241. package/public/chunk-CDC5JJGR.js +0 -5
  242. package/public/chunk-CNIFYHFS.js +0 -1
  243. package/public/chunk-DPHWZNEL.js +0 -1
  244. package/public/chunk-DXCU4YH5.js +0 -1
  245. package/public/chunk-ENTRCZRC.js +0 -1
  246. package/public/chunk-F3LCRXOB.js +0 -1
  247. package/public/chunk-FUOZMXIE.js +0 -1
  248. package/public/chunk-GNMMNSKZ.js +0 -1
  249. package/public/chunk-GONTC5RL.js +0 -1
  250. package/public/chunk-HC4ULUF5.js +0 -1
  251. package/public/chunk-HSJSWZHD.js +0 -1
  252. package/public/chunk-JAM2DL6O.js +0 -1
  253. package/public/chunk-JLUPHWBK.js +0 -1
  254. package/public/chunk-KQJ7ONUG.js +0 -1
  255. package/public/chunk-LAAC3HKW.js +0 -1
  256. package/public/chunk-MOTRKWPN.js +0 -1
  257. package/public/chunk-N3JMUDBI.js +0 -1
  258. package/public/chunk-NZNNTHFQ.js +0 -1
  259. package/public/chunk-ODPNK7TG.js +0 -1
  260. package/public/chunk-ORPWYWCL.js +0 -5
  261. package/public/chunk-OURFK6JB.js +0 -1
  262. package/public/chunk-PEPJOU6R.js +0 -1
  263. package/public/chunk-PWJLSQWP.js +0 -8
  264. package/public/chunk-QHPDGSZ6.js +0 -1
  265. package/public/chunk-RFBKWUOP.js +0 -20
  266. package/public/chunk-S22XAG5G.js +0 -1
  267. package/public/chunk-S23B67SO.js +0 -1
  268. package/public/chunk-S3ABXPGO.js +0 -1
  269. package/public/chunk-SUCUQYZ3.js +0 -1
  270. package/public/chunk-TCSXGQNF.js +0 -1
  271. package/public/chunk-TXOB7R5K.js +0 -7
  272. package/public/chunk-U4TY4QYN.js +0 -1
  273. package/public/chunk-UG5DK2RQ.js +0 -2
  274. package/public/chunk-UNXETFMR.js +0 -1
  275. package/public/chunk-VF4E7Q42.js +0 -1
  276. package/public/chunk-VOPS522V.js +0 -1
  277. package/public/chunk-VVFRD7PI.js +0 -1
  278. package/public/chunk-WWTMEHKF.js +0 -1
  279. package/public/chunk-X6HR3FKR.js +0 -1
  280. package/public/chunk-Y6NAMXTD.js +0 -1
  281. package/public/chunk-YAOIYDRH.js +0 -1
  282. package/public/chunk-ZOOTYXXF.js +0 -1
  283. package/public/chunk-ZT23DWNL.js +0 -1
  284. package/public/chunk-ZTCVXHR7.js +0 -1
  285. package/public/chunk-ZUBSOVIF.js +0 -1
  286. package/public/main-XXZ7MAPQ.js +0 -1
  287. package/public/media/01-RQ3S2L53.png +0 -0
  288. package/public/media/02-VNCG2I2A.png +0 -0
  289. package/public/media/03-HI42L4ZG.png +0 -0
  290. package/public/media/04-FJLL55LZ.png +0 -0
  291. package/public/media/05-V3EO6SPT.png +0 -0
  292. package/public/media/06-EOJZCQZN.png +0 -0
  293. package/public/media/07-KMKB5PBD.png +0 -0
  294. package/public/media/08-UQJRF6B2.png +0 -0
  295. package/public/media/09-2DJQFRHH.png +0 -0
  296. package/public/media/arrow_left-CQT7FZM7.svg +0 -4
  297. package/public/media/arrow_right-SBUDRR2G.svg +0 -4
  298. package/public/media/fa-brands-400-6PJPV6JM.woff2 +0 -0
  299. package/public/media/fa-regular-400-OHB6J4OK.woff2 +0 -0
  300. package/public/media/fa-solid-900-ABTK6BNK.woff2 +0 -0
  301. package/public/scripts-6GVLYD7F.js +0 -62
  302. package/public/styles-EG5MFQEM.css +0 -1
package/CHANGELOG.md CHANGED
@@ -6,10 +6,31 @@ All notable changes to `homebridge-config-ui-x` will be documented in this file.
6
6
 
7
7
  ### ⚠️ Breaking Changes
8
8
 
9
- - This version of the Homebridge UI will drop support for:
10
- - Node.js `v16` and earlier, so please update to `v18` or `v20` or `v22` - [more info on updating](https://github.com/homebridge/homebridge/wiki/How-To-Update-Node.js)
11
- - Raspberry Pi devices running on the `armv6` architecture (like the Pi 1 and Pi Zero) - please update your hardware
12
- - Instances using `pnpm` as the package manager - consider updating your Homebridge instance to use npm instead - [more info on updating](https://github.com/homebridge/homebridge-apt-pkg/blob/latest/README.md#using-apt)
9
+ - This version of the Homebridge UI:
10
+ - Is compatible with Homebridge `v1` and `v2`
11
+ - Drops support for Node.js `v18` and earlier, so please update to `v20` or `v22` - [more info on updating](https://github.com/homebridge/homebridge/wiki/How-To-Update-Node.js)
12
+ - Drops support for Raspberry Pi devices running on the `armv6` architecture (like the Pi 1 and Pi Zero) - please update your hardware
13
+ - Drops support for instances using `pnpm` as the package manager - consider updating your Homebridge instance to use npm instead - [more info on updating](https://github.com/homebridge/homebridge-apt-pkg/blob/latest/README.md#using-apt)
14
+
15
+ ### UI Changes
16
+
17
+ - updates to the `fi.json` language file (#2253) (@l1500s)
18
+ - update default dashboard layout
19
+
20
+ ### Other Changes
21
+
22
+ - retire use of `pnpm` and code references
23
+ - bump the default node version from 20 to 22
24
+ - make terminal enabled by default on new macOS hb-service installs
25
+ - update `fastify` and `nestjs` dependencies
26
+
27
+ ### Homebridge Dependencies
28
+
29
+ - `@homebridge/hap-client` @ `v2.0.5`
30
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.12.0-beta`
31
+ - `@homebridge/plugin-ui-utils` @ `v2.0.1`
32
+
33
+ ## v4.69.0 (2025-01-24)
13
34
 
14
35
  ### ⚠️ Plugin Config Validation
15
36
 
@@ -25,34 +46,217 @@ If you have a plugin which can be configured multiple times, then an icon will b
25
46
 
26
47
  Plugin developers:
27
48
 
28
- - Please do not rely on this validation and assume that a user's configuration will be valid
29
- - All plugins should still validate a configuration when the plugin is started
49
+ - Please do not rely on this validation and assume that a user's configuration will be valid: you should still validate the user's config on plugin startup
30
50
  - Remember that some users do not use the UI at all, and other users may prefer to configure using raw `JSON` rather than config screens
51
+ - For custom UI screens, the validation icon will be hidden when the save button is disabled (using `homebridge.disableSaveButton()` from `@homebridge/plugin-ui-utils`)
31
52
  - Please report any cases where the validation is not working as expected
32
53
 
33
54
  ### UI Changes
34
55
 
35
- - updates to the `de.json` language file (#2249) (@Staubgeborener)
36
- - implement and allow switching to scoped plugins
56
+ - updates to the `uk.json` language file (#2312) (@xrust83)
57
+ - fix typos in hb/ui settings schemas (#2317) (@dnicolson)
58
+ - fix margins in update plugin modal
37
59
  - add plugin config validation functionality
38
60
  - refactor status and child bridge widgets
39
- - update default dashboard layout
61
+ - the existing 'status' widget has been renamed to 'update info' widget
62
+ - the existing 'child bridges' widget has been renamed to 'bridges' widget
63
+ - the homebridge status (from the old status widget) is now shown as a bridge in the new bridges widget
64
+ - node update information has been added to the new update info widget
65
+ - a widget option has been added to hide node update information: this may be useful for docker/synology users
66
+ - homebridge and ui version information has been moved from the footer to the new update info widget
67
+ - add 'homebridge name' setting to settings page
68
+ - migrate bootstrap from `v4` to `v5`
69
+ - fix plugin config/bridge screens for certain plugins
70
+ - add lighting mode option for terminal and log widgets
71
+ - only available when the UI is already in light mode
72
+ - fix long press on mobile devices
73
+ - control fan rotation direction from the ui
40
74
 
41
75
  ### Other Changes
42
76
 
43
- - update screenshots (for readme file)
44
- - retire use of `pnpm` and code references
45
- - enable strict config validation for the UI
46
- - bump the default node version from 20 to 22
47
- - make terminal enabled by default on new macOS hb-service installs
48
- - update node pty beta `v0.12.0-beta`
49
- - update angular from `v18` to `v19`
77
+ - improvements to GH actions and build processes (@NorthernMan54)
50
78
 
51
79
  ### Homebridge Dependencies
52
80
 
53
- - `@homebridge/hap-client` @ `v2.0.4`
54
- - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.12.0-beta`
55
- - `@homebridge/plugin-ui-utils` @ `v1.0.4-beta`
81
+ - `@homebridge/hap-client` @ `v2.0.5`
82
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
83
+ - `@homebridge/plugin-ui-utils` @ `v2.0.1`
84
+
85
+ ## v4.68.0 (2025-01-08)
86
+
87
+ Happy 2025 to all our users! 🎉
88
+
89
+ ### UI Changes
90
+
91
+ - updates to the `cs.json` language file (#2311) (@DavidHuljak)
92
+ - improved messaging on plugin child bridge modal
93
+ - further improvements to plugin search
94
+ - implement and allow switching to scoped plugins
95
+ - merge plugin info and verified modals
96
+ - condensing plugin card into title + three lines of description
97
+ - consistent formatting of child bridge names across the ui
98
+ - general improvements across the ui
99
+ - status page:
100
+ - individual widget setting form design made consistent with other forms
101
+ - added pairing status to qr code widget
102
+ - plugins page:
103
+ - visual improvements to plugin child bridge settings modal
104
+ - allow plugins to disable/enable the save button in custom uis (see below section)
105
+ - allow configuring [multiple accessories on the same child bridge](https://github.com/homebridge/homebridge/wiki/Child-Bridges#multiple-accessories-on-the-same-child-bridge) via the ui
106
+ - accessories page:
107
+ - changed accessory spanner icon to info icon (more descriptive)
108
+ - accessory info modal redesigned and provides more info where possible like the accessory UUID (including a link to remove from the cache)
109
+ - added support modal with some info about rooms and accessories (visible on desktop)
110
+ - json config page:
111
+ - redesigned restore modal to be more consistent with other modals
112
+ - settings page:
113
+ - chevron icons replaced with arrow-right icons
114
+ - removed restore modal from settings page and is accessible from the backup modal
115
+ - backup modal redesigned to be more consistent with other modals
116
+ - added new display -> menu mode setting which allows keeping the side menu from expanding out on desktop
117
+ - redesigned and improved accessories and bridges sections and modals
118
+ - users page:
119
+ - add user and edit user modals redesigned to be more consistent with other modals
120
+ - user card updated with icon buttons for edit/delete rather than text buttons
121
+
122
+ ### Plugin Custom UI Changes
123
+
124
+ The UI has recently been updated with `@homebridge/plugin-ui-utils` @ `v2.0.0`, which includes a new feature to allow plugin developers to dynamically enable and disable the `Save` button in the custom UI modal.
125
+ Two new methods have been added for this purpose:
126
+
127
+ - `homebridge.disableSaveButton()`
128
+ - `homebridge.enableSaveButton()`
129
+
130
+ Developers: to maintain compatibility with older versions of the Homebridge UI, it is recommended to check if the methods exist before calling them in your custom UIs:
131
+
132
+ - `homebridge.disableSaveButton?.()`
133
+ - `homebridge.enableSaveButton?.()`
134
+
135
+ ### Other Changes
136
+
137
+ - auto-fix ui theme setting property if existing value is not valid
138
+ - do not allow `armv6l` users to update to UI `v5`
139
+
140
+ ### Homebridge Dependencies
141
+
142
+ - `@homebridge/hap-client` @ `v2.0.5`
143
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
144
+ - `@homebridge/plugin-ui-utils` @ `v2.0.0`
145
+
146
+ ## v4.67.0 (2024-12-28)
147
+
148
+ ### UI Changes
149
+
150
+ - add explanation of deleting child bridges when un-toggling
151
+ - add filtering to search to improve results (#2286) (@justjam2013) (fixes [#2266](https://github.com/homebridge/homebridge-config-ui-x/issues/2266))
152
+ - fix spacing issue with hidden accessories
153
+ - make margins consistent of un/lock buttons on status screen
154
+ - fix ui not restarting properly after updating the ui
155
+ - use broom icon in remove bridge accessories (to match similar modal from plugin menu)
156
+
157
+ ### Other Changes
158
+
159
+ - improve and finish up previous angular migration
160
+ - update `hap-client` + `plugin-ui-utils` hb dependencies
161
+ - update dependencies
162
+ - improve lint sorting of imports
163
+
164
+ ### Homebridge Dependencies
165
+
166
+ - `@homebridge/hap-client` @ `v2.0.5`
167
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
168
+ - `@homebridge/plugin-ui-utils` @ `v2.0.0`
169
+
170
+ ## v4.66.0 (2024-12-25)
171
+
172
+ ### UI Changes
173
+
174
+ - fix verified plugins link in support module (fixes [#2295](https://github.com/homebridge/homebridge-config-ui-x/issues/2295))
175
+ - add missing modal footer `<div>`s to accessory control modals
176
+ - fix radio button groups in certain accessory control modals (fixes [#2294](https://github.com/homebridge/homebridge-config-ui-x/issues/2294))
177
+
178
+ ### Other Changes
179
+
180
+ - format svg files nicely as part of lint
181
+ - upgrade angular from `v18` to `v19`
182
+ - delete unpaired bridges when toggling bridges off (#2284) (@justjam2013) (fixes [#2257](https://github.com/homebridge/homebridge-config-ui-x/issues/2257))
183
+
184
+ ### Homebridge Dependencies
185
+
186
+ - `@homebridge/hap-client` @ `v1.10.2`
187
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
188
+ - `@homebridge/plugin-ui-utils` @ `v1.0.3`
189
+
190
+ ## v4.65.2 (2024-12-15)
191
+
192
+ ### UI Changes
193
+
194
+ - Rollback recent changes to plugin search (#2289) (@justjam2013)
195
+
196
+ ### Homebridge Dependencies
197
+
198
+ - `@homebridge/hap-client` @ `v1.10.2`
199
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
200
+ - `@homebridge/plugin-ui-utils` @ `v1.0.3`
201
+
202
+ ## v4.65.1 (2024-12-13)
203
+
204
+ ### UI Changes
205
+
206
+ - updates to the `th.json` language file (#2271) (@tomzt)
207
+ - updates to the `de.json` language file (#2250) (@Staubgeborener)
208
+ - Remove unrelated plugins from search (#2272) (@justjam2013)
209
+
210
+ ### Other Changes
211
+
212
+ - fix types + update dependencies
213
+ - fix attach artifacts to release workflow
214
+
215
+ ### Homebridge Dependencies
216
+
217
+ - `@homebridge/hap-client` @ `v1.10.2`
218
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
219
+ - `@homebridge/plugin-ui-utils` @ `v1.0.3`
220
+
221
+ ## v4.65.0 (2024-12-08)
222
+
223
+ ### UI Changes
224
+
225
+ - updates to the `uk.json` language file (#2262) (@xrust83)
226
+ - logo and `homebridge` text should link to status page
227
+ - Add icons for shower head and water faucet valve types (#2267) (@justjam2013)
228
+ - Removed conditional for displaying search exit component (#2269) (@justjam2013)
229
+
230
+ ### Other Changes
231
+
232
+ - Fix typo in console message (#2264) (@markholland)
233
+ - updated dependencies
234
+
235
+ ### Homebridge Dependencies
236
+
237
+ - `@homebridge/hap-client` @ `v1.10.2`
238
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
239
+ - `@homebridge/plugin-ui-utils` @ `v1.0.3`
240
+
241
+ ## v4.64.0 (2024-11-30)
242
+
243
+ ### UI Changes
244
+
245
+ - updates to the `de.json` language file (#2249) (@Staubgeborener)
246
+ - updates to the `ko.json` language file (#2251) (@alphaorderly)
247
+ - updates to the `uk.json` language file (#2255) (@xrust83)
248
+ - add reload menu item when using as a PWA
249
+
250
+ ### Other Changes
251
+
252
+ - dependency updates
253
+ - fix npm search max character limit
254
+
255
+ ### Homebridge Dependencies
256
+
257
+ - `@homebridge/hap-client` @ `v1.10.2`
258
+ - `@homebridge/node-pty-prebuilt-multiarch` @ `v0.11.14`
259
+ - `@homebridge/plugin-ui-utils` @ `v1.0.3`
56
260
 
57
261
  ## v4.63.0 (2024-11-17)
58
262
 
@@ -552,7 +756,7 @@ Merry Christmas and Happy Holidays to all our users celebrating later this month
552
756
  - Various changes to the plugin cards
553
757
  - Plugin settings now accessible from the plugin card menu, called 'Config'
554
758
  - Icons: plugin devs can request an icon for their verified plugin at:
555
- - https://github.com/homebridge/verified/issues/new/choose
759
+ - https://github.com/homebridge/plugins/issues/new/choose
556
760
 
557
761
  ### UI Changes
558
762
 
package/CONTRIBUTING.md CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  Pull requests are welcome from everyone.
4
4
 
5
- This project is written in [TypeScript](https://www.typescriptlang.org/) and uses [Nest.js](https://nestjs.com/) for the server and [Angular](https://angular.io/) for the client UI.
5
+ This project is written in [TypeScript](https://www.typescriptlang.org/) and uses [Nest.js](https://nestjs.com/) for the server and [Angular](https://angular.dev/) for the client UI.
6
6
 
7
7
  ## Getting Setup
8
8
 
9
- _Note: The Raspberry Pi and similar boards do not meet the memory or CPU requirements required to set up the development environment._
9
+ > [!NOTE]
10
+ > The Raspberry Pi and similar boards do not meet the memory or CPU requirements required to set up the development environment.
10
11
 
11
12
  First, remove any globally installed versions of `homebridge-config-ui-x` you may have installed on your development machine:
12
13
 
@@ -38,7 +39,7 @@ Symlink your development directory to global:
38
39
  npm link
39
40
  ```
40
41
 
41
- If you don't have homebridge installed already run:
42
+ If you don't have Homebridge installed already run:
42
43
 
43
44
  ```sh
44
45
  npm install -g homebridge
@@ -52,7 +53,7 @@ This will start the Angular development server on port `4200` and a standalone s
52
53
  npm run watch
53
54
  ```
54
55
 
55
- You should now be able to navigate to `https://localhost:4200` in your browser which will connect to your `homebridge` instance running on port `8581`. The UI will automatically reload whenever you make changes to the code.
56
+ You should now be able to navigate to `https://localhost:4200` in your browser which will connect to your Homebridge instance running on port `8581`. The UI will automatically reload whenever you make changes to the code.
56
57
 
57
58
  ## Running Tests
58
59
 
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023-2024 Homebridge
3
+ Copyright (c) 2023-2025 Homebridge
4
4
  Copyright (c) 2017-2023 oznu <dev@oz.nu>
5
5
  Copyright (c) 2017 Michael Kellsy
6
6
 
@@ -156,6 +156,26 @@
156
156
  }
157
157
  ]
158
158
  },
159
+ "menuMode": {
160
+ "title": "Menu Mode",
161
+ "description": "Modes for the UI side menu.",
162
+ "type": "string",
163
+ "default": "default",
164
+ "oneOf": [
165
+ {
166
+ "title": "Default",
167
+ "enum": [
168
+ "default"
169
+ ]
170
+ },
171
+ {
172
+ "title": "Freeze",
173
+ "enum": [
174
+ "freeze"
175
+ ]
176
+ }
177
+ ]
178
+ },
159
179
  "restart": {
160
180
  "title": "Custom Restart Command",
161
181
  "type": "string",
@@ -163,7 +183,7 @@
163
183
  "placeholder": "eg. sudo systemctl restart homebridge"
164
184
  },
165
185
  "temp": {
166
- "title": "Path to OS Temp File",
186
+ "title": "OS Temp File Path",
167
187
  "type": "string",
168
188
  "placeholder": "eg. /sys/class/thermal/thermal_zone0/temp",
169
189
  "description": "If you are running Homebridge on a Raspberry Pi, you can enter the path to the OS temp file here. This will display the current temperature on the Homebridge status page."
@@ -373,7 +393,7 @@
373
393
  ]
374
394
  },
375
395
  "loginWallpaper": {
376
- "title": "Path to Login Wallpaper Image File",
396
+ "title": "Login Wallpaper Path",
377
397
  "description": "The full path to the .jpg file.",
378
398
  "type": "string",
379
399
  "placeholder": "eg. /home/pi/mywallpaper.jpg"
@@ -390,7 +410,7 @@
390
410
  "placeholder": "eg. /usr/local/lib/node_modules/homebridge"
391
411
  },
392
412
  "noFork": {
393
- "title": "Do not run the Config UI web server in a separate process/thread",
413
+ "title": "Do not run the UI server in a separate process/thread",
394
414
  "type": "boolean",
395
415
  "description": "If you are running Homebridge in a container, you may need to enable this option."
396
416
  },
@@ -398,11 +418,11 @@
398
418
  "title": "Host IP Address",
399
419
  "type": "string",
400
420
  "pattern": "^[^{}/ :\\\\]+(?::\\d+)?$",
401
- "description": "The host ip address to listen on. In most cases this will be '::' or '0.0.0.0'",
421
+ "description": "The host IP address to listen on. In most cases this will be '::' or '0.0.0.0'.",
402
422
  "placeholder": "eg. 0.0.0.0"
403
423
  },
404
424
  "debug": {
405
- "title": " Enable / disable debug level logging",
425
+ "title": "Enable Debug Logging",
406
426
  "type": "boolean",
407
427
  "description": "If enabled, the Homebridge UI will log debug level messages to the console."
408
428
  },
@@ -412,7 +432,7 @@
412
432
  "description": "If you are running Homebridge in a container, you may need to enable this option."
413
433
  },
414
434
  "sessionTimeout": {
415
- "title": "Session Timeout (in seconds)",
435
+ "title": "Session Timeout (Seconds)",
416
436
  "type": "integer",
417
437
  "placeholder": 28800,
418
438
  "minimum": 600,
@@ -492,14 +512,14 @@
492
512
  },
493
513
  "tail": {
494
514
  "type": "string",
495
- "description": "Depreciated",
515
+ "description": "Deprecated.",
496
516
  "condition": {
497
517
  "functionBody": "return (model.log && (model.log.method==='custom' || model.log.method==='systemd' || model.log.method==='file'))"
498
518
  }
499
519
  },
500
520
  "systemd": {
501
521
  "type": "string",
502
- "description": "Depreciated",
522
+ "description": "Deprecated.",
503
523
  "condition": {
504
524
  "functionBody": "return (model.log && (model.log.method==='custom' || model.log.method==='systemd' || model.log.method==='file'))"
505
525
  }
@@ -525,19 +545,19 @@
525
545
  "description": "The SSL settings for the Homebridge UI.",
526
546
  "properties": {
527
547
  "key": {
528
- "title": "Path To Private Key",
548
+ "title": "Private Key Path",
529
549
  "type": "string",
530
550
  "description": "The full path to the private key file.",
531
551
  "placeholder": "eg. /Users/homebridge/.homebridge/certs/server.key"
532
552
  },
533
553
  "cert": {
534
- "title": "Path To Certificate",
554
+ "title": "Certificate Path",
535
555
  "type": "string",
536
556
  "description": "The full path to the certificate file.",
537
557
  "placeholder": "eg. /Users/homebridge/.homebridge/certs/server.crt"
538
558
  },
539
559
  "pfx": {
540
- "title": "Path To PKCS#12 Certificate",
560
+ "title": "PKCS#12 Certificate Path",
541
561
  "type": "string",
542
562
  "description": "The full path to the PKCS#12 certificate file.",
543
563
  "placeholder": "eg. /Users/homebridge/.homebridge/certs/server.pfx"
@@ -556,14 +576,14 @@
556
576
  "description": "The accessory control settings for the Homebridge UI.",
557
577
  "properties": {
558
578
  "debug": {
559
- "title": " Enable / disable debug level logging for accessory control via the web UI",
579
+ "title": "Enable Accessory Control Debug Logging",
560
580
  "type": "boolean",
561
581
  "description": "If enabled, the Homebridge UI will log debug level messages to the console."
562
582
  },
563
583
  "instanceBlacklist": {
564
- "title": "Blacklisted Instances",
584
+ "title": "Blacklisted Bridges/Instances",
565
585
  "type": "array",
566
- "description": "A list of instances that should not be controlled via the web UI.",
586
+ "description": "A list of instances (or bridge usernames) that should not be controlled via the web UI.",
567
587
  "placeholder": "eg. 00:00:00:00:00:00",
568
588
  "items": {
569
589
  "title": "Instance Username",
@@ -600,8 +620,8 @@
600
620
  "description": "When running behind a reverse proxy you may need to enter the hostname you use to access the UI."
601
621
  },
602
622
  "scheduledBackupPath": {
603
- "title": "Scheduled backup destination path",
604
- "description": "The full path to where the service should save daily scheduled backups archives",
623
+ "title": "Scheduled Backup Destination",
624
+ "description": "The full path to where the service should save daily scheduled backups archives.",
605
625
  "type": "string",
606
626
  "placeholder": "eg. /home/pi/homebridge-backups",
607
627
  "condition": {
@@ -611,12 +631,12 @@
611
631
  "scheduledBackupDisable": {
612
632
  "title": "Disable Scheduled Backups",
613
633
  "type": "boolean",
614
- "description": "When enabled, the Homebridge UI will not create daily scheduled backups"
634
+ "description": "When enabled, the Homebridge UI will not create daily scheduled backups."
615
635
  },
616
636
  "disableServerMetricsMonitoring": {
617
637
  "title": "Disable Server Metrics Monitoring",
618
638
  "type": "boolean",
619
- "description": "When enabled, the Homebridge UI will not collect or report cpu / memory stats"
639
+ "description": "When enabled, the Homebridge UI will not collect or report CPU or memory stats."
620
640
  }
621
641
  }
622
642
  },
package/dist/bin/fork.js CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fork.js","sourceRoot":"","sources":["../../src/bin/fork.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAkC;AAElC,sBAAO,CAAC,KAAK,GAAG,wBAAwB,CAAA;AAExC,WAAW,CAAC,GAAG,EAAE;IACf,IAAI,CAAC,sBAAO,CAAC,SAAS,EAAE,CAAC;QACvB,sBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,EAAE,KAAK,CAAC,CAAA;AAET,sBAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;IAC5B,sBAAO,CAAC,IAAI,EAAE,CAAA;AAChB,CAAC,CAAC,CAAA;AAEF,kDAAO,SAAS,IAAC"}
1
+ {"version":3,"file":"fork.js","sourceRoot":"","sources":["../../src/bin/fork.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAkC;AAElC,sBAAO,CAAC,KAAK,GAAG,wBAAwB,CAAA;AAExC,WAAW,CAAC,GAAG,EAAE;IACf,IAAI,CAAC,sBAAO,CAAC,SAAS,EAAE,CAAC;QACvB,sBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,EAAE,KAAK,CAAC,CAAA;AAET,sBAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;IAC5B,sBAAO,CAAC,IAAI,EAAE,CAAA;AAChB,CAAC,CAAC,CAAA;AAEF,kDAAO,SAAS,IAAC"}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import type { ExtractOptions } from 'tar';
2
+ import type { TarOptionsWithAliases } from 'tar';
3
3
  export declare class HomebridgeServiceHelper {
4
4
  action: 'install' | 'uninstall' | 'start' | 'stop' | 'restart' | 'rebuild' | 'run' | 'add' | 'remove' | 'logs' | 'view' | 'update-node' | 'before-start' | 'status';
5
5
  selfPath: string;
@@ -65,7 +65,7 @@ export declare class HomebridgeServiceHelper {
65
65
  private fixDockerPermissions;
66
66
  private checkForNodejsUpdates;
67
67
  downloadNodejs(downloadUrl: string): Promise<string>;
68
- extractNodejs(targetVersion: string, extractConfig: ExtractOptions): Promise<void>;
68
+ extractNodejs(targetVersion: string, extractConfig: TarOptionsWithAliases): Promise<void>;
69
69
  removeNpmPackage(npmInstallPath: string): Promise<void>;
70
70
  private checkStatus;
71
71
  private parseNpmPackageString;