homebridge-config-ui-x 5.9.1-beta.1 → 5.9.1-beta.11

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 (383) hide show
  1. package/CHANGELOG.md +23 -3
  2. package/TODO-MATTER.md +15 -0
  3. package/dist/app.controller.d.ts +1 -1
  4. package/dist/app.controller.js +14 -12
  5. package/dist/app.controller.js.map +1 -1
  6. package/dist/app.gateway.js +7 -10
  7. package/dist/app.gateway.js.map +1 -1
  8. package/dist/app.module.js +42 -43
  9. package/dist/app.module.js.map +1 -1
  10. package/dist/app.service.js +4 -7
  11. package/dist/app.service.js.map +1 -1
  12. package/dist/bin/base-platform.d.ts +1 -1
  13. package/dist/bin/base-platform.js +11 -17
  14. package/dist/bin/base-platform.js.map +1 -1
  15. package/dist/bin/fork.js +7 -45
  16. package/dist/bin/fork.js.map +1 -1
  17. package/dist/bin/hb-service.js +224 -243
  18. package/dist/bin/hb-service.js.map +1 -1
  19. package/dist/bin/platforms/darwin.d.ts +1 -1
  20. package/dist/bin/platforms/darwin.js +61 -65
  21. package/dist/bin/platforms/darwin.js.map +1 -1
  22. package/dist/bin/platforms/freebsd.d.ts +1 -1
  23. package/dist/bin/platforms/freebsd.js +42 -47
  24. package/dist/bin/platforms/freebsd.js.map +1 -1
  25. package/dist/bin/platforms/linux.d.ts +1 -1
  26. package/dist/bin/platforms/linux.js +127 -132
  27. package/dist/bin/platforms/linux.js.map +1 -1
  28. package/dist/bin/platforms/win32.d.ts +1 -1
  29. package/dist/bin/platforms/win32.js +30 -36
  30. package/dist/bin/platforms/win32.js.map +1 -1
  31. package/dist/bin/standalone.js +15 -53
  32. package/dist/bin/standalone.js.map +1 -1
  33. package/dist/core/auth/auth.controller.d.ts +5 -4
  34. package/dist/core/auth/auth.controller.js +40 -39
  35. package/dist/core/auth/auth.controller.js.map +1 -1
  36. package/dist/core/auth/auth.dto.js +17 -18
  37. package/dist/core/auth/auth.dto.js.map +1 -1
  38. package/dist/core/auth/auth.module.js +28 -31
  39. package/dist/core/auth/auth.module.js.map +1 -1
  40. package/dist/core/auth/auth.service.d.ts +3 -3
  41. package/dist/core/auth/auth.service.js +65 -62
  42. package/dist/core/auth/auth.service.js.map +1 -1
  43. package/dist/core/auth/guards/admin.guard.js +4 -7
  44. package/dist/core/auth/guards/admin.guard.js.map +1 -1
  45. package/dist/core/auth/guards/custom.guard.js +6 -9
  46. package/dist/core/auth/guards/custom.guard.js.map +1 -1
  47. package/dist/core/auth/guards/ws-admin-guard.d.ts +2 -2
  48. package/dist/core/auth/guards/ws-admin-guard.js +13 -11
  49. package/dist/core/auth/guards/ws-admin-guard.js.map +1 -1
  50. package/dist/core/auth/guards/ws.guard.d.ts +2 -2
  51. package/dist/core/auth/guards/ws.guard.js +13 -11
  52. package/dist/core/auth/guards/ws.guard.js.map +1 -1
  53. package/dist/core/auth/jwt.strategy.d.ts +3 -2
  54. package/dist/core/auth/jwt.strategy.js +21 -16
  55. package/dist/core/auth/jwt.strategy.js.map +1 -1
  56. package/dist/core/config/config.interfaces.d.ts +8 -1
  57. package/dist/core/config/config.interfaces.js +1 -2
  58. package/dist/core/config/config.module.js +8 -10
  59. package/dist/core/config/config.module.js.map +1 -1
  60. package/dist/core/config/config.service.d.ts +4 -3
  61. package/dist/core/config/config.service.js +90 -83
  62. package/dist/core/config/config.service.js.map +1 -1
  63. package/dist/core/config/config.startup.d.ts +1 -1
  64. package/dist/core/config/config.startup.js +23 -28
  65. package/dist/core/config/config.startup.js.map +1 -1
  66. package/dist/core/feature-flags/feature-flags.registry.js +2 -5
  67. package/dist/core/feature-flags/feature-flags.registry.js.map +1 -1
  68. package/dist/core/homebridge-ipc/homebridge-ipc.module.js +11 -14
  69. package/dist/core/homebridge-ipc/homebridge-ipc.module.js.map +1 -1
  70. package/dist/core/homebridge-ipc/homebridge-ipc.service.d.ts +4 -4
  71. package/dist/core/homebridge-ipc/homebridge-ipc.service.js +25 -19
  72. package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
  73. package/dist/core/logger/logger.module.js +8 -10
  74. package/dist/core/logger/logger.module.js.map +1 -1
  75. package/dist/core/logger/logger.service.js +13 -23
  76. package/dist/core/logger/logger.service.js.map +1 -1
  77. package/dist/core/node-pty/node-pty.module.js +7 -10
  78. package/dist/core/node-pty/node-pty.module.js.map +1 -1
  79. package/dist/core/node-pty/node-pty.service.js +6 -11
  80. package/dist/core/node-pty/node-pty.service.js.map +1 -1
  81. package/dist/core/node-version.constants.js +4 -11
  82. package/dist/core/node-version.constants.js.map +1 -1
  83. package/dist/core/scheduler/scheduler.module.js +15 -10
  84. package/dist/core/scheduler/scheduler.module.js.map +1 -1
  85. package/dist/core/scheduler/scheduler.service.d.ts +12 -1
  86. package/dist/core/scheduler/scheduler.service.js +101 -13
  87. package/dist/core/scheduler/scheduler.service.js.map +1 -1
  88. package/dist/core/spa/spa-html.service.js +9 -15
  89. package/dist/core/spa/spa-html.service.js.map +1 -1
  90. package/dist/core/spa/spa.filter.d.ts +1 -1
  91. package/dist/core/spa/spa.filter.js +11 -16
  92. package/dist/core/spa/spa.filter.js.map +1 -1
  93. package/dist/core/ssl/ssl-cert-generator.service.js +34 -36
  94. package/dist/core/ssl/ssl-cert-generator.service.js.map +1 -1
  95. package/dist/env-setup.d.ts +1 -0
  96. package/dist/env-setup.js +7 -0
  97. package/dist/env-setup.js.map +1 -0
  98. package/dist/globalDefaults.d.ts +1 -0
  99. package/dist/globalDefaults.js +1 -0
  100. package/dist/index.d.ts +1 -1
  101. package/dist/index.js +16 -19
  102. package/dist/index.js.map +1 -1
  103. package/dist/main.d.ts +5 -3
  104. package/dist/main.js +44 -51
  105. package/dist/main.js.map +1 -1
  106. package/dist/modules/accessories/accessories.controller.d.ts +3 -3
  107. package/dist/modules/accessories/accessories.controller.js +28 -29
  108. package/dist/modules/accessories/accessories.controller.js.map +1 -1
  109. package/dist/modules/accessories/accessories.dto.js +11 -13
  110. package/dist/modules/accessories/accessories.dto.js.map +1 -1
  111. package/dist/modules/accessories/accessories.gateway.d.ts +2 -2
  112. package/dist/modules/accessories/accessories.gateway.js +18 -16
  113. package/dist/modules/accessories/accessories.gateway.js.map +1 -1
  114. package/dist/modules/accessories/accessories.interfaces.d.ts +94 -0
  115. package/dist/modules/accessories/accessories.interfaces.js +2 -0
  116. package/dist/modules/accessories/accessories.interfaces.js.map +1 -0
  117. package/dist/modules/accessories/accessories.module.js +19 -20
  118. package/dist/modules/accessories/accessories.module.js.map +1 -1
  119. package/dist/modules/accessories/accessories.service.d.ts +23 -5
  120. package/dist/modules/accessories/accessories.service.js +316 -51
  121. package/dist/modules/accessories/accessories.service.js.map +1 -1
  122. package/dist/modules/backup/backup.controller.d.ts +4 -4
  123. package/dist/modules/backup/backup.controller.js +68 -67
  124. package/dist/modules/backup/backup.controller.js.map +1 -1
  125. package/dist/modules/backup/backup.gateway.d.ts +4 -4
  126. package/dist/modules/backup/backup.gateway.js +25 -21
  127. package/dist/modules/backup/backup.gateway.js.map +1 -1
  128. package/dist/modules/backup/backup.module.js +22 -25
  129. package/dist/modules/backup/backup.module.js.map +1 -1
  130. package/dist/modules/backup/backup.service.d.ts +5 -5
  131. package/dist/modules/backup/backup.service.js +143 -133
  132. package/dist/modules/backup/backup.service.js.map +1 -1
  133. package/dist/modules/child-bridges/child-bridges.gateway.d.ts +3 -3
  134. package/dist/modules/child-bridges/child-bridges.gateway.js +23 -21
  135. package/dist/modules/child-bridges/child-bridges.gateway.js.map +1 -1
  136. package/dist/modules/child-bridges/child-bridges.interfaces.js +1 -2
  137. package/dist/modules/child-bridges/child-bridges.module.js +19 -22
  138. package/dist/modules/child-bridges/child-bridges.module.js.map +1 -1
  139. package/dist/modules/child-bridges/child-bridges.service.d.ts +3 -3
  140. package/dist/modules/child-bridges/child-bridges.service.js +15 -11
  141. package/dist/modules/child-bridges/child-bridges.service.js.map +1 -1
  142. package/dist/modules/config-editor/config-editor.controller.d.ts +13 -11
  143. package/dist/modules/config-editor/config-editor.controller.js +168 -103
  144. package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
  145. package/dist/modules/config-editor/config-editor.dto.d.ts +6 -0
  146. package/dist/modules/config-editor/config-editor.dto.js +40 -0
  147. package/dist/modules/config-editor/config-editor.dto.js.map +1 -0
  148. package/dist/modules/config-editor/config-editor.module.js +21 -24
  149. package/dist/modules/config-editor/config-editor.module.js.map +1 -1
  150. package/dist/modules/config-editor/config-editor.service.d.ts +11 -8
  151. package/dist/modules/config-editor/config-editor.service.js +123 -66
  152. package/dist/modules/config-editor/config-editor.service.js.map +1 -1
  153. package/dist/modules/custom-plugins/custom-plugins.module.js +10 -13
  154. package/dist/modules/custom-plugins/custom-plugins.module.js.map +1 -1
  155. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.controller.d.ts +2 -2
  156. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.controller.js +21 -19
  157. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.controller.js.map +1 -1
  158. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.module.js +14 -17
  159. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.module.js.map +1 -1
  160. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.service.d.ts +2 -2
  161. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.service.js +18 -15
  162. package/dist/modules/custom-plugins/homebridge-deconz/homebridge-deconz.service.js.map +1 -1
  163. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.controller.d.ts +2 -2
  164. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.controller.js +21 -19
  165. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.controller.js.map +1 -1
  166. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.module.js +14 -17
  167. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.module.js.map +1 -1
  168. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.service.d.ts +2 -2
  169. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.service.js +18 -15
  170. package/dist/modules/custom-plugins/homebridge-hue/homebridge-hue.service.js.map +1 -1
  171. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.controller.d.ts +2 -2
  172. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.controller.js +18 -19
  173. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.controller.js.map +1 -1
  174. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.gateway.d.ts +2 -2
  175. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.gateway.js +15 -13
  176. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.gateway.js.map +1 -1
  177. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.module.js +18 -21
  178. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.module.js.map +1 -1
  179. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.d.ts +8 -8
  180. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js +47 -41
  181. package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js.map +1 -1
  182. package/dist/modules/log/log.gateway.d.ts +3 -3
  183. package/dist/modules/log/log.gateway.js +15 -13
  184. package/dist/modules/log/log.gateway.js.map +1 -1
  185. package/dist/modules/log/log.interfaces.js +1 -2
  186. package/dist/modules/log/log.module.js +14 -17
  187. package/dist/modules/log/log.module.js.map +1 -1
  188. package/dist/modules/log/log.service.d.ts +5 -5
  189. package/dist/modules/log/log.service.js +47 -43
  190. package/dist/modules/log/log.service.js.map +1 -1
  191. package/dist/modules/platform-tools/docker/docker.controller.d.ts +1 -1
  192. package/dist/modules/platform-tools/docker/docker.controller.js +24 -25
  193. package/dist/modules/platform-tools/docker/docker.controller.js.map +1 -1
  194. package/dist/modules/platform-tools/docker/docker.module.js +14 -17
  195. package/dist/modules/platform-tools/docker/docker.module.js.map +1 -1
  196. package/dist/modules/platform-tools/docker/docker.service.d.ts +2 -2
  197. package/dist/modules/platform-tools/docker/docker.service.js +20 -16
  198. package/dist/modules/platform-tools/docker/docker.service.js.map +1 -1
  199. package/dist/modules/platform-tools/hb-service/hb-service.controller.d.ts +2 -2
  200. package/dist/modules/platform-tools/hb-service/hb-service.controller.js +35 -36
  201. package/dist/modules/platform-tools/hb-service/hb-service.controller.js.map +1 -1
  202. package/dist/modules/platform-tools/hb-service/hb-service.dto.js +20 -19
  203. package/dist/modules/platform-tools/hb-service/hb-service.dto.js.map +1 -1
  204. package/dist/modules/platform-tools/hb-service/hb-service.module.js +14 -17
  205. package/dist/modules/platform-tools/hb-service/hb-service.module.js.map +1 -1
  206. package/dist/modules/platform-tools/hb-service/hb-service.service.d.ts +3 -3
  207. package/dist/modules/platform-tools/hb-service/hb-service.service.js +37 -30
  208. package/dist/modules/platform-tools/hb-service/hb-service.service.js.map +1 -1
  209. package/dist/modules/platform-tools/linux/linux.controller.d.ts +1 -1
  210. package/dist/modules/platform-tools/linux/linux.controller.js +23 -21
  211. package/dist/modules/platform-tools/linux/linux.controller.js.map +1 -1
  212. package/dist/modules/platform-tools/linux/linux.module.js +14 -17
  213. package/dist/modules/platform-tools/linux/linux.module.js.map +1 -1
  214. package/dist/modules/platform-tools/linux/linux.service.d.ts +2 -2
  215. package/dist/modules/platform-tools/linux/linux.service.js +18 -14
  216. package/dist/modules/platform-tools/linux/linux.service.js.map +1 -1
  217. package/dist/modules/platform-tools/platform-tools.module.js +12 -15
  218. package/dist/modules/platform-tools/platform-tools.module.js.map +1 -1
  219. package/dist/modules/platform-tools/terminal/terminal.controller.d.ts +1 -1
  220. package/dist/modules/platform-tools/terminal/terminal.controller.js +15 -13
  221. package/dist/modules/platform-tools/terminal/terminal.controller.js.map +1 -1
  222. package/dist/modules/platform-tools/terminal/terminal.gateway.d.ts +2 -2
  223. package/dist/modules/platform-tools/terminal/terminal.gateway.js +17 -15
  224. package/dist/modules/platform-tools/terminal/terminal.gateway.js.map +1 -1
  225. package/dist/modules/platform-tools/terminal/terminal.interfaces.js +1 -2
  226. package/dist/modules/platform-tools/terminal/terminal.module.js +18 -21
  227. package/dist/modules/platform-tools/terminal/terminal.module.js.map +1 -1
  228. package/dist/modules/platform-tools/terminal/terminal.service.d.ts +7 -7
  229. package/dist/modules/platform-tools/terminal/terminal.service.js +33 -28
  230. package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
  231. package/dist/modules/plugins/plugins.controller.d.ts +12 -7
  232. package/dist/modules/plugins/plugins.controller.js +100 -52
  233. package/dist/modules/plugins/plugins.controller.js.map +1 -1
  234. package/dist/modules/plugins/plugins.dto.js +26 -24
  235. package/dist/modules/plugins/plugins.dto.js.map +1 -1
  236. package/dist/modules/plugins/plugins.gateway.d.ts +5 -5
  237. package/dist/modules/plugins/plugins.gateway.js +38 -34
  238. package/dist/modules/plugins/plugins.gateway.js.map +1 -1
  239. package/dist/modules/plugins/plugins.interfaces.js +1 -2
  240. package/dist/modules/plugins/plugins.module.js +27 -26
  241. package/dist/modules/plugins/plugins.module.js.map +1 -1
  242. package/dist/modules/plugins/plugins.service.d.ts +26 -13
  243. package/dist/modules/plugins/plugins.service.js +365 -203
  244. package/dist/modules/plugins/plugins.service.js.map +1 -1
  245. package/dist/modules/server/server.controller.d.ts +7 -7
  246. package/dist/modules/server/server.controller.js +208 -205
  247. package/dist/modules/server/server.controller.js.map +1 -1
  248. package/dist/modules/server/server.dto.js +13 -16
  249. package/dist/modules/server/server.dto.js.map +1 -1
  250. package/dist/modules/server/server.module.js +23 -26
  251. package/dist/modules/server/server.module.js.map +1 -1
  252. package/dist/modules/server/server.service.d.ts +6 -6
  253. package/dist/modules/server/server.service.js +202 -224
  254. package/dist/modules/server/server.service.js.map +1 -1
  255. package/dist/modules/setup-wizard/setup-wizard.controller.d.ts +3 -3
  256. package/dist/modules/setup-wizard/setup-wizard.controller.js +19 -20
  257. package/dist/modules/setup-wizard/setup-wizard.controller.js.map +1 -1
  258. package/dist/modules/setup-wizard/setup-wizard.gateway.d.ts +4 -4
  259. package/dist/modules/setup-wizard/setup-wizard.gateway.js +25 -21
  260. package/dist/modules/setup-wizard/setup-wizard.gateway.js.map +1 -1
  261. package/dist/modules/setup-wizard/setup-wizard.guard.d.ts +2 -2
  262. package/dist/modules/setup-wizard/setup-wizard.guard.js +11 -9
  263. package/dist/modules/setup-wizard/setup-wizard.guard.js.map +1 -1
  264. package/dist/modules/setup-wizard/setup-wizard.module.js +12 -15
  265. package/dist/modules/setup-wizard/setup-wizard.module.js.map +1 -1
  266. package/dist/modules/status/status.controller.d.ts +5 -5
  267. package/dist/modules/status/status.controller.js +40 -36
  268. package/dist/modules/status/status.controller.js.map +1 -1
  269. package/dist/modules/status/status.gateway.d.ts +11 -11
  270. package/dist/modules/status/status.gateway.js +51 -47
  271. package/dist/modules/status/status.gateway.js.map +1 -1
  272. package/dist/modules/status/status.interfaces.js +2 -5
  273. package/dist/modules/status/status.interfaces.js.map +1 -1
  274. package/dist/modules/status/status.module.js +26 -29
  275. package/dist/modules/status/status.module.js.map +1 -1
  276. package/dist/modules/status/status.service.d.ts +13 -13
  277. package/dist/modules/status/status.service.js +100 -88
  278. package/dist/modules/status/status.service.js.map +1 -1
  279. package/dist/modules/users/users.controller.d.ts +3 -3
  280. package/dist/modules/users/users.controller.js +59 -60
  281. package/dist/modules/users/users.controller.js.map +1 -1
  282. package/dist/modules/users/users.dto.js +51 -45
  283. package/dist/modules/users/users.dto.js.map +1 -1
  284. package/dist/modules/users/users.module.js +14 -17
  285. package/dist/modules/users/users.module.js.map +1 -1
  286. package/dist/self-check.js +25 -25
  287. package/dist/self-check.js.map +1 -1
  288. package/package.json +14 -12
  289. package/public/3rdpartylicenses.txt +26 -26
  290. package/public/{chunk-AI6E5JVH.js → chunk-24KMNOUL.js} +1 -1
  291. package/public/{chunk-RMZRXORR.js → chunk-2JKVDOVH.js} +1 -1
  292. package/public/chunk-2NCYMI5G.js +1 -0
  293. package/public/{chunk-TOYVIOBH.js → chunk-53XRPANC.js} +1 -1
  294. package/public/{chunk-5ETJWAIW.js → chunk-57Y3L52Q.js} +1 -1
  295. package/public/{chunk-3E2NZ5JW.js → chunk-5WXUZ3UB.js} +1 -1
  296. package/public/chunk-6JOKZWRV.js +1 -0
  297. package/public/{chunk-W3SNJ7TC.js → chunk-6KOTOEN7.js} +1 -1
  298. package/public/{chunk-WLGXJQPD.js → chunk-6RX377TT.js} +1 -1
  299. package/public/chunk-6WKO2T4Z.js +1 -0
  300. package/public/chunk-757LRGXE.js +68 -0
  301. package/public/{chunk-EAGKQ5OJ.js → chunk-7K67C3PU.js} +1 -1
  302. package/public/chunk-A2XCOYWA.js +1 -0
  303. package/public/{chunk-2KEG7SYT.js → chunk-A6QZW5FF.js} +1 -1
  304. package/public/chunk-ACO7OQZJ.js +1 -0
  305. package/public/{chunk-LWAL5JUG.js → chunk-AFJZVBKJ.js} +1 -1
  306. package/public/{chunk-325LPX6W.js → chunk-AFRZCXEB.js} +1 -1
  307. package/public/{chunk-6KT3BYU6.js → chunk-B65DT3FC.js} +1 -1
  308. package/public/{chunk-ADW6BF5G.js → chunk-BELFJ2SD.js} +1 -1
  309. package/public/chunk-DG6RGETW.js +1 -0
  310. package/public/{chunk-D5RKKI2A.js → chunk-DWAKEAKY.js} +1 -1
  311. package/public/chunk-EACHMWEA.js +50 -0
  312. package/public/{chunk-X5AKILHJ.js → chunk-ESOTGGKX.js} +1 -1
  313. package/public/chunk-F7DXQT5T.js +1 -0
  314. package/public/chunk-FS5QC22S.js +1 -0
  315. package/public/{chunk-4QXLJX7D.js → chunk-FSSORWXC.js} +1 -1
  316. package/public/chunk-GCSYCY2Y.js +1 -0
  317. package/public/{chunk-7UDDRMZZ.js → chunk-H22EEHWT.js} +1 -1
  318. package/public/{chunk-UF2IM5BE.js → chunk-HHHD7NH4.js} +1 -1
  319. package/public/{chunk-2FNQEOXF.js → chunk-HZFYCQBZ.js} +1 -1
  320. package/public/{chunk-OS2SEJZU.js → chunk-I24Z7SXB.js} +1 -1
  321. package/public/{chunk-TSFGO3MA.js → chunk-IJNJ3FHH.js} +1 -1
  322. package/public/{chunk-NKNWXFAK.js → chunk-JXJXX7ID.js} +1 -1
  323. package/public/chunk-KGXF4YD5.js +1 -0
  324. package/public/{chunk-YH6MRXGX.js → chunk-KLZ3D7WG.js} +1 -1
  325. package/public/{chunk-732XLY23.js → chunk-KVEQ2HM3.js} +3 -3
  326. package/public/{chunk-73TX7DHV.js → chunk-LGJ37P4E.js} +1 -1
  327. package/public/chunk-LMQCEFY5.js +19 -0
  328. package/public/{chunk-2CNQY2E7.js → chunk-LYPHF4BI.js} +1 -1
  329. package/public/{chunk-CYBDQV2B.js → chunk-MNT5ZGV3.js} +1 -1
  330. package/public/{chunk-SY4VNLXW.js → chunk-NPZDFVKF.js} +1 -1
  331. package/public/{chunk-EVND2DL5.js → chunk-NQ3EUNKR.js} +1 -1
  332. package/public/chunk-O63KCVSC.js +1 -0
  333. package/public/{chunk-2UOYBCTN.js → chunk-P7VMCG7G.js} +1 -1
  334. package/public/{chunk-OAHDGV32.js → chunk-PE5T5OTD.js} +1 -1
  335. package/public/{chunk-LZOHFRHN.js → chunk-QIB6F6O5.js} +1 -1
  336. package/public/{chunk-OK5EJ7US.js → chunk-QWSS6CWX.js} +1 -1
  337. package/public/{chunk-YNONXMOG.js → chunk-R6KWC4OQ.js} +1 -1
  338. package/public/chunk-RERUZJD4.js +5 -0
  339. package/public/{chunk-7IYTG6GP.js → chunk-S6M53YYQ.js} +1 -1
  340. package/public/{chunk-3IZSIVEA.js → chunk-TAYBEUKS.js} +1 -1
  341. package/public/{chunk-ASKB5DLO.js → chunk-UOYGACIL.js} +1 -1
  342. package/public/chunk-UUBGHMJO.js +1 -0
  343. package/public/chunk-VN4YJ4DW.js +1 -0
  344. package/public/chunk-VTCNWWXF.js +1 -0
  345. package/public/chunk-VWYLCYWH.js +1 -0
  346. package/public/chunk-VYNFC5TY.js +1 -0
  347. package/public/{chunk-WWSLIQVD.js → chunk-W6VJMRO6.js} +1 -1
  348. package/public/{chunk-3IJXQMYZ.js → chunk-WFVVY4KI.js} +1 -1
  349. package/public/chunk-WJVSACF7.js +4 -0
  350. package/public/{chunk-BLT2YCDN.js → chunk-WUEH3CVV.js} +1 -1
  351. package/public/chunk-WXDPCDNZ.js +2 -0
  352. package/public/{chunk-BTBGWLKK.js → chunk-XJ7EHBZC.js} +1 -1
  353. package/public/{chunk-ZEI3HZ6P.js → chunk-XQCLQKCG.js} +2 -2
  354. package/public/{chunk-ZJJ3EOBP.js → chunk-XUHWQHKX.js} +1 -1
  355. package/public/{chunk-VYC5JLE6.js → chunk-YFMEPI62.js} +1 -1
  356. package/public/{chunk-5T4JHJYL.js → chunk-YHIIRNVF.js} +1 -1
  357. package/public/{chunk-QK4V5DVW.js → chunk-YT7L7BBI.js} +1 -1
  358. package/public/index.html +2 -2
  359. package/public/{main-27RPBS22.js → main-WBUEOYPF.js} +1 -1
  360. package/public/{styles-CSF457UW.css → styles-WNHDEKE4.css} +1 -1
  361. package/scripts/extract-plugin-alias.js +8 -4
  362. package/public/chunk-2LXNPXT5.js +0 -1
  363. package/public/chunk-3XDYZNNE.js +0 -1
  364. package/public/chunk-57DUDNZJ.js +0 -1
  365. package/public/chunk-FM6ZYPKR.js +0 -4
  366. package/public/chunk-JJ7TVAIH.js +0 -5
  367. package/public/chunk-L43N56JA.js +0 -1
  368. package/public/chunk-L5I3DZ23.js +0 -1
  369. package/public/chunk-LH2LMHIZ.js +0 -1
  370. package/public/chunk-N2TWGDNX.js +0 -1
  371. package/public/chunk-O4SS7KVP.js +0 -40
  372. package/public/chunk-ONTEIYY3.js +0 -19
  373. package/public/chunk-P7TZIGJS.js +0 -50
  374. package/public/chunk-Q2IS3QQY.js +0 -1
  375. package/public/chunk-QQ5VZZQG.js +0 -1
  376. package/public/chunk-RYTGW6B7.js +0 -1
  377. package/public/chunk-SOT54YHI.js +0 -1
  378. package/public/chunk-TGZNYEGN.js +0 -1
  379. package/public/chunk-U5JF2ZOK.js +0 -1
  380. package/public/chunk-UNGEHXRN.js +0 -1
  381. package/public/chunk-VEGMNMLG.js +0 -1
  382. package/public/chunk-Y5FP6C55.js +0 -2
  383. package/public/chunk-YYJG2ENF.js +0 -1
@@ -1,19 +0,0 @@
1
- import{a as xt}from"./chunk-3IJXQMYZ.js";import{b as B,e as vt,f as $t,g as Rt,h as kt}from"./chunk-732XLY23.js";import{a as bt,b as _t}from"./chunk-WWSLIQVD.js";import{a as Ct}from"./chunk-D5RKKI2A.js";import{a as It}from"./chunk-YNONXMOG.js";import{m as ut,n as ht,t as R}from"./chunk-ZEI3HZ6P.js";import{B as mt,C as ft,c as ct,e as pt,l as gt}from"./chunk-N2TWGDNX.js";import{c as yt,e as F}from"./chunk-CYBDQV2B.js";import{b as wt}from"./chunk-U5JF2ZOK.js";import{k as O,l as H,n as N,q as U}from"./chunk-SOT54YHI.js";import{$b as M,Ib as S,Lb as b,Nb as p,Qa as o,Rc as lt,Yb as st,Yc as dt,Za as tt,_b as y,a as j,ac as V,b as W,d as X,db as I,fc as ot,g as Z,gc as rt,h as $,hc as at,na as m,nc as K,pb as C,qb as k,rb as x,sa as u,sc as r,ta as h,tb as et,tc as l,ub as it,uc as G,vb as nt,wb as f,x as E,xb as a,yb as d,zb as g}from"./chunk-JJ7TVAIH.js";var Tt=Z(Rt(),1);var St=Z(It(),1);var Et=(s,w)=>({"fa-trash":s,"fa-cog fa-spin":w});function Ht(s,w){s&1&&(a(0,"div",13),g(1,"i",20),d())}function Nt(s,w){if(s&1){let t=S();a(0,"li",9)(1,"span"),y(2),r(3,"date"),g(4,"br"),a(5,"span",21),y(6),r(7,"date"),d()(),a(8,"span",22)(9,"button",25),r(10,"translate"),r(11,"translate"),b("click",function(){let i=u(t).$implicit,n=p(2);return h(n.restore(i.id))}),g(12,"i",26),d(),a(13,"button",27),r(14,"translate"),r(15,"translate"),b("click",function(){let i=u(t).$implicit,n=p(2);return h(n.download(i.id))}),g(16,"i",28),d(),a(17,"button",23),r(18,"translate"),r(19,"translate"),b("click",function(){let i=u(t).$implicit,n=p(2);return h(n.delete(i.id))}),g(20,"i",24),d()()()}if(s&2){let t=w.$implicit,e=p(2);o(2),V(" ",G(3,15,t.timestamp,"mediumDate")),o(4),M(G(7,18,t.timestamp,"shortTime")),o(3),f("disabled",e.clicked||e.deleting)("ngbTooltip",l(10,21,"config.restore.copy_to_editor"))("openDelay",150),C("aria-label",l(11,23,"config.restore.copy_to_editor")),o(4),f("disabled",e.clicked||e.deleting)("ngbTooltip",l(14,25,"form.button_download"))("openDelay",150),C("aria-label",l(15,27,"form.button_download")),o(4),f("disabled",e.clicked||e.deleting)("ngbTooltip",l(18,29,"form.button_delete"))("openDelay",150),C("aria-label",l(19,31,"form.button_delete")),o(3),f("ngClass",K(33,Et,t.id!==e.deleting,t.id===e.deleting))}}function Ft(s,w){if(s&1){let t=S();a(0,"ul",14),it(1,Nt,21,36,"li",9,et),a(3,"li",9)(4,"span"),y(5),r(6,"translate"),g(7,"br"),a(8,"span",21),y(9),r(10,"translate"),d()(),a(11,"span",22)(12,"button",23),r(13,"translate"),r(14,"translate"),b("click",function(){u(t);let i=p();return h(i.deleteAllBackups())}),g(15,"i",24),d()()()()}if(s&2){let t=p();o(),nt(t.backupList),o(4),V(" ",l(6,7,"form.button_delete_all")),o(4),V(" ",l(10,9,"common.labels.no_confirmation")," "),o(3),f("disabled",t.clicked||t.deleting)("ngbTooltip",l(13,11,"form.button_delete_all"))("openDelay",150),C("aria-label",l(14,13,"form.button_delete")),o(3),f("ngClass",K(15,Et,t.deleting!=="all",t.deleting==="all"))}}var Mt=(()=>{class s{$activeModal=m(ut);$api=m(U);$router=m(F);$toastr=m(N);$translate=m(O);currentConfig;fromSettings=!1;loading=!0;backupList=[];clicked=!1;deleting=null;ngOnInit(){this.getConfigBackups()}getConfigBackups(){return $(this,null,function*(){try{let t=yield E(this.$api.get("/config-editor/backups"));this.loading=!1,this.backupList=t}catch(t){this.loading=!1,console.error(t),this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(t){return this.$activeModal.close(t)}download(t){return $(this,null,function*(){this.clicked=!0;try{let e=yield E(this.$api.get(`/config-editor/backups/${t}`)),i=JSON.stringify(e,null,4),n=new Blob([i],{type:"application/json"}),v=`config-backup-${t}.json`;(0,St.saveAs)(n,v),this.clicked=!1}catch(e){this.clicked=!1,this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}downloadCurrentConfig(){let t=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,e=document.createElement("a");e.setAttribute("href",t),e.setAttribute("download","config.json"),document.body.appendChild(e),e.click(),e.remove()}delete(t){return $(this,null,function*(){this.deleting=t;try{yield E(this.$api.delete(`/config-editor/backups/${t}`)),yield this.getConfigBackups(),this.deleting=null}catch(e){this.deleting=null,this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}deleteAllBackups(){return $(this,null,function*(){this.deleting="all";try{yield E(this.$api.delete("/config-editor/backups")),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList=[],this.deleting=null}catch(t){this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t),this.deleting=null}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=I({type:s,selectors:[["ng-component"]],inputs:{currentConfig:"currentConfig",fromSettings:"fromSettings"},decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"],[1,"fas","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-cog","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas",3,"ngClass"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-download"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),y(3),r(4,"translate"),d(),a(5,"button",3),r(6,"translate"),b("click",function(){return i.dismissModal()}),d()(),a(7,"div",4)(8,"div",5),g(9,"i",6),d(),a(10,"ul",7)(11,"li"),y(12),r(13,"translate"),d(),a(14,"li"),y(15),r(16,"translate"),d()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),y(21),r(22,"translate"),d(),g(23,"br"),a(24,"small",10),y(25),r(26,"translate"),d()(),a(27,"button",11),r(28,"translate"),b("click",function(){return i.downloadCurrentConfig()}),g(29,"i",12),d()()(),k(30,Ht,2,0,"div",13)(31,Ft,16,18,"ul",14),d(),a(32,"div",15),g(33,"div",16),a(34,"div",17)(35,"button",18),r(36,"translate"),b("click",function(){return i.dismissModal()}),y(37),r(38,"translate"),d()(),g(39,"div",19),d()()),e&2&&(o(3),M(l(4,13,"config.restore.title")),o(2),f("disabled",i.clicked||i.deleting),C("aria-label",l(6,15,"form.button_close")),o(7),M(l(13,17,"config.restore.help_1")),o(3),M(l(16,19,"config.restore.help_2")),o(6),M(l(22,21,"form.button_download")),o(4),M(l(26,23,"config.restore.download")),o(2),f("disabled",i.clicked||i.deleting),C("aria-label",l(28,25,"backup.backup_now")),o(3),x(i.loading?30:i.backupList.length?31:-1),o(5),f("disabled",i.clicked||i.deleting),C("aria-label",l(36,27,"form.button_close")),o(2),V(" ",l(38,29,"form.button_close")," "))},dependencies:[R,lt,ft,dt,H],encapsulation:2})}return s})();function Ut(s,w){if(s&1){let t=S();a(0,"button",13),r(1,"translate"),r(2,"translate"),b("click",function(){u(t);let i=p();return h(i.onCancelRestore())}),g(3,"i",14),d()}if(s&2){let t=p();f("disabled",t.saveInProgress)("openDelay",150)("ngbTooltip",l(1,4,"form.button_cancel")),C("aria-label",l(2,6,"form.button_cancel"))}}function qt(s,w){if(s&1){let t=S();a(0,"button",15),r(1,"translate"),r(2,"translate"),b("click",function(){u(t);let i=p();return h(i.onRestore())}),g(3,"i",16),d()}s&2&&(f("openDelay",150)("ngbTooltip",l(1,3,"form.button_restore")),C("aria-label",l(2,5,"form.button_restore")))}function zt(s,w){if(s&1){let t=S();a(0,"button",15),r(1,"translate"),r(2,"translate"),b("click",function(){u(t);let i=p();return h(i.toggleSideBySide())}),g(3,"i",17),d()}if(s&2){let t=p();f("openDelay",150)("ngbTooltip",l(1,7,t.renderSideBySide?"config.restore.view_inline":"config.restore.view_side_by_side")),C("aria-label",l(2,9,t.renderSideBySide?"config.restore.view_inline":"config.restore.view_side_by_side")),o(3),st("fa-columns",!t.renderSideBySide)("fa-bars",t.renderSideBySide)}}function Jt(s,w){s&1&&g(0,"i",8)}function Lt(s,w){s&1&&g(0,"i",9)}function Wt(s,w){if(s&1){let t=S();a(0,"ngx-monaco-editor",18),b("onInit",function(i){u(t);let n=p();return h(n.onEditorInit(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),h(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),h(n.onSave())}),d()}if(s&2){let t=p();f("options",t.editorOptions)("model",t.monacoEditorModel)}}function Kt(s,w){if(s&1){let t=S();a(0,"ngx-monaco-diff-editor",19),b("onInit",function(i){u(t);let n=p();return h(n.onInitDiffEditor(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),h(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),h(n.onSave())}),d()}if(s&2){let t=p();f("options",t.editorOptions)("originalModel",t.diffOriginalModel)("modifiedModel",t.diffModifiedModel)}}function Gt(s,w){if(s&1){let t=S();a(0,"textarea",20),at("ngModelChange",function(i){u(t);let n=p();return rt(n.homebridgeConfig,i)||(n.homebridgeConfig=i),h(i)}),y(1," "),d()}if(s&2){let t=p();ot("ngModel",t.homebridgeConfig)}}var Te=(()=>{class s{$api=m(U);$md=m(Ct);$modal=m(ht);$monacoEditor=m(xt);$renderer=m(tt);$route=m(yt);$router=m(F);$settings=m(wt);$toastr=m(N);$translate=m(O);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;renderSideBySide=!1;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){let t=this.$translate.instant("menu.config_json_editor");this.$settings.setPageTitle(t),this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:this.renderSideBySide,renderIndicators:!0,ignoreTrimWhitespace:!1,glyphMargin:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(n=>{this.homebridgeConfig=n.config,this.latestSavedConfig=JSON.parse(n.config),this.diffModifiedModel&&this.updateDiffModels()}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},this.diffOriginalModel={code:"",language:"json"},this.diffModifiedModel={code:this.homebridgeConfig||"{}",language:"json"},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>this.setMonacoEditorModel()});let{action:i}=this.$router.parseUrl(this.$router.url).queryParams;if(i){switch(i){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}onEditorInit(t){window.editor=t,this.monacoEditor=t,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(t){this.monacoEditor=t.getModifiedEditor(),this.updateDiffModels(),window.editor=t}updateDiffModels(){if(this.diffOriginalModel&&(this.diffOriginalModel.code=this.originalConfig||""),this.diffModifiedModel&&(this.diffModifiedModel.code=this.homebridgeConfig||"{}"),window.editor&&window.editor.getOriginalEditor){let t=window.editor.getOriginalEditor(),e=window.editor.getModifiedEditor();if(t&&e){let i=t.getModel(),n=e.getModel();i&&i.setValue(this.originalConfig||""),n&&n.setValue(this.homebridgeConfig||"{}")}}}onSave(){return $(this,null,function*(){if(!this.saveInProgress){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress=!0;try{if(!this.isMobile){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let e=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of e)if(i.message==="Duplicate object key"){this.saveInProgress=!1,this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig=this.monacoEditor.getModel().getValue()}let t=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(t,null,4),typeof t.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(t.bridge.username)?t.accessories&&!Array.isArray(t.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&!Array.isArray(t.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&Array.isArray(t.platforms)&&!this.validateSection(t.platforms,"platform")||t.accessories&&Array.isArray(t.accessories)&&!this.validateSection(t.accessories,"accessory")||t.plugins&&Array.isArray(t.plugins)&&!this.validatePlugins(t.plugins,"plugins")||t.disabledPlugins&&Array.isArray(t.disabledPlugins)&&!this.validatePlugins(t.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(t),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(t=!1){let e=this.$modal.open(Mt,{size:"lg",backdrop:"static"});e.componentInstance.currentConfig=this.homebridgeConfig,e.componentInstance.fromSettings=t,e.result.then(i=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig,this.updateDiffModels()),this.$api.get(`/config-editor/backups/${i}`).subscribe({next:n=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(n,null,4),this.updateDiffModels(),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig,forceMoveMarkers:!0}]))},error:n=>{console.error(n),this.$toastr.error(n.error?.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onCancelRestore(){if(window.editor&&window.editor.dispose)try{window.editor.dispose(),window.editor=void 0}catch{}this.homebridgeConfig=this.originalConfig,this.originalConfig="",this.renderSideBySide&&this.toggleSideBySide(),this.updateDiffModels(),this.onRestore()}toggleSideBySide(){this.renderSideBySide=!this.renderSideBySide,this.editorOptions=W(j({},this.editorOptions),{renderSideBySide:this.renderSideBySide})}ngOnDestroy(){let t=document.querySelector(".content");this.$renderer.removeStyle(t,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove());try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let e=window.monaco.Uri.parse("file:///original.json"),i=window.monaco.Uri.parse("file:///modified.json"),n=window.monaco.editor.getModel(e);n&&n.dispose();let v=window.monaco.editor.getModel(i);v&&v.dispose();let T=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(A=>A.uri!=="http://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:T})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}validateSection(t,e){for(let i of t){if(typeof i!="object"||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(!i[e])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1;if(typeof i[e]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(i),!1}return!0}validatePlugins(t,e){for(let i of t)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:e}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(t){this.monacoEditor&&(t=JSON.stringify(t,null,4).split(`
2
- `).map(e=>` ${e}`).join(`
3
- `),setTimeout(()=>{let e=this.monacoEditor.getModel().findMatches(t);if(e.length){let i=e[0].range,n=new monaco.Range(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:n,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}},200))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(i=>i.uri==="http://homebridge/config.json"))return;let t=monaco.Uri.parse("a://homebridge/config.json"),e=kt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported});window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[t.toString()],schema:{type:"object",required:["bridge"],properties:{bridge:{type:"object",required:["name","username","port","pin"],properties:j({name:{type:"string",title:this.$translate.instant("settings.name"),description:`The Homebridge instance name.
4
- This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",title:this.$translate.instant("users.label_username"),description:`Homebridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).
5
- You should change this pin if you need to re-pair your instance with HomeKit.
6
- Example: 0E:89:49:64:91:86.`,default:"0E:89:49:64:91:86",pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"},port:{type:"number",title:this.$translate.instant("settings.network.port_hb"),description:`The port Homebridge listens on.
7
- If running more than one instance of Homebridge on the same server make sure each instance is given a unique port.`,default:51173,minimum:1025,maximum:65534},pin:{type:"string",description:`The Homebridge instance pin.
8
- This is used when pairing Homebridge to HomeKit.
9
- Example: 630-27-655.`,default:"630-27-655",pattern:"^([0-9]{3}-[0-9]{2}-[0-9]{3})$"},manufacturer:{type:"string",title:this.$translate.instant("child_bridge.config.manufacturer"),description:"The bridge manufacturer to be displayed in HomeKit."},firmwareRevision:{type:"string",title:this.$translate.instant("child_bridge.config.firmware"),description:"The bridge firmware version to be displayed in HomeKit."},model:{type:"string",title:this.$translate.instant("child_bridge.config.model"),description:"The bridge model to be displayed in HomeKit."},bind:{title:this.$translate.instant("settings.network.title_network_interfaces"),description:`A string or an array of strings with the name(s) of the network interface(s) Homebridge should bind to.
10
- Requires Homebridge v1.3 or later.`,type:["string","array"],items:{type:"string",description:this.$translate.instant("status.widget.network.network_interface")}}},this.isMatterSupported?{matter:{type:"object",additionalProperties:!1,title:this.$translate.instant("settings.matter.title"),description:"Matter-specific configuration for the main bridge.",properties:{port:{type:"number",title:this.$translate.instant("settings.matter.port"),description:this.$translate.instant("settings.matter.port_desc"),minimum:1025,maximum:65534}}}}:{}),default:{name:"Homebridge",username:"0E:89:49:64:91:86",port:51173,pin:"6302-7655"}},mdns:{type:"object",properties:{interface:{type:"string",title:this.$translate.instant("status.widget.network.network_interface"),description:`The interface or IP address of the interface you want Homebridge to listen on.
11
- This is useful if your server has multiple interfaces.
12
- Deprecated as of Homebridge v1.3.0 - use bridge.bind instead.`},legacyAdvertiser:{type:"boolean",title:"Legacy mDNS Advertiser",description:"Set to false to use the new mdns library, ciao."}},default:{legacyAdvertiser:!1}},ports:{type:"object",title:"Port Range",description:"The range of ports that should be used for external accessories like cameras and TVs.",required:["start","end"],properties:{start:{type:"number",default:52100,minimum:1025,maximum:65534,title:this.$translate.instant("settings.network.port_start"),description:this.$translate.instant("settings.network.port_start_desc")},end:{type:"number",default:52150,minimum:1025,maximum:65534,title:this.$translate.instant("settings.network.port_end"),description:this.$translate.instant("settings.network.port_end_desc")}},default:{start:52100,end:52150}},platforms:{type:"array",title:"Platforms",description:`Any plugin that exposes a platform should have its config entered in this array.
13
- Separate each plugin config block using a comma.`,items:{type:"object",required:["platform"],anyOf:[{type:"object",required:["platform"],title:this.$translate.instant("plugins.button_settings"),properties:{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the platform."},_bridge:e}},{type:"object",properties:W(j({platform:{type:"string",title:"Platform Name",description:`Homebridge UI platform name must be set to "config".
14
- Do not change!`,const:"config"},name:{title:this.$translate.instant("accessories.name"),type:"string",default:"Homebridge UI",minLength:1,description:"The name of the Homebridge instance."},port:{title:this.$translate.instant("settings.network.port_ui"),type:"integer",default:8080,minimum:1025,maximum:65535,description:this.$translate.instant("settings.network.port_ui_desc")},auth:{type:"string",default:"form",title:this.$translate.instant("settings.security.auth"),description:this.$translate.instant("settings.security.auth_desc"),oneOf:[{title:"Require Authentication",enum:["form"]},{title:"None",enum:["none"]}]},theme:{title:this.$translate.instant("settings.display.theme"),description:"The theme used for the UI.",type:"string",default:"orange",oneOf:[{title:this.$translate.instant("settings.display.orange"),enum:["orange"]},{title:this.$translate.instant("settings.display.red"),enum:["red"]},{title:this.$translate.instant("settings.display.pink"),enum:["pink"]},{title:this.$translate.instant("settings.display.purple"),enum:["purple"]},{title:this.$translate.instant("settings.display.deep_purple"),enum:["deep-purple"]},{title:this.$translate.instant("settings.display.indigo"),enum:["indigo"]},{title:this.$translate.instant("settings.display.blue"),enum:["blue"]},{title:this.$translate.instant("settings.display.bluegrey"),enum:["blue-grey"]},{title:this.$translate.instant("settings.display.cyan"),enum:["cyan"]},{title:this.$translate.instant("settings.display.green"),enum:["green"]},{title:this.$translate.instant("settings.display.teal"),enum:["teal"]},{title:this.$translate.instant("settings.display.grey"),enum:["grey"]},{title:this.$translate.instant("settings.display.brown"),enum:["brown"]}]},lightingMode:{title:this.$translate.instant("settings.display.lighting_mode"),description:"The lighting mode used for the UI.",type:"string",default:"auto",oneOf:[{title:this.$translate.instant("accessories.control.auto"),enum:["auto"]},{title:this.$translate.instant("settings.display.light"),enum:["light"]},{title:this.$translate.instant("settings.display.dark"),enum:["dark"]}]},menuMode:{title:this.$translate.instant("settings.display.menu_mode"),description:"Modes for the UI side menu.",type:"string",default:"default",oneOf:[{title:this.$translate.instant("settings.display.menu_default"),enum:["default"]},{title:this.$translate.instant("settings.display.menu_freeze"),enum:["freeze"]}]},temp:{title:this.$translate.instant("settings.linux.temp"),type:"string",description:this.$translate.instant("settings.linux.temp_desc")},tempUnits:{title:this.$translate.instant("settings.display.temp_units"),description:"The units used to display the temperature.",type:"string",default:"c",oneOf:[{title:this.$translate.instant("settings.display.temp_units.c"),enum:["c"]},{title:this.$translate.instant("settings.display.temp_units.f"),enum:["f"]}]},lang:{title:this.$translate.instant("settings.display.lang"),type:"string",default:"auto",description:"The language used for the UI.",oneOf:[{title:this.$translate.instant("form.select.auto"),enum:["auto"]},{title:"Bulgarian (bg)",enum:["bg"]},{title:"Catalan (ca)",enum:["ca"]},{title:"Chinese - Simplified (zh-CN)",enum:["zh-CN"]},{title:"Chinese - Traditional (zh-TW)",enum:["zh-TW"]},{title:"Czech (cs)",enum:["cs"]},{title:"Dutch (nl)",enum:["nl"]},{title:"English (en)",enum:["en"]},{title:"Finnish (fi)",enum:["fi"]},{title:"French (fr)",enum:["fr"]},{title:"German (de)",enum:["de"]},{title:"Hebrew (he)",enum:["he"]},{title:"Hungarian (hu)",enum:["hu"]},{title:"Indonesian (id)",enum:["id"]},{title:"Italian (it)",enum:["it"]},{title:"Japanese (ja)",enum:["ja"]},{title:"Korean (ko)",enum:["ko"]},{title:"Macedonian (mk)",enum:["mk"]},{title:"Norwegian (no)",enum:["no"]},{title:"Polish (pl)",enum:["pl"]},{title:"Portuguese (Brazil)",enum:["pt-BR"]},{title:"Portuguese (Portugal)",enum:["pt"]},{title:"Russian (ru)",enum:["ru"]},{title:"Slovenian (sl)",enum:["sl"]},{title:"Spanish (es)",enum:["es"]},{title:"Swedish (sv)",enum:["sv"]},{title:"Thai (th)",enum:["th"]},{title:"Turkish (tr)",enum:["tr"]},{title:"Ukrainian (uk)",enum:["uk"]}]},wallpaper:{title:this.$translate.instant("settings.display.wallpaper"),description:"The full path to the .jpg file.",type:"string"},homebridgePackagePath:{title:this.$translate.instant("settings.network.hb_package"),type:"string",description:this.$translate.instant("settings.network.hb_package_desc")},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",title:this.$translate.instant("settings.network.host"),description:this.$translate.instant("settings.network.host_desc")},sessionTimeoutInactivityBased:{type:"boolean",title:this.$translate.instant("settings.startup.session_inactivity_based"),description:this.$translate.instant("settings.startup.session_inactivity_based_desc")},sessionTimeout:{type:"integer",minimum:600,maximum:864e5,title:this.$translate.instant("settings.startup.session"),description:this.$translate.instant("settings.startup.session_desc")},log:{type:"object",title:"Log Settings",description:"The log settings for the Homebridge UI.",properties:{maxSize:{type:"integer",title:this.$translate.instant("settings.terminal.log_max"),description:this.$translate.instant("settings.terminal.log_max_desc"),minimum:-1},truncateSize:{type:"integer",title:this.$translate.instant("settings.terminal.log_truncate"),description:this.$translate.instant("settings.terminal.log_truncate_desc"),minimum:0}}},ssl:{type:"object",title:this.$translate.instant("settings.security.https"),description:this.$translate.instant("settings.security.https_desc"),properties:{key:{type:"string",title:this.$translate.instant("settings.security.key"),description:"The full path to the private key file."},cert:{type:"string",title:this.$translate.instant("settings.security.cert"),description:"The full path to the certificate file."},pfx:{title:this.$translate.instant("settings.security.pfx"),type:"string",description:"The full path to the PKCS#12 certificate file."},passphrase:{title:this.$translate.instant("settings.security.pass"),type:"string",description:"The passphrase for the PKCS#12 certificate file."}}},accessoryControl:{title:"Accessory Control Setup",type:"object",description:"The accessory control settings for the Homebridge UI.",properties:{debug:{title:this.$translate.instant("settings.accessory.debug"),type:"boolean",description:this.$translate.instant("settings.accessory.debug_desc")},instanceBlacklist:{title:this.$translate.instant("settings.security.ui_control"),type:"array",description:this.$translate.instant("settings.security.ui_control_desc"),items:{title:this.$translate.instant("users.label_username"),type:"string",pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"}}}},linux:{title:"Linux Server Commands",type:"object",description:"The Linux server commands for the Homebridge UI.",properties:{shutdown:{title:this.$translate.instant("settings.linux.shutdown"),type:"string",description:this.$translate.instant("settings.linux.shutdown_desc")},restart:{title:this.$translate.instant("settings.linux.restart"),type:"string",description:this.$translate.instant("settings.linux.restart_desc")}}}},this.$settings.originalWebroot!==globalThis.webroot.errorCode?{webroot:{title:this.$translate.instant("settings.network.webroot"),type:"string",description:this.$translate.instant("settings.network.webroot_desc")}}:{}),{proxyHost:{title:this.$translate.instant("settings.network.proxy"),type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:this.$translate.instant("settings.network.proxy_desc")},scheduledBackupPath:{title:this.$translate.instant("backup.settings_path"),description:"The full path to where the service should save daily scheduled backups archives.",type:"string"},scheduledBackupDisable:{title:"Disable Scheduled Backups",type:"boolean",description:"When enabled, the Homebridge UI will not create daily scheduled backups."},disableServerMetricsMonitoring:{title:"Disable Server Metrics Monitoring",type:"boolean",description:"When enabled, the Homebridge UI will not collect or report CPU or memory stats."},enableMdnsAdvertise:{title:this.$translate.instant("settings.network.mdns_advertise"),type:"boolean",description:this.$translate.instant("settings.network.mdns_advertise_help")},plugins:{title:this.$translate.instant("menu.label_plugins"),type:"object",description:"Settings surrounding plugins used by the Homebridge UI.",properties:{hideUpdatesFor:{type:"array",title:"Hide Plugin Updates For",description:"A list of plugin names for which frontend update notifications will be hidden.",items:{type:"string",title:this.$translate.instant("accessories.plugin"),pattern:"^(?:@[\\w-]+(?:\\.[\\w-]+)*/)?homebridge-[\\w-]+$"}},hidePairingAlerts:{type:"array",title:"Hide Pairing Alerts",description:'A list of bridge identifiers (e.g., "0E:02:9A:9D:44:45-HAP" or "0E:02:9A:9D:44:45-MATTER") for which pairing alerts will be hidden in the UI.',items:{type:"string",title:"Bridge Identifier",pattern:"^[0-9A-F]{2}(?::[0-9A-F]{2}){5}-(HAP|MATTER)$"}},alwaysShowBetas:{type:"boolean",title:this.$translate.instant("settings.display.show_betas"),description:"When enabled, beta releases will be shown as available for Homebridge, the UI and plugins."}}},terminal:{type:"object",title:"Terminal Settings",description:"The terminal settings for the Homebridge UI.",properties:{persistence:{title:this.$translate.instant("settings.terminal.persistence"),type:"boolean",description:this.$translate.instant("settings.terminal.persistence_help"),default:!1},hideWarning:{title:this.$translate.instant("settings.terminal.warning"),type:"boolean",description:this.$translate.instant("settings.terminal.warning_help"),default:!1},bufferSize:{title:this.$translate.instant("settings.terminal.buffer_size"),type:"integer",description:this.$translate.instant("settings.terminal.buffer_size_help"),default:5e4,minimum:0}}}})}]}},accessories:{type:"array",title:this.$translate.instant("menu.label_accessories"),description:`Any plugin that exposes an accessory should have its config entered in this array.
15
- Separate each plugin config block using a comma.`,items:{type:"object",required:["accessory","name"],title:this.$translate.instant("plugins.button_settings"),properties:{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the accessory."},_bridge:e}}},plugins:{type:"array",title:this.$translate.instant("menu.label_plugins"),description:`An array of plugins that should be selectively enabled.
16
- Remove this array to enable all plugins.`,items:{type:"string",title:this.$translate.instant("accessories.plugin"),description:`The full plugin npm package name.
17
- Example: homebridge-dummy.`},default:["homebridge-config-ui-x"]},disabledPlugins:{type:"array",description:`An array of plugins that should be disabled.
18
- Requires Homebridge v1.3 or later.`,items:{type:"string",title:this.$translate.instant("accessories.plugin"),description:`The full plugin npm package name.
19
- Example: homebridge-dummy.`},default:[]}}}}]}),this.monacoEditorModel.uri=monaco.Uri.parse("a://homebridge/config.json")}visualViewPortChanged(){this.lastHeight<window.visualViewport.height&&document.activeElement.blur(),window.visualViewport.height<window.innerHeight?(this.$md.enableTouchMove(),this.lastHeight=window.visualViewport.height):window.visualViewport.height===window.innerHeight&&(this.$md.disableTouchMove(),this.lastHeight=window.visualViewport.height)}saveConfig(t){return $(this,null,function*(){try{let e=yield E(this.$api.post("/config-editor",t));this.homebridgeConfig=JSON.stringify(e,null,4),yield this.detectSavesChangesForRestart()}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}validateArraysEqual(t,e){if(t.length!==e.length)return!1;let i=[...t].sort(),n=[...e].sort();return i.every((v,_)=>v===n[_])}removePlatformsAndAccessories(t){let v=t,{accessories:e,platforms:i}=v;return X(v,["accessories","platforms"])}removeEmptyBridges(t){return t.filter(e=>e._bridge&&Object.keys(e._bridge).length>0).map(e=>e._bridge)}validateBridgesEqual(t,e){return t.length!==e.length?!1:t.every(i=>e.some(n=>B(i,n)))}detectConfigPlatformChanges(){try{let t=this.latestSavedConfig,e=JSON.parse(this.homebridgeConfig),i=(t.platforms||[]).find(T=>T.platform==="config"),n=(e.platforms||[]).find(T=>T.platform==="config"),v=i?.webroot||"",_=n?.webroot||"";return v!==_&&(_=_?`/${_}`.replace(/\/+/g,"/").replace(/\/$/,""):"",_==="/"&&(_=""),this.$settings.setItem("webroot",_),n&&(_&&this.$settings.originalWebroot!==globalThis.webroot.errorCode?n.webroot=_:delete n.webroot,this.homebridgeConfig=JSON.stringify(e,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig))),!i&&n||i&&!n?!0:!i&&!n?!1:!B(i,n)}catch(t){return console.error("Error detecting config platform changes:",t),!1}}detectSavesChangesForRestart(){return $(this,null,function*(){let t=yield this.determineRestartType();if(t==="full"){let e=this.detectConfigPlatformChanges();yield this.performFullRestart(e)}else t==="child"&&(yield this.performChildBridgeRestart());this.latestSavedConfig=JSON.parse(this.homebridgeConfig)})}determineRestartType(){return $(this,null,function*(){if(this.hbPendingRestart)return"full";let t=this.latestSavedConfig,e=JSON.stringify(t,null,4),i=JSON.parse(this.homebridgeConfig),n=this.homebridgeConfig;if(e===n&&!this.childBridgesToRestart.length)return this.$toastr.info(this.$translate.instant("config.no_restart"),this.$translate.instant("config.config_saved")),"none";if(!this.validateArraysEqual(Object.keys(t),Object.keys(i))||[...i.platforms||[],...i.accessories||[]].every(c=>!c._bridge||!Object.keys(c._bridge).length))return"full";let _=this.removePlatformsAndAccessories(t),T=this.removePlatformsAndAccessories(i);if(!B(_,T))return"full";let A=t.platforms||[],q=i.platforms||[],Bt=A.map(c=>c.platform),At=q.map(c=>c.platform);if(!this.validateArraysEqual(Bt,At))return"full";let z=t.accessories||[],J=i.accessories||[],Pt=z.map(c=>c.accessory),Dt=J.map(c=>c.accessory);if(!this.validateArraysEqual(Pt,Dt)||!this.validateBridgesEqual(this.removeEmptyBridges(A),this.removeEmptyBridges(q))||!this.validateBridgesEqual(this.removeEmptyBridges(z),this.removeEmptyBridges(J)))return"full";let Y=A.filter(c=>!B(c,q.find(P=>P.platform===c.platform))),Vt=z.filter(c=>!B(c,J.find(P=>P.accessory===c.accessory))),Q=[...Y,...Vt];if(Y.some(c=>c.platform==="config")||Q.some(c=>c.platform==="config"?!1:!c._bridge||Object.keys(c._bridge).length===0))return"full";try{let c=yield E(this.$api.get("/status/homebridge/child-bridges"));return Q.forEach(P=>{let jt=P._bridge.username.toUpperCase(),D=c.find(({username:L})=>L===jt);if(D)this.childBridgesToRestart.some(L=>L.username===D.username)||this.childBridgesToRestart.push({name:D.name,username:D.username,matterSerialNumber:D.matterSerialNumber});else return"full"}),"child"}catch(c){return console.error("Error fetching child bridges:",c),"full"}})}performChildBridgeRestart(){return $(this,null,function*(){let t=this.$modal.open(vt,{size:"lg",backdrop:"static"});t.componentInstance.bridges=this.childBridgesToRestart;try{yield t.result,this.childBridgesToRestart=[]}catch{}})}performFullRestart(t){return $(this,null,function*(){t&&(yield E(this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{})));let e=this.$modal.open($t,{size:"lg",backdrop:"static"});try{yield e.result,this.hbPendingRestart=!1,this.childBridgesToRestart=[]}catch{this.hbPendingRestart=!0}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let e=Tt.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(e,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),e}}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=I({type:s,selectors:[["ng-component"]],decls:18,vars:19,consts:[[1,"flex-column","d-flex","align-items-stretch","h-100"],[1,"row"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","openDelay","ngbTooltip"],[1,"fas","fa-floppy-disk"],[1,"fas","fa-spinner","fa-pulse"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModel"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","openDelay","ngbTooltip"],[1,"fas","fa-times"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","openDelay","ngbTooltip"],[1,"fas","fa-history"],[1,"fas"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModelChange","ngModel"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),y(4),r(5,"translate"),d()(),a(6,"div",4),k(7,Ut,4,8,"button",5),k(8,qt,4,7,"button",6),k(9,zt,4,11,"button",6),a(10,"button",7),r(11,"translate"),r(12,"translate"),b("click",function(){return i.onSave()}),k(13,Jt,1,0,"i",8),k(14,Lt,1,0,"i",9),d()()(),k(15,Wt,1,2,"ngx-monaco-editor",10),k(16,Kt,1,3,"ngx-monaco-diff-editor",11),k(17,Gt,2,1,"textarea",12),d()),e&2&&(o(4),M(l(5,13,"menu.config_json_editor")),o(3),x(i.originalConfig?7:-1),o(),x(i.originalConfig?-1:8),o(),x(!i.isMobile&&i.originalConfig?9:-1),o(),f("disabled",i.saveInProgress)("openDelay",150)("ngbTooltip",l(11,15,"form.button_save")),C("aria-label",l(12,17,"form.button_save")),o(3),x(i.saveInProgress?-1:13),o(),x(i.saveInProgress?14:-1),o(),x(!i.isMobile&&!i.originalConfig?15:-1),o(),x(!i.isMobile&&i.originalConfig?16:-1),o(),x(i.isMobile?17:-1))},dependencies:[R,bt,_t,mt,ct,pt,gt,H],encapsulation:2})}return s})();export{Te as ConfigEditorComponent};