homebridge-config-ui-x 5.0.0-beta.99 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/CHANGELOG.md +122 -5
  2. package/config.schema.json +1 -1
  3. package/dist/core/auth/auth.controller.d.ts +4 -0
  4. package/dist/core/config/config.service.d.ts +8 -0
  5. package/dist/core/config/config.service.js +2 -0
  6. package/dist/core/config/config.service.js.map +1 -1
  7. package/dist/main.js +1 -0
  8. package/dist/main.js.map +1 -1
  9. package/dist/modules/backup/backup.controller.d.ts +1 -0
  10. package/dist/modules/backup/backup.controller.js +11 -0
  11. package/dist/modules/backup/backup.controller.js.map +1 -1
  12. package/dist/modules/backup/backup.service.d.ts +1 -0
  13. package/dist/modules/backup/backup.service.js +19 -5
  14. package/dist/modules/backup/backup.service.js.map +1 -1
  15. package/dist/modules/config-editor/config-editor.service.js +2 -1
  16. package/dist/modules/config-editor/config-editor.service.js.map +1 -1
  17. package/dist/modules/platform-tools/docker/docker.service.js +8 -2
  18. package/dist/modules/platform-tools/docker/docker.service.js.map +1 -1
  19. package/dist/modules/plugins/plugins.controller.d.ts +2 -0
  20. package/dist/modules/plugins/plugins.controller.js +1 -1
  21. package/dist/modules/plugins/plugins.controller.js.map +1 -1
  22. package/dist/modules/plugins/plugins.service.d.ts +3 -0
  23. package/dist/modules/plugins/plugins.service.js +81 -47
  24. package/dist/modules/plugins/plugins.service.js.map +1 -1
  25. package/dist/modules/server/server.controller.d.ts +5 -0
  26. package/dist/modules/server/server.controller.js +25 -0
  27. package/dist/modules/server/server.controller.js.map +1 -1
  28. package/dist/modules/server/server.service.d.ts +9 -1
  29. package/dist/modules/server/server.service.js +97 -21
  30. package/dist/modules/server/server.service.js.map +1 -1
  31. package/dist/modules/status/status.gateway.d.ts +6 -0
  32. package/dist/modules/status/status.gateway.js +14 -0
  33. package/dist/modules/status/status.gateway.js.map +1 -1
  34. package/dist/modules/status/status.service.d.ts +26 -0
  35. package/dist/modules/status/status.service.js +112 -0
  36. package/dist/modules/status/status.service.js.map +1 -1
  37. package/package.json +11 -11
  38. package/public/3rdpartylicenses.txt +214 -187
  39. package/public/assets/hap-icons/{airpurifier.svg → air-purifier.svg} +11 -11
  40. package/public/assets/hap-icons/doorbell.svg +17 -0
  41. package/public/assets/hap-icons/filter-maintenance.svg +26 -0
  42. package/public/assets/hap-icons/microphone.svg +22 -0
  43. package/public/assets/hap-icons/security-system-active.svg +103 -0
  44. package/public/assets/hap-icons/{smokesensor.svg → smoke-sensor.svg} +15 -2
  45. package/public/assets/hap-icons/speaker.svg +27 -12
  46. package/public/assets/hap-icons/vacuum-off.svg +34 -0
  47. package/public/assets/hap-icons/vacuum-on.svg +73 -0
  48. package/public/chunk-2RH7XRJB.js +1 -0
  49. package/public/chunk-2V6GVJIK.js +1 -0
  50. package/public/chunk-3UCLNJIE.js +1 -0
  51. package/public/chunk-4J2HTHMW.js +1 -0
  52. package/public/chunk-4NQG4OIB.js +1 -0
  53. package/public/chunk-52HWZQJT.js +1 -0
  54. package/public/chunk-56R3JRVX.js +1 -0
  55. package/public/chunk-65A2CLMB.js +1 -0
  56. package/public/chunk-6LPAR6QB.js +1 -0
  57. package/public/chunk-6VMMFEEB.js +1 -0
  58. package/public/chunk-7RQP64IZ.js +12 -0
  59. package/public/{chunk-GMY5QOXR.js → chunk-BG5MCCBU.js} +6 -6
  60. package/public/chunk-C3HWKB2Q.js +5 -0
  61. package/public/{chunk-YJXHSHNO.js → chunk-CEVLFYVV.js} +1 -1
  62. package/public/chunk-CHYWVK3W.js +1 -0
  63. package/public/chunk-CR7NFTHI.js +4 -0
  64. package/public/{chunk-BRW7C4BZ.js → chunk-CXP6VKNZ.js} +1 -1
  65. package/public/chunk-CY3O5ACI.js +1 -0
  66. package/public/chunk-D5MSFLIQ.js +1 -0
  67. package/public/chunk-DVQU3KHF.js +1 -0
  68. package/public/chunk-EGPBTPS6.js +1 -0
  69. package/public/chunk-EI76KND2.js +2 -0
  70. package/public/chunk-EP7NNPU2.js +1 -0
  71. package/public/chunk-ESCMWFTR.js +1 -0
  72. package/public/chunk-FDBWBMB3.js +1 -0
  73. package/public/chunk-FO44GZVZ.js +5 -0
  74. package/public/chunk-FWNSHSUQ.js +1 -0
  75. package/public/chunk-G4DWZG7U.js +1 -0
  76. package/public/{chunk-2G7GNBIF.js → chunk-GEIS2BWE.js} +1 -1
  77. package/public/chunk-GPZM245P.js +1 -0
  78. package/public/chunk-H2VHR6F4.js +1 -0
  79. package/public/chunk-H5PKL3FP.js +2 -0
  80. package/public/chunk-HFVA7EOG.js +23 -0
  81. package/public/chunk-HU7QTSUZ.js +1 -0
  82. package/public/{chunk-IOWBVW62.js → chunk-HUAADM2I.js} +1 -1
  83. package/public/{chunk-WAA5KWIN.js → chunk-J7Q5BUJW.js} +1 -1
  84. package/public/chunk-KDVPFRHN.js +1 -0
  85. package/public/chunk-KOHQYRVP.js +20 -0
  86. package/public/chunk-MWGI7ZLY.js +28 -0
  87. package/public/chunk-NEZ6TZYE.js +1 -0
  88. package/public/chunk-OLDRUBZS.js +1 -0
  89. package/public/chunk-OYH4UIAH.js +1 -0
  90. package/public/chunk-Q4CZ7LVK.js +2 -0
  91. package/public/{chunk-RNHMRKPJ.js → chunk-QIOCGI3G.js} +5 -5
  92. package/public/chunk-QTTC6A7P.js +1 -0
  93. package/public/chunk-QUD3RGWL.js +1 -0
  94. package/public/{chunk-QMB5XE4Y.js → chunk-R3563DDE.js} +1 -1
  95. package/public/{chunk-B3LZRDAG.js → chunk-S42WFQ2L.js} +1 -1
  96. package/public/{chunk-UVOJ3BF7.js → chunk-THGDS273.js} +1 -1
  97. package/public/chunk-TSAWRS7P.js +8 -0
  98. package/public/chunk-U4GBERFR.js +1 -0
  99. package/public/chunk-UB4DU2JC.js +1 -0
  100. package/public/chunk-UJNEXGXC.js +1 -0
  101. package/public/chunk-ULJPS3WS.js +7 -0
  102. package/public/{chunk-XHI7IAUN.js → chunk-W4PQWIYG.js} +1 -1
  103. package/public/chunk-W542IB6H.js +1 -0
  104. package/public/{chunk-UTAVUGTT.js → chunk-WDFAWIMZ.js} +7 -7
  105. package/public/chunk-WF776GWR.js +1 -0
  106. package/public/chunk-WFYBML4S.js +1 -0
  107. package/public/chunk-XFFCMC6L.js +4 -0
  108. package/public/chunk-XIYHNDRN.js +1 -0
  109. package/public/chunk-YJ2Q2RAD.js +1 -0
  110. package/public/chunk-YYDFCQK6.js +3 -0
  111. package/public/chunk-YZN5MPV3.js +1 -0
  112. package/public/chunk-ZR6LFO7Q.js +1 -0
  113. package/public/index.html +2 -2
  114. package/public/main-I6NBG3JJ.js +1 -0
  115. package/public/{styles-PKR3EGHP.css → styles-ZKWHTEN5.css} +1 -1
  116. package/scripts/upgrade-install-plugin.sh +6 -1
  117. package/public/chunk-2CDSAOHD.js +0 -1
  118. package/public/chunk-2OUR67N4.js +0 -1
  119. package/public/chunk-3CYHPVRJ.js +0 -1
  120. package/public/chunk-3DF7CHZW.js +0 -1
  121. package/public/chunk-5F327T7H.js +0 -1
  122. package/public/chunk-6CNQKPV4.js +0 -1
  123. package/public/chunk-AF2VUIEE.js +0 -1
  124. package/public/chunk-ALG7CIS3.js +0 -5
  125. package/public/chunk-BGDBPFZN.js +0 -1
  126. package/public/chunk-BIRWL4X3.js +0 -1
  127. package/public/chunk-BMCQHGMB.js +0 -1
  128. package/public/chunk-BSGFKU4J.js +0 -4
  129. package/public/chunk-C6A3CFIK.js +0 -1
  130. package/public/chunk-C6LXQBT3.js +0 -1
  131. package/public/chunk-CG7LPZUJ.js +0 -1
  132. package/public/chunk-CLQDCNVA.js +0 -2
  133. package/public/chunk-CMO7ESK6.js +0 -8
  134. package/public/chunk-DDFZVHUO.js +0 -1
  135. package/public/chunk-DGIKPYZP.js +0 -8
  136. package/public/chunk-DNW5N3YO.js +0 -1
  137. package/public/chunk-EGELGD5H.js +0 -1
  138. package/public/chunk-EJBJOBK4.js +0 -1
  139. package/public/chunk-F4KGCHEZ.js +0 -1
  140. package/public/chunk-FATD52DV.js +0 -1
  141. package/public/chunk-FXS45ML3.js +0 -1
  142. package/public/chunk-G6KG4MKA.js +0 -1
  143. package/public/chunk-GTAHH5HN.js +0 -1
  144. package/public/chunk-HLTIIGIP.js +0 -1
  145. package/public/chunk-HLTWQSH5.js +0 -1
  146. package/public/chunk-IORHLUIJ.js +0 -1
  147. package/public/chunk-JADR4A63.js +0 -1
  148. package/public/chunk-KAUSPTCQ.js +0 -23
  149. package/public/chunk-KCQQTZKO.js +0 -5
  150. package/public/chunk-L3HD45SY.js +0 -6
  151. package/public/chunk-LDLWF7GI.js +0 -1
  152. package/public/chunk-LHL5TI6S.js +0 -1
  153. package/public/chunk-LX47K6J2.js +0 -1
  154. package/public/chunk-M2H64FFG.js +0 -1
  155. package/public/chunk-OAQSXFHE.js +0 -1
  156. package/public/chunk-ODU3K7H7.js +0 -1
  157. package/public/chunk-P3KVHPZJ.js +0 -1
  158. package/public/chunk-P64V4GHS.js +0 -29
  159. package/public/chunk-PI76B7WZ.js +0 -1
  160. package/public/chunk-PNSPASX3.js +0 -1
  161. package/public/chunk-PODF4FUD.js +0 -1
  162. package/public/chunk-PUIKXI6O.js +0 -1
  163. package/public/chunk-QIH36FRX.js +0 -1
  164. package/public/chunk-QMAGO5VD.js +0 -20
  165. package/public/chunk-R3VPSO5X.js +0 -7
  166. package/public/chunk-RFFIRBUY.js +0 -1
  167. package/public/chunk-RLGSRK2P.js +0 -1
  168. package/public/chunk-RN4NDBWE.js +0 -1
  169. package/public/chunk-U2HZ2JFO.js +0 -1
  170. package/public/chunk-VA5XNGEK.js +0 -1
  171. package/public/chunk-VHTQTL2S.js +0 -1
  172. package/public/chunk-VJEUBTTK.js +0 -1
  173. package/public/chunk-VLX322GM.js +0 -1
  174. package/public/chunk-VUYAK52W.js +0 -2
  175. package/public/chunk-X6PEPNG4.js +0 -1
  176. package/public/chunk-XP6B4WXR.js +0 -1
  177. package/public/chunk-XUH357B7.js +0 -1
  178. package/public/chunk-Y4QFUO3K.js +0 -1
  179. package/public/chunk-YZCEDH6X.js +0 -1
  180. package/public/chunk-YZWIZGAQ.js +0 -1
  181. package/public/chunk-ZF22CBM2.js +0 -1
  182. package/public/chunk-ZIBK7SYP.js +0 -1
  183. package/public/chunk-ZLCELPBH.js +0 -1
  184. package/public/chunk-ZMYR3JWC.js +0 -1
  185. package/public/main-AS7ULDAC.js +0 -1
  186. /package/public/assets/hap-icons/{airquality.svg → air-quality-sensor.svg} +0 -0
  187. /package/public/assets/hap-icons/{co2-sensor.svg → carbon-dioxide-sensor.svg} +0 -0
  188. /package/public/assets/hap-icons/{co-sensor.svg → carbon-monoxide-sensor.svg} +0 -0
  189. /package/public/assets/hap-icons/{contactsensor-closed.svg → contact-sensor-closed.svg} +0 -0
  190. /package/public/assets/hap-icons/{contactsensor-open.svg → contact-sensor-open.svg} +0 -0
  191. /package/public/assets/hap-icons/{garagedoor.svg → garage-door.svg} +0 -0
  192. /package/public/assets/hap-icons/{humidity.svg → humidity-sensor.svg} +0 -0
  193. /package/public/assets/hap-icons/{leaksensor.svg → leak-sensor.svg} +0 -0
  194. /package/public/assets/hap-icons/{lightbulb.svg → light-bulb.svg} +0 -0
  195. /package/public/assets/hap-icons/{light.svg → light-sensor.svg} +0 -0
  196. /package/public/assets/hap-icons/{motionsensor.svg → motion-sensor.svg} +0 -0
  197. /package/public/assets/hap-icons/{occupancysensor.svg → occupancy-sensor.svg} +0 -0
  198. /package/public/assets/hap-icons/{securitysystem-off.svg → security-system-off.svg} +0 -0
  199. /package/public/assets/hap-icons/{securitysystem-active.svg → security-system-triggered.svg} +0 -0
  200. /package/public/assets/hap-icons/{statelessprogrammableswitch.svg → stateless-programmable-switch.svg} +0 -0
  201. /package/public/assets/hap-icons/{valve-waterfaucet.svg → valve-faucet.svg} +0 -0
  202. /package/public/assets/hap-icons/{valve-showerhead.svg → valve-shower-head.svg} +0 -0
  203. /package/public/assets/hap-icons/{windowcovering-closed.svg → window-covering-closed.svg} +0 -0
  204. /package/public/assets/hap-icons/{windowcovering-open.svg → window-covering-open.svg} +0 -0
  205. /package/public/{polyfills-GCAZ7JAV.js → polyfills-WE4HA5DL.js} +0 -0
@@ -0,0 +1,20 @@
1
+ import{a as ne}from"./chunk-CXP6VKNZ.js";import{a as oe,b as le}from"./chunk-WDFAWIMZ.js";import{a as X,b as Z}from"./chunk-HUAADM2I.js";import{a as ie}from"./chunk-THGDS273.js";import{m as Y,n as G,t as Q}from"./chunk-C3HWKB2Q.js";import{c as J,e as K,l as U,z as W}from"./chunk-WFYBML4S.js";import{b as ee}from"./chunk-GEIS2BWE.js";import{b as te}from"./chunk-W4PQWIYG.js";import{k as D,n as I}from"./chunk-DVQU3KHF.js";import{a as S,b as A}from"./chunk-R3563DDE.js";import"./chunk-Q4CZ7LVK.js";import{Hb as b,Hc as r,Ib as d,Ic as s,Jb as c,Jc as q,Lb as P,Mb as B,Nb as L,Ob as v,Pb as y,Qb as w,Rb as x,Sb as m,Tb as u,Ub as V,_b as _,ab as n,bc as E,cc as k,dc as a,fb as R,g as se,h as j,la as h,mb as M,pd as z,qc as C,ra as f,rc as $,sa as g,sc as T,w as H,xc as O,yc as N,zc as F}from"./chunk-ULJPS3WS.js";var ae=se(le(),1);function ce(o,p){o&1&&(m(0,"div",5),V(1,"i",12),u())}function me(o,p){if(o&1){let e=_();m(0,"li",17),C(1),r(2,"date"),m(3,"button",18),r(4,"translate"),k("click",function(){let t=f(e).$implicit,l=a(3);return g(l.restore(t.id))}),V(5,"i",19),u()()}if(o&2){let e=p.$implicit;n(),T(" ",q(2,2,e.timestamp,"medium")," "),n(2),b("aria-label",s(4,5,"config.restore.copy_to_editor"))}}function pe(o,p){if(o&1&&(m(0,"ul",15),B(1,me,6,7,"li",17,P),u()),o&2){let e=a(2);n(),L(e.backupList)}}function fe(o,p){o&1&&(m(0,"p",16),C(1),r(2,"translate"),u()),o&2&&(n(),$(s(2,1,"config.restore.no_backups")))}function ge(o,p){if(o&1&&(m(0,"div",13),V(1,"i",14),u(),m(2,"p",13),C(3),r(4,"translate"),u(),d(5,pe,3,0,"ul",15),d(6,fe,3,3,"p",16)),o&2){let e=a();n(3),$(s(4,3,"config.restore.title_restore_homebridge_backup")),n(2),c(e.backupList&&e.backupList.length?5:-1),n(),c(!e.backupList||!e.backupList.length?6:-1)}}function ue(o,p){if(o&1){let e=_();m(0,"button",20),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.dismissModal())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_close")),n(2),T(" ",s(3,4,"form.button_close")," "))}function he(o,p){if(o&1){let e=_();m(0,"button",20),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.dismissModal())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_close")),n(2),T(" ",s(3,4,"form.button_close")," "))}function _e(o,p){if(o&1){let e=_();m(0,"button",21),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.deleteAllBackups())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_remove")),n(2),T(" ",s(3,4,"form.button_remove")," "))}var re=(()=>{class o{$activeModal=h(Y);$api=h(I);$toastr=h(D);$translate=h(S);loading=!0;backupList=[];ngOnInit(){this.$api.get("/config-editor/backups").subscribe({next:e=>{this.loading=!1,this.backupList=e},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}restore(e){return this.$activeModal.close(e)}deleteAllBackups(){return this.$api.delete("/config-editor/backups").subscribe({next:()=>{this.$activeModal.dismiss(),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success"))},error:e=>{console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=M({type:o,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-danger","me-auto"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box"],[1,"text-center","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"btn","btn-primary","m-0","ms-3",3,"click"],[1,"fas","fa-fw","fa-arrow-right"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-danger","me-auto",3,"click"]],template:function(i,t){i&1&&(m(0,"div",0)(1,"div",1)(2,"h5",2),C(3),r(4,"translate"),u(),m(5,"button",3),r(6,"translate"),k("click",function(){return t.dismissModal()}),u()(),m(7,"div",4),d(8,ce,2,0,"div",5),d(9,ge,7,5),u(),m(10,"div",6)(11,"div",7),d(12,ue,4,6,"button",8),u(),m(13,"div",9),d(14,he,4,6,"button",8),u(),m(15,"div",10),d(16,_e,4,6,"button",11),u()()()),i&2&&(n(3),$(s(4,7,"form.button_restore")),n(2),b("aria-label",s(6,9,"form.button_close")),n(3),c(t.loading?8:-1),n(),c(t.loading?-1:9),n(3),c(!t.loading&&t.backupList.length?12:-1),n(2),c(t.loading||!t.loading&&!t.backupList.length?14:-1),n(2),c(!t.loading&&t.backupList.length?16:-1))},dependencies:[z,A],encapsulation:2})}return o})();function be(o,p){if(o&1){let e=_();y(0,"button",13),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onExportConfig())}),x(3,"i",14),w()}o&2&&(v("ngbTooltip",s(1,2,"form.button_download")),b("aria-label",s(2,4,"form.button_download")))}function Ce(o,p){if(o&1){let e=_();y(0,"button",15),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onCancelRestore())}),x(3,"i",16),w()}if(o&2){let e=a();v("disabled",e.saveInProgress)("ngbTooltip",s(1,3,"form.button_cancel")),b("aria-label",s(2,5,"form.button_cancel"))}}function ye(o,p){if(o&1){let e=_();y(0,"button",13),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onRestore())}),x(3,"i",17),w()}o&2&&(v("ngbTooltip",s(1,2,"form.button_restore")),b("aria-label",s(2,4,"form.button_restore")))}function we(o,p){o&1&&x(0,"i",8)}function ve(o,p){o&1&&x(0,"i",9)}function Ee(o,p){if(o&1){let e=_();y(0,"ngx-monaco-editor",18),E("onInit",function(t){f(e);let l=a();return g(l.onEditorInit(t))})("keydown.control.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())})("keydown.meta.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())}),w()}if(o&2){let e=a();v("options",e.editorOptions)("model",e.monacoEditorModel)}}function xe(o,p){if(o&1){let e=_();y(0,"ngx-monaco-diff-editor",19),E("onInit",function(t){f(e);let l=a();return g(l.onInitDiffEditor(t))})("keydown.control.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())})("keydown.meta.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())}),w()}if(o&2){let e=a();v("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function ke(o,p){if(o&1){let e=_();y(0,"textarea",20),F("ngModelChange",function(t){f(e);let l=a();return N(l.homebridgeConfig,t)||(l.homebridgeConfig=t),g(t)}),C(1," "),w()}if(o&2){let e=a();O("ngModel",e.homebridgeConfig)}}var Ge=(()=>{class o{$api=h(I);$md=h(ie);$modal=h(G);$monacoEditor=h(ne);$route=h(ee);$renderer=h(R);$settings=h(te);$toastr=h(D);$translate=h(S);editorDecorations=[];lastHeight;visualViewPortEventCallback;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!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(i=>{this.homebridgeConfig=i.config}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>{this.setMonacoEditorModel()}})}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return j(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 i=window.monaco.editor.getModelMarkers({owner:"json"});for(let t of i)if(t.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 e=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(e,null,4),typeof e.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(e.bridge.username)?e.accessories&&!Array.isArray(e.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&!Array.isArray(e.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&Array.isArray(e.platforms)&&!this.validateSection(e.platforms,"platform")||e.accessories&&Array.isArray(e.accessories)&&!this.validateSection(e.accessories,"accessory")||e.plugins&&Array.isArray(e.plugins)&&!this.validatePlugins(e.plugins,"plugins")||e.disabledPlugins&&Array.isArray(e.disabledPlugins)&&!this.validatePlugins(e.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(e),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(){this.$modal.open(re,{size:"lg",backdrop:"static"}).result.then(e=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),this.$api.get(`/config-editor/backups/${e}`).subscribe({next:i=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(i,null,4),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:i=>{console.error(i),this.$toastr.error(i.error.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onExportConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.homebridgeConfig)}`,i=document.createElement("a");i.setAttribute("href",e),i.setAttribute("download","config.json"),document.body.appendChild(i),i.click(),i.remove()}onCancelRestore(){this.homebridgeConfig=this.originalConfig,this.originalConfig=""}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove()),this.monacoEditor&&this.monacoEditor.dispose()}validateSection(e,i){for(let t of e){if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(!t[i])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(typeof t[i]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1}return!0}validatePlugins(e,i){for(let t of e)if(typeof t!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:i}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
2
+ `).map(i=>` ${i}`).join(`
3
+ `),setTimeout(()=>{let i=this.monacoEditor.getModel().findMatches(e);if(i.length){let t=i[0].range,l=new monaco.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:l,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 e=monaco.Uri.parse("a://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[e.toString()],schema:{type:"object",required:["bridge"],properties:{bridge:{type:"object",required:["name","username","port","pin"],properties:{name:{type:"string",description:`The Homebridge instance name.
4
+ This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",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",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",description:"The bridge manufacturer to be displayed in HomeKit"},firmwareRevision:{type:"string",description:"The bridge firmware version to be displayed in HomeKit"},model:{type:"string",description:"The bridge model to be displayed in HomeKit"},bind:{description:`A string or an array of strings with the name(s) of the network interface(s) Homebridge should bind to.
10
+
11
+ Requires Homebridge v1.3 or later.`,type:["string","array"],items:{type:"string",description:"Network Interface name that Homebridge should bind to."}}},default:{name:"Homebridge",username:"0E:89:49:64:91:86",port:51173,pin:"6302-7655"}},mdns:{type:"object",properties:{interface:{type:"string",description:`The interface or IP address of the interface you want Homebridge to listen on. This is useful if your server has multiple interfaces.
12
+
13
+ Deprecated as of Homebridge v1.3.0 - use bridge.bind instead.`},legacyAdvertiser:{type:"boolean",description:"Set to `false` to use the new mdns library, ciao."}},default:{legacyAdvertiser:!1}},plugins:{type:"array",description:"An array of plugins that should be selectively enabled. Remove this array to enable all plugins.",items:{type:"string",description:`The full plugin npm package name.
14
+ Example: homebridge-dummy`},default:["homebridge-config-ui-x"]},disabledPlugins:{type:"array",description:`An array of plugins that should be disabled.
15
+
16
+ Requires Homebridge v1.3 or later.`,items:{type:"string",description:`The full plugin npm package name.
17
+ Example: homebridge-dummy`},default:[]},ports:{type:"object",description:"The range of ports that should be used for certain accessories like cameras and TVs",required:["start","end"],properties:{start:{type:"number",default:52100,minimum:1025,maximum:65534},end:{type:"number",default:52150,minimum:1025,maximum:65534}},default:{start:52100,end:52150}},platforms:{type:"array",description:`Any plugin that exposes a platform should have its config entered in this array.
18
+ Separate each plugin config block using a comma.`,items:{type:"object",required:["platform"],anyOf:[{type:"object",required:["platform"],properties:{platform:{type:"string",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",description:"The name of the platform."}}},{type:"object",properties:{platform:{type:"string",description:`Homebridge UI platform name must be set to "config".
19
+ Do Not Change!`,oneOf:[{enum:"config"}]},name:{type:"string",description:"The name used in the Homebridge log."}}}]}},accessories:{type:"array",description:`Any plugin that exposes an accessory should have its config entered in this array.
20
+ Separate each plugin config block using a comma.`,items:{type:"object",required:["accessory","name"],properties:{accessory:{type:"string",description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",description:"The name of the accessory."}}}}}}}]}),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(e){return j(this,null,function*(){try{let i=yield H(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(i,null,4),this.$modal.open(oe,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let i=ae.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),i}}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=M({type:o,selectors:[["ng-component"]],decls:18,vars:18,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","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-floppy-disk"],[1,"fas","fa-fw","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","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","ngbTooltip"],[1,"fas","fa-fw","fa-download"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-times"],[1,"fas","fa-fw","fa-history"],[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(i,t){i&1&&(y(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),C(4),r(5,"translate"),w()(),y(6,"div",4),d(7,be,4,6,"button",5),d(8,Ce,4,7,"button",6),d(9,ye,4,6,"button",5),y(10,"button",7),r(11,"translate"),r(12,"translate"),E("click",function(){return t.onSave()}),d(13,we,1,0,"i",8),d(14,ve,1,0,"i",9),w()()(),d(15,Ee,1,2,"ngx-monaco-editor",10),d(16,xe,1,3,"ngx-monaco-diff-editor",11),d(17,ke,2,1,"textarea",12),w()),i&2&&(n(4),$(s(5,12,"menu.config_json_editor")),n(3),c(t.originalConfig?-1:7),n(),c(t.originalConfig?8:-1),n(),c(t.originalConfig?-1:9),n(),v("disabled",t.saveInProgress)("ngbTooltip",s(11,14,"form.button_save")),b("aria-label",s(12,16,"form.button_save")),n(3),c(t.saveInProgress?-1:13),n(),c(t.saveInProgress?14:-1),n(),c(!t.isMobile&&!t.originalConfig?15:-1),n(),c(!t.isMobile&&t.originalConfig?16:-1),n(),c(t.isMobile?17:-1))},dependencies:[Q,X,Z,W,J,K,U,A],encapsulation:2})}return o})();export{Ge as ConfigEditorComponent};