homebridge-config-ui-x 5.0.0-beta.32 → 5.0.0-beta.33

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 (91) hide show
  1. package/package.json +2 -2
  2. package/public/3rdpartylicenses.txt +16 -16
  3. package/public/{chunk-6XVBLU2Z.js → chunk-434LJ6OT.js} +1 -1
  4. package/public/{chunk-F3OI7MNW.js → chunk-4Y35I3ZB.js} +1 -1
  5. package/public/{chunk-GA45ACGP.js → chunk-535SHNCE.js} +1 -1
  6. package/public/{chunk-3WXHB3KI.js → chunk-5D5VS362.js} +1 -1
  7. package/public/{chunk-XYSPMHLE.js → chunk-5NI2YZKY.js} +1 -1
  8. package/public/chunk-5WDISWJ3.js +1 -0
  9. package/public/chunk-6CZSY3Q6.js +1 -0
  10. package/public/{chunk-ODKW2LOF.js → chunk-73SS2RFT.js} +1 -1
  11. package/public/{chunk-YHPC3RGJ.js → chunk-7GT27K3E.js} +1 -1
  12. package/public/{chunk-YQNNCBL2.js → chunk-AC3C235T.js} +1 -1
  13. package/public/chunk-ADCZTDDT.js +1 -0
  14. package/public/chunk-B5ETSZTP.js +6 -0
  15. package/public/chunk-BBAREJCS.js +1 -0
  16. package/public/{chunk-B5JFYSRA.js → chunk-BMFB2CR3.js} +1 -1
  17. package/public/{chunk-4EU7VETY.js → chunk-BNZI5IYM.js} +1 -1
  18. package/public/chunk-CIF6FZS4.js +1 -0
  19. package/public/{chunk-TIIVKKH7.js → chunk-CT72LAN4.js} +1 -1
  20. package/public/{chunk-J7LL2AO2.js → chunk-D6VQ2XSW.js} +1 -1
  21. package/public/{chunk-B2WM6FT7.js → chunk-DASL7RGE.js} +1 -1
  22. package/public/{chunk-2JL3UP4Y.js → chunk-DHEJ72XV.js} +1 -1
  23. package/public/{chunk-UXDBWBKK.js → chunk-DJXDSGTS.js} +1 -1
  24. package/public/{chunk-QMX4LXXW.js → chunk-DYAIZVQW.js} +1 -1
  25. package/public/chunk-EENQAA4Y.js +1 -0
  26. package/public/chunk-FFVPS42K.js +1 -0
  27. package/public/{chunk-6G7NSSM5.js → chunk-FGXB4ABC.js} +1 -1
  28. package/public/{chunk-2IIFLEI6.js → chunk-G4QCORZA.js} +1 -1
  29. package/public/{chunk-R6SSWCCW.js → chunk-GPFJKK77.js} +1 -1
  30. package/public/{chunk-PQJBQ2BZ.js → chunk-HKUX6SIQ.js} +1 -1
  31. package/public/chunk-HOKDECJU.js +1 -0
  32. package/public/chunk-HYJNTVQ7.js +8 -0
  33. package/public/{chunk-2NYOMDO6.js → chunk-I7ZQNVVI.js} +1 -1
  34. package/public/{chunk-R6JQOHRF.js → chunk-IZVXTMWH.js} +1 -1
  35. package/public/{chunk-R4IZLOZK.js → chunk-JTZVAPYW.js} +1 -1
  36. package/public/{chunk-AEZVAXR6.js → chunk-L4J26EOW.js} +1 -1
  37. package/public/chunk-MUUAF3E7.js +1 -0
  38. package/public/chunk-OBSMZNST.js +1 -0
  39. package/public/chunk-OLJ6JSXQ.js +1 -0
  40. package/public/{chunk-WS5QF2EE.js → chunk-OLYOQI2N.js} +1 -1
  41. package/public/chunk-QVYOCVSK.js +1 -0
  42. package/public/chunk-QZU6CGDB.js +1 -0
  43. package/public/chunk-RP5TYXWG.js +1 -0
  44. package/public/{chunk-AGIJNJRH.js → chunk-RY4JLM5Q.js} +1 -1
  45. package/public/{chunk-CKXJB25E.js → chunk-S4RPUBPU.js} +1 -1
  46. package/public/chunk-SC5UI2C5.js +1 -0
  47. package/public/chunk-SDH5ANWO.js +1 -0
  48. package/public/chunk-SN2RLKY5.js +1 -0
  49. package/public/{chunk-AR5B3NSE.js → chunk-SO6OPTOU.js} +1 -1
  50. package/public/chunk-TU2JUQW2.js +1 -0
  51. package/public/{chunk-IVVWXYUQ.js → chunk-UE7ANWWM.js} +16 -16
  52. package/public/{chunk-UFROJHGF.js → chunk-UMWOVQL4.js} +1 -1
  53. package/public/{chunk-HBOF3HCM.js → chunk-VBIPFSJS.js} +1 -1
  54. package/public/chunk-VZWZVEBH.js +1 -0
  55. package/public/chunk-WBKWERKR.js +1 -0
  56. package/public/{chunk-TVS5YSOL.js → chunk-WKC47KND.js} +1 -1
  57. package/public/chunk-WKPWPRZJ.js +1 -0
  58. package/public/{chunk-KYHSPIEV.js → chunk-WPD4PYFJ.js} +1 -1
  59. package/public/chunk-WZIQ43Z4.js +1 -0
  60. package/public/{chunk-LWATLDLN.js → chunk-YE4T476I.js} +1 -1
  61. package/public/chunk-YK65RXXO.js +1 -0
  62. package/public/{chunk-R3NHSZDW.js → chunk-YTCXC42L.js} +1 -1
  63. package/public/{chunk-SCXMID67.js → chunk-Z52JKZRJ.js} +1 -1
  64. package/public/index.html +2 -2
  65. package/public/main-AHGLEGVQ.js +1 -0
  66. package/public/{styles-7Q7QNSR3.css → styles-EZS52PWT.css} +1 -1
  67. package/public/chunk-2LYH7PA2.js +0 -1
  68. package/public/chunk-55FJ7JIK.js +0 -1
  69. package/public/chunk-7BU7ULUY.js +0 -1
  70. package/public/chunk-7S2KGW3Q.js +0 -1
  71. package/public/chunk-B5SMZUQC.js +0 -1
  72. package/public/chunk-BFSSPS5H.js +0 -1
  73. package/public/chunk-CJ2XODFO.js +0 -6
  74. package/public/chunk-CXJZO5AN.js +0 -1
  75. package/public/chunk-CZL3F4FG.js +0 -1
  76. package/public/chunk-D3T7IP6R.js +0 -1
  77. package/public/chunk-FU3UBHMX.js +0 -1
  78. package/public/chunk-HALDJDAM.js +0 -1
  79. package/public/chunk-JJFIRBNJ.js +0 -1
  80. package/public/chunk-JMTK6CPB.js +0 -1
  81. package/public/chunk-KL4YZOLC.js +0 -1
  82. package/public/chunk-LAS5Q7CH.js +0 -1
  83. package/public/chunk-LGOEFUCR.js +0 -1
  84. package/public/chunk-LQ7OCS72.js +0 -1
  85. package/public/chunk-NGN4MI4J.js +0 -1
  86. package/public/chunk-QQPYBUTI.js +0 -1
  87. package/public/chunk-QY2YGCJI.js +0 -8
  88. package/public/chunk-S6A2PPQN.js +0 -1
  89. package/public/chunk-ZSP4W7MW.js +0 -1
  90. package/public/chunk-ZUOGDYEA.js +0 -1
  91. package/public/main-6NL6NRV4.js +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "homebridge-config-ui-x",
3
3
  "displayName": "Homebridge UI",
4
- "version": "5.0.0-beta.32",
4
+ "version": "5.0.0-beta.33",
5
5
  "description": "A web based management, configuration and control platform for Homebridge.",
6
6
  "author": "oznu <dev@oz.nu>",
7
7
  "license": "MIT",
@@ -114,7 +114,7 @@
114
114
  "reflect-metadata": "0.2.2",
115
115
  "rxjs": "7.8.1",
116
116
  "semver": "7.6.3",
117
- "systeminformation": "5.25.4",
117
+ "systeminformation": "5.25.5",
118
118
  "tail": "2.2.6",
119
119
  "tar": "7.4.3",
120
120
  "tcp-port-used": "1.0.2",
@@ -835,22 +835,6 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
835
835
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
836
836
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
837
837
  THE SOFTWARE.
838
- --------------------------------------------------------------------------------
839
- Package: file-saver
840
- License: "MIT"
841
-
842
- The MIT License
843
-
844
- Copyright © 2016 [Eli Grey][1].
845
-
846
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
847
-
848
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
849
-
850
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
851
-
852
- [1]: http://eligrey.com
853
-
854
838
  --------------------------------------------------------------------------------
855
839
  Package: xterm-addon-web-links
856
840
  License: "MIT"
@@ -904,6 +888,22 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
904
888
  THE SOFTWARE.
905
889
  ```
906
890
 
891
+ --------------------------------------------------------------------------------
892
+ Package: file-saver
893
+ License: "MIT"
894
+
895
+ The MIT License
896
+
897
+ Copyright © 2016 [Eli Grey][1].
898
+
899
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
900
+
901
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
902
+
903
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
904
+
905
+ [1]: http://eligrey.com
906
+
907
907
  --------------------------------------------------------------------------------
908
908
  Package: xterm
909
909
  License: "MIT"
@@ -1 +1 @@
1
- import{a as Pi,b as Si}from"./chunk-X5YRTZFZ.js";import{a as vi}from"./chunk-23M23WV2.js";import{n as wi,v as U}from"./chunk-IVVWXYUQ.js";import{a as z}from"./chunk-YHPC3RGJ.js";import{a as xi}from"./chunk-JF5AT3NK.js";import{a as bi}from"./chunk-LEFLOPGL.js";import{a as hi}from"./chunk-EEDUUZ6J.js";import{h as si,i as di,j as pi,k as ci,l as ui,m as gi,n as mi,o as fi}from"./chunk-N4F42HDL.js";import{c as X,d as Y,e as Z,f as ii,g as ei,j as ni,m as ti,p as ai,q as oi,y as li,z as ri}from"./chunk-YLEC7AUG.js";import{a as R}from"./chunk-R4IZLOZK.js";import{a as _i,d as Ci}from"./chunk-T3GI7KUT.js";import{b as F}from"./chunk-R6JQOHRF.js";import{h as j,k as A}from"./chunk-ODKW2LOF.js";import{a as N,b as $}from"./chunk-675OFXLW.js";import{Ac as J,Bb as x,Cc as p,Dc as u,Ec as H,Lb as B,Mb as v,Rb as s,Tb as L,Ub as G,Vb as W,Wb as o,Xb as l,Yb as d,ac as C,bd as D,db as O,dc as m,eb as T,ec as c,ed as K,h as y,ib as t,id as Q,na as w,oc as g,pc as P,qc as b,ub as V,w as k,xa as f,ya as _,yc as M,zc as I}from"./chunk-CKNHTRCL.js";var Ti=(n,r)=>({"orange-text":n,"grey-text":r}),q=n=>({opacity:n}),Vi=(n,r)=>({"green-text":n,"grey-text":r}),$i=(n,r)=>({"scoped-text":n,"grey-text":r}),Ei=(n,r)=>({scopedLink:n,verifiedLink:r});function Mi(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l(),o(6,"p",20),g(7),p(8,"translate"),l()),n&2&&(t(),P(u(2,3,"plugins.manage.scoped_subtitle")),t(3),P(u(5,5,"plugins.manage.scoped_message")),t(3),P(u(8,7,"plugins.manage.verified_message")))}function Hi(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l()),n&2&&(t(),P(u(2,2,"plugins.manage.verified_subtitle")),t(3),P(u(5,4,"plugins.manage.verified_message")))}function Di(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l()),n&2&&(t(),P(u(2,2,"plugins.manage.unverified_subtitle")),t(3),P(u(5,4,"plugins.manage.unverified_message")))}function Ni(n,r){if(n&1){let e=C();o(0,"button",21),m("click",function(){f(e);let i=c();return _(i.$activeModal.dismiss("Dismiss"))}),g(1),p(2,"translate"),l()}n&2&&(t(),b(" ",u(2,1,"form.button_close")," "))}function ji(n,r){if(n&1){let e=C();o(0,"button",21),m("click",function(){f(e);let i=c();return _(i.$activeModal.dismiss("Dismiss"))}),g(1),p(2,"translate"),l()}n&2&&(t(),b(" ",u(2,1,"form.button_close")," "))}function Ai(n,r){if(n&1&&(o(0,"a",18),g(1),p(2,"translate"),d(3,"i",22),l()),n&2){let e=c();v("href",e.plugin.links.homepage||e.plugin.links.npm,T),t(),b(" ",u(2,2,"plugins.button_homepage")," ")}}var Bi=(()=>{class n{$activeModal=w(gi);plugin;defaultIcon="assets/hb-icon.png";linkScoped='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa/fw fas fa-fw fa-external-link-alt"></i></a>';linkVerified='<a href="https://github.com/homebridge/plugins/wiki/Verified-Plugins" target="_blank"><i class="fa fa/fw fas fa-fw fa-external-link-alt"></i></a>';constructor(){}ngOnInit(){this.plugin.icon||(this.plugin.icon=this.defaultIcon)}handleIconError(){this.plugin.icon=this.defaultIcon}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:34,vars:45,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body","text-center"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[1,"mb-1"],[1,"grey-text","mb-0","text-monospace"],[1,"grey-text","mb-1","text-monospace"],[1,"mb-3"],[1,"fas","fa-fw","fa-shield-alt","mb-3",2,"font-size","48px",3,"ngClass","ngStyle"],[1,"mb-0","grey-text",3,"innerHTML"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","data-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-right"],["target","_blank","rel","noopener noreferrer",1,"btn","btn-primary","text-decoration-none",3,"href"],[1,"mb-2"],[1,"mb-1","grey-text"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"fas","fa-fw","fa-external-link-alt"]],template:function(a,i){a&1&&(o(0,"div",0)(1,"div",1)(2,"h5",2),g(3),p(4,"translate"),l(),o(5,"button",3),p(6,"translate"),m("click",function(){return i.$activeModal.dismiss("Dismiss")}),o(7,"span",4),g(8,"\xD7"),l()()(),o(9,"div",5)(10,"img",6),m("error",function(){return i.handleIconError()}),l(),o(11,"h4",7),g(12),l(),o(13,"p",8),g(14),l(),o(15,"p",9),g(16),l(),o(17,"p",10),g(18),l(),d(19,"i",11)(20,"i",11)(21,"i",11),x(22,Mi,9,9)(23,Hi,6,6)(24,Di,6,6),d(25,"p",12),p(26,"translate"),l(),o(27,"div",13)(28,"div",14),x(29,Ni,3,3,"button",15),l(),o(30,"div",16),x(31,ji,3,3,"button",15),l(),o(32,"div",17),x(33,Ai,4,4,"a",18),l()()()),a&2&&(t(3),P(u(4,20,"plugins.manage.information")),t(2),B("aria-label",u(6,22,"form.button_close")),t(5),v("src",i.plugin.icon,T),t(2),P(i.plugin.displayName),t(2),P(i.plugin.name),t(2),b("@",i.plugin.author,""),t(2),P(i.plugin.description),t(),v("ngClass",I(27,Ti,!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin,i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin))("ngStyle",M(30,q,!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin?1:.25)),t(),v("ngClass",I(32,Vi,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin),i.plugin.isHbScoped||!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin))("ngStyle",M(35,q,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)?1:.25)),t(),v("ngClass",I(37,$i,i.plugin.isHbScoped,!i.plugin.isHbScoped))("ngStyle",M(40,q,i.plugin.isHbScoped?1:.25)),t(),s(i.plugin.isHbScoped?22:-1),t(),s(!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)?23:-1),t(),s(!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin?24:-1),t(),v("innerHTML",H(26,24,"plugins.manage.more_info",I(42,Ei,i.linkScoped,i.linkVerified)),O),t(4),s(i.plugin.links.homepage||i.plugin.links.npm?29:-1),t(2),s(!i.plugin.links.homepage&&!i.plugin.links.npm?31:-1),t(2),s(i.plugin.links.homepage||i.plugin.links.npm?33:-1))},dependencies:[$,D,K],styles:[".plugin-icon[_ngcontent-%COMP%]{height:75px;width:75px;border-radius:15px;border:1px solid #222222}"]})}return n})();var Fi=(n,r,e)=>({"scoped-text":n,"green-text":r,"orange-text":e}),Ri=(n,r)=>({"fa-bridge-circle-exclamation orange-text":n,"fa-bridge-circle-xmark red-text":r});function Ui(n,r){n&1&&d(0,"i",25)}function zi(n,r){n&1&&d(0,"i",26)}function qi(n,r){if(n&1){let e=C();o(0,"a",24),m("click",function(){f(e);let i=c();return _(i.openHb2InfoModal())}),x(1,Ui,1,0,"i",25)(2,zi,1,0,"i",26),l()}if(n&2){let e=c();v("ngbTooltip","Homebridge v2.0 Readiness")("placement","right"),t(),s(e.hb2Status==="supported"?1:-1),t(),s(e.hb2Status==="unknown"?2:-1)}}function Oi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.checkAndUpdatePlugin(i.plugin,i.plugin.updateTag||"latest"))}),d(3,"i",28),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.button_update")),B("aria-label",u(2,4,"plugins.button_update")))}function Li(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.switchToScoped(i.plugin))}),d(3,"i",29),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.manage.scoped.switch")),B("aria-label",u(2,4,"plugins.manage.scoped.switch")))}function Gi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.settings(i.plugin))}),d(3,"i",30),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.button_set_up")),B("aria-label",u(2,4,"plugins.button_set_up")))}function Wi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.bridgeSettings(i.plugin))}),d(3,"i",31),l()}n&2&&(v("ngbTooltip",u(1,2,"child_bridge.setup")),B("aria-label",u(2,4,"child_bridge.setup")))}function Ji(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.bridgeSettings(i.plugin))}),d(3,"i",32),l()}n&2&&(v("ngbTooltip",u(1,2,"child_bridge.bridge_connect")),B("aria-label",u(2,4,"child_bridge.bridge_connect")))}function Ki(n,r){if(n&1&&d(0,"i",13),n&2){let e=c();v("ngClass",I(1,Ri,e.childBridgeStatus==="pending",e.childBridgeStatus==="down"))}}function Qi(n,r){if(n&1){let e=C();o(0,"a",15),m("click",function(){f(e);let i=c();return _(i.openFundingModal(i.plugin))}),d(1,"i",33),o(2,"span",17),g(3),l()()}if(n&2){let e=c();t(3),b("@",e.plugin.author,"")}}function Xi(n,r){if(n&1&&(o(0,"span",17),d(1,"i",34),g(2),l()),n&2){let e=c();t(2),b("@",e.plugin.author," ")}}function Yi(n,r){if(n&1&&(o(0,"span"),g(1),p(2,"date"),l()),n&2){let e=c(2);t(),b("(",H(2,1,e.plugin.lastUpdated,"yyyy-MM-dd"),")")}}function Zi(n,r){if(n&1&&(o(0,"span"),d(1,"i",35),o(2,"span",17),g(3),x(4,Yi,3,4,"span"),l()()),n&2){let e=c();t(3),b("v",e.plugin.latestVersion," "),t(),s(e.plugin.lastUpdated?4:-1)}}function ie(n,r){if(n&1&&(d(0,"i",36),g(1)),n&2){let e=c();t(),b("v",e.plugin.installedVersion," ")}}function ee(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),m("click",function(){f(e);let i=c();return _(i.doChildBridgeAction("restart"))}),d(2,"i",37),l()}if(n&2){let e=c();v("ngbTooltip",u(1,1,e.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}function ne(n,r){if(n&1){let e=C();o(0,"a",38),m("click",function(){f(e);let i=c();return _(i.enablePlugin(i.plugin))}),d(1,"i",39),p(2,"translate"),l()}n&2&&(t(),v("ngbTooltip",u(2,1,"plugins.status_disabled")))}function te(n,r){if(n&1){let e=C();o(0,"a",40),m("click",function(){f(e);let i=c();return _(i.$plugin.installAlternateVersion(i.plugin))}),d(1,"i",41),l()}}function ae(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.viewPluginLog(i.plugin))}),d(1,"i",50),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.plugin_logs")," "))}function oe(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.installAlternateVersion(i.plugin))}),d(1,"i",51),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.manage_version")," "))}function le(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.jsonEditor(i.plugin))}),d(1,"i",52),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.json_config")," "))}function re(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.disablePlugin(i.plugin))}),d(1,"i",53),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.disable")," "))}function se(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.enablePlugin(i.plugin))}),d(1,"i",54),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.enable")," "))}function de(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.uninstallPlugin(i.plugin,i.setChildBridges))}),d(1,"i",55),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.button_uninstall")," "))}function pe(n,r){n&1&&d(0,"div",48)}function ce(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("restart"))}),d(1,"i",57),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart")," ")}}function ue(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("stop"))}),d(1,"i",58),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.stop_plural":"child_bridge.stop")," ")}}function ge(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("start"))}),d(1,"i",59),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.start_plural":"child_bridge.start")," ")}}function me(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.$plugin.resetChildBridges(i.setChildBridges))}),d(1,"i",60),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.reset_accessories")," "))}function fe(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",56),g(2),p(3,"translate"),l(),x(4,ce,4,3,"button",47)(5,ue,4,3,"button",47)(6,ge,4,3,"button",47)(7,me,4,3,"button",47)}if(n&2){let e=c(2);t(2),b(" ",u(3,5,"child_bridge.bridge_settings")," "),t(2),s(e.childBridgeRestartInProgress?-1:4),t(),s(e.allChildBridgesStopped?-1:5),t(),s(e.allChildBridgesStopped?6:-1),t(),s(e.$settings.env.serviceMode?7:-1)}}function _e(n,r){n&1&&d(0,"div",48)}function Ce(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",61),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.setup")," "))}function he(n,r){n&1&&d(0,"div",48)}function be(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",61),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.setup")," "))}function ve(n,r){n&1&&d(0,"div",48)}function xe(n,r){if(n&1&&(o(0,"a",49),d(1,"i",62),g(2),p(3,"translate"),l()),n&2){let e=c(2);v("href",e.plugin.links.bugs,T),t(2),b(" ",u(3,2,"support.links.issue")," ")}}function we(n,r){if(n&1){let e=C();o(0,"span",23)(1,"a",42),d(2,"i",43),l(),o(3,"div",44)(4,"button",45),m("click",function(){f(e);let i=c();return _(i.$plugin.settings(i.plugin))}),d(5,"i",46),g(6),p(7,"translate"),l(),x(8,ae,4,3,"button",47)(9,oe,4,3,"button",47)(10,le,4,3,"button",47)(11,re,4,3,"button",47)(12,se,4,3,"button",47)(13,de,4,3,"button",47)(14,pe,1,0,"div",48)(15,fe,8,7)(16,_e,1,0,"div",48)(17,Ce,4,3,"button",47)(18,he,1,0,"div",48)(19,be,4,3,"button",47)(20,ve,1,0,"div",48)(21,xe,4,4,"a",49),l()()}if(n&2){let e=c();t(),B("aria-label","Plugin Actions Dropdown"),t(5),b(" ",u(7,16,"plugins.button_settings")," "),t(2),s(e.plugin.isConfigured&&!e.plugin.disabled?8:-1),t(),s(e.plugin.publicPackage?9:-1),t(),s(!e.isMobile&&e.plugin.name!=="homebridge-config-ui-x"?10:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"&&!e.plugin.disabled?11:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"&&e.plugin.disabled?12:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"?13:-1),t(),s(!e.plugin.disabled&&e.plugin.isConfigured&&e.plugin.hasChildBridges&&e.plugin.installedVersion&&e.plugin.name!=="homebridge-config-ui-x"?14:-1),t(),s(e.plugin.hasChildBridges&&!e.plugin.disabled?15:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&!e.plugin.recommendChildBridge?16:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&!e.plugin.recommendChildBridge?17:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&e.plugin.recommendChildBridge&&e.plugin.updateAvailable?18:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&e.plugin.recommendChildBridge&&e.plugin.updateAvailable?19:-1),t(),s(e.plugin.links!=null&&e.plugin.links.bugs?20:-1),t(),s(e.plugin.links!=null&&e.plugin.links.bugs?21:-1)}}var ki=(()=>{class n{$api=w(A);$md=w(xi);$modal=w(mi);$plugin=w(U);$settings=w(F);$toastr=w(j);$translate=w(N);$ws=w(R);plugin;hasChildBridges=!1;hasUnpairedChildBridges=!1;allChildBridgesStopped=!1;childBridgeStatus="pending";childBridgeRestartInProgress=!1;defaultIcon="assets/hb-icon.png";isMobile;setChildBridges=[];hb2Status="unknown";io;constructor(){}set childBridges(e){var h,E;this.hasChildBridges=e.length>0,this.hasUnpairedChildBridges=e.filter(S=>S.paired===!1).length>0,this.allChildBridgesStopped=e.filter(S=>S.manuallyStopped===!0).length===e.length,this.hasChildBridges&&(e.some(S=>S.status==="down")?this.childBridgeStatus="down":e.some(S=>S.status==="pending")?this.childBridgeStatus="pending":e.some(S=>S.status==="ok")&&(this.childBridgeStatus="ok")),this.setChildBridges=e;let a=this.$settings.env.homebridgeVersion.split(".")[0],i=((E=(h=this.plugin.engines)==null?void 0:h.homebridge)==null?void 0:E.split("||").map(S=>S.trim()))||[];this.hb2Status=a==="2"?"hide":i.some(S=>S.startsWith("^2")||S.startsWith(">=2"))?"supported":this.hb2Status}ngOnInit(){this.isMobile=this.$md.detect.mobile(),this.io=this.$ws.getExistingNamespace("child-bridges"),this.isMobile&&this.plugin.displayName.toLowerCase().startsWith("homebridge ")&&(this.plugin.displayName=this.plugin.displayName.replace(/^homebridge /i,"")),this.plugin.icon||(this.plugin.icon=this.defaultIcon)}openFundingModal(e){let a=this.$modal.open(Si,{size:"lg",backdrop:"static"});a.componentInstance.plugin=e}pluginInfoModal(e){let a=this.$modal.open(Bi,{size:"lg",backdrop:"static"});a.componentInstance.plugin=e}disablePlugin(e){let a=this.$modal.open(Pi,{size:"lg",backdrop:"static"});a.componentInstance.pluginName=e.displayName,a.componentInstance.isConfigured=e.isConfigured,a.componentInstance.isConfiguredDynamicPlatform=e.isConfiguredDynamicPlatform,a.result.then(()=>y(this,null,function*(){try{yield k(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/disable`,{})),e.disabled=!0,this.hasChildBridges&&this.doChildBridgeAction("stop"),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.disable.error"),this.$translate.instant("toast.title_error"))}}))}enablePlugin(e){let a=this.$modal.open(hi,{size:"lg",backdrop:"static"});a.componentInstance.title=e.name,a.componentInstance.message=this.$translate.instant("plugins.manage.confirm_enable",{pluginName:e.displayName}),a.componentInstance.confirmButtonLabel=this.$translate.instant("plugins.manage.enable"),a.componentInstance.faIconClass="fa-circle-play primary-text",a.result.then(()=>y(this,null,function*(){try{yield k(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/enable`,{})),e.disabled=!1,this.hasChildBridges&&(yield this.doChildBridgeAction("start")),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.enable.error"),this.$translate.instant("toast.title_error"))}}))}viewPluginLog(e){let a=this.$modal.open(wi,{size:"xl",backdrop:"static"});a.componentInstance.plugin=e}doChildBridgeAction(e){return y(this,null,function*(){this.childBridgeRestartInProgress=!0;try{for(let a of this.setChildBridges)yield k(this.io.request(`${e}-child-bridge`,a.username))}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.bridge.action_error",{action:e}),this.$translate.instant("toast.title_error")),this.childBridgeRestartInProgress=!1}finally{setTimeout(()=>{this.childBridgeRestartInProgress=!1},e==="restart"?12e3:e==="stop"?6e3:1e3)}})}handleIconError(){this.plugin.icon=this.defaultIcon}openHb2InfoModal(){let e=this.$modal.open(bi,{size:"lg",backdrop:"static"});e.componentInstance.title="Plugin Readiness",this.hb2Status==="supported"?(e.componentInstance.subtitle=`${this.plugin.displayName} is ready for Homebridge v2.0`,e.componentInstance.message="The developer has specifically marked your installed version of the plugin as compatible with Homebridge v2.0.",e.componentInstance.faIconClass="fa-check-circle green-text"):(e.componentInstance.subtitle=`${this.plugin.displayName} might not be ready for Homebridge v2.0`,e.componentInstance.message="The developer has not specifically marked your installed version of the plugin as compatible with Homebridge v2.0, but it may still work.",e.componentInstance.faIconClass="fa-question-circle orange-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0"}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["app-plugin-card"]],inputs:{plugin:"plugin",childBridges:"childBridges"},decls:36,vars:24,consts:[[1,"card","card-body","mb-3"],[1,"d-flex","flex-row","justify-content-between"],[1,"d-flex","flex-column","mr-3","align-items-center","justify-content-between"],["alt","Plugin Icon",1,"plugin-icon-card","mb-3",3,"error","src"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"ngbTooltip","placement"],[1,"d-flex","flex-column","justify-content-between",2,"min-width","calc(100% - 80px)"],[1,"d-flex","flex-row","align-items-end"],[1,"d-flex","flex-column","w-100"],[1,"d-flex","flex-row"],[1,"card-title","mb-2","text-truncate"],[1,"ml-auto"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"ngbTooltip"],[1,"fas","fa-fw","fa-spinner","fa-pulse","fa-lg","grey-text","ml-3",3,"hidden"],[1,"fas","fa-fw","fa-lg","ml-3",3,"ngClass"],[1,"card-text","mb-2","text-truncate"],["href","javascript:void(0)",1,"card-link",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1",3,"ngClass"],[1,"grey-text"],[1,"card-text","mb-2"],["href","javascript:void(0)",1,"card-link"],[1,"card-text","mb-0","grey-text"],["href","javascript:void(0)",1,"card-link","red-text"],["href","javascript:void(0)"],["ngbDropdown","","placement","left",1,"d-inline-block","ml-3","mt-auto"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"click","ngbTooltip","placement"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"click","ngbTooltip"],[1,"far","fa-fw","fa-arrow-alt-circle-up","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-arrow-right-arrow-left","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-sliders","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-bridge","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-qrcode","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1","pink-text"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1",2,"opacity","0.5"],[1,"far","fa-fw","fa-circle-dot","fa-lg","mr-1"],[1,"far","fa-fw","fa-circle-check","fa-lg","mr-1"],[1,"fas","fa-fw","fa-lg","fa-power-off","ml-3"],["href","javascript:void(0)",1,"card-link","red-text",3,"click"],["container","body","openDelay","150","triggers","hover",1,"far","fa-fw","fa-pause-circle","fa-lg",3,"ngbTooltip"],["href","javascript:void(0)",3,"click"],[1,"far","fa-fw","fa-arrow-alt-circle-down","fa-lg"],["href","javascript:void(0)","ngbDropdownToggle","",1,"card-link","text-decoration-none","mt-auto",2,"outline","none"],[1,"fa-solid","fa-fw","fa-ellipsis-v","fa-lg"],["ngbDropdownMenu","","aria-labelledby","Plugin Actions Dropdown"],["ngbDropdownItem","",3,"click"],[1,"fas","fa-fw","fa-sliders"],["ngbDropdownItem",""],[1,"dropdown-divider"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href"],[1,"fas","fa-fw","fa-wave-square"],[1,"fas","fa-fw","fa-code-compare"],[1,"fas","fa-fw","fa-code"],[1,"far","fa-fw","fa-circle-pause"],[1,"far","fa-fw","fa-circle-play"],[1,"fas","fa-fw","fa-trash"],[1,"fas","fa-fw","fa-bridge"],[1,"fa-fw","icon-button","fas","fa-fw","fa-power-off"],[1,"fas","fa-fw","fa-stop"],[1,"fas","fa-fw","fa-play"],[1,"fas","fa-fw","fa-broom"],[1,"icon-button","fas","fa-fw","fa-bridge"],[1,"icon-button","fa","fa-fw","fa-question-circle-o"]],template:function(a,i){a&1&&(o(0,"div",0)(1,"div",1)(2,"div",2)(3,"img",3),m("error",function(){return i.handleIconError()}),l(),x(4,qi,3,4,"a",4),l(),o(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8)(9,"h5",9),g(10),l(),o(11,"div",10),x(12,Oi,4,6,"a",11)(13,Li,4,6,"a",11)(14,Gi,4,6,"a",11)(15,Wi,4,6,"a",11)(16,Ji,4,6,"a",11),d(17,"i",12),x(18,Ki,1,4,"i",13),l()(),o(19,"p",14)(20,"a",15),m("click",function(){return i.pluginInfoModal(i.plugin)}),d(21,"i",16),o(22,"span",17),g(23),l()()(),o(24,"p",18),x(25,Qi,4,1,"a",19)(26,Xi,3,1,"span",17),l(),o(27,"div",8)(28,"p",20),x(29,Zi,5,2,"span")(30,ie,2,1),l(),o(31,"div",10),x(32,ee,3,3,"a",11)(33,ne,3,3,"a",21)(34,te,2,0,"a",22)(35,we,22,18,"span",23),l()()()()()()()),a&2&&(t(3),v("src",i.plugin.icon,T),t(),s(i.plugin.installedVersion&&i.hb2Status!=="hide"?4:-1),t(6),P(i.plugin.displayName),t(2),s(i.plugin.installedVersion&&i.plugin.updateAvailable&&!i.childBridgeRestartInProgress?12:-1),t(),s(i.plugin.installedVersion&&(i.plugin.newHbScope==null?null:i.plugin.newHbScope.switch)===i.plugin.installedVersion&&!i.childBridgeRestartInProgress?13:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&!i.plugin.isConfigured&&!i.childBridgeRestartInProgress&&!i.plugin.disabled?14:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&i.plugin.recommendChildBridge&&!i.childBridgeRestartInProgress?15:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&i.hasUnpairedChildBridges&&i.childBridgeStatus==="ok"&&!i.plugin.disabled?16:-1),t(),v("hidden",!i.childBridgeRestartInProgress),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&!i.hasUnpairedChildBridges&&i.childBridgeStatus!=="ok"&&!i.plugin.disabled?18:-1),t(3),v("ngClass",J(20,Fi,i.plugin.isHbScoped,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin),!i.plugin.isHbScoped&&!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin)),t(2),P(i.plugin.name),t(2),s((i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)&&i.plugin.funding?25:-1),t(),s((i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)&&i.plugin.funding?-1:26),t(3),s(i.plugin.publicPackage&&!i.plugin.installedVersion?29:-1),t(),s(i.plugin.installedVersion?30:-1),t(2),s(!i.plugin.disabled&&i.plugin.hasChildBridges&&i.childBridgeStatus==="ok"?32:-1),t(),s(i.plugin.installedVersion&&i.plugin.disabled?33:-1),t(),s(i.plugin.publicPackage&&!i.plugin.installedVersion?34:-1),t(),s(i.plugin.installedVersion?35:-1))},dependencies:[fi,D,ui,ci,pi,di,si,Q,$],encapsulation:2})}return n})();function Pe(n,r){n&1&&d(0,"app-spinner")}function Se(n,r){if(n&1){let e=C();o(0,"a",11),m("click",function(){f(e);let i=c();return _(i.onClearSearch())}),d(1,"i",12),l()}}function ye(n,r){if(n&1&&(o(0,"div",9),d(1,"app-plugin-card",13),l()),n&2){let e=r.$implicit,a=c();t(),v("plugin",e)("childBridges",a.getPluginChildBridges(e))}}function Be(n,r){n&1&&(o(0,"div",10),d(1,"i",14),o(2,"p"),g(3),p(4,"translate"),l()()),n&2&&(t(3),P(u(4,1,"plugins.placeholder_search_first")))}var Cn=(()=>{class n{$api=w(A);$plugin=w(U);$router=w(Ci);$settings=w(F);$toastr=w(j);$translate=w(N);$ws=w(R);loading=!0;installedPlugins=[];childBridges=[];showExitButton=!1;form=new ei({query:new ni("",[Y.required])});io;navigationSubscription;constructor(){}ngOnInit(){return y(this,null,function*(){this.io=this.$ws.connectToNamespace("child-bridges"),this.io.connected.subscribe(()=>y(this,null,function*(){this.getChildBridgeMetadata(),this.io.socket.emit("monitor-child-bridge-status"),yield this.loadInstalledPlugins();let e=this.$router.parseUrl(this.$router.url).queryParams.installed;if(e){let a=this.installedPlugins.find(i=>i.name===e);a&&!a.isConfigured&&this.$plugin.settings(a),this.$router.navigate(["/plugins"])}})),this.io.socket.on("child-bridge-status-update",e=>{let a=this.childBridges.find(i=>i.username===e.username);a?Object.assign(a,e):this.childBridges.push(e)}),this.navigationSubscription=this.$router.events.subscribe(e=>{e instanceof _i&&this.loadInstalledPlugins()})})}loadInstalledPlugins(){return y(this,null,function*(){this.form.setValue({query:""}),this.showExitButton=!1,this.installedPlugins=[],this.loading=!0;try{let e=yield k(this.$api.get("/plugins"));this.installedPlugins=e.filter(i=>i.name!=="homebridge-config-ui-x"),yield this.appendMetaInfo();let a=this.installedPlugins.sort((i,h)=>i.updateAvailable!==h.updateAvailable?i.updateAvailable?-1:1:i.newHbScope&&!h.newHbScope?-1:i.disabled!==h.disabled?i.disabled?1:-1:i.isConfigured!==h.isConfigured?i.isConfigured?1:-1:i.hasChildBridgesUnpaired!==h.hasChildBridgesUnpaired?i.hasChildBridgesUnpaired?-1:1:i.hasChildBridges!==h.hasChildBridges&&this.$settings.env.recommendChildBridges?i.hasChildBridges?1:-1:i.name.localeCompare(h.name));return this.loading=!1,a}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}appendMetaInfo(){return y(this,null,function*(){yield Promise.all(this.installedPlugins.filter(e=>e.installedVersion).map(e=>y(this,null,function*(){try{let a=yield k(this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));e.isConfigured=a.length>0,e.isConfiguredDynamicPlatform=e.isConfigured&&Object.prototype.hasOwnProperty.call(a[0],"platform"),e.recommendChildBridge=e.isConfiguredDynamicPlatform&&this.$settings.env.recommendChildBridges&&this.$settings.env.serviceMode&&!["homebridge","homebridge-config-ui-x"].includes(e.name),e.hasChildBridges=e.isConfigured&&a.some(h=>h._bridge&&h._bridge.username);let i=this.getPluginChildBridges(e);e.hasChildBridgesUnpaired=i.some(h=>!h.paired)}catch{e.isConfigured=!0,e.hasChildBridges=!0}})))})}search(){this.installedPlugins=[],this.loading=!0,this.showExitButton=!0,this.$api.get(`/plugins/search/${encodeURIComponent(this.form.value.query)}`).subscribe({next:e=>{let a=new Set;this.installedPlugins=e.reduce((i,h)=>{if(h.name==="homebridge-config-ui-x"||a.has(h.name))return i;if(h.newHbScope){let E=h.newHbScope.to,S=e.some(Ii=>Ii.name===E);(h.installedVersion||!S)&&(a.add(E),i.push(h))}else i.push(h);return i},[]),this.appendMetaInfo(),this.loading=!1},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error")),this.loadInstalledPlugins()}})}onClearSearch(){this.loadInstalledPlugins()}onSubmit({value:e}){e.query.length?this.search():this.loadInstalledPlugins()}getChildBridgeMetadata(){this.io.request("get-homebridge-child-bridge-status").subscribe(e=>{this.childBridges=e})}getPluginChildBridges(e){return this.childBridges.filter(a=>a.plugin===e.name)}ngOnDestroy(){this.navigationSubscription&&this.navigationSubscription.unsubscribe(),this.io.end()}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],decls:16,vars:10,consts:[[1,"row","mb-3"],[1,"col-12"],[1,"primary-text","m-0"],[1,"row"],[1,"col-md-12"],["novalidate","",3,"ngSubmit","formGroup"],["type","text","formControlName","query",1,"hb-npm-search",3,"placeholder"],["href","javascript:void(0)",1,"hb-npm-search-clear"],[1,"d-flex","flex-wrap","justify-content-between"],[1,"hb-plugin-space-between"],[1,"alert","alert-info","mt-4","text-center","w-100"],["href","javascript:void(0)",1,"hb-npm-search-clear",3,"click"],[1,"far","fa-fw","fa-times-circle"],[3,"plugin","childBridges"],[1,"fas","fa-fw","fa-magnifying-glass","primary-text","my-3",2,"font-size","75px"]],template:function(a,i){a&1&&(x(0,Pe,1,0,"app-spinner"),o(1,"div",0)(2,"div",1)(3,"h3",2),g(4),p(5,"translate"),l()()(),o(6,"div",3)(7,"div",4)(8,"form",5),m("ngSubmit",function(){return i.onSubmit(i.form)}),d(9,"input",6),p(10,"translate"),x(11,Se,2,0,"a",7),l()()(),o(12,"div",8),G(13,ye,2,2,"div",9,L),x(15,Be,5,3,"div",10),l()),a&2&&(s(i.loading?0:-1),t(4),P(u(5,6,"menu.label_plugins")),t(4),v("formGroup",i.form),t(),v("placeholder",u(10,8,"plugins.placeholder_search_plugin")),t(2),s(i.showExitButton?11:-1),t(2),W(i.installedPlugins),t(2),s(i.installedPlugins.length===0&&!i.loading?15:-1))},dependencies:[vi,li,ti,X,Z,ii,ri,ai,oi,ki,$],styles:[".hb-npm-search[_ngcontent-%COMP%]{outline:none;box-sizing:inherit!important;background-color:inherit;height:50px!important;width:100%;border-width:.5px;padding:10px;margin-bottom:15px}@media (hover: hover){.hb-npm-search[_ngcontent-%COMP%]:hover{border:1px solid #000000}}.hb-npm-search[_ngcontent-%COMP%]:focus{border:1px solid #000000;box-shadow:0 1px #000}.hb-npm-search-clear[_ngcontent-%COMP%]{position:absolute;right:25px;font-size:35px;color:#d0d0d0;line-height:50px;cursor:pointer}.hb-plugin-space-between[_ngcontent-%COMP%]{box-sizing:border-box;width:calc(50% - 6.6666666667px)}@media only screen and (max-width: 991px){.hb-plugin-space-between[_ngcontent-%COMP%]{width:100%}}"]})}return n})();export{Cn as a};
1
+ import{a as Pi,b as Si}from"./chunk-X5YRTZFZ.js";import{a as vi}from"./chunk-23M23WV2.js";import{n as wi,v as U}from"./chunk-UE7ANWWM.js";import{a as z}from"./chunk-7GT27K3E.js";import{a as xi}from"./chunk-JF5AT3NK.js";import{a as bi}from"./chunk-LEFLOPGL.js";import{a as hi}from"./chunk-EEDUUZ6J.js";import{h as si,i as di,j as pi,k as ci,l as ui,m as gi,n as mi,o as fi}from"./chunk-N4F42HDL.js";import{c as X,d as Y,e as Z,f as ii,g as ei,j as ni,m as ti,p as ai,q as oi,y as li,z as ri}from"./chunk-YLEC7AUG.js";import{a as R}from"./chunk-JTZVAPYW.js";import{a as _i,d as Ci}from"./chunk-T3GI7KUT.js";import{b as F}from"./chunk-IZVXTMWH.js";import{h as j,k as A}from"./chunk-73SS2RFT.js";import{a as N,b as $}from"./chunk-675OFXLW.js";import{Ac as J,Bb as x,Cc as p,Dc as u,Ec as H,Lb as B,Mb as v,Rb as s,Tb as L,Ub as G,Vb as W,Wb as o,Xb as l,Yb as d,ac as C,bd as D,db as O,dc as m,eb as T,ec as c,ed as K,h as y,ib as t,id as Q,na as w,oc as g,pc as P,qc as b,ub as V,w as k,xa as f,ya as _,yc as M,zc as I}from"./chunk-CKNHTRCL.js";var Ti=(n,r)=>({"orange-text":n,"grey-text":r}),q=n=>({opacity:n}),Vi=(n,r)=>({"green-text":n,"grey-text":r}),$i=(n,r)=>({"scoped-text":n,"grey-text":r}),Ei=(n,r)=>({scopedLink:n,verifiedLink:r});function Mi(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l(),o(6,"p",20),g(7),p(8,"translate"),l()),n&2&&(t(),P(u(2,3,"plugins.manage.scoped_subtitle")),t(3),P(u(5,5,"plugins.manage.scoped_message")),t(3),P(u(8,7,"plugins.manage.verified_message")))}function Hi(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l()),n&2&&(t(),P(u(2,2,"plugins.manage.verified_subtitle")),t(3),P(u(5,4,"plugins.manage.verified_message")))}function Di(n,r){n&1&&(o(0,"h6",19),g(1),p(2,"translate"),l(),o(3,"p",20),g(4),p(5,"translate"),l()),n&2&&(t(),P(u(2,2,"plugins.manage.unverified_subtitle")),t(3),P(u(5,4,"plugins.manage.unverified_message")))}function Ni(n,r){if(n&1){let e=C();o(0,"button",21),m("click",function(){f(e);let i=c();return _(i.$activeModal.dismiss("Dismiss"))}),g(1),p(2,"translate"),l()}n&2&&(t(),b(" ",u(2,1,"form.button_close")," "))}function ji(n,r){if(n&1){let e=C();o(0,"button",21),m("click",function(){f(e);let i=c();return _(i.$activeModal.dismiss("Dismiss"))}),g(1),p(2,"translate"),l()}n&2&&(t(),b(" ",u(2,1,"form.button_close")," "))}function Ai(n,r){if(n&1&&(o(0,"a",18),g(1),p(2,"translate"),d(3,"i",22),l()),n&2){let e=c();v("href",e.plugin.links.homepage||e.plugin.links.npm,T),t(),b(" ",u(2,2,"plugins.button_homepage")," ")}}var Bi=(()=>{class n{$activeModal=w(gi);plugin;defaultIcon="assets/hb-icon.png";linkScoped='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa/fw fas fa-fw fa-external-link-alt"></i></a>';linkVerified='<a href="https://github.com/homebridge/plugins/wiki/Verified-Plugins" target="_blank"><i class="fa fa/fw fas fa-fw fa-external-link-alt"></i></a>';constructor(){}ngOnInit(){this.plugin.icon||(this.plugin.icon=this.defaultIcon)}handleIconError(){this.plugin.icon=this.defaultIcon}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:34,vars:45,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body","text-center"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[1,"mb-1"],[1,"grey-text","mb-0","text-monospace"],[1,"grey-text","mb-1","text-monospace"],[1,"mb-3"],[1,"fas","fa-fw","fa-shield-alt","mb-3",2,"font-size","48px",3,"ngClass","ngStyle"],[1,"mb-0","grey-text",3,"innerHTML"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","data-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-right"],["target","_blank","rel","noopener noreferrer",1,"btn","btn-primary","text-decoration-none",3,"href"],[1,"mb-2"],[1,"mb-1","grey-text"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"fas","fa-fw","fa-external-link-alt"]],template:function(a,i){a&1&&(o(0,"div",0)(1,"div",1)(2,"h5",2),g(3),p(4,"translate"),l(),o(5,"button",3),p(6,"translate"),m("click",function(){return i.$activeModal.dismiss("Dismiss")}),o(7,"span",4),g(8,"\xD7"),l()()(),o(9,"div",5)(10,"img",6),m("error",function(){return i.handleIconError()}),l(),o(11,"h4",7),g(12),l(),o(13,"p",8),g(14),l(),o(15,"p",9),g(16),l(),o(17,"p",10),g(18),l(),d(19,"i",11)(20,"i",11)(21,"i",11),x(22,Mi,9,9)(23,Hi,6,6)(24,Di,6,6),d(25,"p",12),p(26,"translate"),l(),o(27,"div",13)(28,"div",14),x(29,Ni,3,3,"button",15),l(),o(30,"div",16),x(31,ji,3,3,"button",15),l(),o(32,"div",17),x(33,Ai,4,4,"a",18),l()()()),a&2&&(t(3),P(u(4,20,"plugins.manage.information")),t(2),B("aria-label",u(6,22,"form.button_close")),t(5),v("src",i.plugin.icon,T),t(2),P(i.plugin.displayName),t(2),P(i.plugin.name),t(2),b("@",i.plugin.author,""),t(2),P(i.plugin.description),t(),v("ngClass",I(27,Ti,!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin,i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin))("ngStyle",M(30,q,!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin?1:.25)),t(),v("ngClass",I(32,Vi,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin),i.plugin.isHbScoped||!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin))("ngStyle",M(35,q,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)?1:.25)),t(),v("ngClass",I(37,$i,i.plugin.isHbScoped,!i.plugin.isHbScoped))("ngStyle",M(40,q,i.plugin.isHbScoped?1:.25)),t(),s(i.plugin.isHbScoped?22:-1),t(),s(!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)?23:-1),t(),s(!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin?24:-1),t(),v("innerHTML",H(26,24,"plugins.manage.more_info",I(42,Ei,i.linkScoped,i.linkVerified)),O),t(4),s(i.plugin.links.homepage||i.plugin.links.npm?29:-1),t(2),s(!i.plugin.links.homepage&&!i.plugin.links.npm?31:-1),t(2),s(i.plugin.links.homepage||i.plugin.links.npm?33:-1))},dependencies:[$,D,K],styles:[".plugin-icon[_ngcontent-%COMP%]{height:75px;width:75px;border-radius:15px;border:1px solid #222222}"]})}return n})();var Fi=(n,r,e)=>({"scoped-text":n,"green-text":r,"orange-text":e}),Ri=(n,r)=>({"fa-bridge-circle-exclamation orange-text":n,"fa-bridge-circle-xmark red-text":r});function Ui(n,r){n&1&&d(0,"i",25)}function zi(n,r){n&1&&d(0,"i",26)}function qi(n,r){if(n&1){let e=C();o(0,"a",24),m("click",function(){f(e);let i=c();return _(i.openHb2InfoModal())}),x(1,Ui,1,0,"i",25)(2,zi,1,0,"i",26),l()}if(n&2){let e=c();v("ngbTooltip","Homebridge v2.0 Readiness")("placement","right"),t(),s(e.hb2Status==="supported"?1:-1),t(),s(e.hb2Status==="unknown"?2:-1)}}function Oi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.checkAndUpdatePlugin(i.plugin,i.plugin.updateTag||"latest"))}),d(3,"i",28),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.button_update")),B("aria-label",u(2,4,"plugins.button_update")))}function Li(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.switchToScoped(i.plugin))}),d(3,"i",29),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.manage.scoped.switch")),B("aria-label",u(2,4,"plugins.manage.scoped.switch")))}function Gi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.settings(i.plugin))}),d(3,"i",30),l()}n&2&&(v("ngbTooltip",u(1,2,"plugins.button_set_up")),B("aria-label",u(2,4,"plugins.button_set_up")))}function Wi(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.bridgeSettings(i.plugin))}),d(3,"i",31),l()}n&2&&(v("ngbTooltip",u(1,2,"child_bridge.setup")),B("aria-label",u(2,4,"child_bridge.setup")))}function Ji(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),p(2,"translate"),m("click",function(){f(e);let i=c();return _(i.$plugin.bridgeSettings(i.plugin))}),d(3,"i",32),l()}n&2&&(v("ngbTooltip",u(1,2,"child_bridge.bridge_connect")),B("aria-label",u(2,4,"child_bridge.bridge_connect")))}function Ki(n,r){if(n&1&&d(0,"i",13),n&2){let e=c();v("ngClass",I(1,Ri,e.childBridgeStatus==="pending",e.childBridgeStatus==="down"))}}function Qi(n,r){if(n&1){let e=C();o(0,"a",15),m("click",function(){f(e);let i=c();return _(i.openFundingModal(i.plugin))}),d(1,"i",33),o(2,"span",17),g(3),l()()}if(n&2){let e=c();t(3),b("@",e.plugin.author,"")}}function Xi(n,r){if(n&1&&(o(0,"span",17),d(1,"i",34),g(2),l()),n&2){let e=c();t(2),b("@",e.plugin.author," ")}}function Yi(n,r){if(n&1&&(o(0,"span"),g(1),p(2,"date"),l()),n&2){let e=c(2);t(),b("(",H(2,1,e.plugin.lastUpdated,"yyyy-MM-dd"),")")}}function Zi(n,r){if(n&1&&(o(0,"span"),d(1,"i",35),o(2,"span",17),g(3),x(4,Yi,3,4,"span"),l()()),n&2){let e=c();t(3),b("v",e.plugin.latestVersion," "),t(),s(e.plugin.lastUpdated?4:-1)}}function ie(n,r){if(n&1&&(d(0,"i",36),g(1)),n&2){let e=c();t(),b("v",e.plugin.installedVersion," ")}}function ee(n,r){if(n&1){let e=C();o(0,"a",27),p(1,"translate"),m("click",function(){f(e);let i=c();return _(i.doChildBridgeAction("restart"))}),d(2,"i",37),l()}if(n&2){let e=c();v("ngbTooltip",u(1,1,e.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}function ne(n,r){if(n&1){let e=C();o(0,"a",38),m("click",function(){f(e);let i=c();return _(i.enablePlugin(i.plugin))}),d(1,"i",39),p(2,"translate"),l()}n&2&&(t(),v("ngbTooltip",u(2,1,"plugins.status_disabled")))}function te(n,r){if(n&1){let e=C();o(0,"a",40),m("click",function(){f(e);let i=c();return _(i.$plugin.installAlternateVersion(i.plugin))}),d(1,"i",41),l()}}function ae(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.viewPluginLog(i.plugin))}),d(1,"i",50),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.plugin_logs")," "))}function oe(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.installAlternateVersion(i.plugin))}),d(1,"i",51),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.manage_version")," "))}function le(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.jsonEditor(i.plugin))}),d(1,"i",52),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.json_config")," "))}function re(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.disablePlugin(i.plugin))}),d(1,"i",53),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.disable")," "))}function se(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.enablePlugin(i.plugin))}),d(1,"i",54),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.manage.enable")," "))}function de(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.uninstallPlugin(i.plugin,i.setChildBridges))}),d(1,"i",55),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"plugins.button_uninstall")," "))}function pe(n,r){n&1&&d(0,"div",48)}function ce(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("restart"))}),d(1,"i",57),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart")," ")}}function ue(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("stop"))}),d(1,"i",58),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.stop_plural":"child_bridge.stop")," ")}}function ge(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.doChildBridgeAction("start"))}),d(1,"i",59),g(2),p(3,"translate"),l()}if(n&2){let e=c(3);t(2),b(" ",u(3,1,e.setChildBridges.length>1?"child_bridge.start_plural":"child_bridge.start")," ")}}function me(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(3);return _(i.$plugin.resetChildBridges(i.setChildBridges))}),d(1,"i",60),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.reset_accessories")," "))}function fe(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",56),g(2),p(3,"translate"),l(),x(4,ce,4,3,"button",47)(5,ue,4,3,"button",47)(6,ge,4,3,"button",47)(7,me,4,3,"button",47)}if(n&2){let e=c(2);t(2),b(" ",u(3,5,"child_bridge.bridge_settings")," "),t(2),s(e.childBridgeRestartInProgress?-1:4),t(),s(e.allChildBridgesStopped?-1:5),t(),s(e.allChildBridgesStopped?6:-1),t(),s(e.$settings.env.serviceMode?7:-1)}}function _e(n,r){n&1&&d(0,"div",48)}function Ce(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",61),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.setup")," "))}function he(n,r){n&1&&d(0,"div",48)}function be(n,r){if(n&1){let e=C();o(0,"button",45),m("click",function(){f(e);let i=c(2);return _(i.$plugin.bridgeSettings(i.plugin))}),d(1,"i",61),g(2),p(3,"translate"),l()}n&2&&(t(2),b(" ",u(3,1,"child_bridge.setup")," "))}function ve(n,r){n&1&&d(0,"div",48)}function xe(n,r){if(n&1&&(o(0,"a",49),d(1,"i",62),g(2),p(3,"translate"),l()),n&2){let e=c(2);v("href",e.plugin.links.bugs,T),t(2),b(" ",u(3,2,"support.links.issue")," ")}}function we(n,r){if(n&1){let e=C();o(0,"span",23)(1,"a",42),d(2,"i",43),l(),o(3,"div",44)(4,"button",45),m("click",function(){f(e);let i=c();return _(i.$plugin.settings(i.plugin))}),d(5,"i",46),g(6),p(7,"translate"),l(),x(8,ae,4,3,"button",47)(9,oe,4,3,"button",47)(10,le,4,3,"button",47)(11,re,4,3,"button",47)(12,se,4,3,"button",47)(13,de,4,3,"button",47)(14,pe,1,0,"div",48)(15,fe,8,7)(16,_e,1,0,"div",48)(17,Ce,4,3,"button",47)(18,he,1,0,"div",48)(19,be,4,3,"button",47)(20,ve,1,0,"div",48)(21,xe,4,4,"a",49),l()()}if(n&2){let e=c();t(),B("aria-label","Plugin Actions Dropdown"),t(5),b(" ",u(7,16,"plugins.button_settings")," "),t(2),s(e.plugin.isConfigured&&!e.plugin.disabled?8:-1),t(),s(e.plugin.publicPackage?9:-1),t(),s(!e.isMobile&&e.plugin.name!=="homebridge-config-ui-x"?10:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"&&!e.plugin.disabled?11:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"&&e.plugin.disabled?12:-1),t(),s(e.plugin.name!=="homebridge-config-ui-x"?13:-1),t(),s(!e.plugin.disabled&&e.plugin.isConfigured&&e.plugin.hasChildBridges&&e.plugin.installedVersion&&e.plugin.name!=="homebridge-config-ui-x"?14:-1),t(),s(e.plugin.hasChildBridges&&!e.plugin.disabled?15:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&!e.plugin.recommendChildBridge?16:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&!e.plugin.recommendChildBridge?17:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&e.plugin.recommendChildBridge&&e.plugin.updateAvailable?18:-1),t(),s(e.plugin.isConfigured&&!e.plugin.hasChildBridges&&!e.plugin.disabled&&e.plugin.recommendChildBridge&&e.plugin.updateAvailable?19:-1),t(),s(e.plugin.links!=null&&e.plugin.links.bugs?20:-1),t(),s(e.plugin.links!=null&&e.plugin.links.bugs?21:-1)}}var ki=(()=>{class n{$api=w(A);$md=w(xi);$modal=w(mi);$plugin=w(U);$settings=w(F);$toastr=w(j);$translate=w(N);$ws=w(R);plugin;hasChildBridges=!1;hasUnpairedChildBridges=!1;allChildBridgesStopped=!1;childBridgeStatus="pending";childBridgeRestartInProgress=!1;defaultIcon="assets/hb-icon.png";isMobile;setChildBridges=[];hb2Status="unknown";io;constructor(){}set childBridges(e){var h,E;this.hasChildBridges=e.length>0,this.hasUnpairedChildBridges=e.filter(S=>S.paired===!1).length>0,this.allChildBridgesStopped=e.filter(S=>S.manuallyStopped===!0).length===e.length,this.hasChildBridges&&(e.some(S=>S.status==="down")?this.childBridgeStatus="down":e.some(S=>S.status==="pending")?this.childBridgeStatus="pending":e.some(S=>S.status==="ok")&&(this.childBridgeStatus="ok")),this.setChildBridges=e;let a=this.$settings.env.homebridgeVersion.split(".")[0],i=((E=(h=this.plugin.engines)==null?void 0:h.homebridge)==null?void 0:E.split("||").map(S=>S.trim()))||[];this.hb2Status=a==="2"?"hide":i.some(S=>S.startsWith("^2")||S.startsWith(">=2"))?"supported":this.hb2Status}ngOnInit(){this.isMobile=this.$md.detect.mobile(),this.io=this.$ws.getExistingNamespace("child-bridges"),this.isMobile&&this.plugin.displayName.toLowerCase().startsWith("homebridge ")&&(this.plugin.displayName=this.plugin.displayName.replace(/^homebridge /i,"")),this.plugin.icon||(this.plugin.icon=this.defaultIcon)}openFundingModal(e){let a=this.$modal.open(Si,{size:"lg",backdrop:"static"});a.componentInstance.plugin=e}pluginInfoModal(e){let a=this.$modal.open(Bi,{size:"lg",backdrop:"static"});a.componentInstance.plugin=e}disablePlugin(e){let a=this.$modal.open(Pi,{size:"lg",backdrop:"static"});a.componentInstance.pluginName=e.displayName,a.componentInstance.isConfigured=e.isConfigured,a.componentInstance.isConfiguredDynamicPlatform=e.isConfiguredDynamicPlatform,a.result.then(()=>y(this,null,function*(){try{yield k(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/disable`,{})),e.disabled=!0,this.hasChildBridges&&this.doChildBridgeAction("stop"),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.disable.error"),this.$translate.instant("toast.title_error"))}}))}enablePlugin(e){let a=this.$modal.open(hi,{size:"lg",backdrop:"static"});a.componentInstance.title=e.name,a.componentInstance.message=this.$translate.instant("plugins.manage.confirm_enable",{pluginName:e.displayName}),a.componentInstance.confirmButtonLabel=this.$translate.instant("plugins.manage.enable"),a.componentInstance.faIconClass="fa-circle-play primary-text",a.result.then(()=>y(this,null,function*(){try{yield k(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/enable`,{})),e.disabled=!1,this.hasChildBridges&&(yield this.doChildBridgeAction("start")),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.enable.error"),this.$translate.instant("toast.title_error"))}}))}viewPluginLog(e){let a=this.$modal.open(wi,{size:"xl",backdrop:"static"});a.componentInstance.plugin=e}doChildBridgeAction(e){return y(this,null,function*(){this.childBridgeRestartInProgress=!0;try{for(let a of this.setChildBridges)yield k(this.io.request(`${e}-child-bridge`,a.username))}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.bridge.action_error",{action:e}),this.$translate.instant("toast.title_error")),this.childBridgeRestartInProgress=!1}finally{setTimeout(()=>{this.childBridgeRestartInProgress=!1},e==="restart"?12e3:e==="stop"?6e3:1e3)}})}handleIconError(){this.plugin.icon=this.defaultIcon}openHb2InfoModal(){let e=this.$modal.open(bi,{size:"lg",backdrop:"static"});e.componentInstance.title="Plugin Readiness",this.hb2Status==="supported"?(e.componentInstance.subtitle=`${this.plugin.displayName} is ready for Homebridge v2.0`,e.componentInstance.message="The developer has specifically marked your installed version of the plugin as compatible with Homebridge v2.0.",e.componentInstance.faIconClass="fa-check-circle green-text"):(e.componentInstance.subtitle=`${this.plugin.displayName} might not be ready for Homebridge v2.0`,e.componentInstance.message="The developer has not specifically marked your installed version of the plugin as compatible with Homebridge v2.0, but it may still work.",e.componentInstance.faIconClass="fa-question-circle orange-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0"}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["app-plugin-card"]],inputs:{plugin:"plugin",childBridges:"childBridges"},decls:36,vars:24,consts:[[1,"card","card-body","mb-3"],[1,"d-flex","flex-row","justify-content-between"],[1,"d-flex","flex-column","mr-3","align-items-center","justify-content-between"],["alt","Plugin Icon",1,"plugin-icon-card","mb-3",3,"error","src"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"ngbTooltip","placement"],[1,"d-flex","flex-column","justify-content-between",2,"min-width","calc(100% - 80px)"],[1,"d-flex","flex-row","align-items-end"],[1,"d-flex","flex-column","w-100"],[1,"d-flex","flex-row"],[1,"card-title","mb-2","text-truncate"],[1,"ml-auto"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"ngbTooltip"],[1,"fas","fa-fw","fa-spinner","fa-pulse","fa-lg","grey-text","ml-3",3,"hidden"],[1,"fas","fa-fw","fa-lg","ml-3",3,"ngClass"],[1,"card-text","mb-2","text-truncate"],["href","javascript:void(0)",1,"card-link",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1",3,"ngClass"],[1,"grey-text"],[1,"card-text","mb-2"],["href","javascript:void(0)",1,"card-link"],[1,"card-text","mb-0","grey-text"],["href","javascript:void(0)",1,"card-link","red-text"],["href","javascript:void(0)"],["ngbDropdown","","placement","left",1,"d-inline-block","ml-3","mt-auto"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"click","ngbTooltip","placement"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"click","ngbTooltip"],[1,"far","fa-fw","fa-arrow-alt-circle-up","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-arrow-right-arrow-left","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-sliders","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-bridge","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-qrcode","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1","pink-text"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1",2,"opacity","0.5"],[1,"far","fa-fw","fa-circle-dot","fa-lg","mr-1"],[1,"far","fa-fw","fa-circle-check","fa-lg","mr-1"],[1,"fas","fa-fw","fa-lg","fa-power-off","ml-3"],["href","javascript:void(0)",1,"card-link","red-text",3,"click"],["container","body","openDelay","150","triggers","hover",1,"far","fa-fw","fa-pause-circle","fa-lg",3,"ngbTooltip"],["href","javascript:void(0)",3,"click"],[1,"far","fa-fw","fa-arrow-alt-circle-down","fa-lg"],["href","javascript:void(0)","ngbDropdownToggle","",1,"card-link","text-decoration-none","mt-auto",2,"outline","none"],[1,"fa-solid","fa-fw","fa-ellipsis-v","fa-lg"],["ngbDropdownMenu","","aria-labelledby","Plugin Actions Dropdown"],["ngbDropdownItem","",3,"click"],[1,"fas","fa-fw","fa-sliders"],["ngbDropdownItem",""],[1,"dropdown-divider"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href"],[1,"fas","fa-fw","fa-wave-square"],[1,"fas","fa-fw","fa-code-compare"],[1,"fas","fa-fw","fa-code"],[1,"far","fa-fw","fa-circle-pause"],[1,"far","fa-fw","fa-circle-play"],[1,"fas","fa-fw","fa-trash"],[1,"fas","fa-fw","fa-bridge"],[1,"fa-fw","icon-button","fas","fa-fw","fa-power-off"],[1,"fas","fa-fw","fa-stop"],[1,"fas","fa-fw","fa-play"],[1,"fas","fa-fw","fa-broom"],[1,"icon-button","fas","fa-fw","fa-bridge"],[1,"icon-button","fa","fa-fw","fa-question-circle-o"]],template:function(a,i){a&1&&(o(0,"div",0)(1,"div",1)(2,"div",2)(3,"img",3),m("error",function(){return i.handleIconError()}),l(),x(4,qi,3,4,"a",4),l(),o(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8)(9,"h5",9),g(10),l(),o(11,"div",10),x(12,Oi,4,6,"a",11)(13,Li,4,6,"a",11)(14,Gi,4,6,"a",11)(15,Wi,4,6,"a",11)(16,Ji,4,6,"a",11),d(17,"i",12),x(18,Ki,1,4,"i",13),l()(),o(19,"p",14)(20,"a",15),m("click",function(){return i.pluginInfoModal(i.plugin)}),d(21,"i",16),o(22,"span",17),g(23),l()()(),o(24,"p",18),x(25,Qi,4,1,"a",19)(26,Xi,3,1,"span",17),l(),o(27,"div",8)(28,"p",20),x(29,Zi,5,2,"span")(30,ie,2,1),l(),o(31,"div",10),x(32,ee,3,3,"a",11)(33,ne,3,3,"a",21)(34,te,2,0,"a",22)(35,we,22,18,"span",23),l()()()()()()()),a&2&&(t(3),v("src",i.plugin.icon,T),t(),s(i.plugin.installedVersion&&i.hb2Status!=="hide"?4:-1),t(6),P(i.plugin.displayName),t(2),s(i.plugin.installedVersion&&i.plugin.updateAvailable&&!i.childBridgeRestartInProgress?12:-1),t(),s(i.plugin.installedVersion&&(i.plugin.newHbScope==null?null:i.plugin.newHbScope.switch)===i.plugin.installedVersion&&!i.childBridgeRestartInProgress?13:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&!i.plugin.isConfigured&&!i.childBridgeRestartInProgress&&!i.plugin.disabled?14:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&i.plugin.recommendChildBridge&&!i.childBridgeRestartInProgress?15:-1),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&i.hasUnpairedChildBridges&&i.childBridgeStatus==="ok"&&!i.plugin.disabled?16:-1),t(),v("hidden",!i.childBridgeRestartInProgress),t(),s(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&!i.hasUnpairedChildBridges&&i.childBridgeStatus!=="ok"&&!i.plugin.disabled?18:-1),t(3),v("ngClass",J(20,Fi,i.plugin.isHbScoped,!i.plugin.isHbScoped&&(i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin),!i.plugin.isHbScoped&&!i.plugin.verifiedPlugin&&!i.plugin.verifiedPlusPlugin)),t(2),P(i.plugin.name),t(2),s((i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)&&i.plugin.funding?25:-1),t(),s((i.plugin.verifiedPlugin||i.plugin.verifiedPlusPlugin)&&i.plugin.funding?-1:26),t(3),s(i.plugin.publicPackage&&!i.plugin.installedVersion?29:-1),t(),s(i.plugin.installedVersion?30:-1),t(2),s(!i.plugin.disabled&&i.plugin.hasChildBridges&&i.childBridgeStatus==="ok"?32:-1),t(),s(i.plugin.installedVersion&&i.plugin.disabled?33:-1),t(),s(i.plugin.publicPackage&&!i.plugin.installedVersion?34:-1),t(),s(i.plugin.installedVersion?35:-1))},dependencies:[fi,D,ui,ci,pi,di,si,Q,$],encapsulation:2})}return n})();function Pe(n,r){n&1&&d(0,"app-spinner")}function Se(n,r){if(n&1){let e=C();o(0,"a",11),m("click",function(){f(e);let i=c();return _(i.onClearSearch())}),d(1,"i",12),l()}}function ye(n,r){if(n&1&&(o(0,"div",9),d(1,"app-plugin-card",13),l()),n&2){let e=r.$implicit,a=c();t(),v("plugin",e)("childBridges",a.getPluginChildBridges(e))}}function Be(n,r){n&1&&(o(0,"div",10),d(1,"i",14),o(2,"p"),g(3),p(4,"translate"),l()()),n&2&&(t(3),P(u(4,1,"plugins.placeholder_search_first")))}var Cn=(()=>{class n{$api=w(A);$plugin=w(U);$router=w(Ci);$settings=w(F);$toastr=w(j);$translate=w(N);$ws=w(R);loading=!0;installedPlugins=[];childBridges=[];showExitButton=!1;form=new ei({query:new ni("",[Y.required])});io;navigationSubscription;constructor(){}ngOnInit(){return y(this,null,function*(){this.io=this.$ws.connectToNamespace("child-bridges"),this.io.connected.subscribe(()=>y(this,null,function*(){this.getChildBridgeMetadata(),this.io.socket.emit("monitor-child-bridge-status"),yield this.loadInstalledPlugins();let e=this.$router.parseUrl(this.$router.url).queryParams.installed;if(e){let a=this.installedPlugins.find(i=>i.name===e);a&&!a.isConfigured&&this.$plugin.settings(a),this.$router.navigate(["/plugins"])}})),this.io.socket.on("child-bridge-status-update",e=>{let a=this.childBridges.find(i=>i.username===e.username);a?Object.assign(a,e):this.childBridges.push(e)}),this.navigationSubscription=this.$router.events.subscribe(e=>{e instanceof _i&&this.loadInstalledPlugins()})})}loadInstalledPlugins(){return y(this,null,function*(){this.form.setValue({query:""}),this.showExitButton=!1,this.installedPlugins=[],this.loading=!0;try{let e=yield k(this.$api.get("/plugins"));this.installedPlugins=e.filter(i=>i.name!=="homebridge-config-ui-x"),yield this.appendMetaInfo();let a=this.installedPlugins.sort((i,h)=>i.updateAvailable!==h.updateAvailable?i.updateAvailable?-1:1:i.newHbScope&&!h.newHbScope?-1:i.disabled!==h.disabled?i.disabled?1:-1:i.isConfigured!==h.isConfigured?i.isConfigured?1:-1:i.hasChildBridgesUnpaired!==h.hasChildBridgesUnpaired?i.hasChildBridgesUnpaired?-1:1:i.hasChildBridges!==h.hasChildBridges&&this.$settings.env.recommendChildBridges?i.hasChildBridges?1:-1:i.name.localeCompare(h.name));return this.loading=!1,a}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}appendMetaInfo(){return y(this,null,function*(){yield Promise.all(this.installedPlugins.filter(e=>e.installedVersion).map(e=>y(this,null,function*(){try{let a=yield k(this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));e.isConfigured=a.length>0,e.isConfiguredDynamicPlatform=e.isConfigured&&Object.prototype.hasOwnProperty.call(a[0],"platform"),e.recommendChildBridge=e.isConfiguredDynamicPlatform&&this.$settings.env.recommendChildBridges&&this.$settings.env.serviceMode&&!["homebridge","homebridge-config-ui-x"].includes(e.name),e.hasChildBridges=e.isConfigured&&a.some(h=>h._bridge&&h._bridge.username);let i=this.getPluginChildBridges(e);e.hasChildBridgesUnpaired=i.some(h=>!h.paired)}catch{e.isConfigured=!0,e.hasChildBridges=!0}})))})}search(){this.installedPlugins=[],this.loading=!0,this.showExitButton=!0,this.$api.get(`/plugins/search/${encodeURIComponent(this.form.value.query)}`).subscribe({next:e=>{let a=new Set;this.installedPlugins=e.reduce((i,h)=>{if(h.name==="homebridge-config-ui-x"||a.has(h.name))return i;if(h.newHbScope){let E=h.newHbScope.to,S=e.some(Ii=>Ii.name===E);(h.installedVersion||!S)&&(a.add(E),i.push(h))}else i.push(h);return i},[]),this.appendMetaInfo(),this.loading=!1},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error")),this.loadInstalledPlugins()}})}onClearSearch(){this.loadInstalledPlugins()}onSubmit({value:e}){e.query.length?this.search():this.loadInstalledPlugins()}getChildBridgeMetadata(){this.io.request("get-homebridge-child-bridge-status").subscribe(e=>{this.childBridges=e})}getPluginChildBridges(e){return this.childBridges.filter(a=>a.plugin===e.name)}ngOnDestroy(){this.navigationSubscription&&this.navigationSubscription.unsubscribe(),this.io.end()}static \u0275fac=function(a){return new(a||n)};static \u0275cmp=V({type:n,selectors:[["ng-component"]],decls:16,vars:10,consts:[[1,"row","mb-3"],[1,"col-12"],[1,"primary-text","m-0"],[1,"row"],[1,"col-md-12"],["novalidate","",3,"ngSubmit","formGroup"],["type","text","formControlName","query",1,"hb-npm-search",3,"placeholder"],["href","javascript:void(0)",1,"hb-npm-search-clear"],[1,"d-flex","flex-wrap","justify-content-between"],[1,"hb-plugin-space-between"],[1,"alert","alert-info","mt-4","text-center","w-100"],["href","javascript:void(0)",1,"hb-npm-search-clear",3,"click"],[1,"far","fa-fw","fa-times-circle"],[3,"plugin","childBridges"],[1,"fas","fa-fw","fa-magnifying-glass","primary-text","my-3",2,"font-size","75px"]],template:function(a,i){a&1&&(x(0,Pe,1,0,"app-spinner"),o(1,"div",0)(2,"div",1)(3,"h3",2),g(4),p(5,"translate"),l()()(),o(6,"div",3)(7,"div",4)(8,"form",5),m("ngSubmit",function(){return i.onSubmit(i.form)}),d(9,"input",6),p(10,"translate"),x(11,Se,2,0,"a",7),l()()(),o(12,"div",8),G(13,ye,2,2,"div",9,L),x(15,Be,5,3,"div",10),l()),a&2&&(s(i.loading?0:-1),t(4),P(u(5,6,"menu.label_plugins")),t(4),v("formGroup",i.form),t(),v("placeholder",u(10,8,"plugins.placeholder_search_plugin")),t(2),s(i.showExitButton?11:-1),t(2),W(i.installedPlugins),t(2),s(i.installedPlugins.length===0&&!i.loading?15:-1))},dependencies:[vi,li,ti,X,Z,ii,ri,ai,oi,ki,$],styles:[".hb-npm-search[_ngcontent-%COMP%]{outline:none;box-sizing:inherit!important;background-color:inherit;height:50px!important;width:100%;border-width:.5px;padding:10px;margin-bottom:15px}@media (hover: hover){.hb-npm-search[_ngcontent-%COMP%]:hover{border:1px solid #000000}}.hb-npm-search[_ngcontent-%COMP%]:focus{border:1px solid #000000;box-shadow:0 1px #000}.hb-npm-search-clear[_ngcontent-%COMP%]{position:absolute;right:25px;font-size:35px;color:#d0d0d0;line-height:50px;cursor:pointer}.hb-plugin-space-between[_ngcontent-%COMP%]{box-sizing:border-box;width:calc(50% - 6.6666666667px)}@media only screen and (max-width: 991px){.hb-plugin-space-between[_ngcontent-%COMP%]{width:100%}}"]})}return n})();export{Cn as a};
@@ -1 +1 @@
1
- import{g as i}from"./chunk-T3GI7KUT.js";import"./chunk-HA6CO5NZ.js";import{ia as t,kd as l,vb as e}from"./chunk-CKNHTRCL.js";var d=[{path:"",redirectTo:"/",pathMatch:"full"},{path:"docker",loadChildren:()=>import("./chunk-WS5QF2EE.js").then(o=>o.DockerModule)},{path:"linux",loadChildren:()=>import("./chunk-SCXMID67.js").then(o=>o.LinuxModule)},{path:"terminal",loadChildren:()=>import("./chunk-XYSPMHLE.js").then(o=>o.TerminalModule)}],n=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[i.forChild(d),i]})}return o})();var s=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[l,n]})}return o})();export{s as PlatformToolsModule};
1
+ import{g as i}from"./chunk-T3GI7KUT.js";import"./chunk-HA6CO5NZ.js";import{ia as t,kd as l,vb as e}from"./chunk-CKNHTRCL.js";var d=[{path:"",redirectTo:"/",pathMatch:"full"},{path:"docker",loadChildren:()=>import("./chunk-OLYOQI2N.js").then(o=>o.DockerModule)},{path:"linux",loadChildren:()=>import("./chunk-Z52JKZRJ.js").then(o=>o.LinuxModule)},{path:"terminal",loadChildren:()=>import("./chunk-5NI2YZKY.js").then(o=>o.TerminalModule)}],n=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[i.forChild(d),i]})}return o})();var s=(()=>{class o{static \u0275fac=function(r){return new(r||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[l,n]})}return o})();export{s as PlatformToolsModule};
@@ -1 +1 @@
1
- import{a as X}from"./chunk-ZUOGDYEA.js";import{n as j}from"./chunk-N4F42HDL.js";import{c as M,d as C,e as P,f as V,g as O,j as F,m as R,p as W,q as N,y as D,z as G}from"./chunk-YLEC7AUG.js";import{e as L}from"./chunk-T3GI7KUT.js";import{c as Q}from"./chunk-AGIJNJRH.js";import{b as J}from"./chunk-R6JQOHRF.js";import{h as q,j as I,k as K}from"./chunk-ODKW2LOF.js";import{l as E}from"./chunk-HA6CO5NZ.js";import{a as H,b as A}from"./chunk-675OFXLW.js";import{Bb as z,Cc as s,Dc as l,Mb as _,Rb as f,Wb as i,Xb as r,Yb as c,ac as y,bd as B,dc as b,ec as m,h as w,ib as t,na as g,oc as a,pc as d,qc as v,ub as T,w as S,xa as x,ya as h,yc as $,zc as k}from"./chunk-CKNHTRCL.js";var U=(n,u)=>({"is-valid":n,"is-invalid":u}),Z=n=>({"button-loading":n});function ee(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",3),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"button",5),b("click",function(){x(e);let p=m();return h(p.onClickGettingStarted())}),a(6),s(7,"translate"),r(),i(8,"small",6)(9,"a",7),b("click",function(){x(e);let p=m();return h(p.onClickRestoreBackup())}),a(10),s(11,"translate"),r()()()}n&2&&(t(3),d(l(4,3,"setup.welcome_to_homebridge")),t(3),v(" ",l(7,5,"setup.button_get_started")," "),t(4),d(l(11,7,"setup_wizard_message_restore")))}function te(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"div",9)(6,"p"),a(7),s(8,"translate"),r(),i(9,"form",10),b("ngSubmit",function(){x(e);let p=m();return h(p.createFirstUser())}),i(10,"div",11),c(11,"i",12)(12,"input",13),i(13,"label",14),a(14),s(15,"translate"),r()(),i(16,"div",11),c(17,"i",15)(18,"input",16),i(19,"label",17),a(20),s(21,"translate"),r()(),i(22,"div",11),c(23,"i",15)(24,"input",18),i(25,"label",19),a(26),s(27,"translate"),r()(),i(28,"div",20)(29,"button",21),a(30),s(31,"translate"),c(32,"i",22),r()()()()()}if(n&2){let e=m();t(3),d(l(4,15,"setup.create_account")),t(4),d(l(8,17,"setup.create_account_reason")),t(2),_("formGroup",e.createUserForm),t(3),_("readonly",e.loading)("ngClass",k(27,U,e.createUserForm.controls.username.dirty&&e.createUserForm.controls.username.valid,e.createUserForm.controls.username.dirty&&e.createUserForm.controls.username.invalid)),t(2),d(l(15,19,"users.label_username")),t(4),_("readonly",e.loading)("ngClass",k(30,U,e.createUserForm.controls.password.dirty&&e.createUserForm.controls.password.valid,e.createUserForm.controls.password.dirty&&e.createUserForm.controls.password.errors)),t(2),d(l(21,21,"users.label_password")),t(4),_("readonly",e.loading)("ngClass",k(33,U,e.createUserForm.controls.passwordConfirm.dirty&&e.createUserForm.controls.passwordConfirm.valid,e.createUserForm.controls.passwordConfirm.dirty&&e.createUserForm.controls.passwordConfirm.errors)),t(2),d(l(27,23,"users.label_confirm_password")),t(3),_("disabled",e.createUserForm.invalid||e.loading)("ngClass",$(36,Z,e.loading)),t(),v(" ",l(31,25,"setup.create_account")," ")}}function ie(n,u){n&1&&(i(0,"span"),c(1,"i",29),a(2),s(3,"translate"),r()),n&2&&(t(2),v(" ",l(3,1,"backup.label_uploading")," "))}function ne(n,u){n&1&&(a(0),s(1,"translate")),n&2&&v(" ",l(1,1,"backup.button_restore_backup")," ")}function oe(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"p"),a(6),s(7,"translate"),r(),i(8,"div",23)(9,"input",24),b("change",function(p){x(e);let Y=m();return h(Y.handleRestoreFileInput(p.target.files))}),r(),i(10,"label",25),a(11),s(12,"translate"),r()(),i(13,"div",26)(14,"button",27),b("click",function(){x(e);let p=m();return h(p.onClickCancelRestore())}),a(15),s(16,"translate"),r(),i(17,"button",28),b("click",function(){x(e);let p=m();return h(p.onRestoreBackupClick())}),z(18,ie,4,3,"span")(19,ne,2,3),r()()()}if(n&2){let e=m();t(3),d(l(4,8,"form.button_restore")),t(3),d(l(7,10,"backup.restore_help_one")),t(5),v(" ",l(12,12,(e.selectedFile==null?null:e.selectedFile.name)||"backup.label_choose_backup_file_to_restore")," "),t(3),_("disabled",e.restoreUploading),t(),v(" ",l(16,14,"form.button_cancel")," "),t(2),_("disabled",e.restoreUploading||!e.selectedFile),t(),f(e.restoreUploading?18:-1),t(),f(e.restoreUploading?-1:19)}}function re(n,u){n&1&&(i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"h1"),c(6,"i",29),r()()),n&2&&(t(3),d(l(4,1,"restart.title_restart")))}function ae(n,u){n&1&&(i(0,"div",2),c(1,"img",8),i(2,"h3",30),a(3),s(4,"translate"),r(),i(5,"p",31),a(6),s(7,"translate"),r(),i(8,"a",32),a(9),s(10,"translate"),r()()),n&2&&(t(3),d(l(4,3,"setup_wizard_message_complete_title")),t(3),d(l(7,5,"setup_wizard_message_complete_message")),t(3),d(l(10,7,"setup.open_dashboard")))}var ye=(()=>{class n{$api=g(K);$auth=g(Q);$modal=g(j);$settings=g(J);$title=g(E);$toastr=g(q);$translate=g(H);previousTitle;step="welcome";createUserForm=new O({username:new F("",[C.required]),password:new F("",[C.compose([C.required,C.minLength(4)])]),passwordConfirm:new F("",[C.required])},this.matchPassword);loading=!1;selectedFile;restoreUploading=!1;constructor(){}ngOnInit(){this.previousTitle=this.$title.getTitle(),this.$title.setTitle("Setup Homebridge")}matchPassword(e){let o=e.get("password").value,p=e.get("passwordConfirm").value;if(o!==p)e.get("passwordConfirm").setErrors({matchPassword:!0});else return null}ngOnDestroy(){this.$title.setTitle(this.previousTitle)}onClickGettingStarted(){this.step="create-account"}onClickRestoreBackup(){this.step="restore-backup"}onClickCancelRestore(){this.selectedFile=null,this.step="welcome"}createFirstUser(){this.loading=!0;let e=this.createUserForm.getRawValue();e.name=e.username,this.$api.post("/setup-wizard/create-first-user",e).subscribe({next:()=>w(this,null,function*(){this.$settings.env.setupWizardComplete=!0,yield this.$auth.login({username:e.username,password:e.password}),this.step="setup-complete"}),error:o=>{this.loading=!1,console.error(o),this.$toastr.error(o.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}handleRestoreFileInput(e){e.length?this.selectedFile=e[0]:delete this.selectedFile}onRestoreBackupClick(){this.restoreUploading=!0,this.uploadHomebridgeArchive()}uploadHomebridgeArchive(){return w(this,null,function*(){try{let e=yield S(this.$api.get("/setup-wizard/get-setup-wizard-token"));window.localStorage.setItem(I.jwt.tokenKey,e.access_token),this.$auth.token=e.access_token;let o=new FormData;o.append("restoreArchive",this.selectedFile,this.selectedFile.name),yield S(this.$api.post("/backup/restore",o)),this.openRestoreModal(),this.restoreUploading=!1}catch(e){this.restoreUploading=!1,console.error(e),this.$toastr.error(e.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}openRestoreModal(){let e=this.$modal.open(X,{size:"lg",backdrop:"static"});e.componentInstance.setupWizardRestore=!0,e.result.then(o=>{o===!0&&this.waitForHomebridgeToRestart()})}waitForHomebridgeToRestart(){return w(this,null,function*(){this.step="restarting",window.localStorage.removeItem(I.jwt.tokenKey),this.$auth.token=null,yield new Promise(o=>setTimeout(o,15e3));let e=setInterval(()=>w(this,null,function*(){try{yield S(this.$api.get("/auth/settings")),clearInterval(e),location.reload()}catch{}}),1e3)})}static \u0275fac=function(o){return new(o||n)};static \u0275cmp=T({type:n,selectors:[["ng-component"]],decls:7,vars:5,consts:[[1,"setup-container","d-flex","align-items-center","justify-content-center"],[1,"w-100","setup-card","d-flex","py-5"],[1,"w-100","d-flex","flex-column","align-items-center"],["src","/assets/homebridge-color-round.svg","alt","hb logo",1,"homebridge-logo","mx-auto"],[1,"pt-4","pb-3","text-center"],["type","button",1,"btn","btn-lg","btn-primary",3,"click"],[1,"mt-3"],["href","javascript:void(0)",1,"grey-text",3,"click"],["src","/assets/homebridge-color-round.svg","alt","hb logo",1,"homebridge-logo","homebridge-logo-small","mx-auto"],[1,"w-100"],["novalidate","",3,"ngSubmit","formGroup"],[1,"md-form"],[1,"fas","fa-fw","fa-user","prefix","grey-text"],["formControlName","username","type","text","id","form-username","autocomplete","username","autocapitalize","none","tabindex","1",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-username"],[1,"fas","fa-fw","fa-lock","prefix","grey-text"],["formControlName","password","type","password","id","form-pass","autocomplete","new-password","tabindex","2",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-pass"],["formControlName","passwordConfirm","type","password","id","form-pass-confirm","autocomplete","new-password","tabindex","2",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-pass-confirm"],[1,"w-100","text-center"],["type","submit",1,"btn","btn-primary",3,"disabled","ngClass"],[1,"button-loading-overlay","fas","fa-fw","fa-spinner","fa-pulse"],[1,"custom-file"],["type","file","id","restoreFileUpload","accept","application/gzip, .gz",1,"custom-file-input",3,"change"],["for","restoreFileUpload",1,"custom-file-label"],[1,"mt-3","w-100","d-flex","justify-content-between"],["type","button",1,"btn","btn-elegant","ml-0",3,"click","disabled"],["type","button",1,"btn","btn-primary","mr-0",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"pt-4","pb-3"],[1,"text-center"],["routerLink","/",1,"btn","btn-lg","btn-primary","mt-3"]],template:function(o,p){o&1&&(i(0,"div",0)(1,"div",1),z(2,ee,12,9,"div",2)(3,te,33,38,"div",2)(4,oe,20,16,"div",2)(5,re,7,3,"div",2)(6,ae,11,9,"div",2),r()()),o&2&&(t(2),f(p.step==="welcome"?2:-1),t(),f(p.step==="create-account"?3:-1),t(),f(p.step==="restore-backup"?4:-1),t(),f(p.step==="restarting"?5:-1),t(),f(p.step==="setup-complete"?6:-1))},dependencies:[D,R,M,P,V,G,W,N,B,L,A],styles:[".setup-container[_ngcontent-%COMP%]{background-size:cover;z-index:-1;padding-top:1em;padding-bottom:1em}@media screen and (min-height: 500px) and (min-width: 600px){.setup-container[_ngcontent-%COMP%]{padding-top:4em}}.setup-card[_ngcontent-%COMP%]{max-width:600px;border-radius:15px;background-color:#fff;padding-right:25px;padding-left:25px}.setup-card[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus{background-color:inherit!important}@media screen and (max-width: 600px){.setup-card[_ngcontent-%COMP%]{margin-left:1em;margin-right:1em}} body.dark-mode .setup-card{background-color:#2b2b2b;color:#fff}.homebridge-logo[_ngcontent-%COMP%]{margin-right:10px;height:200px}@media screen and (max-height: 500px){.homebridge-logo[_ngcontent-%COMP%]{height:100px}}@media screen and (max-width: 600px){.homebridge-logo[_ngcontent-%COMP%]{height:100px}}.homebridge-logo-small[_ngcontent-%COMP%]{height:50px}.button-loading[_ngcontent-%COMP%]{position:relative;color:#0000}.button-loading[_ngcontent-%COMP%] .button-loading-overlay[_ngcontent-%COMP%]{display:block;color:#fff}.button-loading-overlay[_ngcontent-%COMP%]{display:none;position:absolute;top:9px;left:0;right:0}small[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}"]})}return n})();export{ye as a};
1
+ import{b as X}from"./chunk-CIF6FZS4.js";import{n as j}from"./chunk-N4F42HDL.js";import{c as M,d as C,e as P,f as V,g as O,j as F,m as R,p as W,q as N,y as D,z as G}from"./chunk-YLEC7AUG.js";import{e as L}from"./chunk-T3GI7KUT.js";import{c as Q}from"./chunk-RY4JLM5Q.js";import{b as J}from"./chunk-IZVXTMWH.js";import{h as q,j as I,k as K}from"./chunk-73SS2RFT.js";import{l as E}from"./chunk-HA6CO5NZ.js";import{a as H,b as A}from"./chunk-675OFXLW.js";import{Bb as z,Cc as s,Dc as l,Mb as _,Rb as f,Wb as i,Xb as r,Yb as c,ac as y,bd as B,dc as b,ec as m,h as w,ib as t,na as g,oc as a,pc as d,qc as v,ub as T,w as S,xa as x,ya as h,yc as $,zc as k}from"./chunk-CKNHTRCL.js";var U=(n,u)=>({"is-valid":n,"is-invalid":u}),Z=n=>({"button-loading":n});function ee(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",3),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"button",5),b("click",function(){x(e);let p=m();return h(p.onClickGettingStarted())}),a(6),s(7,"translate"),r(),i(8,"small",6)(9,"a",7),b("click",function(){x(e);let p=m();return h(p.onClickRestoreBackup())}),a(10),s(11,"translate"),r()()()}n&2&&(t(3),d(l(4,3,"setup.welcome_to_homebridge")),t(3),v(" ",l(7,5,"setup.button_get_started")," "),t(4),d(l(11,7,"setup_wizard_message_restore")))}function te(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"div",9)(6,"p"),a(7),s(8,"translate"),r(),i(9,"form",10),b("ngSubmit",function(){x(e);let p=m();return h(p.createFirstUser())}),i(10,"div",11),c(11,"i",12)(12,"input",13),i(13,"label",14),a(14),s(15,"translate"),r()(),i(16,"div",11),c(17,"i",15)(18,"input",16),i(19,"label",17),a(20),s(21,"translate"),r()(),i(22,"div",11),c(23,"i",15)(24,"input",18),i(25,"label",19),a(26),s(27,"translate"),r()(),i(28,"div",20)(29,"button",21),a(30),s(31,"translate"),c(32,"i",22),r()()()()()}if(n&2){let e=m();t(3),d(l(4,15,"setup.create_account")),t(4),d(l(8,17,"setup.create_account_reason")),t(2),_("formGroup",e.createUserForm),t(3),_("readonly",e.loading)("ngClass",k(27,U,e.createUserForm.controls.username.dirty&&e.createUserForm.controls.username.valid,e.createUserForm.controls.username.dirty&&e.createUserForm.controls.username.invalid)),t(2),d(l(15,19,"users.label_username")),t(4),_("readonly",e.loading)("ngClass",k(30,U,e.createUserForm.controls.password.dirty&&e.createUserForm.controls.password.valid,e.createUserForm.controls.password.dirty&&e.createUserForm.controls.password.errors)),t(2),d(l(21,21,"users.label_password")),t(4),_("readonly",e.loading)("ngClass",k(33,U,e.createUserForm.controls.passwordConfirm.dirty&&e.createUserForm.controls.passwordConfirm.valid,e.createUserForm.controls.passwordConfirm.dirty&&e.createUserForm.controls.passwordConfirm.errors)),t(2),d(l(27,23,"users.label_confirm_password")),t(3),_("disabled",e.createUserForm.invalid||e.loading)("ngClass",$(36,Z,e.loading)),t(),v(" ",l(31,25,"setup.create_account")," ")}}function ie(n,u){n&1&&(i(0,"span"),c(1,"i",29),a(2),s(3,"translate"),r()),n&2&&(t(2),v(" ",l(3,1,"backup.label_uploading")," "))}function ne(n,u){n&1&&(a(0),s(1,"translate")),n&2&&v(" ",l(1,1,"backup.button_restore_backup")," ")}function oe(n,u){if(n&1){let e=y();i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"p"),a(6),s(7,"translate"),r(),i(8,"div",23)(9,"input",24),b("change",function(p){x(e);let Y=m();return h(Y.handleRestoreFileInput(p.target.files))}),r(),i(10,"label",25),a(11),s(12,"translate"),r()(),i(13,"div",26)(14,"button",27),b("click",function(){x(e);let p=m();return h(p.onClickCancelRestore())}),a(15),s(16,"translate"),r(),i(17,"button",28),b("click",function(){x(e);let p=m();return h(p.onRestoreBackupClick())}),z(18,ie,4,3,"span")(19,ne,2,3),r()()()}if(n&2){let e=m();t(3),d(l(4,8,"form.button_restore")),t(3),d(l(7,10,"backup.restore_help_one")),t(5),v(" ",l(12,12,(e.selectedFile==null?null:e.selectedFile.name)||"backup.label_choose_backup_file_to_restore")," "),t(3),_("disabled",e.restoreUploading),t(),v(" ",l(16,14,"form.button_cancel")," "),t(2),_("disabled",e.restoreUploading||!e.selectedFile),t(),f(e.restoreUploading?18:-1),t(),f(e.restoreUploading?-1:19)}}function re(n,u){n&1&&(i(0,"div",2),c(1,"img",8),i(2,"h3",4),a(3),s(4,"translate"),r(),i(5,"h1"),c(6,"i",29),r()()),n&2&&(t(3),d(l(4,1,"restart.title_restart")))}function ae(n,u){n&1&&(i(0,"div",2),c(1,"img",8),i(2,"h3",30),a(3),s(4,"translate"),r(),i(5,"p",31),a(6),s(7,"translate"),r(),i(8,"a",32),a(9),s(10,"translate"),r()()),n&2&&(t(3),d(l(4,3,"setup_wizard_message_complete_title")),t(3),d(l(7,5,"setup_wizard_message_complete_message")),t(3),d(l(10,7,"setup.open_dashboard")))}var ye=(()=>{class n{$api=g(K);$auth=g(Q);$modal=g(j);$settings=g(J);$title=g(E);$toastr=g(q);$translate=g(H);previousTitle;step="welcome";createUserForm=new O({username:new F("",[C.required]),password:new F("",[C.compose([C.required,C.minLength(4)])]),passwordConfirm:new F("",[C.required])},this.matchPassword);loading=!1;selectedFile;restoreUploading=!1;constructor(){}ngOnInit(){this.previousTitle=this.$title.getTitle(),this.$title.setTitle("Setup Homebridge")}matchPassword(e){let o=e.get("password").value,p=e.get("passwordConfirm").value;if(o!==p)e.get("passwordConfirm").setErrors({matchPassword:!0});else return null}ngOnDestroy(){this.$title.setTitle(this.previousTitle)}onClickGettingStarted(){this.step="create-account"}onClickRestoreBackup(){this.step="restore-backup"}onClickCancelRestore(){this.selectedFile=null,this.step="welcome"}createFirstUser(){this.loading=!0;let e=this.createUserForm.getRawValue();e.name=e.username,this.$api.post("/setup-wizard/create-first-user",e).subscribe({next:()=>w(this,null,function*(){this.$settings.env.setupWizardComplete=!0,yield this.$auth.login({username:e.username,password:e.password}),this.step="setup-complete"}),error:o=>{this.loading=!1,console.error(o),this.$toastr.error(o.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}handleRestoreFileInput(e){e.length?this.selectedFile=e[0]:delete this.selectedFile}onRestoreBackupClick(){this.restoreUploading=!0,this.uploadHomebridgeArchive()}uploadHomebridgeArchive(){return w(this,null,function*(){try{let e=yield S(this.$api.get("/setup-wizard/get-setup-wizard-token"));window.localStorage.setItem(I.jwt.tokenKey,e.access_token),this.$auth.token=e.access_token;let o=new FormData;o.append("restoreArchive",this.selectedFile,this.selectedFile.name),yield S(this.$api.post("/backup/restore",o)),this.openRestoreModal(),this.restoreUploading=!1}catch(e){this.restoreUploading=!1,console.error(e),this.$toastr.error(e.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}openRestoreModal(){let e=this.$modal.open(X,{size:"lg",backdrop:"static"});e.componentInstance.setupWizardRestore=!0,e.result.then(o=>{o===!0&&this.waitForHomebridgeToRestart()})}waitForHomebridgeToRestart(){return w(this,null,function*(){this.step="restarting",window.localStorage.removeItem(I.jwt.tokenKey),this.$auth.token=null,yield new Promise(o=>setTimeout(o,15e3));let e=setInterval(()=>w(this,null,function*(){try{yield S(this.$api.get("/auth/settings")),clearInterval(e),location.reload()}catch{}}),1e3)})}static \u0275fac=function(o){return new(o||n)};static \u0275cmp=T({type:n,selectors:[["ng-component"]],decls:7,vars:5,consts:[[1,"setup-container","d-flex","align-items-center","justify-content-center"],[1,"w-100","setup-card","d-flex","py-5"],[1,"w-100","d-flex","flex-column","align-items-center"],["src","/assets/homebridge-color-round.svg","alt","hb logo",1,"homebridge-logo","mx-auto"],[1,"pt-4","pb-3","text-center"],["type","button",1,"btn","btn-lg","btn-primary",3,"click"],[1,"mt-3"],["href","javascript:void(0)",1,"grey-text",3,"click"],["src","/assets/homebridge-color-round.svg","alt","hb logo",1,"homebridge-logo","homebridge-logo-small","mx-auto"],[1,"w-100"],["novalidate","",3,"ngSubmit","formGroup"],[1,"md-form"],[1,"fas","fa-fw","fa-user","prefix","grey-text"],["formControlName","username","type","text","id","form-username","autocomplete","username","autocapitalize","none","tabindex","1",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-username"],[1,"fas","fa-fw","fa-lock","prefix","grey-text"],["formControlName","password","type","password","id","form-pass","autocomplete","new-password","tabindex","2",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-pass"],["formControlName","passwordConfirm","type","password","id","form-pass-confirm","autocomplete","new-password","tabindex","2",1,"form-control","px-0",3,"readonly","ngClass"],["for","form-pass-confirm"],[1,"w-100","text-center"],["type","submit",1,"btn","btn-primary",3,"disabled","ngClass"],[1,"button-loading-overlay","fas","fa-fw","fa-spinner","fa-pulse"],[1,"custom-file"],["type","file","id","restoreFileUpload","accept","application/gzip, .gz",1,"custom-file-input",3,"change"],["for","restoreFileUpload",1,"custom-file-label"],[1,"mt-3","w-100","d-flex","justify-content-between"],["type","button",1,"btn","btn-elegant","ml-0",3,"click","disabled"],["type","button",1,"btn","btn-primary","mr-0",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"pt-4","pb-3"],[1,"text-center"],["routerLink","/",1,"btn","btn-lg","btn-primary","mt-3"]],template:function(o,p){o&1&&(i(0,"div",0)(1,"div",1),z(2,ee,12,9,"div",2)(3,te,33,38,"div",2)(4,oe,20,16,"div",2)(5,re,7,3,"div",2)(6,ae,11,9,"div",2),r()()),o&2&&(t(2),f(p.step==="welcome"?2:-1),t(),f(p.step==="create-account"?3:-1),t(),f(p.step==="restore-backup"?4:-1),t(),f(p.step==="restarting"?5:-1),t(),f(p.step==="setup-complete"?6:-1))},dependencies:[D,R,M,P,V,G,W,N,B,L,A],styles:[".setup-container[_ngcontent-%COMP%]{background-size:cover;z-index:-1;padding-top:1em;padding-bottom:1em}@media screen and (min-height: 500px) and (min-width: 600px){.setup-container[_ngcontent-%COMP%]{padding-top:4em}}.setup-card[_ngcontent-%COMP%]{max-width:600px;border-radius:15px;background-color:#fff;padding-right:25px;padding-left:25px}.setup-card[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus{background-color:inherit!important}@media screen and (max-width: 600px){.setup-card[_ngcontent-%COMP%]{margin-left:1em;margin-right:1em}} body.dark-mode .setup-card{background-color:#2b2b2b;color:#fff}.homebridge-logo[_ngcontent-%COMP%]{margin-right:10px;height:200px}@media screen and (max-height: 500px){.homebridge-logo[_ngcontent-%COMP%]{height:100px}}@media screen and (max-width: 600px){.homebridge-logo[_ngcontent-%COMP%]{height:100px}}.homebridge-logo-small[_ngcontent-%COMP%]{height:50px}.button-loading[_ngcontent-%COMP%]{position:relative;color:#0000}.button-loading[_ngcontent-%COMP%] .button-loading-overlay[_ngcontent-%COMP%]{display:block;color:#fff}.button-loading-overlay[_ngcontent-%COMP%]{display:none;position:absolute;top:9px;left:0;right:0}small[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}"]})}return n})();export{ye as a};
@@ -1,4 +1,4 @@
1
- import{a as ee}from"./chunk-XP7D2PRA.js";import{a as Z,b as ne}from"./chunk-YHPC3RGJ.js";import{a as W,b as Y}from"./chunk-NSCP3SOQ.js";import{a as X}from"./chunk-JF5AT3NK.js";import{m as J,n as K,o as U}from"./chunk-N4F42HDL.js";import{c as N,e as F,l as q,y as z}from"./chunk-YLEC7AUG.js";import{b as G}from"./chunk-T3GI7KUT.js";import{b as Q}from"./chunk-R6JQOHRF.js";import{h as M,k as V}from"./chunk-ODKW2LOF.js";import{a as k,b as T}from"./chunk-675OFXLW.js";import{Bb as y,Cc as s,Dc as d,Ec as O,Lb as C,Mb as v,Rb as m,Tb as I,Ub as j,Vb as H,Wb as r,Xb as a,Yb as w,ac as _,dc as h,ec as l,g as oe,h as S,ib as n,id as L,na as u,ob as A,oc as b,pc as x,qc as E,tc as R,ub as $,uc as P,vc as B,w as D,xa as f,ya as g}from"./chunk-CKNHTRCL.js";var ie=oe(ne(),1);function ae(o,p){o&1&&(r(0,"div",6),w(1,"i",13),a())}function se(o,p){if(o&1){let e=_();r(0,"li",18),b(1),s(2,"date"),r(3,"button",19),s(4,"translate"),h("click",function(){let t=f(e).$implicit,c=l(3);return g(c.restore(t.id))}),w(5,"i",20),a()()}if(o&2){let e=p.$implicit;n(),E(" ",O(2,2,e.timestamp,"medium")," "),n(2),C("aria-label",d(4,5,"config.restore.copy_to_editor"))}}function le(o,p){if(o&1&&(r(0,"ul",16),j(1,se,6,7,"li",18,I),a()),o&2){let e=l(2);n(),H(e.backupList)}}function de(o,p){o&1&&(r(0,"p",17),b(1),s(2,"translate"),a()),o&2&&(n(),x(d(2,1,"config.restore.no_backups")))}function ce(o,p){if(o&1&&(r(0,"div",14),w(1,"i",15),a(),r(2,"p",14),b(3),s(4,"translate"),a(),y(5,le,3,0,"ul",16)(6,de,3,3,"p",17)),o&2){let e=l();n(3),x(d(4,3,"config.restore.title_restore_homebridge_backup")),n(2),m(e.backupList&&e.backupList.length?5:-1),n(),m(!e.backupList||!e.backupList.length?6:-1)}}function me(o,p){if(o&1){let e=_();r(0,"button",21),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.$activeModal.dismiss("Dismiss"))}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function pe(o,p){if(o&1){let e=_();r(0,"button",21),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.$activeModal.dismiss("Dismiss"))}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function fe(o,p){if(o&1){let e=_();r(0,"button",22),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.deleteAllBackups())}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_remove")),n(2),E(" ",d(3,4,"form.button_remove")," "))}var te=(()=>{class o{$activeModal=u(J);$api=u(V);$toastr=u(M);$translate=u(k);loading=!0;backupList=[];constructor(){}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"))}})}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=$({type:o,selectors:[["ng-component"]],decls:19,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","data-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-right"],["type","button",1,"btn","btn-danger","mr-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","ml-3",3,"click"],[1,"fas","fa-fw","fa-arrow-right"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-danger","mr-auto",3,"click"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),b(3),s(4,"translate"),a(),r(5,"button",3),s(6,"translate"),h("click",function(){return t.$activeModal.dismiss("Dismiss")}),r(7,"span",4),b(8,"\xD7"),a()()(),r(9,"div",5),y(10,ae,2,0,"div",6)(11,ce,7,5),a(),r(12,"div",7)(13,"div",8),y(14,me,4,6,"button",9),a(),r(15,"div",10),y(16,pe,4,6,"button",9),a(),r(17,"div",11),y(18,fe,4,6,"button",12),a()()()),i&2&&(n(3),x(d(4,7,"form.button_restore")),n(2),C("aria-label",d(6,9,"form.button_close")),n(5),m(t.loading?10:-1),n(),m(t.loading?-1:11),n(3),m(!t.loading&&t.backupList.length?14:-1),n(2),m(t.loading||!t.loading&&!t.backupList.length?16:-1),n(2),m(!t.loading&&t.backupList.length?18:-1))},dependencies:[L,T],encapsulation:2})}return o})();function ge(o,p){if(o&1){let e=_();r(0,"button",13),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onExportConfig())}),w(3,"i",14),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_download")),C("aria-label",d(2,4,"form.button_download")))}function ue(o,p){if(o&1){let e=_();r(0,"button",15),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onCancelRestore())}),w(3,"i",16),a()}if(o&2){let e=l();v("disabled",e.saveInProgress)("ngbTooltip",d(1,3,"form.button_cancel")),C("aria-label",d(2,5,"form.button_cancel"))}}function he(o,p){if(o&1){let e=_();r(0,"button",13),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onRestore())}),w(3,"i",17),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_restore")),C("aria-label",d(2,4,"form.button_restore")))}function _e(o,p){o&1&&w(0,"i",8)}function be(o,p){o&1&&w(0,"i",9)}function Ce(o,p){if(o&1){let e=_();r(0,"ngx-monaco-editor",18),h("onInit",function(t){f(e);let c=l();return g(c.onEditorInit(t))})("keydown.control.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())})("keydown.meta.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("model",e.monacoEditorModel)}}function ye(o,p){if(o&1){let e=_();r(0,"ngx-monaco-diff-editor",19),h("onInit",function(t){f(e);let c=l();return g(c.onInitDiffEditor(t))})("keydown.control.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())})("keydown.meta.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function we(o,p){if(o&1){let e=_();r(0,"textarea",20),B("ngModelChange",function(t){f(e);let c=l();return P(c.homebridgeConfig,t)||(c.homebridgeConfig=t),g(t)}),b(1," "),a()}if(o&2){let e=l();R("ngModel",e.homebridgeConfig)}}var Ke=(()=>{class o{$api=u(V);$md=u(X);$modal=u(K);$monacoEditor=u(ee);$route=u(G);$renderer=u(A);$settings=u(Q);$toastr=u(M);$translate=u(k);homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;editorDecorations=[];lastHeight;visualViewPortEventCallback;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 S(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}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let i=ie.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),i}}saveConfig(e){return S(this,null,function*(){try{let i=yield D(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(i,null,4),this.$modal.open(Z,{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"))}})}onRestore(){this.$modal.open(te,{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=""}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(`
1
+ import{a as ee}from"./chunk-XP7D2PRA.js";import{a as Z,b as ne}from"./chunk-7GT27K3E.js";import{a as W,b as Y}from"./chunk-NSCP3SOQ.js";import{a as X}from"./chunk-JF5AT3NK.js";import{m as J,n as K,o as U}from"./chunk-N4F42HDL.js";import{c as N,e as F,l as q,y as z}from"./chunk-YLEC7AUG.js";import{b as G}from"./chunk-T3GI7KUT.js";import{b as Q}from"./chunk-IZVXTMWH.js";import{h as M,k as V}from"./chunk-73SS2RFT.js";import{a as k,b as T}from"./chunk-675OFXLW.js";import{Bb as y,Cc as s,Dc as d,Ec as O,Lb as C,Mb as v,Rb as m,Tb as I,Ub as j,Vb as H,Wb as r,Xb as a,Yb as w,ac as _,dc as h,ec as l,g as oe,h as S,ib as n,id as L,na as u,ob as A,oc as b,pc as x,qc as E,tc as R,ub as $,uc as P,vc as B,w as D,xa as f,ya as g}from"./chunk-CKNHTRCL.js";var ie=oe(ne(),1);function ae(o,p){o&1&&(r(0,"div",6),w(1,"i",13),a())}function se(o,p){if(o&1){let e=_();r(0,"li",18),b(1),s(2,"date"),r(3,"button",19),s(4,"translate"),h("click",function(){let t=f(e).$implicit,c=l(3);return g(c.restore(t.id))}),w(5,"i",20),a()()}if(o&2){let e=p.$implicit;n(),E(" ",O(2,2,e.timestamp,"medium")," "),n(2),C("aria-label",d(4,5,"config.restore.copy_to_editor"))}}function le(o,p){if(o&1&&(r(0,"ul",16),j(1,se,6,7,"li",18,I),a()),o&2){let e=l(2);n(),H(e.backupList)}}function de(o,p){o&1&&(r(0,"p",17),b(1),s(2,"translate"),a()),o&2&&(n(),x(d(2,1,"config.restore.no_backups")))}function ce(o,p){if(o&1&&(r(0,"div",14),w(1,"i",15),a(),r(2,"p",14),b(3),s(4,"translate"),a(),y(5,le,3,0,"ul",16)(6,de,3,3,"p",17)),o&2){let e=l();n(3),x(d(4,3,"config.restore.title_restore_homebridge_backup")),n(2),m(e.backupList&&e.backupList.length?5:-1),n(),m(!e.backupList||!e.backupList.length?6:-1)}}function me(o,p){if(o&1){let e=_();r(0,"button",21),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.$activeModal.dismiss("Dismiss"))}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function pe(o,p){if(o&1){let e=_();r(0,"button",21),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.$activeModal.dismiss("Dismiss"))}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_close")),n(2),E(" ",d(3,4,"form.button_close")," "))}function fe(o,p){if(o&1){let e=_();r(0,"button",22),s(1,"translate"),h("click",function(){f(e);let t=l();return g(t.deleteAllBackups())}),b(2),s(3,"translate"),a()}o&2&&(C("aria-label",d(1,2,"form.button_remove")),n(2),E(" ",d(3,4,"form.button_remove")," "))}var te=(()=>{class o{$activeModal=u(J);$api=u(V);$toastr=u(M);$translate=u(k);loading=!0;backupList=[];constructor(){}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"))}})}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=$({type:o,selectors:[["ng-component"]],decls:19,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","data-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-right"],["type","button",1,"btn","btn-danger","mr-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","ml-3",3,"click"],[1,"fas","fa-fw","fa-arrow-right"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-danger","mr-auto",3,"click"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),b(3),s(4,"translate"),a(),r(5,"button",3),s(6,"translate"),h("click",function(){return t.$activeModal.dismiss("Dismiss")}),r(7,"span",4),b(8,"\xD7"),a()()(),r(9,"div",5),y(10,ae,2,0,"div",6)(11,ce,7,5),a(),r(12,"div",7)(13,"div",8),y(14,me,4,6,"button",9),a(),r(15,"div",10),y(16,pe,4,6,"button",9),a(),r(17,"div",11),y(18,fe,4,6,"button",12),a()()()),i&2&&(n(3),x(d(4,7,"form.button_restore")),n(2),C("aria-label",d(6,9,"form.button_close")),n(5),m(t.loading?10:-1),n(),m(t.loading?-1:11),n(3),m(!t.loading&&t.backupList.length?14:-1),n(2),m(t.loading||!t.loading&&!t.backupList.length?16:-1),n(2),m(!t.loading&&t.backupList.length?18:-1))},dependencies:[L,T],encapsulation:2})}return o})();function ge(o,p){if(o&1){let e=_();r(0,"button",13),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onExportConfig())}),w(3,"i",14),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_download")),C("aria-label",d(2,4,"form.button_download")))}function ue(o,p){if(o&1){let e=_();r(0,"button",15),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onCancelRestore())}),w(3,"i",16),a()}if(o&2){let e=l();v("disabled",e.saveInProgress)("ngbTooltip",d(1,3,"form.button_cancel")),C("aria-label",d(2,5,"form.button_cancel"))}}function he(o,p){if(o&1){let e=_();r(0,"button",13),s(1,"translate"),s(2,"translate"),h("click",function(){f(e);let t=l();return g(t.onRestore())}),w(3,"i",17),a()}o&2&&(v("ngbTooltip",d(1,2,"form.button_restore")),C("aria-label",d(2,4,"form.button_restore")))}function _e(o,p){o&1&&w(0,"i",8)}function be(o,p){o&1&&w(0,"i",9)}function Ce(o,p){if(o&1){let e=_();r(0,"ngx-monaco-editor",18),h("onInit",function(t){f(e);let c=l();return g(c.onEditorInit(t))})("keydown.control.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())})("keydown.meta.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("model",e.monacoEditorModel)}}function ye(o,p){if(o&1){let e=_();r(0,"ngx-monaco-diff-editor",19),h("onInit",function(t){f(e);let c=l();return g(c.onInitDiffEditor(t))})("keydown.control.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())})("keydown.meta.s",function(t){f(e);let c=l();return t.preventDefault(),g(c.onSave())}),a()}if(o&2){let e=l();v("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function we(o,p){if(o&1){let e=_();r(0,"textarea",20),B("ngModelChange",function(t){f(e);let c=l();return P(c.homebridgeConfig,t)||(c.homebridgeConfig=t),g(t)}),b(1," "),a()}if(o&2){let e=l();R("ngModel",e.homebridgeConfig)}}var Ke=(()=>{class o{$api=u(V);$md=u(X);$modal=u(K);$monacoEditor=u(ee);$route=u(G);$renderer=u(A);$settings=u(Q);$toastr=u(M);$translate=u(k);homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;editorDecorations=[];lastHeight;visualViewPortEventCallback;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 S(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}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let i=ie.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),i}}saveConfig(e){return S(this,null,function*(){try{let i=yield D(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(i,null,4),this.$modal.open(Z,{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"))}})}onRestore(){this.$modal.open(te,{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=""}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
2
  `).map(i=>` ${i}`).join(`
3
3
  `),setTimeout(()=>{let i=this.monacoEditor.getModel().findMatches(e);if(i.length){let t=i[0].range,c=new monaco.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:c,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
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).
@@ -1 +1 @@
1
- import"./chunk-YQNNCBL2.js";import"./chunk-QMX4LXXW.js";import"./chunk-C2XBPNOQ.js";import"./chunk-7BCHGXO4.js";import"./chunk-R4IZLOZK.js";import{g as i}from"./chunk-T3GI7KUT.js";import"./chunk-AGIJNJRH.js";import"./chunk-R6JQOHRF.js";import"./chunk-ODKW2LOF.js";import"./chunk-HA6CO5NZ.js";import{c as m}from"./chunk-675OFXLW.js";import{ia as t,kd as n,vb as r}from"./chunk-CKNHTRCL.js";var u=[{path:"",loadComponent:()=>import("./chunk-ZSP4W7MW.js").then(o=>o.TerminalComponent)}],a=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[i.forChild(u),i]})}return o})();var T=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[n,a,m.forChild()]})}return o})();export{T as TerminalModule};
1
+ import"./chunk-AC3C235T.js";import"./chunk-DYAIZVQW.js";import"./chunk-C2XBPNOQ.js";import"./chunk-7BCHGXO4.js";import"./chunk-JTZVAPYW.js";import{g as i}from"./chunk-T3GI7KUT.js";import"./chunk-RY4JLM5Q.js";import"./chunk-IZVXTMWH.js";import"./chunk-73SS2RFT.js";import"./chunk-HA6CO5NZ.js";import{c as m}from"./chunk-675OFXLW.js";import{ia as t,kd as n,vb as r}from"./chunk-CKNHTRCL.js";var u=[{path:"",loadComponent:()=>import("./chunk-BBAREJCS.js").then(o=>o.TerminalComponent)}],a=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[i.forChild(u),i]})}return o})();var T=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[n,a,m.forChild()]})}return o})();export{T as TerminalModule};
@@ -0,0 +1 @@
1
+ import{d as a}from"./chunk-SC5UI2C5.js";import"./chunk-CIF6FZS4.js";import"./chunk-YE4T476I.js";import"./chunk-UE7ANWWM.js";import"./chunk-7GT27K3E.js";import"./chunk-NSCP3SOQ.js";import"./chunk-5KLZWFYX.js";import"./chunk-JF5AT3NK.js";import"./chunk-HYJNTVQ7.js";import"./chunk-C2XBPNOQ.js";import"./chunk-474BOAR2.js";import"./chunk-RP5TYXWG.js";import"./chunk-7BCHGXO4.js";import"./chunk-XFK2EZ3K.js";import"./chunk-EEDUUZ6J.js";import"./chunk-N4F42HDL.js";import"./chunk-YLEC7AUG.js";import"./chunk-JTZVAPYW.js";import"./chunk-T3GI7KUT.js";import"./chunk-RY4JLM5Q.js";import"./chunk-IZVXTMWH.js";import"./chunk-73SS2RFT.js";import"./chunk-HA6CO5NZ.js";import"./chunk-675OFXLW.js";import"./chunk-CKNHTRCL.js";export{a as SettingsComponent};
@@ -0,0 +1 @@
1
+ import"./chunk-SN2RLKY5.js";import"./chunk-HYJNTVQ7.js";import"./chunk-C2XBPNOQ.js";import"./chunk-RP5TYXWG.js";import"./chunk-7BCHGXO4.js";import"./chunk-EEDUUZ6J.js";import{q as n}from"./chunk-N4F42HDL.js";import"./chunk-YLEC7AUG.js";import"./chunk-JTZVAPYW.js";import{g as i}from"./chunk-T3GI7KUT.js";import"./chunk-RY4JLM5Q.js";import"./chunk-IZVXTMWH.js";import"./chunk-73SS2RFT.js";import"./chunk-HA6CO5NZ.js";import{c as s}from"./chunk-675OFXLW.js";import{ia as t,kd as m,vb as r}from"./chunk-CKNHTRCL.js";var f=[{path:"",loadComponent:()=>import("./chunk-SDH5ANWO.js").then(o=>o.LogsComponent)}],p=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[i.forChild(f),i]})}return o})();var h=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=r({type:o});static \u0275inj=t({imports:[m,p,n,s.forChild()]})}return o})();export{h as LogsModule};