homebridge-config-ui-x 5.0.0-beta.83 → 5.0.0-beta.85

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 (101) hide show
  1. package/CHANGELOG.md +6 -3
  2. package/config.schema.json +2 -25
  3. package/dist/core/auth/auth.controller.d.ts +6 -0
  4. package/dist/core/config/config.service.d.ts +9 -1
  5. package/dist/core/config/config.service.js +9 -0
  6. package/dist/core/config/config.service.js.map +1 -1
  7. package/dist/modules/config-editor/config-editor.service.js +22 -3
  8. package/dist/modules/config-editor/config-editor.service.js.map +1 -1
  9. package/package.json +2 -2
  10. package/public/3rdpartylicenses.txt +73 -73
  11. package/public/chunk-24QS6PYT.js +1 -0
  12. package/public/{chunk-SNBPXFEO.js → chunk-2WKK6ARR.js} +1 -1
  13. package/public/chunk-376UJFUA.js +1 -0
  14. package/public/{chunk-C4QRAQSJ.js → chunk-42VQANT2.js} +1 -1
  15. package/public/{chunk-MNELPLS5.js → chunk-4QTZYQ6T.js} +1 -1
  16. package/public/{chunk-JP2NFMS4.js → chunk-4XFWWAJ4.js} +1 -1
  17. package/public/{chunk-ULPRCO7R.js → chunk-5YXFSRA5.js} +1 -1
  18. package/public/chunk-63XU2JWE.js +1 -0
  19. package/public/{chunk-6D2SLGFZ.js → chunk-6GBXVGU5.js} +1 -1
  20. package/public/{chunk-TGIRM25Z.js → chunk-6M3B2A6W.js} +1 -1
  21. package/public/chunk-7J7USUIJ.js +1 -0
  22. package/public/{chunk-AJQUKLU3.js → chunk-AGTYR7WQ.js} +1 -1
  23. package/public/chunk-AVHYOINC.js +1 -0
  24. package/public/{chunk-Q5RYRVUD.js → chunk-AZ54ZXXV.js} +1 -1
  25. package/public/chunk-B7F5OX77.js +1 -0
  26. package/public/chunk-BF5IEMO6.js +1 -0
  27. package/public/{chunk-SNFXTEKD.js → chunk-BQDKGMLA.js} +1 -1
  28. package/public/{chunk-D2C4VO6I.js → chunk-C5TKGBKB.js} +1 -1
  29. package/public/{chunk-ZCQORJII.js → chunk-C6HZSMVO.js} +1 -1
  30. package/public/chunk-CKRRUOFS.js +1 -0
  31. package/public/{chunk-5RWRLJGO.js → chunk-DAJGSOQC.js} +1 -1
  32. package/public/{chunk-P5DRV4DP.js → chunk-DSBAEBB7.js} +6 -6
  33. package/public/chunk-EQADUDRZ.js +1 -0
  34. package/public/chunk-EQJBK52D.js +1 -0
  35. package/public/chunk-FUB2KHWK.js +1 -0
  36. package/public/{chunk-CXFG3533.js → chunk-FZVC727I.js} +1 -1
  37. package/public/chunk-G2MXKZYU.js +1 -0
  38. package/public/chunk-GENBE57P.js +1 -0
  39. package/public/{chunk-VWFNI4EY.js → chunk-K2IL74WZ.js} +1 -1
  40. package/public/{chunk-EJL6YYO3.js → chunk-KK3SNXYW.js} +1 -1
  41. package/public/chunk-LJMLBBPB.js +8 -0
  42. package/public/{chunk-XNGPLRXA.js → chunk-LTWHVB77.js} +1 -1
  43. package/public/{chunk-SVS57UOL.js → chunk-NU4R5KT7.js} +1 -1
  44. package/public/chunk-O46Q72DM.js +2 -0
  45. package/public/chunk-ODQDNBE4.js +1 -0
  46. package/public/{chunk-VSADCCFT.js → chunk-OTCJ3YHG.js} +1 -1
  47. package/public/{chunk-NM3WKULU.js → chunk-OUBWSG2W.js} +1 -1
  48. package/public/{chunk-HXGTVATK.js → chunk-OVDCQNQ5.js} +1 -1
  49. package/public/{chunk-X6DNUVKQ.js → chunk-P5ZECO3N.js} +1 -1
  50. package/public/{chunk-PQBALXEW.js → chunk-QEXWLZC6.js} +1 -1
  51. package/public/chunk-QM3T6YVW.js +5 -0
  52. package/public/{chunk-ZLN7B6FX.js → chunk-QTHLHDP5.js} +1 -1
  53. package/public/chunk-RFPPGGHA.js +1 -0
  54. package/public/chunk-RMSSFTEE.js +1 -0
  55. package/public/{chunk-26HISXX2.js → chunk-RZEQRBTO.js} +1 -1
  56. package/public/{chunk-ZWEOGU6R.js → chunk-SNIZAXGZ.js} +1 -1
  57. package/public/{chunk-JOOCOIZ5.js → chunk-SRXI33JX.js} +1 -1
  58. package/public/{chunk-LJHC4K5I.js → chunk-TIUV7RQV.js} +1 -1
  59. package/public/{chunk-LKMCOPAV.js → chunk-TZOTF4ED.js} +1 -1
  60. package/public/chunk-UI2DW3PK.js +1 -0
  61. package/public/{chunk-GQ3TEIMF.js → chunk-UIWDTMG6.js} +1 -1
  62. package/public/{chunk-WOOQ2PNV.js → chunk-UOATK6CE.js} +5 -5
  63. package/public/chunk-V7FJKACX.js +1 -0
  64. package/public/chunk-WGVZ6Z6Q.js +1 -0
  65. package/public/{chunk-CB7YI2ZT.js → chunk-WRUEUSNK.js} +1 -1
  66. package/public/{chunk-FIPAZ64I.js → chunk-XGZRFWAS.js} +1 -1
  67. package/public/chunk-YVAP4ROT.js +1 -0
  68. package/public/chunk-Z5C3N2IZ.js +1 -0
  69. package/public/chunk-ZKW667UJ.js +1 -0
  70. package/public/index.html +2 -2
  71. package/public/main-6S3C7XRY.js +1 -0
  72. package/public/{styles-PGYQLREL.css → styles-PKR3EGHP.css} +1 -1
  73. package/public/chunk-3AAYJF3N.js +0 -1
  74. package/public/chunk-3XNLIEKF.js +0 -1
  75. package/public/chunk-4SE23PZF.js +0 -1
  76. package/public/chunk-4TRU4WZI.js +0 -1
  77. package/public/chunk-6NC57D6C.js +0 -1
  78. package/public/chunk-77GWB2NW.js +0 -1
  79. package/public/chunk-AX4LZFCW.js +0 -1
  80. package/public/chunk-BWCJIW4P.js +0 -1
  81. package/public/chunk-CNLD3YXH.js +0 -1
  82. package/public/chunk-CX2DFQ7S.js +0 -1
  83. package/public/chunk-D7DLTIMD.js +0 -1
  84. package/public/chunk-DDXD3GQM.js +0 -1
  85. package/public/chunk-DUUEFBY6.js +0 -1
  86. package/public/chunk-EQKPU3TN.js +0 -1
  87. package/public/chunk-FUPIQGBX.js +0 -1
  88. package/public/chunk-GNSVASLB.js +0 -1
  89. package/public/chunk-ILJGMB2B.js +0 -1
  90. package/public/chunk-JQ3UOMSL.js +0 -1
  91. package/public/chunk-KCD74P4O.js +0 -8
  92. package/public/chunk-KMM3IQQX.js +0 -1
  93. package/public/chunk-O3LVR5HE.js +0 -1
  94. package/public/chunk-O73DV5QX.js +0 -1
  95. package/public/chunk-SAF5NKIC.js +0 -1
  96. package/public/chunk-T5EBOZW7.js +0 -1
  97. package/public/chunk-T652ZDED.js +0 -1
  98. package/public/chunk-UOEYZIC7.js +0 -1
  99. package/public/chunk-VQK7REQ4.js +0 -1
  100. package/public/chunk-YGCUY3MR.js +0 -5
  101. package/public/main-VH2USQCZ.js +0 -1
@@ -1,4 +1,4 @@
1
- import{a as pu,b as eb}from"./chunk-SHW4IV7S.js";import{a as A1}from"./chunk-XJY7A24W.js";import{a as en,b as tn}from"./chunk-TIE2WSHM.js";import{a as O1}from"./chunk-6SEBWKRM.js";import{a as j1}from"./chunk-KCD74P4O.js";import{a as M1}from"./chunk-ZCCLGLMW.js";import{a as of}from"./chunk-77GWB2NW.js";import{a as $1,b as T1}from"./chunk-P5DRV4DP.js";import{a as Yr}from"./chunk-HHPGR3HF.js";import{a as P1}from"./chunk-6M524CF7.js";import{a as Ur,b as Wr,c as Gr,d as Kr,e as Jr,f as Xr,g as du,m as ve,n as it,o as Qi}from"./chunk-OHFVMRCL.js";import{A as ss,a as y1,b as Ji,c as Xi,e as vt,f as v1,h as B1,i as x1,k as w1,l as Zu,m as S1,o as Yi,r as Zi,s as Bi,t as xi,y as I1,z as tu}from"./chunk-MMYB2ZMV.js";import{a as ei}from"./chunk-LJHC4K5I.js";import{d as cu}from"./chunk-QY7HUYL5.js";import{a as k1}from"./chunk-SNBPXFEO.js";import{b as ze}from"./chunk-3AAYJF3N.js";import{h as _e,j as Qu,k as he}from"./chunk-CX2DFQ7S.js";import{e as _1}from"./chunk-R3JWGCC5.js";import{a as Ee,b as Be}from"./chunk-KPKQNEWS.js";import{$a as l,Ac as y,Bc as B,Ca as Uu,Cc as je,D as r1,Da as D1,Fa as Wu,Gb as K,Hb as x,Ib as w,Jc as gt,Kb as nt,Kc as U,Lb as ft,Lc as Yu,M as Vr,Mb as rt,Nb as b,Nc as g1,Ob as c,Pb as p,Qb as S,Rb as p1,Sb as m1,Ub as H,Xa as de,Xb as O,Yb as h,Z as fs,_a as l1,a as X,aa as rf,ac as rs,b as Se,bc as os,bd as zt,cc as as,cd as vi,dc as Gu,dd as bt,e as F,eb as Lr,ec as Ku,fa as o1,fb as vu,g as Le,ga as Ot,gc as Qt,gd as b1,h as G,ha as Wi,hb as yi,hc as Ju,ic as Z,ja as a1,jc as E,k as u1,ka as s1,kc as L,kd as Hr,la as I,lb as Y,lc as q,mb as Gi,mc as xu,n as Pt,nb as Bu,nc as F1,o as ns,ob as d1,q as i1,qc as Pe,ra as j,rb as ce,rc as Oe,sa as N,sc as Me,sd as E1,tb as c1,tc as C1,ub as zr,uc as h1,v as n1,vc as ke,w as ae,wc as eu,x as f1,xc as Xu,yc as wu,za as Rr,zc as Ki}from"./chunk-QSPBB6EE.js";var Df=F(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.regexpCode=be.getEsmExportName=be.getProperty=be.safeStringify=be.stringify=be.strConcat=be.addCodeArg=be.str=be._=be.nil=be._Code=be.Name=be.IDENTIFIER=be._CodeOrName=void 0;var af=class{};be._CodeOrName=af;be.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var wi=class extends af{constructor(u){if(super(),!be.IDENTIFIER.test(u))throw new Error("CodeGen: name must be a valid identifier");this.str=u}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};be.Name=wi;var Ht=class extends af{constructor(u){super(),this._items=typeof u=="string"?[u]:u}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let u=this._items[0];return u===""||u==='""'}get str(){var u;return(u=this._str)!==null&&u!==void 0?u:this._str=this._items.reduce((t,i)=>`${t}${i}`,"")}get names(){var u;return(u=this._names)!==null&&u!==void 0?u:this._names=this._items.reduce((t,i)=>(i instanceof wi&&(t[i.str]=(t[i.str]||0)+1),t),{})}};be._Code=Ht;be.nil=new Ht("");function N1(e,...u){let t=[e[0]],i=0;for(;i<u.length;)ls(t,u[i]),t.push(e[++i]);return new Ht(t)}be._=N1;var Ds=new Ht("+");function q1(e,...u){let t=[sf(e[0])],i=0;for(;i<u.length;)t.push(Ds),ls(t,u[i]),t.push(Ds,sf(e[++i]));return ub(t),new Ht(t)}be.str=q1;function ls(e,u){u instanceof Ht?e.push(...u._items):u instanceof wi?e.push(u):e.push(fb(u))}be.addCodeArg=ls;function ub(e){let u=1;for(;u<e.length-1;){if(e[u]===Ds){let t=ib(e[u-1],e[u+1]);if(t!==void 0){e.splice(u-1,3,t);continue}e[u++]="+"}u++}}function ib(e,u){if(u==='""')return e;if(e==='""')return u;if(typeof e=="string")return u instanceof wi||e[e.length-1]!=='"'?void 0:typeof u!="string"?`${e.slice(0,-1)}${u}"`:u[0]==='"'?e.slice(0,-1)+u.slice(1):void 0;if(typeof u=="string"&&u[0]==='"'&&!(e instanceof wi))return`"${e}${u.slice(1)}`}function nb(e,u){return u.emptyStr()?e:e.emptyStr()?u:q1`${e}${u}`}be.strConcat=nb;function fb(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:sf(Array.isArray(e)?e.join(","):e)}function rb(e){return new Ht(sf(e))}be.stringify=rb;function sf(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}be.safeStringify=sf;function ob(e){return typeof e=="string"&&be.IDENTIFIER.test(e)?new Ht(`.${e}`):N1`[${e}]`}be.getProperty=ob;function ab(e){if(typeof e=="string"&&be.IDENTIFIER.test(e))return new Ht(`${e}`);throw new Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}be.getEsmExportName=ab;function sb(e){return new Ht(e.toString())}be.regexpCode=sb});var ps=F(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.ValueScope=xt.ValueScopeName=xt.Scope=xt.varKinds=xt.UsedValueState=void 0;var Bt=Df(),ds=class extends Error{constructor(u){super(`CodeGen: "code" for ${u} not defined`),this.value=u.value}},Zr=function(e){return e[e.Started=0]="Started",e[e.Completed=1]="Completed",e}(Zr||(xt.UsedValueState=Zr={}));xt.varKinds={const:new Bt.Name("const"),let:new Bt.Name("let"),var:new Bt.Name("var")};var Qr=class{constructor({prefixes:u,parent:t}={}){this._names={},this._prefixes=u,this._parent=t}toName(u){return u instanceof Bt.Name?u:this.name(u)}name(u){return new Bt.Name(this._newName(u))}_newName(u){let t=this._names[u]||this._nameGroup(u);return`${u}${t.index++}`}_nameGroup(u){var t,i;if(!((i=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||i===void 0)&&i.has(u)||this._prefixes&&!this._prefixes.has(u))throw new Error(`CodeGen: prefix "${u}" is not allowed in this scope`);return this._names[u]={prefix:u,index:0}}};xt.Scope=Qr;var eo=class extends Bt.Name{constructor(u,t){super(t),this.prefix=u}setValue(u,{property:t,itemIndex:i}){this.value=u,this.scopePath=(0,Bt._)`.${new Bt.Name(t)}[${i}]`}};xt.ValueScopeName=eo;var Db=(0,Bt._)`\n`,cs=class extends Qr{constructor(u){super(u),this._values={},this._scope=u.scope,this.opts=Se(X({},u),{_n:u.lines?Db:Bt.nil})}get(){return this._scope}name(u){return new eo(u,this._newName(u))}value(u,t){var i;if(t.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let n=this.toName(u),{prefix:f}=n,r=(i=t.key)!==null&&i!==void 0?i:t.ref,o=this._values[f];if(o){let D=o.get(r);if(D)return D}else o=this._values[f]=new Map;o.set(r,n);let a=this._scope[f]||(this._scope[f]=[]),s=a.length;return a[s]=t.ref,n.setValue(t,{property:f,itemIndex:s}),n}getValue(u,t){let i=this._values[u];if(i)return i.get(t)}scopeRefs(u,t=this._values){return this._reduceValues(t,i=>{if(i.scopePath===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return(0,Bt._)`${u}${i.scopePath}`})}scopeCode(u=this._values,t,i){return this._reduceValues(u,n=>{if(n.value===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return n.value.code},t,i)}_reduceValues(u,t,i={},n){let f=Bt.nil;for(let r in u){let o=u[r];if(!o)continue;let a=i[r]=i[r]||new Map;o.forEach(s=>{if(a.has(s))return;a.set(s,Zr.Started);let D=t(s);if(D){let d=this.opts.es5?xt.varKinds.var:xt.varKinds.const;f=(0,Bt._)`${f}${d} ${s} = ${D};${this.opts._n}`}else if(D=n?.(s))f=(0,Bt._)`${f}${D}${this.opts._n}`;else throw new ds(s);a.set(s,Zr.Completed)})}return f}};xt.ValueScope=cs});var ee=F(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.or=se.and=se.not=se.CodeGen=se.operators=se.varKinds=se.ValueScopeName=se.ValueScope=se.Scope=se.Name=se.regexpCode=se.stringify=se.getProperty=se.nil=se.strConcat=se.str=se._=void 0;var Fe=Df(),uu=ps(),ti=Df();Object.defineProperty(se,"_",{enumerable:!0,get:function(){return ti._}});Object.defineProperty(se,"str",{enumerable:!0,get:function(){return ti.str}});Object.defineProperty(se,"strConcat",{enumerable:!0,get:function(){return ti.strConcat}});Object.defineProperty(se,"nil",{enumerable:!0,get:function(){return ti.nil}});Object.defineProperty(se,"getProperty",{enumerable:!0,get:function(){return ti.getProperty}});Object.defineProperty(se,"stringify",{enumerable:!0,get:function(){return ti.stringify}});Object.defineProperty(se,"regexpCode",{enumerable:!0,get:function(){return ti.regexpCode}});Object.defineProperty(se,"Name",{enumerable:!0,get:function(){return ti.Name}});var fo=ps();Object.defineProperty(se,"Scope",{enumerable:!0,get:function(){return fo.Scope}});Object.defineProperty(se,"ValueScope",{enumerable:!0,get:function(){return fo.ValueScope}});Object.defineProperty(se,"ValueScopeName",{enumerable:!0,get:function(){return fo.ValueScopeName}});Object.defineProperty(se,"varKinds",{enumerable:!0,get:function(){return fo.varKinds}});se.operators={GT:new Fe._Code(">"),GTE:new Fe._Code(">="),LT:new Fe._Code("<"),LTE:new Fe._Code("<="),EQ:new Fe._Code("==="),NEQ:new Fe._Code("!=="),NOT:new Fe._Code("!"),OR:new Fe._Code("||"),AND:new Fe._Code("&&"),ADD:new Fe._Code("+")};var Su=class{optimizeNodes(){return this}optimizeNames(u,t){return this}},ms=class extends Su{constructor(u,t,i){super(),this.varKind=u,this.name=t,this.rhs=i}render({es5:u,_n:t}){let i=u?uu.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+t}optimizeNames(u,t){if(u[this.name.str])return this.rhs&&(this.rhs=nn(this.rhs,u,t)),this}get names(){return this.rhs instanceof Fe._CodeOrName?this.rhs.names:{}}},uo=class extends Su{constructor(u,t,i){super(),this.lhs=u,this.rhs=t,this.sideEffects=i}render({_n:u}){return`${this.lhs} = ${this.rhs};`+u}optimizeNames(u,t){if(!(this.lhs instanceof Fe.Name&&!u[this.lhs.str]&&!this.sideEffects))return this.rhs=nn(this.rhs,u,t),this}get names(){let u=this.lhs instanceof Fe.Name?{}:X({},this.lhs.names);return no(u,this.rhs)}},Fs=class extends uo{constructor(u,t,i,n){super(u,i,n),this.op=t}render({_n:u}){return`${this.lhs} ${this.op}= ${this.rhs};`+u}},Cs=class extends Su{constructor(u){super(),this.label=u,this.names={}}render({_n:u}){return`${this.label}:`+u}},hs=class extends Su{constructor(u){super(),this.label=u,this.names={}}render({_n:u}){return`break${this.label?` ${this.label}`:""};`+u}},gs=class extends Su{constructor(u){super(),this.error=u}render({_n:u}){return`throw ${this.error};`+u}get names(){return this.error.names}},bs=class extends Su{constructor(u){super(),this.code=u}render({_n:u}){return`${this.code};`+u}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(u,t){return this.code=nn(this.code,u,t),this}get names(){return this.code instanceof Fe._CodeOrName?this.code.names:{}}},lf=class extends Su{constructor(u=[]){super(),this.nodes=u}render(u){return this.nodes.reduce((t,i)=>t+i.render(u),"")}optimizeNodes(){let{nodes:u}=this,t=u.length;for(;t--;){let i=u[t].optimizeNodes();Array.isArray(i)?u.splice(t,1,...i):i?u[t]=i:u.splice(t,1)}return u.length>0?this:void 0}optimizeNames(u,t){let{nodes:i}=this,n=i.length;for(;n--;){let f=i[n];f.optimizeNames(u,t)||(lb(u,f.names),i.splice(n,1))}return i.length>0?this:void 0}get names(){return this.nodes.reduce((u,t)=>Si(u,t.names),{})}},Iu=class extends lf{render(u){return"{"+u._n+super.render(u)+"}"+u._n}},Es=class extends lf{},_s=(()=>{class e extends Iu{}return e.kind="else",e})(),to=(()=>{class e extends Iu{constructor(t,i){super(i),this.condition=t}render(t){let i=`if(${this.condition})`+super.render(t);return this.else&&(i+="else "+this.else.render(t)),i}optimizeNodes(){super.optimizeNodes();let t=this.condition;if(t===!0)return this.nodes;let i=this.else;if(i){let n=i.optimizeNodes();i=this.else=Array.isArray(n)?new _s(n):n}if(i)return t===!1?i instanceof e?i:i.nodes:this.nodes.length?this:new e(H1(t),i instanceof e?[i]:i.nodes);if(!(t===!1||!this.nodes.length))return this}optimizeNames(t,i){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(t,i),!!(super.optimizeNames(t,i)||this.else))return this.condition=nn(this.condition,t,i),this}get names(){let t=super.names;return no(t,this.condition),this.else&&Si(t,this.else.names),t}}return e.kind="if",e})(),ro=(()=>{class e extends Iu{}return e.kind="for",e})(),ys=class extends ro{constructor(u){super(),this.iteration=u}render(u){return`for(${this.iteration})`+super.render(u)}optimizeNames(u,t){if(super.optimizeNames(u,t))return this.iteration=nn(this.iteration,u,t),this}get names(){return Si(super.names,this.iteration.names)}},vs=class extends ro{constructor(u,t,i,n){super(),this.varKind=u,this.name=t,this.from=i,this.to=n}render(u){let t=u.es5?uu.varKinds.var:this.varKind,{name:i,from:n,to:f}=this;return`for(${t} ${i}=${n}; ${i}<${f}; ${i}++)`+super.render(u)}get names(){let u=no(super.names,this.from);return no(u,this.to)}},io=class extends ro{constructor(u,t,i,n){super(),this.loop=u,this.varKind=t,this.name=i,this.iterable=n}render(u){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(u)}optimizeNames(u,t){if(super.optimizeNames(u,t))return this.iterable=nn(this.iterable,u,t),this}get names(){return Si(super.names,this.iterable.names)}},V1=(()=>{class e extends Iu{constructor(t,i,n){super(),this.name=t,this.args=i,this.async=n}render(t){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(t)}}return e.kind="func",e})(),R1=(()=>{class e extends lf{render(t){return"return "+super.render(t)}}return e.kind="return",e})(),Bs=class extends Iu{render(u){let t="try"+super.render(u);return this.catch&&(t+=this.catch.render(u)),this.finally&&(t+=this.finally.render(u)),t}optimizeNodes(){var u,t;return super.optimizeNodes(),(u=this.catch)===null||u===void 0||u.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(u,t){var i,n;return super.optimizeNames(u,t),(i=this.catch)===null||i===void 0||i.optimizeNames(u,t),(n=this.finally)===null||n===void 0||n.optimizeNames(u,t),this}get names(){let u=super.names;return this.catch&&Si(u,this.catch.names),this.finally&&Si(u,this.finally.names),u}},L1=(()=>{class e extends Iu{constructor(t){super(),this.error=t}render(t){return`catch(${this.error})`+super.render(t)}}return e.kind="catch",e})(),z1=(()=>{class e extends Iu{render(t){return"finally"+super.render(t)}}return e.kind="finally",e})(),xs=class{constructor(u,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts=Se(X({},t),{_n:t.lines?`
1
+ import{a as pu,b as eb}from"./chunk-SHW4IV7S.js";import{a as A1}from"./chunk-XJY7A24W.js";import{a as en,b as tn}from"./chunk-TIE2WSHM.js";import{a as T1}from"./chunk-6SEBWKRM.js";import{a as j1,b as of}from"./chunk-LJMLBBPB.js";import{a as O1,b as M1}from"./chunk-DSBAEBB7.js";import{a as P1}from"./chunk-ZCCLGLMW.js";import{a as Yr}from"./chunk-HHPGR3HF.js";import{a as $1}from"./chunk-6M524CF7.js";import{a as Ur,b as Wr,c as Gr,d as Kr,e as Jr,f as Xr,g as du,m as ve,n as it,o as Qi}from"./chunk-OHFVMRCL.js";import{A as ss,a as y1,b as Ji,c as Xi,e as vt,f as v1,h as B1,i as x1,k as w1,l as Zu,m as S1,o as Yi,r as Zi,s as Bi,t as xi,y as I1,z as tu}from"./chunk-MMYB2ZMV.js";import{d as cu}from"./chunk-QY7HUYL5.js";import{a as ei}from"./chunk-TIUV7RQV.js";import{a as k1}from"./chunk-2WKK6ARR.js";import{b as ze}from"./chunk-ODQDNBE4.js";import{h as _e,j as Qu,k as he}from"./chunk-B7F5OX77.js";import{e as _1}from"./chunk-R3JWGCC5.js";import{a as Ee,b as Be}from"./chunk-KPKQNEWS.js";import{$a as l,Ac as y,Bc as B,Ca as Uu,Cc as je,D as r1,Da as D1,Fa as Wu,Gb as K,Hb as x,Ib as w,Jc as gt,Kb as nt,Kc as U,Lb as ft,Lc as Yu,M as Vr,Mb as rt,Nb as b,Nc as g1,Ob as c,Pb as p,Qb as S,Rb as p1,Sb as m1,Ub as H,Xa as de,Xb as O,Yb as h,Z as fs,_a as l1,a as X,aa as rf,ac as rs,b as Se,bc as os,bd as zt,cc as as,cd as vi,dc as Gu,dd as bt,e as F,eb as Lr,ec as Ku,fa as o1,fb as vu,g as Le,ga as Ot,gc as Qt,gd as b1,h as G,ha as Wi,hb as yi,hc as Ju,ic as Z,ja as a1,jc as E,k as u1,ka as s1,kc as L,kd as Hr,la as I,lb as Y,lc as q,mb as Gi,mc as xu,n as Pt,nb as Bu,nc as F1,o as ns,ob as d1,q as i1,qc as Pe,ra as j,rb as ce,rc as Oe,sa as N,sc as Me,sd as E1,tb as c1,tc as C1,ub as zr,uc as h1,v as n1,vc as ke,w as ae,wc as eu,x as f1,xc as Xu,yc as wu,za as Rr,zc as Ki}from"./chunk-QSPBB6EE.js";var Df=F(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.regexpCode=be.getEsmExportName=be.getProperty=be.safeStringify=be.stringify=be.strConcat=be.addCodeArg=be.str=be._=be.nil=be._Code=be.Name=be.IDENTIFIER=be._CodeOrName=void 0;var af=class{};be._CodeOrName=af;be.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var wi=class extends af{constructor(u){if(super(),!be.IDENTIFIER.test(u))throw new Error("CodeGen: name must be a valid identifier");this.str=u}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};be.Name=wi;var Ht=class extends af{constructor(u){super(),this._items=typeof u=="string"?[u]:u}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let u=this._items[0];return u===""||u==='""'}get str(){var u;return(u=this._str)!==null&&u!==void 0?u:this._str=this._items.reduce((t,i)=>`${t}${i}`,"")}get names(){var u;return(u=this._names)!==null&&u!==void 0?u:this._names=this._items.reduce((t,i)=>(i instanceof wi&&(t[i.str]=(t[i.str]||0)+1),t),{})}};be._Code=Ht;be.nil=new Ht("");function N1(e,...u){let t=[e[0]],i=0;for(;i<u.length;)ls(t,u[i]),t.push(e[++i]);return new Ht(t)}be._=N1;var Ds=new Ht("+");function q1(e,...u){let t=[sf(e[0])],i=0;for(;i<u.length;)t.push(Ds),ls(t,u[i]),t.push(Ds,sf(e[++i]));return ub(t),new Ht(t)}be.str=q1;function ls(e,u){u instanceof Ht?e.push(...u._items):u instanceof wi?e.push(u):e.push(fb(u))}be.addCodeArg=ls;function ub(e){let u=1;for(;u<e.length-1;){if(e[u]===Ds){let t=ib(e[u-1],e[u+1]);if(t!==void 0){e.splice(u-1,3,t);continue}e[u++]="+"}u++}}function ib(e,u){if(u==='""')return e;if(e==='""')return u;if(typeof e=="string")return u instanceof wi||e[e.length-1]!=='"'?void 0:typeof u!="string"?`${e.slice(0,-1)}${u}"`:u[0]==='"'?e.slice(0,-1)+u.slice(1):void 0;if(typeof u=="string"&&u[0]==='"'&&!(e instanceof wi))return`"${e}${u.slice(1)}`}function nb(e,u){return u.emptyStr()?e:e.emptyStr()?u:q1`${e}${u}`}be.strConcat=nb;function fb(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:sf(Array.isArray(e)?e.join(","):e)}function rb(e){return new Ht(sf(e))}be.stringify=rb;function sf(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}be.safeStringify=sf;function ob(e){return typeof e=="string"&&be.IDENTIFIER.test(e)?new Ht(`.${e}`):N1`[${e}]`}be.getProperty=ob;function ab(e){if(typeof e=="string"&&be.IDENTIFIER.test(e))return new Ht(`${e}`);throw new Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}be.getEsmExportName=ab;function sb(e){return new Ht(e.toString())}be.regexpCode=sb});var ps=F(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.ValueScope=xt.ValueScopeName=xt.Scope=xt.varKinds=xt.UsedValueState=void 0;var Bt=Df(),ds=class extends Error{constructor(u){super(`CodeGen: "code" for ${u} not defined`),this.value=u.value}},Zr=function(e){return e[e.Started=0]="Started",e[e.Completed=1]="Completed",e}(Zr||(xt.UsedValueState=Zr={}));xt.varKinds={const:new Bt.Name("const"),let:new Bt.Name("let"),var:new Bt.Name("var")};var Qr=class{constructor({prefixes:u,parent:t}={}){this._names={},this._prefixes=u,this._parent=t}toName(u){return u instanceof Bt.Name?u:this.name(u)}name(u){return new Bt.Name(this._newName(u))}_newName(u){let t=this._names[u]||this._nameGroup(u);return`${u}${t.index++}`}_nameGroup(u){var t,i;if(!((i=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||i===void 0)&&i.has(u)||this._prefixes&&!this._prefixes.has(u))throw new Error(`CodeGen: prefix "${u}" is not allowed in this scope`);return this._names[u]={prefix:u,index:0}}};xt.Scope=Qr;var eo=class extends Bt.Name{constructor(u,t){super(t),this.prefix=u}setValue(u,{property:t,itemIndex:i}){this.value=u,this.scopePath=(0,Bt._)`.${new Bt.Name(t)}[${i}]`}};xt.ValueScopeName=eo;var Db=(0,Bt._)`\n`,cs=class extends Qr{constructor(u){super(u),this._values={},this._scope=u.scope,this.opts=Se(X({},u),{_n:u.lines?Db:Bt.nil})}get(){return this._scope}name(u){return new eo(u,this._newName(u))}value(u,t){var i;if(t.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let n=this.toName(u),{prefix:f}=n,r=(i=t.key)!==null&&i!==void 0?i:t.ref,o=this._values[f];if(o){let D=o.get(r);if(D)return D}else o=this._values[f]=new Map;o.set(r,n);let a=this._scope[f]||(this._scope[f]=[]),s=a.length;return a[s]=t.ref,n.setValue(t,{property:f,itemIndex:s}),n}getValue(u,t){let i=this._values[u];if(i)return i.get(t)}scopeRefs(u,t=this._values){return this._reduceValues(t,i=>{if(i.scopePath===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return(0,Bt._)`${u}${i.scopePath}`})}scopeCode(u=this._values,t,i){return this._reduceValues(u,n=>{if(n.value===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return n.value.code},t,i)}_reduceValues(u,t,i={},n){let f=Bt.nil;for(let r in u){let o=u[r];if(!o)continue;let a=i[r]=i[r]||new Map;o.forEach(s=>{if(a.has(s))return;a.set(s,Zr.Started);let D=t(s);if(D){let d=this.opts.es5?xt.varKinds.var:xt.varKinds.const;f=(0,Bt._)`${f}${d} ${s} = ${D};${this.opts._n}`}else if(D=n?.(s))f=(0,Bt._)`${f}${D}${this.opts._n}`;else throw new ds(s);a.set(s,Zr.Completed)})}return f}};xt.ValueScope=cs});var ee=F(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.or=se.and=se.not=se.CodeGen=se.operators=se.varKinds=se.ValueScopeName=se.ValueScope=se.Scope=se.Name=se.regexpCode=se.stringify=se.getProperty=se.nil=se.strConcat=se.str=se._=void 0;var Fe=Df(),uu=ps(),ti=Df();Object.defineProperty(se,"_",{enumerable:!0,get:function(){return ti._}});Object.defineProperty(se,"str",{enumerable:!0,get:function(){return ti.str}});Object.defineProperty(se,"strConcat",{enumerable:!0,get:function(){return ti.strConcat}});Object.defineProperty(se,"nil",{enumerable:!0,get:function(){return ti.nil}});Object.defineProperty(se,"getProperty",{enumerable:!0,get:function(){return ti.getProperty}});Object.defineProperty(se,"stringify",{enumerable:!0,get:function(){return ti.stringify}});Object.defineProperty(se,"regexpCode",{enumerable:!0,get:function(){return ti.regexpCode}});Object.defineProperty(se,"Name",{enumerable:!0,get:function(){return ti.Name}});var fo=ps();Object.defineProperty(se,"Scope",{enumerable:!0,get:function(){return fo.Scope}});Object.defineProperty(se,"ValueScope",{enumerable:!0,get:function(){return fo.ValueScope}});Object.defineProperty(se,"ValueScopeName",{enumerable:!0,get:function(){return fo.ValueScopeName}});Object.defineProperty(se,"varKinds",{enumerable:!0,get:function(){return fo.varKinds}});se.operators={GT:new Fe._Code(">"),GTE:new Fe._Code(">="),LT:new Fe._Code("<"),LTE:new Fe._Code("<="),EQ:new Fe._Code("==="),NEQ:new Fe._Code("!=="),NOT:new Fe._Code("!"),OR:new Fe._Code("||"),AND:new Fe._Code("&&"),ADD:new Fe._Code("+")};var Su=class{optimizeNodes(){return this}optimizeNames(u,t){return this}},ms=class extends Su{constructor(u,t,i){super(),this.varKind=u,this.name=t,this.rhs=i}render({es5:u,_n:t}){let i=u?uu.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+t}optimizeNames(u,t){if(u[this.name.str])return this.rhs&&(this.rhs=nn(this.rhs,u,t)),this}get names(){return this.rhs instanceof Fe._CodeOrName?this.rhs.names:{}}},uo=class extends Su{constructor(u,t,i){super(),this.lhs=u,this.rhs=t,this.sideEffects=i}render({_n:u}){return`${this.lhs} = ${this.rhs};`+u}optimizeNames(u,t){if(!(this.lhs instanceof Fe.Name&&!u[this.lhs.str]&&!this.sideEffects))return this.rhs=nn(this.rhs,u,t),this}get names(){let u=this.lhs instanceof Fe.Name?{}:X({},this.lhs.names);return no(u,this.rhs)}},Fs=class extends uo{constructor(u,t,i,n){super(u,i,n),this.op=t}render({_n:u}){return`${this.lhs} ${this.op}= ${this.rhs};`+u}},Cs=class extends Su{constructor(u){super(),this.label=u,this.names={}}render({_n:u}){return`${this.label}:`+u}},hs=class extends Su{constructor(u){super(),this.label=u,this.names={}}render({_n:u}){return`break${this.label?` ${this.label}`:""};`+u}},gs=class extends Su{constructor(u){super(),this.error=u}render({_n:u}){return`throw ${this.error};`+u}get names(){return this.error.names}},bs=class extends Su{constructor(u){super(),this.code=u}render({_n:u}){return`${this.code};`+u}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(u,t){return this.code=nn(this.code,u,t),this}get names(){return this.code instanceof Fe._CodeOrName?this.code.names:{}}},lf=class extends Su{constructor(u=[]){super(),this.nodes=u}render(u){return this.nodes.reduce((t,i)=>t+i.render(u),"")}optimizeNodes(){let{nodes:u}=this,t=u.length;for(;t--;){let i=u[t].optimizeNodes();Array.isArray(i)?u.splice(t,1,...i):i?u[t]=i:u.splice(t,1)}return u.length>0?this:void 0}optimizeNames(u,t){let{nodes:i}=this,n=i.length;for(;n--;){let f=i[n];f.optimizeNames(u,t)||(lb(u,f.names),i.splice(n,1))}return i.length>0?this:void 0}get names(){return this.nodes.reduce((u,t)=>Si(u,t.names),{})}},Iu=class extends lf{render(u){return"{"+u._n+super.render(u)+"}"+u._n}},Es=class extends lf{},_s=(()=>{class e extends Iu{}return e.kind="else",e})(),to=(()=>{class e extends Iu{constructor(t,i){super(i),this.condition=t}render(t){let i=`if(${this.condition})`+super.render(t);return this.else&&(i+="else "+this.else.render(t)),i}optimizeNodes(){super.optimizeNodes();let t=this.condition;if(t===!0)return this.nodes;let i=this.else;if(i){let n=i.optimizeNodes();i=this.else=Array.isArray(n)?new _s(n):n}if(i)return t===!1?i instanceof e?i:i.nodes:this.nodes.length?this:new e(H1(t),i instanceof e?[i]:i.nodes);if(!(t===!1||!this.nodes.length))return this}optimizeNames(t,i){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(t,i),!!(super.optimizeNames(t,i)||this.else))return this.condition=nn(this.condition,t,i),this}get names(){let t=super.names;return no(t,this.condition),this.else&&Si(t,this.else.names),t}}return e.kind="if",e})(),ro=(()=>{class e extends Iu{}return e.kind="for",e})(),ys=class extends ro{constructor(u){super(),this.iteration=u}render(u){return`for(${this.iteration})`+super.render(u)}optimizeNames(u,t){if(super.optimizeNames(u,t))return this.iteration=nn(this.iteration,u,t),this}get names(){return Si(super.names,this.iteration.names)}},vs=class extends ro{constructor(u,t,i,n){super(),this.varKind=u,this.name=t,this.from=i,this.to=n}render(u){let t=u.es5?uu.varKinds.var:this.varKind,{name:i,from:n,to:f}=this;return`for(${t} ${i}=${n}; ${i}<${f}; ${i}++)`+super.render(u)}get names(){let u=no(super.names,this.from);return no(u,this.to)}},io=class extends ro{constructor(u,t,i,n){super(),this.loop=u,this.varKind=t,this.name=i,this.iterable=n}render(u){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(u)}optimizeNames(u,t){if(super.optimizeNames(u,t))return this.iterable=nn(this.iterable,u,t),this}get names(){return Si(super.names,this.iterable.names)}},V1=(()=>{class e extends Iu{constructor(t,i,n){super(),this.name=t,this.args=i,this.async=n}render(t){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(t)}}return e.kind="func",e})(),R1=(()=>{class e extends lf{render(t){return"return "+super.render(t)}}return e.kind="return",e})(),Bs=class extends Iu{render(u){let t="try"+super.render(u);return this.catch&&(t+=this.catch.render(u)),this.finally&&(t+=this.finally.render(u)),t}optimizeNodes(){var u,t;return super.optimizeNodes(),(u=this.catch)===null||u===void 0||u.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(u,t){var i,n;return super.optimizeNames(u,t),(i=this.catch)===null||i===void 0||i.optimizeNames(u,t),(n=this.finally)===null||n===void 0||n.optimizeNames(u,t),this}get names(){let u=super.names;return this.catch&&Si(u,this.catch.names),this.finally&&Si(u,this.finally.names),u}},L1=(()=>{class e extends Iu{constructor(t){super(),this.error=t}render(t){return`catch(${this.error})`+super.render(t)}}return e.kind="catch",e})(),z1=(()=>{class e extends Iu{render(t){return"finally"+super.render(t)}}return e.kind="finally",e})(),xs=class{constructor(u,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts=Se(X({},t),{_n:t.lines?`
2
2
  `:""}),this._extScope=u,this._scope=new uu.Scope({parent:u}),this._nodes=[new Es]}toString(){return this._root.render(this.opts)}name(u){return this._scope.name(u)}scopeName(u){return this._extScope.name(u)}scopeValue(u,t){let i=this._extScope.value(u,t);return(this._values[i.prefix]||(this._values[i.prefix]=new Set)).add(i),i}getScopeValue(u,t){return this._extScope.getValue(u,t)}scopeRefs(u){return this._extScope.scopeRefs(u,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(u,t,i,n){let f=this._scope.toName(t);return i!==void 0&&n&&(this._constants[f.str]=i),this._leafNode(new ms(u,f,i)),f}const(u,t,i){return this._def(uu.varKinds.const,u,t,i)}let(u,t,i){return this._def(uu.varKinds.let,u,t,i)}var(u,t,i){return this._def(uu.varKinds.var,u,t,i)}assign(u,t,i){return this._leafNode(new uo(u,t,i))}add(u,t){return this._leafNode(new Fs(u,se.operators.ADD,t))}code(u){return typeof u=="function"?u():u!==Fe.nil&&this._leafNode(new bs(u)),this}object(...u){let t=["{"];for(let[i,n]of u)t.length>1&&t.push(","),t.push(i),(i!==n||this.opts.es5)&&(t.push(":"),(0,Fe.addCodeArg)(t,n));return t.push("}"),new Fe._Code(t)}if(u,t,i){if(this._blockNode(new to(u)),t&&i)this.code(t).else().code(i).endIf();else if(t)this.code(t).endIf();else if(i)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(u){return this._elseNode(new to(u))}else(){return this._elseNode(new _s)}endIf(){return this._endBlockNode(to,_s)}_for(u,t){return this._blockNode(u),t&&this.code(t).endFor(),this}for(u,t){return this._for(new ys(u),t)}forRange(u,t,i,n,f=this.opts.es5?uu.varKinds.var:uu.varKinds.let){let r=this._scope.toName(u);return this._for(new vs(f,r,t,i),()=>n(r))}forOf(u,t,i,n=uu.varKinds.const){let f=this._scope.toName(u);if(this.opts.es5){let r=t instanceof Fe.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,Fe._)`${r}.length`,o=>{this.var(f,(0,Fe._)`${r}[${o}]`),i(f)})}return this._for(new io("of",n,f,t),()=>i(f))}forIn(u,t,i,n=this.opts.es5?uu.varKinds.var:uu.varKinds.const){if(this.opts.ownProperties)return this.forOf(u,(0,Fe._)`Object.keys(${t})`,i);let f=this._scope.toName(u);return this._for(new io("in",n,f,t),()=>i(f))}endFor(){return this._endBlockNode(ro)}label(u){return this._leafNode(new Cs(u))}break(u){return this._leafNode(new hs(u))}return(u){let t=new R1;if(this._blockNode(t),this.code(u),t.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(R1)}try(u,t,i){if(!t&&!i)throw new Error('CodeGen: "try" without "catch" and "finally"');let n=new Bs;if(this._blockNode(n),this.code(u),t){let f=this.name("e");this._currNode=n.catch=new L1(f),t(f)}return i&&(this._currNode=n.finally=new z1,this.code(i)),this._endBlockNode(L1,z1)}throw(u){return this._leafNode(new gs(u))}block(u,t){return this._blockStarts.push(this._nodes.length),u&&this.code(u).endBlock(t),this}endBlock(u){let t=this._blockStarts.pop();if(t===void 0)throw new Error("CodeGen: not in self-balancing block");let i=this._nodes.length-t;if(i<0||u!==void 0&&i!==u)throw new Error(`CodeGen: wrong number of nodes: ${i} vs ${u} expected`);return this._nodes.length=t,this}func(u,t=Fe.nil,i,n){return this._blockNode(new V1(u,t,i)),n&&this.code(n).endFunc(),this}endFunc(){return this._endBlockNode(V1)}optimize(u=1){for(;u-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(u){return this._currNode.nodes.push(u),this}_blockNode(u){this._currNode.nodes.push(u),this._nodes.push(u)}_endBlockNode(u,t){let i=this._currNode;if(i instanceof u||t&&i instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${u.kind}/${t.kind}`:u.kind}"`)}_elseNode(u){let t=this._currNode;if(!(t instanceof to))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=u,this}get _root(){return this._nodes[0]}get _currNode(){let u=this._nodes;return u[u.length-1]}set _currNode(u){let t=this._nodes;t[t.length-1]=u}};se.CodeGen=xs;function Si(e,u){for(let t in u)e[t]=(e[t]||0)+(u[t]||0);return e}function no(e,u){return u instanceof Fe._CodeOrName?Si(e,u.names):e}function nn(e,u,t){if(e instanceof Fe.Name)return i(e);if(!n(e))return e;return new Fe._Code(e._items.reduce((f,r)=>(r instanceof Fe.Name&&(r=i(r)),r instanceof Fe._Code?f.push(...r._items):f.push(r),f),[]));function i(f){let r=t[f.str];return r===void 0||u[f.str]!==1?f:(delete u[f.str],r)}function n(f){return f instanceof Fe._Code&&f._items.some(r=>r instanceof Fe.Name&&u[r.str]===1&&t[r.str]!==void 0)}}function lb(e,u){for(let t in u)e[t]=(e[t]||0)-(u[t]||0)}function H1(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:(0,Fe._)`!${ws(e)}`}se.not=H1;var db=U1(se.operators.AND);function cb(...e){return e.reduce(db)}se.and=cb;var pb=U1(se.operators.OR);function mb(...e){return e.reduce(pb)}se.or=mb;function U1(e){return(u,t)=>u===Fe.nil?t:t===Fe.nil?u:(0,Fe._)`${ws(u)} ${e} ${ws(t)}`}function ws(e){return e instanceof Fe.Name?e:(0,Fe._)`(${e})`}});var le=F(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.checkStrictMode=De.getErrorPath=De.Type=De.useFunc=De.setEvaluated=De.evaluatedPropsToName=De.mergeEvaluated=De.eachItem=De.unescapeJsonPointer=De.escapeJsonPointer=De.escapeFragment=De.unescapeFragment=De.schemaRefOrVal=De.schemaHasRulesButRef=De.schemaHasRules=De.checkUnknownRules=De.alwaysValidSchema=De.toHash=void 0;var Ie=ee(),Fb=Df();function Cb(e){let u={};for(let t of e)u[t]=!0;return u}De.toHash=Cb;function hb(e,u){return typeof u=="boolean"?u:Object.keys(u).length===0?!0:(K1(e,u),!J1(u,e.self.RULES.all))}De.alwaysValidSchema=hb;function K1(e,u=e.schema){let{opts:t,self:i}=e;if(!t.strictSchema||typeof u=="boolean")return;let n=i.RULES.keywords;for(let f in u)n[f]||Z1(e,`unknown keyword: "${f}"`)}De.checkUnknownRules=K1;function J1(e,u){if(typeof e=="boolean")return!e;for(let t in e)if(u[t])return!0;return!1}De.schemaHasRules=J1;function gb(e,u){if(typeof e=="boolean")return!e;for(let t in e)if(t!=="$ref"&&u.all[t])return!0;return!1}De.schemaHasRulesButRef=gb;function bb({topSchemaRef:e,schemaPath:u},t,i,n){if(!n){if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="string")return(0,Ie._)`${t}`}return(0,Ie._)`${e}${u}${(0,Ie.getProperty)(i)}`}De.schemaRefOrVal=bb;function Eb(e){return X1(decodeURIComponent(e))}De.unescapeFragment=Eb;function _b(e){return encodeURIComponent(Is(e))}De.escapeFragment=_b;function Is(e){return typeof e=="number"?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}De.escapeJsonPointer=Is;function X1(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}De.unescapeJsonPointer=X1;function yb(e,u){if(Array.isArray(e))for(let t of e)u(t);else u(e)}De.eachItem=yb;function W1({mergeNames:e,mergeToName:u,mergeValues:t,resultToName:i}){return(n,f,r,o)=>{let a=r===void 0?f:r instanceof Ie.Name?(f instanceof Ie.Name?e(n,f,r):u(n,f,r),r):f instanceof Ie.Name?(u(n,r,f),f):t(f,r);return o===Ie.Name&&!(a instanceof Ie.Name)?i(n,a):a}}De.mergeEvaluated={props:W1({mergeNames:(e,u,t)=>e.if((0,Ie._)`${t} !== true && ${u} !== undefined`,()=>{e.if((0,Ie._)`${u} === true`,()=>e.assign(t,!0),()=>e.assign(t,(0,Ie._)`${t} || {}`).code((0,Ie._)`Object.assign(${t}, ${u})`))}),mergeToName:(e,u,t)=>e.if((0,Ie._)`${t} !== true`,()=>{u===!0?e.assign(t,!0):(e.assign(t,(0,Ie._)`${t} || {}`),As(e,t,u))}),mergeValues:(e,u)=>e===!0?!0:X(X({},e),u),resultToName:Y1}),items:W1({mergeNames:(e,u,t)=>e.if((0,Ie._)`${t} !== true && ${u} !== undefined`,()=>e.assign(t,(0,Ie._)`${u} === true ? true : ${t} > ${u} ? ${t} : ${u}`)),mergeToName:(e,u,t)=>e.if((0,Ie._)`${t} !== true`,()=>e.assign(t,u===!0?!0:(0,Ie._)`${t} > ${u} ? ${t} : ${u}`)),mergeValues:(e,u)=>e===!0?!0:Math.max(e,u),resultToName:(e,u)=>e.var("items",u)})};function Y1(e,u){if(u===!0)return e.var("props",!0);let t=e.var("props",(0,Ie._)`{}`);return u!==void 0&&As(e,t,u),t}De.evaluatedPropsToName=Y1;function As(e,u,t){Object.keys(t).forEach(i=>e.assign((0,Ie._)`${u}${(0,Ie.getProperty)(i)}`,!0))}De.setEvaluated=As;var G1={};function vb(e,u){return e.scopeValue("func",{ref:u,code:G1[u.code]||(G1[u.code]=new Fb._Code(u.code))})}De.useFunc=vb;var Ss=function(e){return e[e.Num=0]="Num",e[e.Str=1]="Str",e}(Ss||(De.Type=Ss={}));function Bb(e,u,t){if(e instanceof Ie.Name){let i=u===Ss.Num;return t?i?(0,Ie._)`"[" + ${e} + "]"`:(0,Ie._)`"['" + ${e} + "']"`:i?(0,Ie._)`"/" + ${e}`:(0,Ie._)`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return t?(0,Ie.getProperty)(e).toString():"/"+Is(e)}De.getErrorPath=Bb;function Z1(e,u,t=e.opts.strictSchema){if(t){if(u=`strict mode: ${u}`,t===!0)throw new Error(u);e.self.logger.warn(u)}}De.checkStrictMode=Z1});var Ut=F(ks=>{"use strict";Object.defineProperty(ks,"__esModule",{value:!0});var lt=ee(),xb={data:new lt.Name("data"),valCxt:new lt.Name("valCxt"),instancePath:new lt.Name("instancePath"),parentData:new lt.Name("parentData"),parentDataProperty:new lt.Name("parentDataProperty"),rootData:new lt.Name("rootData"),dynamicAnchors:new lt.Name("dynamicAnchors"),vErrors:new lt.Name("vErrors"),errors:new lt.Name("errors"),this:new lt.Name("this"),self:new lt.Name("self"),scope:new lt.Name("scope"),json:new lt.Name("json"),jsonPos:new lt.Name("jsonPos"),jsonLen:new lt.Name("jsonLen"),jsonPart:new lt.Name("jsonPart")};ks.default=xb});var df=F(dt=>{"use strict";Object.defineProperty(dt,"__esModule",{value:!0});dt.extendErrors=dt.resetErrorsCount=dt.reportExtraError=dt.reportError=dt.keyword$DataError=dt.keywordError=void 0;var ge=ee(),oo=le(),Et=Ut();dt.keywordError={message:({keyword:e})=>(0,ge.str)`must pass "${e}" keyword validation`};dt.keyword$DataError={message:({keyword:e,schemaType:u})=>u?(0,ge.str)`"${e}" keyword must be ${u} ($data)`:(0,ge.str)`"${e}" keyword is invalid ($data)`};function wb(e,u=dt.keywordError,t,i){let{it:n}=e,{gen:f,compositeRule:r,allErrors:o}=n,a=td(e,u,t);i??(r||o)?Q1(f,a):ed(n,(0,ge._)`[${a}]`)}dt.reportError=wb;function Sb(e,u=dt.keywordError,t){let{it:i}=e,{gen:n,compositeRule:f,allErrors:r}=i,o=td(e,u,t);Q1(n,o),f||r||ed(i,Et.default.vErrors)}dt.reportExtraError=Sb;function Ib(e,u){e.assign(Et.default.errors,u),e.if((0,ge._)`${Et.default.vErrors} !== null`,()=>e.if(u,()=>e.assign((0,ge._)`${Et.default.vErrors}.length`,u),()=>e.assign(Et.default.vErrors,null)))}dt.resetErrorsCount=Ib;function Ab({gen:e,keyword:u,schemaValue:t,data:i,errsCount:n,it:f}){if(n===void 0)throw new Error("ajv implementation error");let r=e.name("err");e.forRange("i",n,Et.default.errors,o=>{e.const(r,(0,ge._)`${Et.default.vErrors}[${o}]`),e.if((0,ge._)`${r}.instancePath === undefined`,()=>e.assign((0,ge._)`${r}.instancePath`,(0,ge.strConcat)(Et.default.instancePath,f.errorPath))),e.assign((0,ge._)`${r}.schemaPath`,(0,ge.str)`${f.errSchemaPath}/${u}`),f.opts.verbose&&(e.assign((0,ge._)`${r}.schema`,t),e.assign((0,ge._)`${r}.data`,i))})}dt.extendErrors=Ab;function Q1(e,u){let t=e.const("err",u);e.if((0,ge._)`${Et.default.vErrors} === null`,()=>e.assign(Et.default.vErrors,(0,ge._)`[${t}]`),(0,ge._)`${Et.default.vErrors}.push(${t})`),e.code((0,ge._)`${Et.default.errors}++`)}function ed(e,u){let{gen:t,validateName:i,schemaEnv:n}=e;n.$async?t.throw((0,ge._)`new ${e.ValidationError}(${u})`):(t.assign((0,ge._)`${i}.errors`,u),t.return(!1))}var Ii={keyword:new ge.Name("keyword"),schemaPath:new ge.Name("schemaPath"),params:new ge.Name("params"),propertyName:new ge.Name("propertyName"),message:new ge.Name("message"),schema:new ge.Name("schema"),parentSchema:new ge.Name("parentSchema")};function td(e,u,t){let{createErrors:i}=e.it;return i===!1?(0,ge._)`{}`:kb(e,u,t)}function kb(e,u,t={}){let{gen:i,it:n}=e,f=[$b(n,t),Tb(e,t)];return Pb(e,u,f),i.object(...f)}function $b({errorPath:e},{instancePath:u}){let t=u?(0,ge.str)`${e}${(0,oo.getErrorPath)(u,oo.Type.Str)}`:e;return[Et.default.instancePath,(0,ge.strConcat)(Et.default.instancePath,t)]}function Tb({keyword:e,it:{errSchemaPath:u}},{schemaPath:t,parentSchema:i}){let n=i?u:(0,ge.str)`${u}/${e}`;return t&&(n=(0,ge.str)`${n}${(0,oo.getErrorPath)(t,oo.Type.Str)}`),[Ii.schemaPath,n]}function Pb(e,{params:u,message:t},i){let{keyword:n,data:f,schemaValue:r,it:o}=e,{opts:a,propertyName:s,topSchemaRef:D,schemaPath:d}=o;i.push([Ii.keyword,n],[Ii.params,typeof u=="function"?u(e):u||(0,ge._)`{}`]),a.messages&&i.push([Ii.message,typeof t=="function"?t(e):t]),a.verbose&&i.push([Ii.schema,r],[Ii.parentSchema,(0,ge._)`${D}${d}`],[Et.default.data,f]),s&&i.push([Ii.propertyName,s])}});var id=F(fn=>{"use strict";Object.defineProperty(fn,"__esModule",{value:!0});fn.boolOrEmptySchema=fn.topBoolOrEmptySchema=void 0;var Ob=df(),Mb=ee(),jb=Ut(),Nb={message:"boolean schema is false"};function qb(e){let{gen:u,schema:t,validateName:i}=e;t===!1?ud(e,!1):typeof t=="object"&&t.$async===!0?u.return(jb.default.data):(u.assign((0,Mb._)`${i}.errors`,null),u.return(!0))}fn.topBoolOrEmptySchema=qb;function Vb(e,u){let{gen:t,schema:i}=e;i===!1?(t.var(u,!1),ud(e)):t.var(u,!0)}fn.boolOrEmptySchema=Vb;function ud(e,u){let{gen:t,data:i}=e,n={gen:t,keyword:"false schema",data:i,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,Ob.reportError)(n,Nb,void 0,u)}});var $s=F(rn=>{"use strict";Object.defineProperty(rn,"__esModule",{value:!0});rn.getRules=rn.isJSONType=void 0;var Rb=["string","number","integer","boolean","null","object","array"],Lb=new Set(Rb);function zb(e){return typeof e=="string"&&Lb.has(e)}rn.isJSONType=zb;function Hb(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:Se(X({},e),{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}rn.getRules=Hb});var Ts=F(ui=>{"use strict";Object.defineProperty(ui,"__esModule",{value:!0});ui.shouldUseRule=ui.shouldUseGroup=ui.schemaHasRulesForType=void 0;function Ub({schema:e,self:u},t){let i=u.RULES.types[t];return i&&i!==!0&&nd(e,i)}ui.schemaHasRulesForType=Ub;function nd(e,u){return u.rules.some(t=>fd(e,t))}ui.shouldUseGroup=nd;function fd(e,u){var t;return e[u.keyword]!==void 0||((t=u.definition.implements)===null||t===void 0?void 0:t.some(i=>e[i]!==void 0))}ui.shouldUseRule=fd});var cf=F(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.reportTypeError=ct.checkDataTypes=ct.checkDataType=ct.coerceAndCheckDataType=ct.getJSONTypes=ct.getSchemaTypes=ct.DataType=void 0;var Wb=$s(),Gb=Ts(),Kb=df(),re=ee(),rd=le(),on=function(e){return e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong",e}(on||(ct.DataType=on={}));function Jb(e){let u=od(e.type);if(u.includes("null")){if(e.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!u.length&&e.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');e.nullable===!0&&u.push("null")}return u}ct.getSchemaTypes=Jb;function od(e){let u=Array.isArray(e)?e:e?[e]:[];if(u.every(Wb.isJSONType))return u;throw new Error("type must be JSONType or JSONType[]: "+u.join(","))}ct.getJSONTypes=od;function Xb(e,u){let{gen:t,data:i,opts:n}=e,f=Yb(u,n.coerceTypes),r=u.length>0&&!(f.length===0&&u.length===1&&(0,Gb.schemaHasRulesForType)(e,u[0]));if(r){let o=Os(u,i,n.strictNumbers,on.Wrong);t.if(o,()=>{f.length?Zb(e,u,f):Ms(e)})}return r}ct.coerceAndCheckDataType=Xb;var ad=new Set(["string","number","integer","boolean","null"]);function Yb(e,u){return u?e.filter(t=>ad.has(t)||u==="array"&&t==="array"):[]}function Zb(e,u,t){let{gen:i,data:n,opts:f}=e,r=i.let("dataType",(0,re._)`typeof ${n}`),o=i.let("coerced",(0,re._)`undefined`);f.coerceTypes==="array"&&i.if((0,re._)`${r} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>i.assign(n,(0,re._)`${n}[0]`).assign(r,(0,re._)`typeof ${n}`).if(Os(u,n,f.strictNumbers),()=>i.assign(o,n))),i.if((0,re._)`${o} !== undefined`);for(let s of t)(ad.has(s)||s==="array"&&f.coerceTypes==="array")&&a(s);i.else(),Ms(e),i.endIf(),i.if((0,re._)`${o} !== undefined`,()=>{i.assign(n,o),Qb(e,o)});function a(s){switch(s){case"string":i.elseIf((0,re._)`${r} == "number" || ${r} == "boolean"`).assign(o,(0,re._)`"" + ${n}`).elseIf((0,re._)`${n} === null`).assign(o,(0,re._)`""`);return;case"number":i.elseIf((0,re._)`${r} == "boolean" || ${n} === null
3
3
  || (${r} == "string" && ${n} && ${n} == +${n})`).assign(o,(0,re._)`+${n}`);return;case"integer":i.elseIf((0,re._)`${r} === "boolean" || ${n} === null
4
4
  || (${r} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(o,(0,re._)`+${n}`);return;case"boolean":i.elseIf((0,re._)`${n} === "false" || ${n} === 0 || ${n} === null`).assign(o,!1).elseIf((0,re._)`${n} === "true" || ${n} === 1`).assign(o,!0);return;case"null":i.elseIf((0,re._)`${n} === "" || ${n} === 0 || ${n} === false`),i.assign(o,null);return;case"array":i.elseIf((0,re._)`${r} === "string" || ${r} === "number"
@@ -14,16 +14,16 @@ Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]`),n}}static
14
14
  body {
15
15
  height: unset !important;
16
16
  }
17
- `},t.origin)})}getConfigBlocks(){return this.pluginConfig}updateConfigBlocks(t){for(let i of t)i[this.pluginType]=this.pluginAlias;this.pluginConfig=t}schemaFormUpdated(){if(!(!this.iframe||!this.iframe.contentWindow)){if(this.schemaFormRecentlyRefreshed){this.schemaFormRecentlyRefreshed=!1;return}this.schemaFormRecentlyUpdated=!0,this.iframe.contentWindow.postMessage({action:"stream",event:"configChanged",data:this.pluginConfig},Qu.api.origin)}}schemaFormRefresh(){if(this.schemaFormRecentlyUpdated){this.schemaFormRecentlyUpdated=!1;return}this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm&&(this.showSchemaForm=!1,setTimeout(()=>{this.showSchemaForm=!0}))}formCreate(t,i,n,f,r){return G(this,null,function*(){yield this.formEnd(),this.formId=t,this.formSchema=i,this.formData=n,this.formSubmitButtonLabel=f,this.formCancelButtonLabel=r})}formEnd(){return G(this,null,function*(){this.formId&&(this.formId=void 0,this.formSchema=void 0,this.formData=void 0,this.formSubmitButtonLabel=void 0,this.formCancelButtonLabel=void 0,yield new Promise(t=>setTimeout(t)))})}formUpdated(t){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId,data:{formEvent:"change",formData:t}},Qu.api.origin)}formValidEvent(t){this.formValid=t}formActionEvent(t){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId,data:{formEvent:t,formData:this.formData}},Qu.api.origin)}handleGetCachedAccessories(t){return G(this,null,function*(){let i=yield ae(this.$api.get("/server/cached-accessories"));return this.requestResponse(t,i.filter(n=>n.plugin===this.plugin.name))})}savePluginConfig(t=!1){return G(this,null,function*(){this.saveInProgress=!0;try{let i=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig));if(this.saveInProgress=!1,t){if(this.isFirstSave&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let n=this.$modal.open(un,{size:"lg",backdrop:"static"});n.componentInstance.bridges=this.childBridges.map(f=>({name:f.name,username:f.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}}catch(i){this.saveInProgress=!1,console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}onIsValid(t){this.formIsValid=t}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),this.io.end(),this.schemaFormRefreshSubject.complete(),this.schemaFormUpdatedSubject.complete(),this.formUpdatedSubject.complete()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],viewQuery:function(i,n){i&1&&Gu(n.customPluginUiElementTarget,pH,5),i&2&&Ku()},inputs:{plugin:"plugin",schema:"schema",pluginConfig:"pluginConfig"},decls:24,vars:17,consts:[["custompluginui",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0",2,"min-height","110px"],[1,"text-center","primary-text"],["width","100%","height","1px;","sandbox","allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox allow-downloads allow-forms",2,"border","0"],[1,"card","card-body"],[1,"loading-overlay","text-center","primary-text","d-flex","align-items-center","justify-content-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl","me-2",3,"ngClass","ngbTooltip"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[3,"dataChange","dataChanged","isValid","configSchema","data"],[1,"text-end","custom-form-action-buttons"],[1,"btn","btn-elegant"],[1,"btn","btn-primary",3,"disabled"],[1,"btn","btn-elegant",3,"click"],[1,"btn","btn-primary",3,"click","disabled"]],template:function(i,n){if(i&1){let f=H();c(0,"div",1)(1,"div",2)(2,"h5",3),E(3),p(),c(4,"button",4),y(5,"translate"),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),p()(),c(6,"div",5),x(7,mH,2,0,"div",6),S(8,"iframe",7,0),x(10,FH,2,2,"div",8),x(11,gH,5,4,"div",8),x(12,bH,2,0,"div",9),p(),c(13,"div",10)(14,"div",11)(15,"button",12),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),E(16),y(17,"translate"),p()(),S(18,"div",13),c(19,"div",14),x(20,EH,2,4,"i",15),c(21,"button",16),O("click",function(){return j(f),N(n.savePluginConfig(!0))}),x(22,_H,2,3),x(23,yH,1,0,"i",17),p()()()()}i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,13,"form.button_close")),l(3),w(n.loading?7:-1),l(3),w(n.uiLoaded&&n.pluginConfig.length&&n.schema.singular&&n.showSchemaForm?10:-1),l(),w(n.formId?11:-1),l(),w(n.pluginSpinner?12:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(17,15,"form.button_close")," "),l(4),w(n.saveButtonDisabled?-1:20),l(),b("disabled",n.saveInProgress||n.saveButtonDisabled),l(),w(n.saveInProgress?-1:22),l(),w(n.saveInProgress?23:-1))},dependencies:[Qn,Qi,zt,Be],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:16px;background-color:#ffffffb3} body.dark-mode .loading-overlay{background-color:#242424b3}.custom-form-action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{margin-right:2px}"]})}return e})();var g6=Le(h6(),1);var ef=(()=>{class e{el=I(Wu);constructor(){}ngOnInit(){this.el.nativeElement.querySelectorAll("a").forEach(n=>{n.target="_blank",n.rel="noopener noreferrer"});let i=new g6.EmojiConvertor;this.el.nativeElement.innerHTML=i.replace_colons(this.el.nativeElement.innerHTML)}static \u0275fac=function(i){return new(i||e)};static \u0275dir=Bu({type:e,selectors:[["markdown"]]})}return e})();var vH=e=>({link:e});function BH(e,u){if(e&1&&(c(0,"div",5),S(1,"p",10),y(2,"translate"),p()),e&2){let t=h();l(),b("innerHTML",je(2,1,"accessories.message_must_use_insecure_mode",eu(4,vH,t.linkInsecure)),de)}}function xH(e,u){e&1&&(c(0,"p"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"plugins.settings.custom.homebridge-gsh.message_account_link_required")))}function wH(e,u){if(e&1){let t=H();c(0,"div",11)(1,"button",13),O("click",function(){j(t);let n=h(2);return N(n.linkAccount())}),E(2),y(3,"translate"),p()()}e&2&&(l(2),q(" ",B(3,1,"plugins.settings.custom.homebridge-gsh.label_link_account")," "))}function SH(e,u){e&1&&(c(0,"div",16)(1,"p",17)(2,"strong"),E(3),y(4,"translate"),p()()()),e&2&&(l(3),L(B(4,1,"plugins.settings.custom.homebridge-gsh.message_homebridge_restart_required")))}function IH(e,u){if(e&1&&(c(0,"div",12),S(1,"i",14),c(2,"h4",15),E(3),y(4,"titlecase"),y(5,"translate"),p(),x(6,SH,5,3,"div",16),p()),e&2){let t=h(2);l(3),xu(" ",B(4,3,t.linkType)," ",B(5,5,"plugins.settings.custom.homebridge-gsh.label_account_linked")," "),l(3),w(t.justLinked?6:-1)}}function AH(e,u){if(e&1&&S(0,"markdown",18),e&2){let t=h(3);b("data",t.schema.footerDisplay)}}function kH(e,u){if(e&1){let t=H();c(0,"div",16),x(1,AH,1,1,"markdown",18),p(),c(2,"div",19)(3,"app-schema-form",20),Me("dataChange",function(n){j(t);let f=h(2);return Oe(f.gshConfig,n)||(f.gshConfig=n),N(n)}),p()()}if(e&2){let t=h(2);l(),w(t.schema.footerDisplay?1:-1),l(2),b("configSchema",t.schema),Pe("data",t.gshConfig)}}function $H(e,u){if(e&1&&(c(0,"p"),E(1),y(2,"translate"),p(),x(3,xH,3,3,"p"),x(4,wH,4,3,"div",11),x(5,IH,7,7,"div",12),x(6,kH,4,3)),e&2){let t=h();l(),L(B(2,5,"plugins.settings.custom.homebridge-gsh.message_about")),l(2),w(t.gshConfig.token?-1:3),l(),w(t.gshConfig.token?-1:4),l(),w(t.gshConfig.token?5:-1),l(),w(t.gshConfig&&t.gshConfig.token?6:-1)}}function TH(e,u){if(e&1){let t=H();c(0,"button",21),O("click",function(){j(t);let n=h();return N(n.unlinkAccount())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.settings.custom.homebridge-gsh.label_unlink_account")," "))}function PH(e,u){if(e&1){let t=H();c(0,"button",22),O("click",function(){j(t);let n=h();return N(n.saveAndClose())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_save")," "))}var E6=(()=>{class e{$activeModal=I(ve);$api=I(he);$jwtHelper=I(k1);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginConfig;justLinked=!1;gshConfig;linkType;linkInsecure='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Enabling-Accessory-Control" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';linkDomain="https://homebridge-gsh.iot.oz.nu";linkUrl=`${this.linkDomain}/link-account`;popup;originCheckInterval;constructor(){window.addEventListener("message",this.windowMessageListener,!1)}ngOnInit(){this.pluginConfig.length||this.pluginConfig.push({name:"Google Smart Home",platform:this.schema.pluginAlias}),this.gshConfig=this.pluginConfig[0],this.parseToken()}windowMessageListener=t=>{t.origin!==this.linkDomain&&(console.error("Refusing to process message from",t.origin),console.error(t));try{let i=JSON.parse(t.data);i.token&&this.processToken(i.token)}catch(i){console.error(i)}};linkAccount(){let n=window.top.outerHeight/2+window.top.screenY-350,f=window.top.outerWidth/2+window.top.screenX-450/2;this.popup=window.open(this.linkUrl,"oznu-google-smart-home-auth",`toolbar=no, location=no, directories=no, status=no, menubar=no scrollbars=no, resizable=no, copyhistory=no, width=450, height=700, top=${n}, left=${f}`),this.originCheckInterval=setInterval(()=>{this.popup.postMessage("origin-check",this.linkDomain)},2e3)}unlinkAccount(){this.gshConfig={name:"Google Smart Home",platform:this.schema.pluginAlias},this.pluginConfig.splice(0,this.pluginConfig.length),this.saveConfig()}processToken(t){clearInterval(this.originCheckInterval),this.popup&&this.popup.close(),this.gshConfig.token=t,this.gshConfig.notice="Keep your token a secret!",this.pluginConfig.length||this.pluginConfig.push(this.gshConfig),this.parseToken(),this.saveConfig()}parseToken(){if(this.gshConfig.token)try{let t=this.$jwtHelper.decodeToken(this.gshConfig.token);this.linkType=t.id.split("|")[0].split("-")[0]}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.settings.custom.homebridge-gsh.message_invalid_token"),this.$translate.instant("toast.title_error")),delete this.gshConfig.token}}saveConfig(){return G(this,null,function*(){try{yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig)),this.justLinked=!0,this.$toastr.success(this.$translate.instant("plugins.settings.restart_required"),this.$translate.instant("plugins.settings.plugin_config_saved"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}saveAndClose(){return G(this,null,function*(){this.gshConfig.platform=this.schema.pluginAlias,this.pluginConfig[0]=this.gshConfig,yield this.saveConfig(),this.$activeModal.close()})}close(){this.$activeModal.close()}ngOnDestroy(){clearInterval(this.originCheckInterval),window.removeEventListener("message",this.windowMessageListener),this.popup&&this.popup.close()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["app-homebridge-google-smarthome"]],inputs:{plugin:"plugin",schema:"schema",pluginConfig:"pluginConfig"},decls:15,vars:10,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],["role","alert",1,"alert","alert-warning"],[1,"modal-footer"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-auto"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],[1,"mb-0",3,"innerHTML"],[1,"text-center"],[1,"text-center","mt-1"],[1,"btn","btn-primary","btn-lg",3,"click"],[1,"fas","fa-fw","fa-check-circle","primary-text",2,"font-size","50px"],[1,"mt-2"],[1,"mt-3"],[1,"primary-text"],[1,"plugin-md",3,"data"],[1,"card","p-2","pt-3","mt-4"],[3,"dataChange","configSchema","data"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-auto",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3,"Homebridge Google Smart Home"),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,BH,3,6,"div",5),x(8,$H,7,7),p(),c(9,"div",6),x(10,TH,3,3,"button",7),c(11,"button",8),O("click",function(){return n.close()}),E(12),y(13,"translate"),p(),x(14,PH,3,3,"button",9),p()()),i&2&&(l(4),K("aria-label",B(5,6,"form.button_close")),l(3),w(n.$settings.env.enableAccessories?-1:7),l(),w(n.$settings.env.enableAccessories?8:-1),l(2),w(n.gshConfig.token?10:-1),l(2),q(" ",B(13,8,"form.button_close")," "),l(2),w(n.gshConfig.token?14:-1))},dependencies:[tn,en,ef,Qn,b1,Be],encapsulation:2})}return e})();var _6=(()=>{class e{$api=I(he);$modal=I(it);plugins={"homebridge-gsh":E6};constructor(){}openSettings(t,i){return G(this,null,function*(){let n=yield this.loadPluginConfig(t.name),f=this.$modal.open(this.plugins[t.name],{size:"lg",backdrop:"static"});return f.componentInstance.plugin=t,f.componentInstance.schema=i,f.componentInstance.pluginConfig=n,f.result.catch(()=>{})})}openCustomSettingsUi(t,i){return G(this,null,function*(){let n=yield this.loadPluginConfig(t.name),f=this.$modal.open(C6,{size:"lg",backdrop:"static"});return f.componentInstance.plugin=t,f.componentInstance.schema=i,f.componentInstance.pluginConfig=n,f.result.catch(()=>{})})}loadPluginConfig(t){return G(this,null,function*(){return ae(this.$api.get(`/config-editor/plugin/${encodeURIComponent(t)}`))})}static \u0275fac=function(i){return new(i||e)};static \u0275prov=Ot({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var w6=Le(of(),1);var S6=Le($1(),1),I6=Le(T1(),1);var y6=Le(of(),1);var OH=["pluginlogoutput"],v6=(()=>{class e{$activeModal=I(ve);$api=I(he);$log=I(j1);$modal=I(it);$toastr=I(_e);$translate=I(Ee);plugin;termTarget=Yu("pluginlogoutput");resizeEvent=new Pt;pluginAlias;constructor(){}onWindowResize(){this.resizeEvent.next(void 0)}ngOnInit(){this.getPluginLog()}getPluginLog(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{this.pluginAlias=this.plugin.name==="homebridge-config-ui-x"?"Homebridge UI":t[0]?.name||this.plugin.name,this.$log.startTerminal(this.termTarget(),{},this.resizeEvent,this.pluginAlias)},error:t=>{console.error(t),this.$toastr.error(t.error.message||t.message,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}downloadLogFile(){let t=this.$modal.open(P1,{size:"lg",backdrop:"static"});t.componentInstance.title=this.$translate.instant("logs.title_download_log_file"),t.componentInstance.message=this.$translate.instant("logs.download_warning"),t.componentInstance.confirmButtonLabel=this.$translate.instant("form.button_download"),t.componentInstance.faIconClass="fas fa-fw fa-user-secret primary-text",t.result.then(()=>{this.$api.get("/platform-tools/hb-service/log/download?colour=yes",{observe:"response",responseType:"text"}).subscribe({next:i=>{if(!i.body)return;let n=i.body.split(`
17
+ `},t.origin)})}getConfigBlocks(){return this.pluginConfig}updateConfigBlocks(t){for(let i of t)i[this.pluginType]=this.pluginAlias;this.pluginConfig=t}schemaFormUpdated(){if(!(!this.iframe||!this.iframe.contentWindow)){if(this.schemaFormRecentlyRefreshed){this.schemaFormRecentlyRefreshed=!1;return}this.schemaFormRecentlyUpdated=!0,this.iframe.contentWindow.postMessage({action:"stream",event:"configChanged",data:this.pluginConfig},Qu.api.origin)}}schemaFormRefresh(){if(this.schemaFormRecentlyUpdated){this.schemaFormRecentlyUpdated=!1;return}this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm&&(this.showSchemaForm=!1,setTimeout(()=>{this.showSchemaForm=!0}))}formCreate(t,i,n,f,r){return G(this,null,function*(){yield this.formEnd(),this.formId=t,this.formSchema=i,this.formData=n,this.formSubmitButtonLabel=f,this.formCancelButtonLabel=r})}formEnd(){return G(this,null,function*(){this.formId&&(this.formId=void 0,this.formSchema=void 0,this.formData=void 0,this.formSubmitButtonLabel=void 0,this.formCancelButtonLabel=void 0,yield new Promise(t=>setTimeout(t)))})}formUpdated(t){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId,data:{formEvent:"change",formData:t}},Qu.api.origin)}formValidEvent(t){this.formValid=t}formActionEvent(t){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId,data:{formEvent:t,formData:this.formData}},Qu.api.origin)}handleGetCachedAccessories(t){return G(this,null,function*(){let i=yield ae(this.$api.get("/server/cached-accessories"));return this.requestResponse(t,i.filter(n=>n.plugin===this.plugin.name))})}savePluginConfig(t=!1){return G(this,null,function*(){this.saveInProgress=!0;try{let i=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig));if(this.saveInProgress=!1,t){if(this.isFirstSave&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let n=this.$modal.open(un,{size:"lg",backdrop:"static"});n.componentInstance.bridges=this.childBridges.map(f=>({name:f.name,username:f.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}}catch(i){this.saveInProgress=!1,console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}onIsValid(t){this.formIsValid=t}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),this.io.end(),this.schemaFormRefreshSubject.complete(),this.schemaFormUpdatedSubject.complete(),this.formUpdatedSubject.complete()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],viewQuery:function(i,n){i&1&&Gu(n.customPluginUiElementTarget,pH,5),i&2&&Ku()},inputs:{plugin:"plugin",schema:"schema",pluginConfig:"pluginConfig"},decls:24,vars:17,consts:[["custompluginui",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0",2,"min-height","110px"],[1,"text-center","primary-text"],["width","100%","height","1px;","sandbox","allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox allow-downloads allow-forms",2,"border","0"],[1,"card","card-body"],[1,"loading-overlay","text-center","primary-text","d-flex","align-items-center","justify-content-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl","me-2",3,"ngClass","ngbTooltip"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[3,"dataChange","dataChanged","isValid","configSchema","data"],[1,"text-end","custom-form-action-buttons"],[1,"btn","btn-elegant"],[1,"btn","btn-primary",3,"disabled"],[1,"btn","btn-elegant",3,"click"],[1,"btn","btn-primary",3,"click","disabled"]],template:function(i,n){if(i&1){let f=H();c(0,"div",1)(1,"div",2)(2,"h5",3),E(3),p(),c(4,"button",4),y(5,"translate"),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),p()(),c(6,"div",5),x(7,mH,2,0,"div",6),S(8,"iframe",7,0),x(10,FH,2,2,"div",8),x(11,gH,5,4,"div",8),x(12,bH,2,0,"div",9),p(),c(13,"div",10)(14,"div",11)(15,"button",12),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),E(16),y(17,"translate"),p()(),S(18,"div",13),c(19,"div",14),x(20,EH,2,4,"i",15),c(21,"button",16),O("click",function(){return j(f),N(n.savePluginConfig(!0))}),x(22,_H,2,3),x(23,yH,1,0,"i",17),p()()()()}i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,13,"form.button_close")),l(3),w(n.loading?7:-1),l(3),w(n.uiLoaded&&n.pluginConfig.length&&n.schema.singular&&n.showSchemaForm?10:-1),l(),w(n.formId?11:-1),l(),w(n.pluginSpinner?12:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(17,15,"form.button_close")," "),l(4),w(n.saveButtonDisabled?-1:20),l(),b("disabled",n.saveInProgress||n.saveButtonDisabled),l(),w(n.saveInProgress?-1:22),l(),w(n.saveInProgress?23:-1))},dependencies:[Qn,Qi,zt,Be],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:16px;background-color:#ffffffb3} body.dark-mode .loading-overlay{background-color:#242424b3}.custom-form-action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{margin-right:2px}"]})}return e})();var g6=Le(h6(),1);var ef=(()=>{class e{el=I(Wu);constructor(){}ngOnInit(){this.el.nativeElement.querySelectorAll("a").forEach(n=>{n.target="_blank",n.rel="noopener noreferrer"});let i=new g6.EmojiConvertor;this.el.nativeElement.innerHTML=i.replace_colons(this.el.nativeElement.innerHTML)}static \u0275fac=function(i){return new(i||e)};static \u0275dir=Bu({type:e,selectors:[["markdown"]]})}return e})();var vH=e=>({link:e});function BH(e,u){if(e&1&&(c(0,"div",5),S(1,"p",10),y(2,"translate"),p()),e&2){let t=h();l(),b("innerHTML",je(2,1,"accessories.message_must_use_insecure_mode",eu(4,vH,t.linkInsecure)),de)}}function xH(e,u){e&1&&(c(0,"p"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"plugins.settings.custom.homebridge-gsh.message_account_link_required")))}function wH(e,u){if(e&1){let t=H();c(0,"div",11)(1,"button",13),O("click",function(){j(t);let n=h(2);return N(n.linkAccount())}),E(2),y(3,"translate"),p()()}e&2&&(l(2),q(" ",B(3,1,"plugins.settings.custom.homebridge-gsh.label_link_account")," "))}function SH(e,u){e&1&&(c(0,"div",16)(1,"p",17)(2,"strong"),E(3),y(4,"translate"),p()()()),e&2&&(l(3),L(B(4,1,"plugins.settings.custom.homebridge-gsh.message_homebridge_restart_required")))}function IH(e,u){if(e&1&&(c(0,"div",12),S(1,"i",14),c(2,"h4",15),E(3),y(4,"titlecase"),y(5,"translate"),p(),x(6,SH,5,3,"div",16),p()),e&2){let t=h(2);l(3),xu(" ",B(4,3,t.linkType)," ",B(5,5,"plugins.settings.custom.homebridge-gsh.label_account_linked")," "),l(3),w(t.justLinked?6:-1)}}function AH(e,u){if(e&1&&S(0,"markdown",18),e&2){let t=h(3);b("data",t.schema.footerDisplay)}}function kH(e,u){if(e&1){let t=H();c(0,"div",16),x(1,AH,1,1,"markdown",18),p(),c(2,"div",19)(3,"app-schema-form",20),Me("dataChange",function(n){j(t);let f=h(2);return Oe(f.gshConfig,n)||(f.gshConfig=n),N(n)}),p()()}if(e&2){let t=h(2);l(),w(t.schema.footerDisplay?1:-1),l(2),b("configSchema",t.schema),Pe("data",t.gshConfig)}}function $H(e,u){if(e&1&&(c(0,"p"),E(1),y(2,"translate"),p(),x(3,xH,3,3,"p"),x(4,wH,4,3,"div",11),x(5,IH,7,7,"div",12),x(6,kH,4,3)),e&2){let t=h();l(),L(B(2,5,"plugins.settings.custom.homebridge-gsh.message_about")),l(2),w(t.gshConfig.token?-1:3),l(),w(t.gshConfig.token?-1:4),l(),w(t.gshConfig.token?5:-1),l(),w(t.gshConfig&&t.gshConfig.token?6:-1)}}function TH(e,u){if(e&1){let t=H();c(0,"button",21),O("click",function(){j(t);let n=h();return N(n.unlinkAccount())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.settings.custom.homebridge-gsh.label_unlink_account")," "))}function PH(e,u){if(e&1){let t=H();c(0,"button",22),O("click",function(){j(t);let n=h();return N(n.saveAndClose())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_save")," "))}var E6=(()=>{class e{$activeModal=I(ve);$api=I(he);$jwtHelper=I(k1);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginConfig;justLinked=!1;gshConfig;linkType;linkInsecure='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Enabling-Accessory-Control" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';linkDomain="https://homebridge-gsh.iot.oz.nu";linkUrl=`${this.linkDomain}/link-account`;popup;originCheckInterval;constructor(){window.addEventListener("message",this.windowMessageListener,!1)}ngOnInit(){this.pluginConfig.length||this.pluginConfig.push({name:"Google Smart Home",platform:this.schema.pluginAlias}),this.gshConfig=this.pluginConfig[0],this.parseToken()}windowMessageListener=t=>{t.origin!==this.linkDomain&&(console.error("Refusing to process message from",t.origin),console.error(t));try{let i=JSON.parse(t.data);i.token&&this.processToken(i.token)}catch(i){console.error(i)}};linkAccount(){let n=window.top.outerHeight/2+window.top.screenY-350,f=window.top.outerWidth/2+window.top.screenX-450/2;this.popup=window.open(this.linkUrl,"oznu-google-smart-home-auth",`toolbar=no, location=no, directories=no, status=no, menubar=no scrollbars=no, resizable=no, copyhistory=no, width=450, height=700, top=${n}, left=${f}`),this.originCheckInterval=setInterval(()=>{this.popup.postMessage("origin-check",this.linkDomain)},2e3)}unlinkAccount(){this.gshConfig={name:"Google Smart Home",platform:this.schema.pluginAlias},this.pluginConfig.splice(0,this.pluginConfig.length),this.saveConfig()}processToken(t){clearInterval(this.originCheckInterval),this.popup&&this.popup.close(),this.gshConfig.token=t,this.gshConfig.notice="Keep your token a secret!",this.pluginConfig.length||this.pluginConfig.push(this.gshConfig),this.parseToken(),this.saveConfig()}parseToken(){if(this.gshConfig.token)try{let t=this.$jwtHelper.decodeToken(this.gshConfig.token);this.linkType=t.id.split("|")[0].split("-")[0]}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.settings.custom.homebridge-gsh.message_invalid_token"),this.$translate.instant("toast.title_error")),delete this.gshConfig.token}}saveConfig(){return G(this,null,function*(){try{yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig)),this.justLinked=!0,this.$toastr.success(this.$translate.instant("plugins.settings.restart_required"),this.$translate.instant("plugins.settings.plugin_config_saved"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}saveAndClose(){return G(this,null,function*(){this.gshConfig.platform=this.schema.pluginAlias,this.pluginConfig[0]=this.gshConfig,yield this.saveConfig(),this.$activeModal.close()})}close(){this.$activeModal.close()}ngOnDestroy(){clearInterval(this.originCheckInterval),window.removeEventListener("message",this.windowMessageListener),this.popup&&this.popup.close()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["app-homebridge-google-smarthome"]],inputs:{plugin:"plugin",schema:"schema",pluginConfig:"pluginConfig"},decls:15,vars:10,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],["role","alert",1,"alert","alert-warning"],[1,"modal-footer"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-auto"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],[1,"mb-0",3,"innerHTML"],[1,"text-center"],[1,"text-center","mt-1"],[1,"btn","btn-primary","btn-lg",3,"click"],[1,"fas","fa-fw","fa-check-circle","primary-text",2,"font-size","50px"],[1,"mt-2"],[1,"mt-3"],[1,"primary-text"],[1,"plugin-md",3,"data"],[1,"card","p-2","pt-3","mt-4"],[3,"dataChange","configSchema","data"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-auto",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3,"Homebridge Google Smart Home"),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,BH,3,6,"div",5),x(8,$H,7,7),p(),c(9,"div",6),x(10,TH,3,3,"button",7),c(11,"button",8),O("click",function(){return n.close()}),E(12),y(13,"translate"),p(),x(14,PH,3,3,"button",9),p()()),i&2&&(l(4),K("aria-label",B(5,6,"form.button_close")),l(3),w(n.$settings.env.enableAccessories?-1:7),l(),w(n.$settings.env.enableAccessories?8:-1),l(2),w(n.gshConfig.token?10:-1),l(2),q(" ",B(13,8,"form.button_close")," "),l(2),w(n.gshConfig.token?14:-1))},dependencies:[tn,en,ef,Qn,b1,Be],encapsulation:2})}return e})();var _6=(()=>{class e{$api=I(he);$modal=I(it);plugins={"homebridge-gsh":E6};constructor(){}openSettings(t,i){return G(this,null,function*(){let n=yield this.loadPluginConfig(t.name),f=this.$modal.open(this.plugins[t.name],{size:"lg",backdrop:"static"});return f.componentInstance.plugin=t,f.componentInstance.schema=i,f.componentInstance.pluginConfig=n,f.result.catch(()=>{})})}openCustomSettingsUi(t,i){return G(this,null,function*(){let n=yield this.loadPluginConfig(t.name),f=this.$modal.open(C6,{size:"lg",backdrop:"static"});return f.componentInstance.plugin=t,f.componentInstance.schema=i,f.componentInstance.pluginConfig=n,f.result.catch(()=>{})})}loadPluginConfig(t){return G(this,null,function*(){return ae(this.$api.get(`/config-editor/plugin/${encodeURIComponent(t)}`))})}static \u0275fac=function(i){return new(i||e)};static \u0275prov=Ot({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var w6=Le(of(),1);var S6=Le(O1(),1),I6=Le(M1(),1);var y6=Le(of(),1);var OH=["pluginlogoutput"],v6=(()=>{class e{$activeModal=I(ve);$api=I(he);$log=I(j1);$modal=I(it);$toastr=I(_e);$translate=I(Ee);plugin;termTarget=Yu("pluginlogoutput");resizeEvent=new Pt;pluginAlias;constructor(){}onWindowResize(){this.resizeEvent.next(void 0)}ngOnInit(){this.getPluginLog()}getPluginLog(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{this.pluginAlias=this.plugin.name==="homebridge-config-ui-x"?"Homebridge UI":t[0]?.name||this.plugin.name,this.$log.startTerminal(this.termTarget(),{},this.resizeEvent,this.pluginAlias)},error:t=>{console.error(t),this.$toastr.error(t.error.message||t.message,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}downloadLogFile(){let t=this.$modal.open($1,{size:"lg",backdrop:"static"});t.componentInstance.title=this.$translate.instant("logs.title_download_log_file"),t.componentInstance.message=this.$translate.instant("logs.download_warning"),t.componentInstance.confirmButtonLabel=this.$translate.instant("form.button_download"),t.componentInstance.faIconClass="fas fa-fw fa-user-secret primary-text",t.result.then(()=>{this.$api.get("/platform-tools/hb-service/log/download?colour=yes",{observe:"response",responseType:"text"}).subscribe({next:i=>{if(!i.body)return;let n=i.body.split(`
18
18
  `),f="",r=!1;n.forEach(o=>{if(o){if(r)if(o.match(/36m\[.*?\]/))r=!1;else{f+=`${o.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
19
19
  `;return}o.includes(`36m[${this.pluginAlias}]`)&&(f+=`${o.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
20
20
  `,r=!0)}}),(0,y6.saveAs)(new Blob([f],{type:"text/plain;charset=utf-8"}),`${this.plugin.name}.log.txt`)},error:i=>G(this,null,function*(){let n;try{n=JSON.parse(yield i.error.text()).message}catch(f){console.error(f)}this.$toastr.error(n||this.$translate.instant("logs.download.error"),this.$translate.instant("toast.title_error"))})})}).catch(()=>{})}ngOnDestroy(){this.$log.destroyTerminal()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],viewQuery:function(i,n){i&1&&Gu(n.termTarget,OH,5),i&2&&Ku()},hostBindings:function(i,n){i&1&&O("resize",function(r){return n.onWindowResize(r)},l1)},inputs:{plugin:"plugin"},decls:20,vars:13,consts:[["pluginlogoutput",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100","p-0"],[1,"w-100","bg-black","plugin-log-output","terminal","align-self-end","w-100","h-100","mb-0","p-2"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],[1,"btn","btn-primary",3,"click"]],template:function(i,n){if(i&1){let f=H();c(0,"div",1)(1,"div",2)(2,"h5",3),E(3),p(),c(4,"button",4),y(5,"translate"),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),p()(),c(6,"div",5),S(7,"div",6,0),p(),c(9,"div",7)(10,"div",8)(11,"button",9),y(12,"translate"),O("click",function(){return j(f),N(n.$activeModal.dismiss("Dismiss"))}),E(13),y(14,"translate"),p()(),S(15,"div",10),c(16,"div",11)(17,"button",12),O("click",function(){return j(f),N(n.downloadLogFile())}),E(18),y(19,"translate"),p()()()()}i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),K("aria-label",B(5,5,"form.button_close")),l(7),K("aria-label",B(12,7,"form.button_close")),l(2),q(" ",B(14,9,"form.button_close")," "),l(5),L(B(19,11,"form.button_download")))},dependencies:[Be],encapsulation:2})}return e})();var B6=Le(Yr(),1);var Jl=()=>({app:"Homebridge v2"});function MH(e,u){e&1&&(c(0,"div",5),S(1,"i",12),p())}function jH(e,u){e&1&&(c(0,"p",9),E(1,"All your plugins are marked as compatible with Homebridge v2."),p())}function NH(e,u){e&1&&(c(0,"p",9),E(1,"To ignore this warning and continue with the update, click continue below."),p())}function qH(e,u){if(e&1&&(c(0,"p",9),E(1," Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does "),c(2,"span",17),E(3,"not"),p(),E(4," necessarily mean that they won't work. We just can't guarantee that they will. "),p(),c(5,"p",9),E(6," For more information about this update, please see the "),c(7,"a",18),E(8,"wiki page"),p(),E(9,". "),p(),x(10,NH,2,0,"p",9)),e&2){let t=h(2);l(10),w(t.isUpdating?10:-1)}}function VH(e,u){e&1&&(c(0,"div",19),E(1," Node.js Version"),S(2,"br"),c(3,"span",20),E(4),y(5,"translate"),p()(),c(6,"div",21),S(7,"i",22),p()),e&2&&(l(4),L(je(5,1,"status.readiness.node_yes",ke(4,Jl))))}function RH(e,u){e&1&&(c(0,"div",19),E(1," Node.js Version"),S(2,"br"),c(3,"span",20),E(4),y(5,"translate"),p(),S(6,"br"),c(7,"a",23),E(8),y(9,"translate"),S(10,"i",24),p()(),c(11,"div",21),S(12,"i",25),p()),e&2&&(l(4),L(je(5,2,"status.readiness.node_no",ke(7,Jl))),l(4),q(" ",B(9,5,"plugins.compat.node_link")," "))}function LH(e,u){e&1&&S(0,"i",26)}function zH(e,u){e&1&&S(0,"i",27)}function HH(e,u){if(e&1&&(c(0,"li",16)(1,"div",19),E(2),p(),c(3,"div",21),x(4,LH,1,0,"i",26),x(5,zH,1,0,"i",27),p()()),e&2){let t=u.$implicit;l(2),L(t.displayName),l(2),w(t.hb2Ready==="supported"?4:-1),l(),w(t.hb2Ready==="unknown"?5:-1)}}function UH(e,u){if(e&1&&(c(0,"div",13),S(1,"img",14),p(),x(2,jH,2,0,"p",9),x(3,qH,11,1),c(4,"ul",15)(5,"li",16),x(6,VH,8,5)(7,RH,13,8),p(),ft(8,HH,6,3,"li",16,nt),p()),e&2){let t=h();l(2),w(t.allPluginsSupported?2:-1),l(),w(t.allPluginsSupported?-1:3),l(3),w(t.nodeReady?6:7),l(2),rt(t.installedPlugins)}}function WH(e,u){if(e&1){let t=H();c(0,"button",28),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(2),y(3,"translate"),p()}e&2&&(K("aria-label",B(1,2,"form.button_close")),l(2),q(" ",B(3,4,"form.button_close")," "))}function GH(e,u){if(e&1){let t=H();c(0,"button",28),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(2),y(3,"translate"),p()}e&2&&(K("aria-label",B(1,2,"form.button_close")),l(2),q(" ",B(3,4,"form.button_close")," "))}function KH(e,u){if(e&1){let t=H();c(0,"button",29),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("update"))}),E(1),y(2,"translate"),p()}if(e&2){let t=h();b("disabled",t.loading),l(),q(" ",B(2,2,"form.label_continue")," ")}}var x6=(()=>{class e{$activeModal=I(ve);$api=I(he);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);$ws=I(ei);isUpdating=!1;loading=!0;installedPlugins=[];allPluginsSupported=!0;nodeReady=!1;io;constructor(){}ngOnInit(){return G(this,null,function*(){this.io=this.$ws.getExistingNamespace("status"),this.io.socket.connected&&(yield this.checkHomebridgeUiVersion()),yield this.loadInstalledPlugins(),this.loading=!1})}checkHomebridgeUiVersion(){return G(this,null,function*(){try{let{nodeVersion:t}=yield ae(this.io.request("get-homebridge-server-info"));this.nodeReady=(0,B6.satisfies)(t,">=20")}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}loadInstalledPlugins(){return G(this,null,function*(){this.installedPlugins=[],this.loading=!0;let t=this.$settings.env.homebridgeVersion.split(".")[0];try{let i=yield ae(this.$api.get("/plugins"));this.installedPlugins=i.filter(n=>n.name!=="homebridge-config-ui-x").map(n=>{let f=n.engines?.homebridge?.split("||").map(o=>o.trim())||[],r=t==="2"?"hide":f.some(o=>o.startsWith("^2")||o.startsWith(">=2"))?"supported":"unknown";return r==="unknown"&&(this.allPluginsSupported=!1),Se(X({},n),{hb2Ready:r})}),this.installedPlugins.length===0&&this.$activeModal.close("update")}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{isUpdating:"isUpdating"},decls:17,vars:13,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"w-100","text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],["ngSrc","assets/hb-icon.png","alt","","height","100","width","100",1,"plugin-icon-card"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"fw-bold"],["href","https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0","target","_blank"],[1,"text-start","flex-grow-1"],[1,"grey-text"],[1,"ms-3"],[1,"fas","fa-check-circle","green-text","fa-xl"],["href","https://github.com/homebridge/homebridge/wiki/How-To-Update-Node.js","target","_blank","rel","noopener noreferrer",1,"small"],[1,"fa","fa-fw","fa-external-link-alt"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.close("Dismiss")}),p()(),c(7,"div",4),x(8,MH,2,0,"div",5),x(9,UH,10,3),p(),c(10,"div",6)(11,"div",7),x(12,WH,4,6,"button",8),p(),c(13,"div",9),x(14,GH,4,6,"button",8),p(),c(15,"div",10),x(16,KH,3,4,"button",11),p()()()),i&2&&(l(3),L(je(4,7,"status.readiness.title",ke(12,Jl))),l(2),K("aria-label",B(6,10,"form.button_close")),l(3),w(n.loading?8:-1),l(),w(n.loading?-1:9),l(3),w(n.isUpdating?12:-1),l(2),w(n.isUpdating?-1:14),l(2),w(n.isUpdating?16:-1))},dependencies:[Be,E1],encapsulation:2})}return e})();var JH=(e,u)=>({pluginName:e,targetVersion:u}),XH=(e,u)=>({iconStar:e,iconThumbsUp:u}),A6=(e,u,t,i)=>({"fa-arrow-alt-circle-down":e,"fa-code-compare":u,"fa-arrow-alt-circle-up":t,"fa-trash":i}),YH=()=>["homebridge","homebridge-config-ui-x"];function ZH(e,u){e&1&&(c(0,"p",13),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"plugins.settings.restart_required")))}function QH(e,u){e&1&&(c(0,"p",13),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"restart.child_bridges")))}function eU(e,u){if(e&1&&(S(0,"p",12),y(1,"translate"),x(2,ZH,3,3,"p",13),x(3,QH,3,3,"p",13)),e&2){let t=h(3);b("innerHTML",je(1,3,"plugins.manage.github_support",Xu(6,XH,t.iconStar,t.iconThumbsUp)),de),l(2),w(t.childBridges.length===0?2:-1),l(),w(t.childBridges.length>0?3:-1)}}function tU(e,u){if(e&1&&(c(0,"div",11),S(1,"markdown",14),p()),e&2){let t=h(3);l(),b("data",t.changeLog)}}function uU(e,u){if(e&1&&(c(0,"div",8),S(1,"i",9),p(),c(2,"h5",10),E(3),y(4,"translate"),p(),x(5,eU,4,9),x(6,tU,2,1,"div",11)),e&2){let t=h(2);l(3),q(" ",je(4,3,"plugins.manage.thanks_for_updating",Xu(6,JH,t.pluginDisplayName,t.targetVersion))," "),l(2),w(t.isDisabled?-1:5),l(),w(t.changeLog?6:-1)}}function iU(e,u){if(e&1&&(c(0,"div",5),x(1,uU,7,9),p()),e&2){let t=h();l(),w(t.justUpdatedPlugin?1:-1)}}function nU(e,u){if(e&1&&(c(0,"div",6)(1,"div",8),S(2,"i",15),p(),c(3,"ul",16)(4,"li"),E(5),y(6,"translate"),p(),c(7,"li"),E(8),y(9,"translate"),p()(),c(10,"pre",17),E(11),p()()),e&2){let t=h();l(2),b("ngClass",Ki(9,A6,t.action==="Install",t.action==="Update"&&t.installedVersion,t.action==="Update"&&!t.installedVersion,t.action==="Uninstall")),l(3),L(B(6,5,"plugins.manage.online_updates")),l(3),L(B(9,7,"plugins.manage.manual_update_command")),l(3),xu(`hb-service stop
21
21
  npm install -g `,t.pluginName,"@",t.targetVersion,`
22
22
  hb-service start`)}}function fU(e,u){if(e&1&&(c(0,"span"),E(1),p()),e&2){let t=h(3);l(),q("v",t.installedVersion," \u2192 ")}}function rU(e,u){if(e&1&&E(0),e&2){let t=h(3);q(" ",t.release.name," ")}}function oU(e,u){if(e&1&&E(0),e&2){let t=h(3);q(" v",t.latestVersion," ")}}function aU(e,u){e&1&&(c(0,"ngb-alert",20)(1,"p",21),E(2),y(3,"translate"),p()()),e&2&&(b("dismissible",!1),l(2),L(B(3,2,"plugins.manage.hb_restart")))}function sU(e,u){if(e&1&&(c(0,"h5",8),x(1,fU,2,1,"span"),x(2,rU,1,1),x(3,oU,1,1),p(),x(4,aU,4,4,"ngb-alert",20)),e&2){let t=h(2);l(),w(t.installedVersion?1:-1),l(),w(t.release.name?2:-1),l(),w(t.release.name?-1:3),l(),w(ke(4,YH).includes(t.pluginName)?4:-1)}}function DU(e,u){if(e&1&&(c(0,"div",5)(1,"div",8),S(2,"i",18),p(),x(3,sU,5,5),c(4,"div",19),S(5,"markdown",14),p()()),e&2){let t=h();l(2),b("ngClass",Ki(3,A6,t.action==="Install"&&!t.installedVersion,t.action==="Install"&&t.installedVersion,t.action==="Update",t.action==="Uninstall")),l(),w(t.release.name||t.latestVersion?3:-1),l(2),b("data",t.release.changelog)}}function lU(e,u){if(e&1){let t=H();c(0,"button",28),y(1,"translate"),O("click",function(){j(t);let n=h(2);return N(n.$activeModal.dismiss("Dismiss"))}),E(2),y(3,"translate"),p()}e&2&&(K("aria-label",B(1,2,"form.button_close")),l(2),q(" ",B(3,4,"form.button_close")," "))}function dU(e,u){if(e&1){let t=H();c(0,"button",28),y(1,"translate"),O("click",function(){j(t);let n=h(2);return N(n.$activeModal.dismiss("Dismiss"))}),E(2),y(3,"translate"),p()}e&2&&(K("aria-label",B(1,2,"form.button_close")),l(2),q(" ",B(3,4,"form.button_close")," "))}function cU(e,u){if(e&1){let t=H();c(0,"button",29),O("click",function(){j(t);let n=h(2);return N(n.update())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.button_update")," "))}function pU(e,u){if(e&1){let t=H();c(0,"button",29),O("click",function(){j(t);let n=h(2);return N(n.childBridges.length>0?n.onRestartChildBridgeClick():n.onRestartHomebridgeClick())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"menu.tooltip_restart")," "))}function mU(e,u){if(e&1){let t=H();c(0,"button",30),O("click",function(){j(t);let n=h(2);return N(n.downloadLogFile())}),E(1),y(2,"translate"),p()}e&2&&(l(),L(B(2,1,"form.button_download")))}function FU(e,u){if(e&1&&(c(0,"div",7)(1,"div",22),x(2,lU,4,6,"button",23),p(),c(3,"div",24),x(4,dU,4,6,"button",23),p(),c(5,"div",25),x(6,cU,3,3,"button",26),x(7,pU,3,3,"button",26),x(8,mU,3,3,"button",27),p()()),e&2){let t=h();l(2),w(!t.justUpdatedPlugin&&t.onlineUpdateOk||t.justUpdatedPlugin&&(!t.isDisabled||t.actionFailed)?2:-1),l(2),w(t.justUpdatedPlugin&&t.isDisabled&&!t.actionFailed||!t.onlineUpdateOk?4:-1),l(2),w(t.onlineUpdateOk&&t.showReleaseNotes?6:-1),l(),w(t.justUpdatedPlugin&&!t.isDisabled?7:-1),l(),w(t.actionFailed?8:-1)}}var tf=(()=>{class e{$activeModal=I(ve);$api=I(he);$modal=I(it);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);$ws=I(ei);pluginName;pluginDisplayName;targetVersion="latest";latestVersion;installedVersion;isDisabled;action;actionComplete=!1;actionFailed=!1;showReleaseNotes=!1;justUpdatedPlugin=!1;updateToBeta=!1;changeLog;childBridges=[];release;presentTenseVerb;pastTenseVerb;onlineUpdateOk;iconStar='<i class="fas fa-fw fa-star primary-text"></i>';iconThumbsUp='<i class="fas fa-fw fa-thumbs-up primary-text"></i>';io;toastSuccess;term=new S6.Terminal;termTarget;fitAddon=new I6.FitAddon;errorLog="";constructor(){this.term.loadAddon(this.fitAddon)}ngOnInit(){switch(this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-log-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",t=>{this.term.write(t);let i=t.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();i&&(this.errorLog+=`${i}\r
23
- `)}),this.toastSuccess=this.$translate.instant("toast.title_success"),this.onlineUpdateOk=!(["homebridge","homebridge-config-ui-x"].includes(this.pluginName)&&this.$settings.env.platform==="win32"),this.action){case"Install":this.install(),this.presentTenseVerb=this.$translate.instant("plugins.manage.install"),this.pastTenseVerb=this.$translate.instant("plugins.manage.installed");break;case"Uninstall":this.uninstall(),this.presentTenseVerb=this.$translate.instant("plugins.manage.uninstall"),this.pastTenseVerb=this.$translate.instant("plugins.manage.uninstalled");break;case"Update":switch(this.targetVersion){case"latest":this.updateToBeta=!1,this.getReleaseNotes();break;case"alpha":case"beta":case"test":this.updateToBeta=!0,this.getReleaseNotes();break;default:this.update()}this.presentTenseVerb=this.$translate.instant("plugins.manage.update"),this.pastTenseVerb=this.$translate.instant("plugins.manage.updated");break}}install(){if(this.onlineUpdateOk){if(this.pluginName==="homebridge")return this.upgradeHomebridge();this.io.request("install",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(`${this.pastTenseVerb} ${this.pluginName}`,this.toastSuccess),window.location.href=`/plugins?installed=${this.pluginName}`},error:t=>{this.actionFailed=!0,console.error(t),this.$router.navigate(["/plugins"]),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}}uninstall(){this.io.request("uninstall",{name:this.pluginName,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$router.navigate(["/plugins"]),this.$modal.open(pu,{size:"lg",backdrop:"static"})},error:t=>{this.actionFailed=!0,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}update(){if(this.showReleaseNotes=!1,!!this.onlineUpdateOk){if(this.pluginName==="homebridge")return this.upgradeHomebridge();this.io.request("update",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>G(this,null,function*(){if(this.pluginName==="homebridge-config-ui-x"){this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{window.location.href="/restart"},error:t=>{console.error(t),window.location.href="/restart"}});return}try{yield Promise.all([this.getChangeLog(),this.getChildBridges()])}catch(t){console.error(t)}this.actionComplete=!0,this.justUpdatedPlugin=!0,this.$router.navigate(["/plugins"])}),error:t=>{this.actionFailed=!0,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}}upgradeHomebridge(){return G(this,null,function*(){let t="update";if(Number(this.installedVersion.split(".")[0])<2&&["2","alpha","beta"].includes(this.targetVersion.split(".")[0])){let i=this.$modal.open(x6,{size:"lg",backdrop:"static"});i.componentInstance.isUpdating=!0,t=yield i.result}t==="update"?this.io.request("homebridge-update",{version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{this.$router.navigate(["/restart"])},error:i=>{console.error(i),this.$router.navigate(["/restart"])}})},error:i=>{this.actionFailed=!0,console.error(i),this.$toastr.error(i.message,this.$translate.instant("toast.title_error")),this.$activeModal.close()}}):this.$activeModal.close()})}getChangeLog(){return G(this,null,function*(){let t=yield ae(this.$api.get(`/plugins/changelog/${encodeURIComponent(this.pluginName)}`));this.changeLog=t.changelog})}getChildBridges(){return G(this,null,function*(){(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.pluginName===i.plugin&&this.childBridges.push(i)})})}getReleaseNotes(){this.$api.get(`/plugins/release/${encodeURIComponent(this.pluginName)}`).subscribe({next:t=>{this.showReleaseNotes=!0,this.release=t},error:()=>{this.onlineUpdateOk&&this.update()}})}onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}onRestartChildBridgeClick(){return G(this,null,function*(){try{for(let i of this.childBridges)yield ae(this.$api.put(`/server/restart/${i.username}`,{}));let t=this.$modal.open(v6,{size:"xl",backdrop:"static"});t.componentInstance.plugin={name:this.pluginName}}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error"))}finally{this.$activeModal.close()}})}downloadLogFile(){let t=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,w6.saveAs)(t,`${this.pluginName}-error.log`)}ngOnDestroy(){this.io.end()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{pluginName:"pluginName",pluginDisplayName:"pluginDisplayName",targetVersion:"targetVersion",latestVersion:"latestVersion",installedVersion:"installedVersion",isDisabled:"isDisabled",action:"action"},decls:11,vars:9,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],["id","plugin-log-output",1,"modal-body",3,"hidden"],[1,"modal-body","plugin-modal-body"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"mb-3","text-center"],[1,"far","fa-fw","fa-check-circle","primary-text",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"alert","p-3","pb-1","mt-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"plugin-md",3,"data"],[1,"fas","fa-fw","primary-text",2,"font-size","75px",3,"ngClass"],[1,"mb-3"],[1,"p-2","mb-0",2,"background-color","#efefef"],[1,"far","fa-fw","primary-text",2,"font-size","75px",3,"ngClass"],[1,"alert","p-3","pb-1","mb-0"],["type","warning",1,"mb-3",3,"dismissible"],[1,"w-100","text-center","mb-0"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-primary"],[1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-primary",3,"click"],[1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),S(6,"div",4),x(7,iU,2,1,"div",5),x(8,nU,12,14,"div",6),x(9,DU,6,8,"div",5),x(10,FU,9,5,"div",7),p()),i&2&&(l(3),L(n.pluginDisplayName),l(),K("aria-label",B(5,7,"form.button_close")),l(2),b("hidden",!n.onlineUpdateOk||n.actionComplete||n.showReleaseNotes),l(),w(n.actionComplete?7:-1),l(),w(n.onlineUpdateOk?-1:8),l(),w(n.showReleaseNotes&&!n.actionComplete&&n.onlineUpdateOk?9:-1),l(),w(!n.onlineUpdateOk||n.actionComplete||n.showReleaseNotes||n.actionFailed?10:-1))},dependencies:[tn,en,ef,Be,zt,du],styles:[".plugin-modal-body[_ngcontent-%COMP%]{max-height:60vh;overflow-y:auto;overflow-x:hidden} .plugin-md{text-align:left;font-size:.95rem;word-wrap:break-word} .plugin-md img{max-width:100%} .plugin-md h1{font-size:1.4rem;font-weight:300} .plugin-md h2{font-size:1.3rem;font-weight:300} .plugin-md h3{font-size:1.2rem;font-weight:300} .plugin-md h4{font-size:1.1rem;font-weight:300} .plugin-md h5{font-size:1rem;font-weight:300} .plugin-md pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}"]})}return e})();var k6=Le(Yr(),1);var CU=()=>["homebridge","homebridge-config-ui-x"];function hU(e,u){e&1&&(c(0,"div",5),S(1,"i",12),p())}function gU(e,u){if(e&1&&(S(0,"i",20),c(1,"h6",21),E(2),y(3,"translate"),p(),c(4,"p",21),E(5),y(6,"translate"),c(7,"span",22),E(8),p()()),e&2){let t=h(2);l(2),L(B(3,3,"plugins.manage.select_version")),l(3),q(" ",B(6,5,"plugins.status_installed"),": "),l(3),q("v",t.plugin.installedVersion)}}function bU(e,u){e&1&&(S(0,"i",23),c(1,"h6",21),E(2),y(3,"translate"),p()),e&2&&(l(2),L(B(3,1,"plugins.manage.select_version")))}function EU(e,u){e&1&&(c(0,"ngb-alert",13)(1,"p",24),E(2),y(3,"translate"),p()()),e&2&&(b("dismissible",!1),l(2),L(B(3,2,"plugins.manage.hb_restart")))}function _U(e,u){if(e&1){let t=H();c(0,"button",28),O("click",function(){j(t);let n=h().$implicit,f=h(2);return N(f.doInstall(n.version))}),S(1,"i",29),p()}}function yU(e,u){e&1&&(c(0,"button",27),S(1,"i",30),p())}function vU(e,u){if(e&1&&(c(0,"li",15)(1,"span",8),E(2),S(3,"br"),c(4,"small",25),E(5),p()(),x(6,_U,2,0,"button",26)(7,yU,2,0,"button",27),p()),e&2){let t=u.$implicit,i=h(2);l(2),q(" ",t.tag," "),l(3),q("v",t.version),l(),w(i.plugin.installedVersion!==t.version?6:7)}}function BU(e,u){e&1&&E(0," \u2713 ")}function xU(e,u){if(e&1&&(c(0,"option",18),E(1),x(2,BU,1,0),p()),e&2){let t=u.$implicit,i=h(2);b("value",t.version)("selected",i.versionSelect==t.version),l(),q(" v",t.version," "),l(),w(t.version==i.plugin.installedVersion?2:-1)}}function wU(e,u){e&1&&S(0,"i",30)}function SU(e,u){e&1&&S(0,"i",29)}function IU(e,u){if(e&1){let t=H();c(0,"button",31),O("click",function(){j(t);let n=h(2);return N(n.doInstall(n.versionSelect))}),x(1,wU,1,0,"i",30)(2,SU,1,0,"i",29),p()}if(e&2){let t=h(2);b("disabled",t.versionSelect===t.plugin.installedVersion),l(),w(t.versionSelect===t.plugin.installedVersion?1:2)}}function AU(e,u){if(e&1){let t=H();c(0,"div",6),x(1,gU,9,7)(2,bU,4,3),x(3,EU,4,4,"ngb-alert",13),c(4,"ul",14),ft(5,vU,8,3,"li",15,nt),c(7,"li",15)(8,"div",16),E(9),y(10,"translate"),S(11,"br"),c(12,"select",17),Me("ngModelChange",function(n){j(t);let f=h();return Oe(f.versionSelect,n)||(f.versionSelect=n),N(n)}),ft(13,xU,3,4,"option",18,nt),p()(),x(15,IU,3,2,"button",19),p()()()}if(e&2){let t=h();l(),w(t.plugin.installedVersion?1:2),l(2),w(ke(7,CU).includes(t.plugin.name)?3:-1),l(2),rt(t.versionsWithTags),l(4),q(" ",B(10,5,"plugins.manage.all_versions")," "),l(3),Pe("ngModel",t.versionSelect),l(),rt(t.versions),l(2),w(t.versionSelect?15:-1)}}var $6=(()=>{class e{$activeModal=I(ve);$api=I(he);$toastr=I(_e);$translate=I(Ee);plugin;loading=!0;versions=[];versionsWithTags=[];versionSelect;constructor(){}ngOnInit(){this.versionSelect=this.plugin.installedVersion||this.plugin.latestVersion,this.lookupVersions()}lookupVersions(){this.$api.get(`/plugins/lookup/${encodeURIComponent(this.plugin.name)}/versions`).subscribe({next:t=>{let i=new Set;for(let[n,f]of Object.entries(t.versions)){this.versions.push({version:n,engines:f.engines||null});let r=Object.keys(t.tags).find(o=>t.tags[o]===n);r&&(this.versionsWithTags.push({version:n,tag:r}),i.add(n))}this.versions.sort((n,f)=>(0,k6.rcompare)(n.version,f.version)),this.versionsWithTags.sort((n,f)=>{let r=["latest","next","beta","alpha"],o=r.includes(n.tag)?r.indexOf(n.tag):999,a=r.includes(f.tag)?r.indexOf(f.tag):999;return o-a}),!this.versions.find(n=>n.version===this.versionSelect)&&t.tags.latest&&(this.versionSelect=t.tags.latest),this.loading=!1},error:t=>{console.error(t),this.$toastr.error(t.error.message||t.message,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}doInstall(t){this.$activeModal.close({name:this.plugin.name,version:t,engines:this.versions.find(i=>i.version===t).engines,action:this.plugin.installedVersion?"alternate":"install"})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100"],[1,"w-100","text-center","primary-text"],[1,"w-100","text-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],["type","warning",1,"mb-3",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"text-start",2,"min-width","50%"],[1,"custom-select","w-100",2,"font-size","0.875rem",3,"ngModelChange","ngModel"],[3,"value","selected"],[1,"btn","btn-primary","m-0","ms-3",3,"disabled"],[1,"fas","fa-fw","fa-code-compare","primary-text","mb-3",2,"font-size","75px"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-fw","fa-arrow-alt-circle-down","primary-text","mb-3",2,"font-size","75px"],[1,"w-100","text-center","mb-0"],[1,"grey-text","font-monospace"],[1,"btn","btn-primary","m-0","ms-3"],["disabled","",1,"btn","btn-primary","m-0","ms-3"],[1,"btn","btn-primary","m-0","ms-3",3,"click"],[1,"fas","fa-fw","fa-arrow-alt-circle-down"],[1,"fas","fa-fw","fa-check-circle"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,hU,2,0,"div",5)(8,AU,16,8,"div",6),p(),c(9,"div",7),S(10,"div",8),c(11,"div",9)(12,"button",10),y(13,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),E(14),y(15,"translate"),p()(),S(16,"div",11),p()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),K("aria-label",B(5,5,"form.button_close")),l(3),w(n.loading?7:8),l(5),K("aria-label",B(13,7,"form.button_close")),l(2),q(" ",B(15,9,"form.button_close")," "))},dependencies:[tu,Bi,xi,Zi,vt,Zu,Be,du],encapsulation:2})}return e})();var T6=Le(eb(),1);function kU(e,u){e&1&&(c(0,"div",5),S(1,"i",14),p())}function $U(e,u){e&1&&(c(0,"div",6),E(1),y(2,"translate"),y(3,"translate"),p()),e&2&&(l(),xu(" ",B(2,2,"plugins.settings.message_manual_config_required")," ",B(3,4,"plugins.settings.message_consult_documentation")," "))}function TU(e,u){if(e&1){let t=H();c(0,"button",25),y(1,"translate"),O("click",function(){j(t);let n=h(2).$index,f=h(2);return N(f.removeBlock(n))}),S(2,"i",26),p()}e&2&&b("ngbTooltip",B(1,1,"form.button_delete"))}function PU(e,u){if(e&1&&x(0,TU,3,3,"button",24),e&2){let t=h(3);w(!(t.schema!=null&&t.schema.singular)||t.pluginConfig.length>1?0:-1)}}function OU(e,u){if(e&1){let t=H();c(0,"div",15)(1,"div",16)(2,"div",17)(3,"h5",18),E(4),p(),c(5,"div"),x(6,PU,1,1),c(7,"button",19),y(8,"translate"),O("click",function(){let n=j(t).$index,f=h(2);return N(f.editBlock(n))}),S(9,"i",20),p()()()(),c(10,"div",21)(11,"div",22)(12,"ngx-monaco-editor",23),Me("ngModelChange",function(n){j(t);let f=h(2);return Oe(f.currentBlock,n)||(f.currentBlock=n),N(n)}),O("onInit",function(n){j(t);let f=h(2);return N(f.onEditorInit(n))}),p()()()()}if(e&2){let t=u.$implicit,i=u.$index,n=h(2);b("ngbAccordionItem","configBlock."+i)("collapsed",n.show!=="configBlock."+i)("id","configBlock."+i),l(4),L(t.name||n.pluginAlias),l(2),w(n.show==="configBlock."+i?6:-1),l(),b("ngbTooltip",B(8,8,"form.button_edit")),l(5),b("options",n.editorOptions),Pe("ngModel",n.currentBlock)}}function MU(e,u){if(e&1&&(c(0,"div",7),ft(1,OU,13,10,"div",15,nt),p()),e&2){let t=h();b("closeOthers",!0),l(),rt(t.pluginConfig)}}function jU(e,u){if(e&1){let t=H();c(0,"button",30),O("click",function(){j(t);let n=h(2);return N(n.addBlock())}),S(1,"i",31),p()}}function NU(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"form.button_save")," ")}function qU(e,u){e&1&&S(0,"i",29)}function VU(e,u){if(e&1){let t=H();x(0,jU,2,0,"button",27),c(1,"button",28),O("click",function(){j(t);let n=h();return N(n.save())}),x(2,NU,2,3),x(3,qU,1,0,"i",29),p()}if(e&2){let t=h();w(t.schema!=null&&t.schema.singular?-1:0),l(),b("disabled",t.saveInProgress),l(),w(t.saveInProgress?-1:2),l(),w(t.saveInProgress?3:-1)}}function RU(e,u){if(e&1){let t=H();c(0,"button",32),O("click",function(){j(t);let n=h();return N(n.openFullConfigEditor())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.settings.label_open_config_editor")," "))}var Xl=(()=>{class e{$activeModal=I(ve);$api=I(he);$md=I(O1);$modal=I(it);$plugin=I(_i);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginAlias;pluginType;loading=!0;canConfigure=!1;show="";pluginConfig;currentBlock;currentBlockIndex=null;saveInProgress=!1;childBridges=[];isFirstSave=!1;monacoEditor;editorOptions;constructor(){}get arrayKey(){return this.pluginType==="accessory"?"accessories":"platforms"}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0},this.$md.detect.mobile()?(this.loading=!1,this.canConfigure=!1):this.loadPluginAlias()}onEditorInit(t){return G(this,null,function*(){window.editor=t,this.monacoEditor=t,yield this.monacoEditor.getModel().setValue(this.currentBlock),yield this.monacoEditor.getAction("editor.action.formatDocument").run()})}loadPluginAlias(){this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{t.pluginAlias&&t.pluginType?(this.pluginAlias=t.pluginAlias,this.pluginType=t.pluginType,this.loadHomebridgeConfig()):this.loading=!1},error:()=>{this.loading=!1}})}loadHomebridgeConfig(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe(t=>{this.pluginConfig=t,this.canConfigure=!0,this.loading=!1,this.pluginConfig.length?this.editBlock(0):(this.isFirstSave=!0,this.addBlock())})}addBlock(){if(!this.saveCurrentBlock()){this.$toastr.error(this.$translate.instant("plugins.config.please_fix"),this.$translate.instant("toast.title_error"));return}this.pluginConfig.push({[this.pluginType]:this.pluginAlias,name:this.pluginAlias}),this.editBlock(this.pluginConfig.length-1)}saveCurrentBlock(){if(this.currentBlockIndex!==null&&this.monacoEditor){let t=this.monacoEditor.getModel().getValue().trim(),i;t.charAt(0)==='"'&&t.charAt(t.length-1)==="]"&&(t=`{${t}}`);try{i=T6.default.parse(t)}catch(f){return console.error(f),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error")),!1}if(Array.isArray(i)||typeof i!="object")return this.$toastr.error(this.$translate.instant("plugins.config.must_be_object"),this.$translate.instant("toast.title_error")),!1;if(!i[this.pluginType]&&Array.isArray(i[this.arrayKey])&&i[this.arrayKey].length&&Object.keys(i).length===1&&(i=i[this.arrayKey][0]),this.pluginType==="accessory"&&(!i.name||typeof i.name!="string"))return this.$toastr.error(this.$translate.instant("plugins.config.name_property"),this.$translate.instant("toast.title_error")),i.name="",this.monacoEditor.getModel().setValue(JSON.stringify(i,null,4)),!1;let n=this.pluginConfig[this.currentBlockIndex];Object.keys(n).forEach(f=>delete n[f]),Object.assign(n,i),n[this.pluginType]=this.pluginAlias}return!0}editBlock(t){this.saveCurrentBlock()&&(this.show=`configBlock.${t}`,this.currentBlockIndex=t,this.currentBlock=JSON.stringify(this.pluginConfig[this.currentBlockIndex],null,4))}removeBlock(t){let i=this.pluginConfig[t],n=this.pluginConfig.findIndex(f=>f===i);n>-1&&this.pluginConfig.splice(n,1),this.currentBlockIndex=null,this.currentBlock=void 0,this.show=""}save(){return G(this,null,function*(){if(this.saveInProgress=!0,!this.saveCurrentBlock()){this.saveInProgress=!1;return}try{let t=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig));if(this.$activeModal.close(),this.isFirstSave&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let i=this.$modal.open(un,{size:"lg",backdrop:"static"});i.componentInstance.bridges=this.childBridges.map(n=>({name:n.name,username:n.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress=!1}})}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema"},decls:19,vars:14,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"text-center","primary-text"],[1,"alert","alert-warning","mb-0"],["ngbAccordion","",3,"closeOthers"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],[1,"btn","btn-primary"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],["ngbAccordionToggle","","container","modal","openDelay","150","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-edit"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body","p-0",2,"height","400px"],[1,"flex-grow-1","h-100","w-100","mb-0","pb-0",3,"ngModelChange","onInit","options","ngModel"],["container","modal","openDelay","150","triggers","hover",1,"btn","btn-danger","m-0","ms-3",3,"ngbTooltip"],["container","modal","openDelay","150","triggers","hover",1,"btn","btn-danger","m-0","ms-3",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-trash"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-fw","fa-plus"],[1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.close()}),p()(),c(6,"div",4),x(7,kU,2,0,"div",5),x(8,$U,4,6,"div",6),x(9,MU,3,1,"div",7),p(),c(10,"div",8)(11,"div",9)(12,"button",10),O("click",function(){return n.$activeModal.close()}),E(13),y(14,"translate"),p()(),S(15,"div",11),c(16,"div",12),x(17,VU,4,4),x(18,RU,3,3,"button",13),p()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,10,"form.button_close")),l(3),w(n.loading?7:-1),l(),w(!n.loading&&!n.canConfigure?8:-1),l(),w(!n.loading&&n.canConfigure?9:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(14,12,"form.button_close")," "),l(4),w(n.canConfigure?17:-1),l(),w(n.canConfigure?-1:18))},dependencies:[Xr,Jr,Kr,Qi,Wr,Ur,A1,tu,vt,Zu,Be,Gr],styles:[".no-padding-card-body .card-body{padding:0!important} body.dark-mode .no-padding-card-body .card-body{background-color:#1e1e1e}.manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var P6=e=>({link:e}),LU=(e,u)=>({"green-text":e,"grey-text":u});function zU(e,u){if(e&1){let t=H();c(0,"button",13),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),K("aria-label",B(1,2,"form.button_close"))}}function HU(e,u){e&1&&(c(0,"div",5),S(1,"i",14),p())}function UU(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"child_bridge.bridges_paired_2")))}function WU(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),q("",B(2,1,"child_bridge.select_type"),":"))}function GU(e,u){if(e&1&&(c(0,"li"),E(1),y(2,"translate"),p(),x(3,UU,3,3,"li"),x(4,WU,3,3,"li")),e&2){let t=h(2);l(),L(B(2,3,"child_bridge.bridges_paired")),l(2),w(t.configBlocks.length===1&&!t.deviceInfo[t.configBlocks[0]._bridge==null?null:t.configBlocks[0]._bridge.username]&&t.originalBridges.length===0?3:-1),l(),w(t.canConfigure?4:-1)}}function KU(e,u){if(e&1&&(c(0,"option",29),E(1),p()),e&2){let t=u.$implicit,i=u.$index;b("value",i),l(),L(t.name||t.platform||t.accessory)}}function JU(e,u){if(e&1){let t=H();c(0,"li",25),E(1),y(2,"translate"),p(),c(3,"li",23)(4,"label",26),E(5),y(6,"translate"),p(),c(7,"div",27)(8,"select",28),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.selectedBlock,n)||(f.selectedBlock=n),N(n)}),O("change",function(n){j(t);let f=h(3);return N(f.onBlockChange(n.target.value))}),ft(9,KU,2,2,"option",29,nt),p()()()}if(e&2){let t=h(3);l(),L(B(2,3,"form.label.changes_kept")),l(4),q(" ",B(6,5,t.isPlatform?"child_bridge.config.platform":"child_bridge.config.accessory")," "),l(3),Pe("ngModel",t.selectedBlock),l(),rt(t.configBlocks)}}function XU(e,u){if(e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",31),E(5),p()()),e&2){let t=h(3);l(2),q(" ",B(3,2,t.isPlatform?"child_bridge.config.platform":"child_bridge.config.accessory")," "),l(3),q(" ",t.configBlocks[t.selectedBlock].name||t.configBlocks[t.selectedBlock].platform||t.configBlocks[t.selectedBlock].accessory," ")}}function YU(e,u){e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",32),E(5),y(6,"translate"),p()()),e&2&&(l(2),L(B(3,2,"child_bridge.config.use")),l(3),q(" ",B(6,4,"child_bridge.config.prevent")," "))}function ZU(e,u){if(e&1&&(c(0,"option",29),E(1),p()),e&2){let t=u.$implicit;b("value",t.username),l(),xu("",t.name," (",t.username,")")}}function QU(e,u){if(e&1){let t=H();c(0,"li",23)(1,"label",37),E(2),y(3,"translate"),p(),c(4,"div",27)(5,"select",38),O("change",function(n){j(t);let f=h(4);return N(f.onLinkBridgeChange(n.target.value))}),c(6,"option",29),E(7),y(8,"translate"),p(),ft(9,ZU,2,3,"option",29,nt),p()()()}if(e&2){let t=h(4);l(2),L(B(3,2,"child_bridge.config.or_link")),l(5),L(B(8,4,"child_bridge.config.select_existing")),l(2),rt(t.bridgesAvailableForLink)}}function eW(e,u){if(e&1){let t=H();c(0,"li",33)(1,"span",7),E(2),y(3,"translate"),p(),c(4,"div",34)(5,"input",35),O("change",function(){j(t);let n=h(3);return N(n.toggleExternalBridge(n.configBlocks[n.selectedBlock],n.enabledBlocks[n.selectedBlock],n.selectedBlock))}),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.enabledBlocks[f.selectedBlock],n)||(f.enabledBlocks[f.selectedBlock]=n),N(n)}),p(),S(6,"label",36),p()(),x(7,QU,11,6,"li",23)}if(e&2){let t=h(3);l(2),L(B(3,5,"child_bridge.config.use")),l(3),b("id","toggleExternalBridgeInput_"+t.selectedBlock),Pe("ngModel",t.enabledBlocks[t.selectedBlock]),l(),b("for","toggleExternalBridgeInput_"+t.selectedBlock),l(),w(!(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username)&&t.bridgesAvailableForLink.length?7:-1)}}function tW(e,u){if(e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",31),E(5),p()(),c(6,"li",23)(7,"label",30),E(8),y(9,"translate"),p(),c(10,"div",31),E(11),p()(),c(12,"li",23)(13,"label",30),E(14),y(15,"translate"),p(),c(16,"div",31),E(17),p()()),e&2){let t=h(3);l(2),L(B(3,6,"accessories.bridge_link_username")),l(3),q(" ",t.currentlySelectedLink.username," "),l(3),L(B(9,8,"accessories.bridge_link_port")),l(3),q(" ",t.currentlySelectedLink.port," "),l(3),L(B(15,10,"accessories.bridge_link_name")),l(3),q(" ",t.currentlySelectedLink.name," ")}}function uW(e,u){e&1&&(c(0,"span"),E(1),y(2,"translate"),p()),e&2&&(l(),q(" \xB7 ",B(2,1,"status.code_scan")," "))}function iW(e,u){if(e&1){let t=H();c(0,"li",33)(1,"span",7),E(2),y(3,"translate"),c(4,"code"),E(5,"-D"),p()(),c(6,"div",34)(7,"input",51),y(8,"translate"),Me("ngModelChange",function(n){j(t);let f=h(5);return Oe(f.configBlocks[f.selectedBlock]._bridge.debugModeEnabled,n)||(f.configBlocks[f.selectedBlock]._bridge.debugModeEnabled=n),N(n)}),p(),S(9,"label",36),p()()}if(e&2){let t=h(5);l(2),q("",B(3,5,"child_bridge.config.debug")," "),l(5),b("id","homebridgeDebugMode_"+t.selectedBlock),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.debugModeEnabled),K("aria-label",B(8,7,"settings.startup.debug")),l(2),b("for","homebridgeDebugMode_"+t.selectedBlock)}}function nW(e,u){if(e&1){let t=H();c(0,"li",39)(1,"div",40),S(2,"app-qrcode",41),c(3,"p",42),E(4),p(),c(5,"p",43),S(6,"i",44),E(7),y(8,"translate"),x(9,uW,3,3,"span"),p()()(),c(10,"li",23)(11,"label",30),E(12),y(13,"translate"),p(),c(14,"div",31),E(15),p()(),c(16,"li",23)(17,"label",30),E(18),y(19,"translate"),p(),c(20,"div",31),E(21),p()(),c(22,"li",23)(23,"label",30),E(24),y(25,"translate"),p(),c(26,"div",27)(27,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.name,n)||(f.configBlocks[f.selectedBlock]._bridge.name=n),N(n)}),p()()(),c(28,"li",23)(29,"label",30),E(30),y(31,"translate"),p(),c(32,"div",27)(33,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.manufacturer,n)||(f.configBlocks[f.selectedBlock]._bridge.manufacturer=n),N(n)}),p()()(),c(34,"li",23)(35,"label",30),E(36),y(37,"translate"),p(),c(38,"div",27)(39,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.model,n)||(f.configBlocks[f.selectedBlock]._bridge.model=n),N(n)}),p()()(),c(40,"li",23)(41,"label",30),E(42),y(43,"translate"),p(),c(44,"div",27)(45,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.firmwareRevision,n)||(f.configBlocks[f.selectedBlock]._bridge.firmwareRevision=n),N(n)}),p()()(),x(46,iW,10,9,"li",33),c(47,"li",23)(48,"label",30)(49,"span",46),E(50,"DEBUG"),p(),S(51,"br")(52,"small",47),y(53,"translate"),p(),c(54,"div",27)(55,"input",48),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.env.DEBUG,n)||(f.configBlocks[f.selectedBlock]._bridge.env.DEBUG=n),N(n)}),p()()(),c(56,"li",23)(57,"label",30)(58,"span",46),E(59,"NODE_OPTIONS"),p(),S(60,"br"),c(61,"small",49),E(62),y(63,"translate"),p()(),c(64,"div",27)(65,"input",50),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.env.NODE_OPTIONS,n)||(f.configBlocks[f.selectedBlock]._bridge.env.NODE_OPTIONS=n),N(n)}),p()()()}if(e&2){let t=h(4);l(2),b("data",t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._setupCode),l(2),L(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username].pincode),l(2),b("ngClass",Xu(41,LU,t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired,!t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired)),l(),q(" ",B(8,22,t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),l(2),w(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired?-1:9),l(3),L(B(13,24,"accessories.bridge_username")),l(3),q(" ",t.configBlocks[t.selectedBlock]._bridge.username," "),l(3),L(B(19,26,"accessories.bridge_port")),l(3),q(" ",t.configBlocks[t.selectedBlock]._bridge.port," "),l(3),L(B(25,28,"child_bridge.config.name")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.name),l(3),L(B(31,30,"child_bridge.config.manufacturer")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.manufacturer),l(3),L(B(37,32,"child_bridge.config.model")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.model),l(3),L(B(43,34,"child_bridge.config.firmware")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.firmwareRevision),l(),w(t.canShowBridgeDebug?46:-1),l(6),b("innerHTML",je(53,36,"settings.service.debug_tooltip",eu(44,P6,t.linkDebug)),de),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.env.DEBUG),l(7),L(B(63,39,"settings.service.node_tooltip")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.env.NODE_OPTIONS)}}function fW(e,u){if(e&1&&x(0,nW,66,46),e&2){let t=h(3);w(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]?0:-1)}}function rW(e,u){e&1&&(c(0,"ngb-alert",24),E(1),y(2,"translate"),S(3,"br"),E(4),y(5,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,3,"child_bridge.restart_homebridge")," "),l(3),q("",B(5,5,"child_bridge.return_to_pair")," "))}function oW(e,u){if(e&1&&(c(0,"ul",22),x(1,JU,11,7),x(2,XU,6,4,"li",23),x(3,YU,7,6,"li",23),x(4,eW,8,7),x(5,tW,18,12),x(6,fW,1,1),p(),x(7,rW,6,7,"ngb-alert",24)),e&2){let t=h(2);l(),w(t.configBlocks.length>1?1:-1),l(),w(t.configBlocks.length===1?2:-1),l(),w(t.currentBridgeHasLinks?3:-1),l(),w(t.currentBridgeHasLinks?-1:4),l(),w(t.currentlySelectedLink?5:-1),l(),w(!t.currentlySelectedLink&&(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username)?6:-1),l(),w(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username&&t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]===!1?7:-1)}}function aW(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"child_bridge.confirm_delete_2")," ")}function sW(e,u){if(e&1&&(c(0,"li"),E(1),c(2,"span",46),E(3),p(),E(4,") "),p()),e&2){let t=u.$implicit,i=h(3);l(),q(" ",t.bridgeName||(i.deviceInfo[t.id]==null?null:i.deviceInfo[t.id].displayName)," ("),l(2),L(t.id)}}function DW(e,u){if(e&1&&(c(0,"ngb-alert",19)(1,"p"),E(2),y(3,"translate"),x(4,aW,2,3),p(),c(5,"div",9)(6,"ul",52),ft(7,sW,5,2,"li",null,nt),p()()()),e&2){let t=h(2);b("dismissible",!1),l(2),q(" ",B(3,3,"child_bridge.confirm_delete_1")," "),l(2),w(t.deletingPairedBridge?4:-1),l(3),rt(t.deleteBridges)}}function lW(e,u){e&1&&(c(0,"ngb-alert",20),E(1),y(2,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,2,"child_bridge.must_configure_plugin")," "))}function dW(e,u){if(e&1){let t=H();c(0,"ngb-alert",21)(1,"div",17),E(2),y(3,"translate"),y(4,"translate"),p(),c(5,"button",53),O("click",function(){j(t);let n=h(2);return N(n.openFullConfigEditor())}),E(6),y(7,"translate"),p()()}e&2&&(b("dismissible",!1),l(2),xu(" ",B(3,4,"plugins.settings.message_manual_config_required")," ",B(4,6,"plugins.settings.message_consult_documentation")," "),l(4),q(" ",B(7,8,"plugins.settings.label_open_config_editor")," "))}function cW(e,u){if(e&1&&(c(0,"div",15),S(1,"i",16),p(),c(2,"ul",17),S(3,"li",18),y(4,"translate"),x(5,GU,5,5),p(),x(6,oW,8,7),x(7,DW,9,5,"ngb-alert",19),x(8,lW,3,4,"ngb-alert",20),x(9,dW,8,10,"ngb-alert",21)),e&2){let t=h();l(3),b("innerHTML",je(4,6,"child_bridge.about",eu(9,P6,t.linkChildBridges)),de),l(2),w(t.configBlocks.length?5:-1),l(),w(t.canConfigure&&t.configBlocks.length?6:-1),l(),w(t.deleteBridges.length?7:-1),l(),w(!t.configBlocks.length&&t.canConfigure?8:-1),l(),w(t.canConfigure?-1:9)}}function pW(e,u){if(e&1){let t=H();c(0,"button",54),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(1),y(2,"translate"),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),l(),q(" ",B(2,2,"form.button_close")," ")}}function mW(e,u){e&1&&S(0,"i",56)}function FW(e,u){if(e&1){let t=H();c(0,"button",55),O("click",function(){j(t);let n=h();return N(n.save())}),E(1),y(2,"translate"),x(3,mW,1,0,"i",56),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),l(),q(" ",B(2,3,"form.button_save")," "),l(2),w(t.saveInProgress?3:-1)}}function CW(e,u){if(e&1){let t=H();c(0,"button",57),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function hW(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"form.button_save")," ")}function gW(e,u){e&1&&S(0,"i",56)}function bW(e,u){if(e&1){let t=H();c(0,"button",55),O("click",function(){j(t);let n=h(2);return N(n.save())}),x(1,hW,2,3),x(2,gW,1,0,"i",56),p()}if(e&2){let t=h(2);b("disabled",t.saveInProgress||t.loading),l(),w(t.saveInProgress?-1:1),l(),w(t.saveInProgress?2:-1)}}function EW(e,u){if(e&1){let t=H();c(0,"button",59),O("click",function(){j(t);let n=h(2);return N(n.openPluginConfig())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.button_settings")," "))}function _W(e,u){if(e&1&&(x(0,bW,3,3,"button",10),x(1,EW,3,3,"button",58)),e&2){let t=h();w(t.configBlocks.length?0:-1),l(),w(t.configBlocks.length?-1:1)}}var O6=(()=>{class e{$activeModal=I(ve);$api=I(he);$modal=I(it);$plugins=I(_i);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;justInstalled=!1;loading=!0;canConfigure=!0;configBlocks=[];selectedBlock="0";isPlatform;enabledBlocks={};bridgeCache=new Map;originalBridges=[];deviceInfo=new Map;saveInProgress=!1;canShowBridgeDebug=!1;deleteBridges=[];deletingPairedBridge=!1;accessoryBridgeLinks=[];bridgesAvailableForLink=[];currentlySelectedLink=null;currentBridgeHasLinks=!1;linkChildBridges='<a href="https://github.com/homebridge/homebridge/wiki/Child-Bridges" target="_blank"><i class="fas fa-fw fa-external-link-alt primary-text"></i></a>';linkDebug='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Debug-Common-Values" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';constructor(){}ngOnInit(){return G(this,null,function*(){yield Promise.all([this.getPluginType(),this.loadPluginConfig()]),this.canShowBridgeDebug=this.$settings.env.homebridgeVersion.startsWith("2"),this.loading=!1})}onBlockChange(t){if(this.selectedBlock=t,this.currentlySelectedLink=this.accessoryBridgeLinks.find(i=>i.index===t)||null,this.currentBridgeHasLinks=this.accessoryBridgeLinks.some(i=>i.usesIndex===t),this.bridgesAvailableForLink=[],this.configBlocks[Number(t)].accessory)for(let[i,n]of Array.from(this.bridgeCache.entries()))this.deleteBridges.some(f=>f.id===n.username)||i<Number(t)&&this.bridgesAvailableForLink.push({index:i.toString(),usesIndex:t,name:n.name,port:n.port,username:n.username})}onLinkBridgeChange(t){if(t){let i=this.configBlocks.findIndex(f=>f._bridge?.username===t);this.accessoryBridgeLinks.push({index:this.selectedBlock,usesIndex:i.toString(),name:this.bridgeCache.get(i)?.name,port:this.bridgeCache.get(i)?.port,username:t}),this.currentlySelectedLink=this.accessoryBridgeLinks.find(f=>f.index===this.selectedBlock)||null,this.enabledBlocks[Number(this.selectedBlock)]=!0;let n=this.configBlocks[Number(this.selectedBlock)];n._bridge={username:t}}}getPluginType(){return G(this,null,function*(){try{let t=yield ae(this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`));this.isPlatform=t.pluginType==="platform"}catch(t){this.$toastr.error(this.$translate.instant("plugins.config.load_error"),this.$translate.instant("toast.title_error")),this.$activeModal.close(),console.error(t)}})}loadPluginConfig(){return G(this,null,function*(){try{this.configBlocks=yield ae(this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`));for(let[i,n]of this.configBlocks.entries())if(n._bridge&&n._bridge.username){this.enabledBlocks[i]=!0;let f=Array.from(this.bridgeCache.values()).findIndex(o=>o.username===n._bridge.username),r=f!==-1?Array.from(this.bridgeCache.values())[f]:void 0;r?(n._bridge.env={},this.accessoryBridgeLinks.push({index:i.toString(),usesIndex:f.toString(),name:r.name,port:r.port,username:n._bridge.username})):(n._bridge.env=n._bridge.env||{},this.bridgeCache.set(i,n._bridge),yield this.getDeviceInfo(n._bridge.username),n._bridge.name||(n._bridge.name=this.deviceInfo[n._bridge.username]?.displayName),this.originalBridges.push(n._bridge))}this.justInstalled&&this.bridgeCache.size===0&&this.configBlocks.forEach((i,n)=>{this.enabledBlocks[n]=!0,this.toggleExternalBridge(i,!0,n.toString())}),this.accessoryBridgeLinks.find(i=>i.username===this.bridgeCache.get(Number(this.selectedBlock))?.username)&&(this.currentBridgeHasLinks=!0)}catch(t){this.canConfigure=!1,console.error(t)}})}toggleExternalBridge(t,i,n){return G(this,null,function*(){if(i){let f=this.bridgeCache.get(Number(n));t._bridge={username:f?f.username:this.generateUsername(),port:yield this.getUnusedPort(),name:f?.name,model:f?.model,manufacturer:f?.manufacturer,firmwareRevision:f?.firmwareRevision,debugModeEnabled:f?.debugModeEnabled,env:f?.env},this.deleteBridges.some(r=>r.id===t._bridge.username)&&(this.deleteBridges=this.deleteBridges.filter(r=>r.id!==t._bridge.username)),this.bridgeCache.set(Number(n),t._bridge),yield this.getDeviceInfo(t._bridge.username)}else{if(this.accessoryBridgeLinks.some(f=>f.index===n))this.accessoryBridgeLinks=this.accessoryBridgeLinks.filter(f=>f.index!==n),this.currentlySelectedLink=null;else{let f=this.originalBridges.find(r=>r.username===t._bridge.username);f&&this.deleteBridges.push({id:t._bridge.username,bridgeName:t._bridge.name||f.displayName,paired:this.deviceInfo[t._bridge.username]?._isPaired})}delete t._bridge}this.deletingPairedBridge=this.deleteBridges.some(f=>f.paired)})}getUnusedPort(){return G(this,null,function*(){this.saveInProgress=!0;try{return(yield ae(this.$api.get("/server/port/new"))).port}catch{return Math.floor(Math.random()*30001+3e4)}finally{this.saveInProgress=!1}})}getDeviceInfo(t){return G(this,null,function*(){try{this.deviceInfo[t]=yield ae(this.$api.get(`/server/pairings/${t.replace(/:/g,"")}`))}catch(i){console.error(i),this.deviceInfo[t]=!1}})}save(){return G(this,null,function*(){this.saveInProgress=!0;try{yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.configBlocks));for(let t of this.deleteBridges)try{yield ae(this.$api.delete(`/server/pairings/${t.id.replace(/:/g,"")}`))}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}finally{this.saveInProgress=!1}})}openPluginConfig(){this.$activeModal.close(),this.$plugins.settings({name:this.plugin.name,settingsSchema:!0,links:{}})}generateUsername(){let t="0123456789ABCDEF",i="0E:";for(let n=0;n<5;n++)i+=t.charAt(Math.round(Math.random()*15)),i+=t.charAt(Math.round(Math.random()*15)),n!==4&&(i+=":");return i}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema",justInstalled:"justInstalled"},decls:16,vars:8,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"mb-3","text-center"],[1,"fas","fa-fw","fa-bridge","primary-text",2,"font-size","75px"],[1,"mb-3"],[3,"innerHTML"],["type","error",1,"mt-3","mb-0",3,"dismissible"],["type","info",3,"dismissible"],["type","info",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["type","info",1,"mt-3","mb-0",3,"dismissible"],[1,"list-group-item","text-center","grey-text","small"],["for","bridgeSelect",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","bridgeSelect",1,"custom-select",3,"ngModelChange","change","ngModel"],[3,"value"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text","font-monospace"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox",1,"rendux-input",3,"change","ngModelChange","id","ngModel"],[1,"rendux-label",3,"for"],["for","bridgeLink",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridgeLink",1,"custom-select",3,"change"],[1,"list-group-item","text-center"],[1,"w-100","d-flex","flex-column","text-center"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"mx-auto","mt-3","mb-1"],[1,"grey-text","mx-auto","small","mb-1",2,"max-width","400px"],[1,"fas","fa-fw","fa-link",3,"ngClass"],["type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],["type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input",3,"ngModelChange","ngModel"],[1,"grey-text"],["type","text","placeholder","--max-old-space-size=512 --max-http-header-size=8192",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["type","checkbox",1,"rendux-input",3,"ngModelChange","id","ngModel"],[1,"d-inline-block","text-start","mb-0"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),x(4,zU,2,4,"button",3),p(),c(5,"div",4),x(6,HU,2,0,"div",5),x(7,cW,10,11),p(),c(8,"div",6)(9,"div",7),x(10,pW,3,4,"button",8),p(),c(11,"div",9),x(12,FW,4,5,"button",10),x(13,CW,3,3,"button",11),p(),c(14,"div",12),x(15,_W,2,2),p()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),w(n.justInstalled?-1:4),l(2),w(n.loading?6:-1),l(),w(n.loading?-1:7),l(3),w(n.canConfigure&&!n.justInstalled?10:-1),l(2),w(n.justInstalled?12:-1),l(),w(n.canConfigure?-1:13),l(2),w(n.canConfigure&&!n.justInstalled?15:-1))},dependencies:[tu,Bi,xi,Xi,Ji,Zi,vt,Zu,du,M1,zt,Be],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var Yl=Le(Yr(),1);var us=()=>["homebridge","homebridge-config-ui-x"],M6=(e,u,t)=>({pluginName:e,minVersion:u,installedVersion:t}),yW=(e,u,t)=>({minVersion:e,installedVersion:u,latestVersion:t,packageName:"Homebridge"}),vW=()=>({packageName:"Homebridge"}),BW=(e,u,t)=>({minVersion:e,installedVersion:u,latestVersion:t,packageName:"Homebridge UI"}),xW=()=>({packageName:"Homebridge UI"});function wW(e,u){if(e&1&&(c(0,"li",14)(1,"div",17),S(2,"i",18),p(),c(3,"div",19),E(4),y(5,"translate"),p()()),e&2){let t=h(2);l(4),q(" ",je(5,1,"plugins.compat.node_too_low",wu(4,M6,t.plugin.displayName,t.nodeMinVersion,t.nodeInstalledVersion))," ")}}function SW(e,u){if(e&1&&(c(0,"li",14)(1,"div",17),S(2,"i",18),p(),c(3,"div",19),E(4),y(5,"translate"),p()()),e&2){let t=h(2);l(4),q(" ",je(5,1,"plugins.compat.hb_too_low",wu(4,M6,t.plugin.displayName,t.hbMinVersion,t.hbInstalledVersion))," ")}}function IW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",12),p(),c(2,"ul",13),x(3,wW,6,8,"li",14),x(4,SW,6,8,"li",14),p(),c(5,"ngb-alert",15)(6,"p",16),E(7),y(8,"translate"),p()()),e&2){let t=h();l(),Z(C1("",t.action==="install"?"far fa-fw fa-arrow-alt-circle-down":t.action==="update"?"far fa-fw fa-arrow-alt-circle-up":"fas fa-fw fa-code-compare"," primary-text")),l(2),w(t.isValidNode?-1:3),l(),w(t.isValidHb?-1:4),l(),b("dismissible",!1),l(2),L(B(8,7,"plugins.compat.are_you_sure"))}}function AW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",20),p(),c(2,"ul",13)(3,"li",14)(4,"div",17),S(5,"i",18),p(),c(6,"div",19),E(7),y(8,"translate"),p()()(),c(9,"ngb-alert",15)(10,"p",21),E(11),y(12,"translate"),p(),c(13,"p",16)(14,"a",22),E(15),y(16,"translate"),S(17,"i",23),p()()()),e&2){let t=h();l(7),q(" ",je(8,4,"plugins.compat.hb_node_too_low",wu(12,yW,t.nodeMinVersion,t.nodeInstalledVersion,t.plugin.latestVersion))," "),l(2),b("dismissible",!1),l(2),L(je(12,7,"plugins.compat.node_first",ke(16,vW))),l(4),q(" ",B(16,10,"plugins.compat.node_link")," ")}}function kW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",20),p(),c(2,"ul",13)(3,"li",14)(4,"div",17),S(5,"i",18),p(),c(6,"div",19),E(7),y(8,"translate"),p()()(),c(9,"ngb-alert",15)(10,"p",21),E(11),y(12,"translate"),p(),c(13,"p",16)(14,"a",22),E(15),y(16,"translate"),S(17,"i",23),p()()()),e&2){let t=h();l(7),q(" ",je(8,4,"plugins.compat.hb_node_too_low",wu(12,BW,t.nodeMinVersion,t.nodeInstalledVersion,t.plugin.latestVersion))," "),l(2),b("dismissible",!1),l(2),L(je(12,7,"plugins.compat.node_first",ke(16,xW))),l(4),q(" ",B(16,10,"plugins.compat.node_link")," ")}}function $W(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function TW(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function PW(e,u){if(e&1){let t=H();c(0,"button",25),O("click",function(){j(t);let n=h();return N(n.$activeModal.close(!0))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.label_continue")," "))}var j6=(()=>{class e{$activeModal=I(ve);$settings=I(ze);plugin;isValidNode;isValidHb;action;nodeMinVersion;nodeInstalledVersion;hbMinVersion;hbInstalledVersion;constructor(){}ngOnInit(){this.nodeMinVersion=(0,Yl.minVersion)(this.plugin.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Yl.minVersion)(this.plugin.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",isValidNode:"isValidNode",isValidHb:"isValidHb",action:"action"},decls:18,vars:16,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger"],[1,"text-center","mb-3"],[2,"font-size","75px"],[1,"list-group","list-group-box","mb-3","text-start"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],["type","warning",1,"mb-0",3,"dismissible"],[1,"text-center","mb-0"],[1,"me-3"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],[1,"text-start","flex-grow-1"],[1,"fab","fa-fw","fa-node-js","primary-text",2,"font-size","75px"],[1,"text-center","mb-1"],["href","https://homebridge.io/w/JTKEF","target","_blank","rel","noopener noreferrer"],[1,"fa","fa-fw","fa-external-link-alt"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4),x(8,IW,9,9),x(9,AW,18,17),x(10,kW,18,17),p(),c(11,"div",5)(12,"div",6),x(13,$W,3,3,"button",7),p(),c(14,"div",8),x(15,TW,3,3,"button",7),p(),c(16,"div",9),x(17,PW,3,3,"button",10),p()()()),i&2&&(l(3),L(B(4,8,"plugins.compat.title")),l(2),K("aria-label",B(6,10,"form.button_close")),l(3),w(ke(12,us).includes(n.plugin.name)?-1:8),l(),w(n.plugin.name==="homebridge"?9:-1),l(),w(n.plugin.name==="homebridge-config-ui-x"?10:-1),l(3),w(ke(13,us).includes(n.plugin.name)?-1:13),l(2),w(ke(14,us).includes(n.plugin.name)?15:-1),l(2),w(ke(15,us).includes(n.plugin.name)?-1:17))},dependencies:[Be,du],encapsulation:2})}return e})();var Dt=[];for(let e=0;e<256;++e)Dt.push((e+256).toString(16).slice(1));function N6(e,u=0){return(Dt[e[u+0]]+Dt[e[u+1]]+Dt[e[u+2]]+Dt[e[u+3]]+"-"+Dt[e[u+4]]+Dt[e[u+5]]+"-"+Dt[e[u+6]]+Dt[e[u+7]]+"-"+Dt[e[u+8]]+Dt[e[u+9]]+"-"+Dt[e[u+10]]+Dt[e[u+11]]+Dt[e[u+12]]+Dt[e[u+13]]+Dt[e[u+14]]+Dt[e[u+15]]).toLowerCase()}var Zl,OW=new Uint8Array(16);function Ql(){if(!Zl){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Zl=crypto.getRandomValues.bind(crypto)}return Zl(OW)}var MW=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),e1={randomUUID:MW};function jW(e,u,t){if(e1.randomUUID&&!u&&!e)return e1.randomUUID();e=e||{};let i=e.random??e.rng?.()??Ql();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,u){if(t=t||0,t<0||t+16>u.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let n=0;n<16;++n)u[t+n]=i[n];return u}return N6(i)}var is=jW;var q6=Le(of(),1);var V6=(()=>{class e{$api=I(he);$toastr=I(_e);$translate=I(Ee);constructor(){}downloadDumpFile(){this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"}).subscribe({next:t=>{(0,q6.saveAs)(t.body,"homebridge-deconz.json.gz")},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("plugins.settings.deconz.dump_no_exist"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["app-homebridge-deconz"]],decls:3,vars:0,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-download"]],template:function(i,n){i&1&&(c(0,"button",0),O("click",function(){return n.downloadDumpFile()}),S(1,"i",1),E(2,` Download Dump File
23
+ `)}),this.toastSuccess=this.$translate.instant("toast.title_success"),this.onlineUpdateOk=!(["homebridge","homebridge-config-ui-x"].includes(this.pluginName)&&this.$settings.env.platform==="win32"),this.action){case"Install":this.install(),this.presentTenseVerb=this.$translate.instant("plugins.manage.install"),this.pastTenseVerb=this.$translate.instant("plugins.manage.installed");break;case"Uninstall":this.uninstall(),this.presentTenseVerb=this.$translate.instant("plugins.manage.uninstall"),this.pastTenseVerb=this.$translate.instant("plugins.manage.uninstalled");break;case"Update":switch(this.targetVersion){case"latest":this.updateToBeta=!1,this.getReleaseNotes();break;case"alpha":case"beta":case"test":this.updateToBeta=!0,this.getReleaseNotes();break;default:this.update()}this.presentTenseVerb=this.$translate.instant("plugins.manage.update"),this.pastTenseVerb=this.$translate.instant("plugins.manage.updated");break}}install(){if(this.onlineUpdateOk){if(this.pluginName==="homebridge")return this.upgradeHomebridge();this.io.request("install",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(`${this.pastTenseVerb} ${this.pluginName}`,this.toastSuccess),window.location.href=`/plugins?installed=${this.pluginName}`},error:t=>{this.actionFailed=!0,console.error(t),this.$router.navigate(["/plugins"]),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}}uninstall(){this.io.request("uninstall",{name:this.pluginName,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$router.navigate(["/plugins"]),this.$modal.open(pu,{size:"lg",backdrop:"static"})},error:t=>{this.actionFailed=!0,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}update(){if(this.showReleaseNotes=!1,!!this.onlineUpdateOk){if(this.pluginName==="homebridge")return this.upgradeHomebridge();this.io.request("update",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>G(this,null,function*(){if(this.pluginName==="homebridge-config-ui-x"){this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{window.location.href="/restart"},error:t=>{console.error(t),window.location.href="/restart"}});return}try{yield Promise.all([this.getChangeLog(),this.getChildBridges()])}catch(t){console.error(t)}this.actionComplete=!0,this.justUpdatedPlugin=!0,this.$router.navigate(["/plugins"])}),error:t=>{this.actionFailed=!0,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}}upgradeHomebridge(){return G(this,null,function*(){let t="update";if(Number(this.installedVersion.split(".")[0])<2&&["2","alpha","beta"].includes(this.targetVersion.split(".")[0])){let i=this.$modal.open(x6,{size:"lg",backdrop:"static"});i.componentInstance.isUpdating=!0,t=yield i.result}t==="update"?this.io.request("homebridge-update",{version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.$activeModal.close(),this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{this.$router.navigate(["/restart"])},error:i=>{console.error(i),this.$router.navigate(["/restart"])}})},error:i=>{this.actionFailed=!0,console.error(i),this.$toastr.error(i.message,this.$translate.instant("toast.title_error")),this.$activeModal.close()}}):this.$activeModal.close()})}getChangeLog(){return G(this,null,function*(){let t=yield ae(this.$api.get(`/plugins/changelog/${encodeURIComponent(this.pluginName)}`));this.changeLog=t.changelog})}getChildBridges(){return G(this,null,function*(){(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.pluginName===i.plugin&&this.childBridges.push(i)})})}getReleaseNotes(){this.$api.get(`/plugins/release/${encodeURIComponent(this.pluginName)}`).subscribe({next:t=>{this.showReleaseNotes=!0,this.release=t},error:()=>{this.onlineUpdateOk&&this.update()}})}onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}onRestartChildBridgeClick(){return G(this,null,function*(){try{for(let i of this.childBridges)yield ae(this.$api.put(`/server/restart/${i.username}`,{}));let t=this.$modal.open(v6,{size:"xl",backdrop:"static"});t.componentInstance.plugin={name:this.pluginName}}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error"))}finally{this.$activeModal.close()}})}downloadLogFile(){let t=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,w6.saveAs)(t,`${this.pluginName}-error.log`)}ngOnDestroy(){this.io.end()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{pluginName:"pluginName",pluginDisplayName:"pluginDisplayName",targetVersion:"targetVersion",latestVersion:"latestVersion",installedVersion:"installedVersion",isDisabled:"isDisabled",action:"action"},decls:11,vars:9,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],["id","plugin-log-output",1,"modal-body",3,"hidden"],[1,"modal-body","plugin-modal-body"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"mb-3","text-center"],[1,"far","fa-fw","fa-check-circle","primary-text",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"alert","p-3","pb-1","mt-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"plugin-md",3,"data"],[1,"fas","fa-fw","primary-text",2,"font-size","75px",3,"ngClass"],[1,"mb-3"],[1,"p-2","mb-0",2,"background-color","#efefef"],[1,"far","fa-fw","primary-text",2,"font-size","75px",3,"ngClass"],[1,"alert","p-3","pb-1","mb-0"],["type","warning",1,"mb-3",3,"dismissible"],[1,"w-100","text-center","mb-0"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-primary"],[1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-primary",3,"click"],[1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),S(6,"div",4),x(7,iU,2,1,"div",5),x(8,nU,12,14,"div",6),x(9,DU,6,8,"div",5),x(10,FU,9,5,"div",7),p()),i&2&&(l(3),L(n.pluginDisplayName),l(),K("aria-label",B(5,7,"form.button_close")),l(2),b("hidden",!n.onlineUpdateOk||n.actionComplete||n.showReleaseNotes),l(),w(n.actionComplete?7:-1),l(),w(n.onlineUpdateOk?-1:8),l(),w(n.showReleaseNotes&&!n.actionComplete&&n.onlineUpdateOk?9:-1),l(),w(!n.onlineUpdateOk||n.actionComplete||n.showReleaseNotes||n.actionFailed?10:-1))},dependencies:[tn,en,ef,Be,zt,du],styles:[".plugin-modal-body[_ngcontent-%COMP%]{max-height:60vh;overflow-y:auto;overflow-x:hidden} .plugin-md{text-align:left;font-size:.95rem;word-wrap:break-word} .plugin-md img{max-width:100%} .plugin-md h1{font-size:1.4rem;font-weight:300} .plugin-md h2{font-size:1.3rem;font-weight:300} .plugin-md h3{font-size:1.2rem;font-weight:300} .plugin-md h4{font-size:1.1rem;font-weight:300} .plugin-md h5{font-size:1rem;font-weight:300} .plugin-md pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}"]})}return e})();var k6=Le(Yr(),1);var CU=()=>["homebridge","homebridge-config-ui-x"];function hU(e,u){e&1&&(c(0,"div",5),S(1,"i",12),p())}function gU(e,u){if(e&1&&(S(0,"i",20),c(1,"h6",21),E(2),y(3,"translate"),p(),c(4,"p",21),E(5),y(6,"translate"),c(7,"span",22),E(8),p()()),e&2){let t=h(2);l(2),L(B(3,3,"plugins.manage.select_version")),l(3),q(" ",B(6,5,"plugins.status_installed"),": "),l(3),q("v",t.plugin.installedVersion)}}function bU(e,u){e&1&&(S(0,"i",23),c(1,"h6",21),E(2),y(3,"translate"),p()),e&2&&(l(2),L(B(3,1,"plugins.manage.select_version")))}function EU(e,u){e&1&&(c(0,"ngb-alert",13)(1,"p",24),E(2),y(3,"translate"),p()()),e&2&&(b("dismissible",!1),l(2),L(B(3,2,"plugins.manage.hb_restart")))}function _U(e,u){if(e&1){let t=H();c(0,"button",28),O("click",function(){j(t);let n=h().$implicit,f=h(2);return N(f.doInstall(n.version))}),S(1,"i",29),p()}}function yU(e,u){e&1&&(c(0,"button",27),S(1,"i",30),p())}function vU(e,u){if(e&1&&(c(0,"li",15)(1,"span",8),E(2),S(3,"br"),c(4,"small",25),E(5),p()(),x(6,_U,2,0,"button",26)(7,yU,2,0,"button",27),p()),e&2){let t=u.$implicit,i=h(2);l(2),q(" ",t.tag," "),l(3),q("v",t.version),l(),w(i.plugin.installedVersion!==t.version?6:7)}}function BU(e,u){e&1&&E(0," \u2713 ")}function xU(e,u){if(e&1&&(c(0,"option",18),E(1),x(2,BU,1,0),p()),e&2){let t=u.$implicit,i=h(2);b("value",t.version)("selected",i.versionSelect==t.version),l(),q(" v",t.version," "),l(),w(t.version==i.plugin.installedVersion?2:-1)}}function wU(e,u){e&1&&S(0,"i",30)}function SU(e,u){e&1&&S(0,"i",29)}function IU(e,u){if(e&1){let t=H();c(0,"button",31),O("click",function(){j(t);let n=h(2);return N(n.doInstall(n.versionSelect))}),x(1,wU,1,0,"i",30)(2,SU,1,0,"i",29),p()}if(e&2){let t=h(2);b("disabled",t.versionSelect===t.plugin.installedVersion),l(),w(t.versionSelect===t.plugin.installedVersion?1:2)}}function AU(e,u){if(e&1){let t=H();c(0,"div",6),x(1,gU,9,7)(2,bU,4,3),x(3,EU,4,4,"ngb-alert",13),c(4,"ul",14),ft(5,vU,8,3,"li",15,nt),c(7,"li",15)(8,"div",16),E(9),y(10,"translate"),S(11,"br"),c(12,"select",17),Me("ngModelChange",function(n){j(t);let f=h();return Oe(f.versionSelect,n)||(f.versionSelect=n),N(n)}),ft(13,xU,3,4,"option",18,nt),p()(),x(15,IU,3,2,"button",19),p()()()}if(e&2){let t=h();l(),w(t.plugin.installedVersion?1:2),l(2),w(ke(7,CU).includes(t.plugin.name)?3:-1),l(2),rt(t.versionsWithTags),l(4),q(" ",B(10,5,"plugins.manage.all_versions")," "),l(3),Pe("ngModel",t.versionSelect),l(),rt(t.versions),l(2),w(t.versionSelect?15:-1)}}var $6=(()=>{class e{$activeModal=I(ve);$api=I(he);$toastr=I(_e);$translate=I(Ee);plugin;loading=!0;versions=[];versionsWithTags=[];versionSelect;constructor(){}ngOnInit(){this.versionSelect=this.plugin.installedVersion||this.plugin.latestVersion,this.lookupVersions()}lookupVersions(){this.$api.get(`/plugins/lookup/${encodeURIComponent(this.plugin.name)}/versions`).subscribe({next:t=>{let i=new Set;for(let[n,f]of Object.entries(t.versions)){this.versions.push({version:n,engines:f.engines||null});let r=Object.keys(t.tags).find(o=>t.tags[o]===n);r&&(this.versionsWithTags.push({version:n,tag:r}),i.add(n))}this.versions.sort((n,f)=>(0,k6.rcompare)(n.version,f.version)),this.versionsWithTags.sort((n,f)=>{let r=["latest","next","beta","alpha"],o=r.includes(n.tag)?r.indexOf(n.tag):999,a=r.includes(f.tag)?r.indexOf(f.tag):999;return o-a}),!this.versions.find(n=>n.version===this.versionSelect)&&t.tags.latest&&(this.versionSelect=t.tags.latest),this.loading=!1},error:t=>{console.error(t),this.$toastr.error(t.error.message||t.message,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}doInstall(t){this.$activeModal.close({name:this.plugin.name,version:t,engines:this.versions.find(i=>i.version===t).engines,action:this.plugin.installedVersion?"alternate":"install"})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100"],[1,"w-100","text-center","primary-text"],[1,"w-100","text-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],["type","warning",1,"mb-3",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"text-start",2,"min-width","50%"],[1,"custom-select","w-100",2,"font-size","0.875rem",3,"ngModelChange","ngModel"],[3,"value","selected"],[1,"btn","btn-primary","m-0","ms-3",3,"disabled"],[1,"fas","fa-fw","fa-code-compare","primary-text","mb-3",2,"font-size","75px"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-fw","fa-arrow-alt-circle-down","primary-text","mb-3",2,"font-size","75px"],[1,"w-100","text-center","mb-0"],[1,"grey-text","font-monospace"],[1,"btn","btn-primary","m-0","ms-3"],["disabled","",1,"btn","btn-primary","m-0","ms-3"],[1,"btn","btn-primary","m-0","ms-3",3,"click"],[1,"fas","fa-fw","fa-arrow-alt-circle-down"],[1,"fas","fa-fw","fa-check-circle"],[1,"btn","btn-primary","m-0","ms-3",3,"click","disabled"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,hU,2,0,"div",5)(8,AU,16,8,"div",6),p(),c(9,"div",7),S(10,"div",8),c(11,"div",9)(12,"button",10),y(13,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),E(14),y(15,"translate"),p()(),S(16,"div",11),p()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),K("aria-label",B(5,5,"form.button_close")),l(3),w(n.loading?7:8),l(5),K("aria-label",B(13,7,"form.button_close")),l(2),q(" ",B(15,9,"form.button_close")," "))},dependencies:[tu,Bi,xi,Zi,vt,Zu,Be,du],encapsulation:2})}return e})();var T6=Le(eb(),1);function kU(e,u){e&1&&(c(0,"div",5),S(1,"i",14),p())}function $U(e,u){e&1&&(c(0,"div",6),E(1),y(2,"translate"),y(3,"translate"),p()),e&2&&(l(),xu(" ",B(2,2,"plugins.settings.message_manual_config_required")," ",B(3,4,"plugins.settings.message_consult_documentation")," "))}function TU(e,u){if(e&1){let t=H();c(0,"button",25),y(1,"translate"),O("click",function(){j(t);let n=h(2).$index,f=h(2);return N(f.removeBlock(n))}),S(2,"i",26),p()}e&2&&b("ngbTooltip",B(1,1,"form.button_delete"))}function PU(e,u){if(e&1&&x(0,TU,3,3,"button",24),e&2){let t=h(3);w(!(t.schema!=null&&t.schema.singular)||t.pluginConfig.length>1?0:-1)}}function OU(e,u){if(e&1){let t=H();c(0,"div",15)(1,"div",16)(2,"div",17)(3,"h5",18),E(4),p(),c(5,"div"),x(6,PU,1,1),c(7,"button",19),y(8,"translate"),O("click",function(){let n=j(t).$index,f=h(2);return N(f.editBlock(n))}),S(9,"i",20),p()()()(),c(10,"div",21)(11,"div",22)(12,"ngx-monaco-editor",23),Me("ngModelChange",function(n){j(t);let f=h(2);return Oe(f.currentBlock,n)||(f.currentBlock=n),N(n)}),O("onInit",function(n){j(t);let f=h(2);return N(f.onEditorInit(n))}),p()()()()}if(e&2){let t=u.$implicit,i=u.$index,n=h(2);b("ngbAccordionItem","configBlock."+i)("collapsed",n.show!=="configBlock."+i)("id","configBlock."+i),l(4),L(t.name||n.pluginAlias),l(2),w(n.show==="configBlock."+i?6:-1),l(),b("ngbTooltip",B(8,8,"form.button_edit")),l(5),b("options",n.editorOptions),Pe("ngModel",n.currentBlock)}}function MU(e,u){if(e&1&&(c(0,"div",7),ft(1,OU,13,10,"div",15,nt),p()),e&2){let t=h();b("closeOthers",!0),l(),rt(t.pluginConfig)}}function jU(e,u){if(e&1){let t=H();c(0,"button",30),O("click",function(){j(t);let n=h(2);return N(n.addBlock())}),S(1,"i",31),p()}}function NU(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"form.button_save")," ")}function qU(e,u){e&1&&S(0,"i",29)}function VU(e,u){if(e&1){let t=H();x(0,jU,2,0,"button",27),c(1,"button",28),O("click",function(){j(t);let n=h();return N(n.save())}),x(2,NU,2,3),x(3,qU,1,0,"i",29),p()}if(e&2){let t=h();w(t.schema!=null&&t.schema.singular?-1:0),l(),b("disabled",t.saveInProgress),l(),w(t.saveInProgress?-1:2),l(),w(t.saveInProgress?3:-1)}}function RU(e,u){if(e&1){let t=H();c(0,"button",32),O("click",function(){j(t);let n=h();return N(n.openFullConfigEditor())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.settings.label_open_config_editor")," "))}var Xl=(()=>{class e{$activeModal=I(ve);$api=I(he);$md=I(T1);$modal=I(it);$plugin=I(_i);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginAlias;pluginType;loading=!0;canConfigure=!1;show="";pluginConfig;currentBlock;currentBlockIndex=null;saveInProgress=!1;childBridges=[];isFirstSave=!1;monacoEditor;editorOptions;constructor(){}get arrayKey(){return this.pluginType==="accessory"?"accessories":"platforms"}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0},this.$md.detect.mobile()?(this.loading=!1,this.canConfigure=!1):this.loadPluginAlias()}onEditorInit(t){return G(this,null,function*(){window.editor=t,this.monacoEditor=t,yield this.monacoEditor.getModel().setValue(this.currentBlock),yield this.monacoEditor.getAction("editor.action.formatDocument").run()})}loadPluginAlias(){this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{t.pluginAlias&&t.pluginType?(this.pluginAlias=t.pluginAlias,this.pluginType=t.pluginType,this.loadHomebridgeConfig()):this.loading=!1},error:()=>{this.loading=!1}})}loadHomebridgeConfig(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe(t=>{this.pluginConfig=t,this.canConfigure=!0,this.loading=!1,this.pluginConfig.length?this.editBlock(0):(this.isFirstSave=!0,this.addBlock())})}addBlock(){if(!this.saveCurrentBlock()){this.$toastr.error(this.$translate.instant("plugins.config.please_fix"),this.$translate.instant("toast.title_error"));return}this.pluginConfig.push({[this.pluginType]:this.pluginAlias,name:this.pluginAlias}),this.editBlock(this.pluginConfig.length-1)}saveCurrentBlock(){if(this.currentBlockIndex!==null&&this.monacoEditor){let t=this.monacoEditor.getModel().getValue().trim(),i;t.charAt(0)==='"'&&t.charAt(t.length-1)==="]"&&(t=`{${t}}`);try{i=T6.default.parse(t)}catch(f){return console.error(f),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error")),!1}if(Array.isArray(i)||typeof i!="object")return this.$toastr.error(this.$translate.instant("plugins.config.must_be_object"),this.$translate.instant("toast.title_error")),!1;if(!i[this.pluginType]&&Array.isArray(i[this.arrayKey])&&i[this.arrayKey].length&&Object.keys(i).length===1&&(i=i[this.arrayKey][0]),this.pluginType==="accessory"&&(!i.name||typeof i.name!="string"))return this.$toastr.error(this.$translate.instant("plugins.config.name_property"),this.$translate.instant("toast.title_error")),i.name="",this.monacoEditor.getModel().setValue(JSON.stringify(i,null,4)),!1;let n=this.pluginConfig[this.currentBlockIndex];Object.keys(n).forEach(f=>delete n[f]),Object.assign(n,i),n[this.pluginType]=this.pluginAlias}return!0}editBlock(t){this.saveCurrentBlock()&&(this.show=`configBlock.${t}`,this.currentBlockIndex=t,this.currentBlock=JSON.stringify(this.pluginConfig[this.currentBlockIndex],null,4))}removeBlock(t){let i=this.pluginConfig[t],n=this.pluginConfig.findIndex(f=>f===i);n>-1&&this.pluginConfig.splice(n,1),this.currentBlockIndex=null,this.currentBlock=void 0,this.show=""}save(){return G(this,null,function*(){if(this.saveInProgress=!0,!this.saveCurrentBlock()){this.saveInProgress=!1;return}try{let t=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.pluginConfig));if(this.$activeModal.close(),this.isFirstSave&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let i=this.$modal.open(un,{size:"lg",backdrop:"static"});i.componentInstance.bridges=this.childBridges.map(n=>({name:n.name,username:n.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress=!1}})}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema"},decls:19,vars:14,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"text-center","primary-text"],[1,"alert","alert-warning","mb-0"],["ngbAccordion","",3,"closeOthers"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],[1,"btn","btn-primary"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],["ngbAccordionToggle","","container","modal","openDelay","150","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-edit"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body","p-0",2,"height","400px"],[1,"flex-grow-1","h-100","w-100","mb-0","pb-0",3,"ngModelChange","onInit","options","ngModel"],["container","modal","openDelay","150","triggers","hover",1,"btn","btn-danger","m-0","ms-3",3,"ngbTooltip"],["container","modal","openDelay","150","triggers","hover",1,"btn","btn-danger","m-0","ms-3",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-trash"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-fw","fa-plus"],[1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.close()}),p()(),c(6,"div",4),x(7,kU,2,0,"div",5),x(8,$U,4,6,"div",6),x(9,MU,3,1,"div",7),p(),c(10,"div",8)(11,"div",9)(12,"button",10),O("click",function(){return n.$activeModal.close()}),E(13),y(14,"translate"),p()(),S(15,"div",11),c(16,"div",12),x(17,VU,4,4),x(18,RU,3,3,"button",13),p()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,10,"form.button_close")),l(3),w(n.loading?7:-1),l(),w(!n.loading&&!n.canConfigure?8:-1),l(),w(!n.loading&&n.canConfigure?9:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(14,12,"form.button_close")," "),l(4),w(n.canConfigure?17:-1),l(),w(n.canConfigure?-1:18))},dependencies:[Xr,Jr,Kr,Qi,Wr,Ur,A1,tu,vt,Zu,Be,Gr],styles:[".no-padding-card-body .card-body{padding:0!important} body.dark-mode .no-padding-card-body .card-body{background-color:#1e1e1e}.manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var P6=e=>({link:e}),LU=(e,u)=>({"green-text":e,"grey-text":u});function zU(e,u){if(e&1){let t=H();c(0,"button",13),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),K("aria-label",B(1,2,"form.button_close"))}}function HU(e,u){e&1&&(c(0,"div",5),S(1,"i",14),p())}function UU(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"child_bridge.bridges_paired_2")))}function WU(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),q("",B(2,1,"child_bridge.select_type"),":"))}function GU(e,u){if(e&1&&(c(0,"li"),E(1),y(2,"translate"),p(),x(3,UU,3,3,"li"),x(4,WU,3,3,"li")),e&2){let t=h(2);l(),L(B(2,3,"child_bridge.bridges_paired")),l(2),w(t.configBlocks.length===1&&!t.deviceInfo[t.configBlocks[0]._bridge==null?null:t.configBlocks[0]._bridge.username]&&t.originalBridges.length===0?3:-1),l(),w(t.canConfigure?4:-1)}}function KU(e,u){if(e&1&&(c(0,"option",29),E(1),p()),e&2){let t=u.$implicit,i=u.$index;b("value",i),l(),L(t.name||t.platform||t.accessory)}}function JU(e,u){if(e&1){let t=H();c(0,"li",25),E(1),y(2,"translate"),p(),c(3,"li",23)(4,"label",26),E(5),y(6,"translate"),p(),c(7,"div",27)(8,"select",28),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.selectedBlock,n)||(f.selectedBlock=n),N(n)}),O("change",function(n){j(t);let f=h(3);return N(f.onBlockChange(n.target.value))}),ft(9,KU,2,2,"option",29,nt),p()()()}if(e&2){let t=h(3);l(),L(B(2,3,"form.label.changes_kept")),l(4),q(" ",B(6,5,t.isPlatform?"child_bridge.config.platform":"child_bridge.config.accessory")," "),l(3),Pe("ngModel",t.selectedBlock),l(),rt(t.configBlocks)}}function XU(e,u){if(e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",31),E(5),p()()),e&2){let t=h(3);l(2),q(" ",B(3,2,t.isPlatform?"child_bridge.config.platform":"child_bridge.config.accessory")," "),l(3),q(" ",t.configBlocks[t.selectedBlock].name||t.configBlocks[t.selectedBlock].platform||t.configBlocks[t.selectedBlock].accessory," ")}}function YU(e,u){e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",32),E(5),y(6,"translate"),p()()),e&2&&(l(2),L(B(3,2,"child_bridge.config.use")),l(3),q(" ",B(6,4,"child_bridge.config.prevent")," "))}function ZU(e,u){if(e&1&&(c(0,"option",29),E(1),p()),e&2){let t=u.$implicit;b("value",t.username),l(),xu("",t.name," (",t.username,")")}}function QU(e,u){if(e&1){let t=H();c(0,"li",23)(1,"label",37),E(2),y(3,"translate"),p(),c(4,"div",27)(5,"select",38),O("change",function(n){j(t);let f=h(4);return N(f.onLinkBridgeChange(n.target.value))}),c(6,"option",29),E(7),y(8,"translate"),p(),ft(9,ZU,2,3,"option",29,nt),p()()()}if(e&2){let t=h(4);l(2),L(B(3,2,"child_bridge.config.or_link")),l(5),L(B(8,4,"child_bridge.config.select_existing")),l(2),rt(t.bridgesAvailableForLink)}}function eW(e,u){if(e&1){let t=H();c(0,"li",33)(1,"span",7),E(2),y(3,"translate"),p(),c(4,"div",34)(5,"input",35),O("change",function(){j(t);let n=h(3);return N(n.toggleExternalBridge(n.configBlocks[n.selectedBlock],n.enabledBlocks[n.selectedBlock],n.selectedBlock))}),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.enabledBlocks[f.selectedBlock],n)||(f.enabledBlocks[f.selectedBlock]=n),N(n)}),p(),S(6,"label",36),p()(),x(7,QU,11,6,"li",23)}if(e&2){let t=h(3);l(2),L(B(3,5,"child_bridge.config.use")),l(3),b("id","toggleExternalBridgeInput_"+t.selectedBlock),Pe("ngModel",t.enabledBlocks[t.selectedBlock]),l(),b("for","toggleExternalBridgeInput_"+t.selectedBlock),l(),w(!(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username)&&t.bridgesAvailableForLink.length?7:-1)}}function tW(e,u){if(e&1&&(c(0,"li",23)(1,"label",30),E(2),y(3,"translate"),p(),c(4,"div",31),E(5),p()(),c(6,"li",23)(7,"label",30),E(8),y(9,"translate"),p(),c(10,"div",31),E(11),p()(),c(12,"li",23)(13,"label",30),E(14),y(15,"translate"),p(),c(16,"div",31),E(17),p()()),e&2){let t=h(3);l(2),L(B(3,6,"accessories.bridge_link_username")),l(3),q(" ",t.currentlySelectedLink.username," "),l(3),L(B(9,8,"accessories.bridge_link_port")),l(3),q(" ",t.currentlySelectedLink.port," "),l(3),L(B(15,10,"accessories.bridge_link_name")),l(3),q(" ",t.currentlySelectedLink.name," ")}}function uW(e,u){e&1&&(c(0,"span"),E(1),y(2,"translate"),p()),e&2&&(l(),q(" \xB7 ",B(2,1,"status.code_scan")," "))}function iW(e,u){if(e&1){let t=H();c(0,"li",33)(1,"span",7),E(2),y(3,"translate"),c(4,"code"),E(5,"-D"),p()(),c(6,"div",34)(7,"input",51),y(8,"translate"),Me("ngModelChange",function(n){j(t);let f=h(5);return Oe(f.configBlocks[f.selectedBlock]._bridge.debugModeEnabled,n)||(f.configBlocks[f.selectedBlock]._bridge.debugModeEnabled=n),N(n)}),p(),S(9,"label",36),p()()}if(e&2){let t=h(5);l(2),q("",B(3,5,"child_bridge.config.debug")," "),l(5),b("id","homebridgeDebugMode_"+t.selectedBlock),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.debugModeEnabled),K("aria-label",B(8,7,"settings.startup.debug")),l(2),b("for","homebridgeDebugMode_"+t.selectedBlock)}}function nW(e,u){if(e&1){let t=H();c(0,"li",39)(1,"div",40),S(2,"app-qrcode",41),c(3,"p",42),E(4),p(),c(5,"p",43),S(6,"i",44),E(7),y(8,"translate"),x(9,uW,3,3,"span"),p()()(),c(10,"li",23)(11,"label",30),E(12),y(13,"translate"),p(),c(14,"div",31),E(15),p()(),c(16,"li",23)(17,"label",30),E(18),y(19,"translate"),p(),c(20,"div",31),E(21),p()(),c(22,"li",23)(23,"label",30),E(24),y(25,"translate"),p(),c(26,"div",27)(27,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.name,n)||(f.configBlocks[f.selectedBlock]._bridge.name=n),N(n)}),p()()(),c(28,"li",23)(29,"label",30),E(30),y(31,"translate"),p(),c(32,"div",27)(33,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.manufacturer,n)||(f.configBlocks[f.selectedBlock]._bridge.manufacturer=n),N(n)}),p()()(),c(34,"li",23)(35,"label",30),E(36),y(37,"translate"),p(),c(38,"div",27)(39,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.model,n)||(f.configBlocks[f.selectedBlock]._bridge.model=n),N(n)}),p()()(),c(40,"li",23)(41,"label",30),E(42),y(43,"translate"),p(),c(44,"div",27)(45,"input",45),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.firmwareRevision,n)||(f.configBlocks[f.selectedBlock]._bridge.firmwareRevision=n),N(n)}),p()()(),x(46,iW,10,9,"li",33),c(47,"li",23)(48,"label",30)(49,"span",46),E(50,"DEBUG"),p(),S(51,"br")(52,"small",47),y(53,"translate"),p(),c(54,"div",27)(55,"input",48),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.env.DEBUG,n)||(f.configBlocks[f.selectedBlock]._bridge.env.DEBUG=n),N(n)}),p()()(),c(56,"li",23)(57,"label",30)(58,"span",46),E(59,"NODE_OPTIONS"),p(),S(60,"br"),c(61,"small",49),E(62),y(63,"translate"),p()(),c(64,"div",27)(65,"input",50),Me("ngModelChange",function(n){j(t);let f=h(4);return Oe(f.configBlocks[f.selectedBlock]._bridge.env.NODE_OPTIONS,n)||(f.configBlocks[f.selectedBlock]._bridge.env.NODE_OPTIONS=n),N(n)}),p()()()}if(e&2){let t=h(4);l(2),b("data",t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._setupCode),l(2),L(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username].pincode),l(2),b("ngClass",Xu(41,LU,t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired,!t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired)),l(),q(" ",B(8,22,t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),l(2),w(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]._isPaired?-1:9),l(3),L(B(13,24,"accessories.bridge_username")),l(3),q(" ",t.configBlocks[t.selectedBlock]._bridge.username," "),l(3),L(B(19,26,"accessories.bridge_port")),l(3),q(" ",t.configBlocks[t.selectedBlock]._bridge.port," "),l(3),L(B(25,28,"child_bridge.config.name")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.name),l(3),L(B(31,30,"child_bridge.config.manufacturer")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.manufacturer),l(3),L(B(37,32,"child_bridge.config.model")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.model),l(3),L(B(43,34,"child_bridge.config.firmware")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.firmwareRevision),l(),w(t.canShowBridgeDebug?46:-1),l(6),b("innerHTML",je(53,36,"settings.service.debug_tooltip",eu(44,P6,t.linkDebug)),de),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.env.DEBUG),l(7),L(B(63,39,"settings.service.node_tooltip")),l(3),Pe("ngModel",t.configBlocks[t.selectedBlock]._bridge.env.NODE_OPTIONS)}}function fW(e,u){if(e&1&&x(0,nW,66,46),e&2){let t=h(3);w(t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]?0:-1)}}function rW(e,u){e&1&&(c(0,"ngb-alert",24),E(1),y(2,"translate"),S(3,"br"),E(4),y(5,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,3,"child_bridge.restart_homebridge")," "),l(3),q("",B(5,5,"child_bridge.return_to_pair")," "))}function oW(e,u){if(e&1&&(c(0,"ul",22),x(1,JU,11,7),x(2,XU,6,4,"li",23),x(3,YU,7,6,"li",23),x(4,eW,8,7),x(5,tW,18,12),x(6,fW,1,1),p(),x(7,rW,6,7,"ngb-alert",24)),e&2){let t=h(2);l(),w(t.configBlocks.length>1?1:-1),l(),w(t.configBlocks.length===1?2:-1),l(),w(t.currentBridgeHasLinks?3:-1),l(),w(t.currentBridgeHasLinks?-1:4),l(),w(t.currentlySelectedLink?5:-1),l(),w(!t.currentlySelectedLink&&(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username)?6:-1),l(),w(t.configBlocks[t.selectedBlock]._bridge!=null&&t.configBlocks[t.selectedBlock]._bridge.username&&t.deviceInfo[t.configBlocks[t.selectedBlock]._bridge==null?null:t.configBlocks[t.selectedBlock]._bridge.username]===!1?7:-1)}}function aW(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"child_bridge.confirm_delete_2")," ")}function sW(e,u){if(e&1&&(c(0,"li"),E(1),c(2,"span",46),E(3),p(),E(4,") "),p()),e&2){let t=u.$implicit,i=h(3);l(),q(" ",t.bridgeName||(i.deviceInfo[t.id]==null?null:i.deviceInfo[t.id].displayName)," ("),l(2),L(t.id)}}function DW(e,u){if(e&1&&(c(0,"ngb-alert",19)(1,"p"),E(2),y(3,"translate"),x(4,aW,2,3),p(),c(5,"div",9)(6,"ul",52),ft(7,sW,5,2,"li",null,nt),p()()()),e&2){let t=h(2);b("dismissible",!1),l(2),q(" ",B(3,3,"child_bridge.confirm_delete_1")," "),l(2),w(t.deletingPairedBridge?4:-1),l(3),rt(t.deleteBridges)}}function lW(e,u){e&1&&(c(0,"ngb-alert",20),E(1),y(2,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,2,"child_bridge.must_configure_plugin")," "))}function dW(e,u){if(e&1){let t=H();c(0,"ngb-alert",21)(1,"div",17),E(2),y(3,"translate"),y(4,"translate"),p(),c(5,"button",53),O("click",function(){j(t);let n=h(2);return N(n.openFullConfigEditor())}),E(6),y(7,"translate"),p()()}e&2&&(b("dismissible",!1),l(2),xu(" ",B(3,4,"plugins.settings.message_manual_config_required")," ",B(4,6,"plugins.settings.message_consult_documentation")," "),l(4),q(" ",B(7,8,"plugins.settings.label_open_config_editor")," "))}function cW(e,u){if(e&1&&(c(0,"div",15),S(1,"i",16),p(),c(2,"ul",17),S(3,"li",18),y(4,"translate"),x(5,GU,5,5),p(),x(6,oW,8,7),x(7,DW,9,5,"ngb-alert",19),x(8,lW,3,4,"ngb-alert",20),x(9,dW,8,10,"ngb-alert",21)),e&2){let t=h();l(3),b("innerHTML",je(4,6,"child_bridge.about",eu(9,P6,t.linkChildBridges)),de),l(2),w(t.configBlocks.length?5:-1),l(),w(t.canConfigure&&t.configBlocks.length?6:-1),l(),w(t.deleteBridges.length?7:-1),l(),w(!t.configBlocks.length&&t.canConfigure?8:-1),l(),w(t.canConfigure?-1:9)}}function pW(e,u){if(e&1){let t=H();c(0,"button",54),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(1),y(2,"translate"),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),l(),q(" ",B(2,2,"form.button_close")," ")}}function mW(e,u){e&1&&S(0,"i",56)}function FW(e,u){if(e&1){let t=H();c(0,"button",55),O("click",function(){j(t);let n=h();return N(n.save())}),E(1),y(2,"translate"),x(3,mW,1,0,"i",56),p()}if(e&2){let t=h();b("disabled",t.saveInProgress),l(),q(" ",B(2,3,"form.button_save")," "),l(2),w(t.saveInProgress?3:-1)}}function CW(e,u){if(e&1){let t=H();c(0,"button",57),O("click",function(){j(t);let n=h();return N(n.$activeModal.close("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function hW(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"form.button_save")," ")}function gW(e,u){e&1&&S(0,"i",56)}function bW(e,u){if(e&1){let t=H();c(0,"button",55),O("click",function(){j(t);let n=h(2);return N(n.save())}),x(1,hW,2,3),x(2,gW,1,0,"i",56),p()}if(e&2){let t=h(2);b("disabled",t.saveInProgress||t.loading),l(),w(t.saveInProgress?-1:1),l(),w(t.saveInProgress?2:-1)}}function EW(e,u){if(e&1){let t=H();c(0,"button",59),O("click",function(){j(t);let n=h(2);return N(n.openPluginConfig())}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"plugins.button_settings")," "))}function _W(e,u){if(e&1&&(x(0,bW,3,3,"button",10),x(1,EW,3,3,"button",58)),e&2){let t=h();w(t.configBlocks.length?0:-1),l(),w(t.configBlocks.length?-1:1)}}var O6=(()=>{class e{$activeModal=I(ve);$api=I(he);$modal=I(it);$plugins=I(_i);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;justInstalled=!1;loading=!0;canConfigure=!0;configBlocks=[];selectedBlock="0";isPlatform;enabledBlocks={};bridgeCache=new Map;originalBridges=[];deviceInfo=new Map;saveInProgress=!1;canShowBridgeDebug=!1;deleteBridges=[];deletingPairedBridge=!1;accessoryBridgeLinks=[];bridgesAvailableForLink=[];currentlySelectedLink=null;currentBridgeHasLinks=!1;linkChildBridges='<a href="https://github.com/homebridge/homebridge/wiki/Child-Bridges" target="_blank"><i class="fas fa-fw fa-external-link-alt primary-text"></i></a>';linkDebug='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Debug-Common-Values" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';constructor(){}ngOnInit(){return G(this,null,function*(){yield Promise.all([this.getPluginType(),this.loadPluginConfig()]),this.canShowBridgeDebug=this.$settings.env.homebridgeVersion.startsWith("2"),this.loading=!1})}onBlockChange(t){if(this.selectedBlock=t,this.currentlySelectedLink=this.accessoryBridgeLinks.find(i=>i.index===t)||null,this.currentBridgeHasLinks=this.accessoryBridgeLinks.some(i=>i.usesIndex===t),this.bridgesAvailableForLink=[],this.configBlocks[Number(t)].accessory)for(let[i,n]of Array.from(this.bridgeCache.entries()))this.deleteBridges.some(f=>f.id===n.username)||i<Number(t)&&this.bridgesAvailableForLink.push({index:i.toString(),usesIndex:t,name:n.name,port:n.port,username:n.username})}onLinkBridgeChange(t){if(t){let i=this.configBlocks.findIndex(f=>f._bridge?.username===t);this.accessoryBridgeLinks.push({index:this.selectedBlock,usesIndex:i.toString(),name:this.bridgeCache.get(i)?.name,port:this.bridgeCache.get(i)?.port,username:t}),this.currentlySelectedLink=this.accessoryBridgeLinks.find(f=>f.index===this.selectedBlock)||null,this.enabledBlocks[Number(this.selectedBlock)]=!0;let n=this.configBlocks[Number(this.selectedBlock)];n._bridge={username:t}}}getPluginType(){return G(this,null,function*(){try{let t=yield ae(this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`));this.isPlatform=t.pluginType==="platform"}catch(t){this.$toastr.error(this.$translate.instant("plugins.config.load_error"),this.$translate.instant("toast.title_error")),this.$activeModal.close(),console.error(t)}})}loadPluginConfig(){return G(this,null,function*(){try{this.configBlocks=yield ae(this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`));for(let[i,n]of this.configBlocks.entries())if(n._bridge&&n._bridge.username){this.enabledBlocks[i]=!0;let f=Array.from(this.bridgeCache.values()).findIndex(o=>o.username===n._bridge.username),r=f!==-1?Array.from(this.bridgeCache.values())[f]:void 0;r?(n._bridge.env={},this.accessoryBridgeLinks.push({index:i.toString(),usesIndex:f.toString(),name:r.name,port:r.port,username:n._bridge.username})):(n._bridge.env=n._bridge.env||{},this.bridgeCache.set(i,n._bridge),yield this.getDeviceInfo(n._bridge.username),n._bridge.name||(n._bridge.name=this.deviceInfo[n._bridge.username]?.displayName),this.originalBridges.push(n._bridge))}this.justInstalled&&this.bridgeCache.size===0&&this.configBlocks.forEach((i,n)=>{this.enabledBlocks[n]=!0,this.toggleExternalBridge(i,!0,n.toString())}),this.accessoryBridgeLinks.find(i=>i.username===this.bridgeCache.get(Number(this.selectedBlock))?.username)&&(this.currentBridgeHasLinks=!0)}catch(t){this.canConfigure=!1,console.error(t)}})}toggleExternalBridge(t,i,n){return G(this,null,function*(){if(i){let f=this.bridgeCache.get(Number(n));t._bridge={username:f?f.username:this.generateUsername(),port:yield this.getUnusedPort(),name:f?.name,model:f?.model,manufacturer:f?.manufacturer,firmwareRevision:f?.firmwareRevision,debugModeEnabled:f?.debugModeEnabled,env:f?.env},this.deleteBridges.some(r=>r.id===t._bridge.username)&&(this.deleteBridges=this.deleteBridges.filter(r=>r.id!==t._bridge.username)),this.bridgeCache.set(Number(n),t._bridge),yield this.getDeviceInfo(t._bridge.username)}else{if(this.accessoryBridgeLinks.some(f=>f.index===n))this.accessoryBridgeLinks=this.accessoryBridgeLinks.filter(f=>f.index!==n),this.currentlySelectedLink=null;else{let f=this.originalBridges.find(r=>r.username===t._bridge.username);f&&this.deleteBridges.push({id:t._bridge.username,bridgeName:t._bridge.name||f.displayName,paired:this.deviceInfo[t._bridge.username]?._isPaired})}delete t._bridge}this.deletingPairedBridge=this.deleteBridges.some(f=>f.paired)})}getUnusedPort(){return G(this,null,function*(){this.saveInProgress=!0;try{return(yield ae(this.$api.get("/server/port/new"))).port}catch{return Math.floor(Math.random()*30001+3e4)}finally{this.saveInProgress=!1}})}getDeviceInfo(t){return G(this,null,function*(){try{this.deviceInfo[t]=yield ae(this.$api.get(`/server/pairings/${t.replace(/:/g,"")}`))}catch(i){console.error(i),this.deviceInfo[t]=!1}})}save(){return G(this,null,function*(){this.saveInProgress=!0;try{yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,this.configBlocks));for(let t of this.deleteBridges)try{yield ae(this.$api.delete(`/server/pairings/${t.id.replace(/:/g,"")}`))}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}finally{this.saveInProgress=!1}})}openPluginConfig(){this.$activeModal.close(),this.$plugins.settings({name:this.plugin.name,settingsSchema:!0,links:{}})}generateUsername(){let t="0123456789ABCDEF",i="0E:";for(let n=0;n<5;n++)i+=t.charAt(Math.round(Math.random()*15)),i+=t.charAt(Math.round(Math.random()*15)),n!==4&&(i+=":");return i}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema",justInstalled:"justInstalled"},decls:16,vars:8,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"mb-3","text-center"],[1,"fas","fa-fw","fa-bridge","primary-text",2,"font-size","75px"],[1,"mb-3"],[3,"innerHTML"],["type","error",1,"mt-3","mb-0",3,"dismissible"],["type","info",3,"dismissible"],["type","info",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["type","info",1,"mt-3","mb-0",3,"dismissible"],[1,"list-group-item","text-center","grey-text","small"],["for","bridgeSelect",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","bridgeSelect",1,"custom-select",3,"ngModelChange","change","ngModel"],[3,"value"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text","font-monospace"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox",1,"rendux-input",3,"change","ngModelChange","id","ngModel"],[1,"rendux-label",3,"for"],["for","bridgeLink",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridgeLink",1,"custom-select",3,"change"],[1,"list-group-item","text-center"],[1,"w-100","d-flex","flex-column","text-center"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"mx-auto","mt-3","mb-1"],[1,"grey-text","mx-auto","small","mb-1",2,"max-width","400px"],[1,"fas","fa-fw","fa-link",3,"ngClass"],["type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],["type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input",3,"ngModelChange","ngModel"],[1,"grey-text"],["type","text","placeholder","--max-old-space-size=512 --max-http-header-size=8192",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["type","checkbox",1,"rendux-input",3,"ngModelChange","id","ngModel"],[1,"d-inline-block","text-start","mb-0"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),x(4,zU,2,4,"button",3),p(),c(5,"div",4),x(6,HU,2,0,"div",5),x(7,cW,10,11),p(),c(8,"div",6)(9,"div",7),x(10,pW,3,4,"button",8),p(),c(11,"div",9),x(12,FW,4,5,"button",10),x(13,CW,3,3,"button",11),p(),c(14,"div",12),x(15,_W,2,2),p()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),w(n.justInstalled?-1:4),l(2),w(n.loading?6:-1),l(),w(n.loading?-1:7),l(3),w(n.canConfigure&&!n.justInstalled?10:-1),l(2),w(n.justInstalled?12:-1),l(),w(n.canConfigure?-1:13),l(2),w(n.canConfigure&&!n.justInstalled?15:-1))},dependencies:[tu,Bi,xi,Xi,Ji,Zi,vt,Zu,du,P1,zt,Be],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var Yl=Le(Yr(),1);var us=()=>["homebridge","homebridge-config-ui-x"],M6=(e,u,t)=>({pluginName:e,minVersion:u,installedVersion:t}),yW=(e,u,t)=>({minVersion:e,installedVersion:u,latestVersion:t,packageName:"Homebridge"}),vW=()=>({packageName:"Homebridge"}),BW=(e,u,t)=>({minVersion:e,installedVersion:u,latestVersion:t,packageName:"Homebridge UI"}),xW=()=>({packageName:"Homebridge UI"});function wW(e,u){if(e&1&&(c(0,"li",14)(1,"div",17),S(2,"i",18),p(),c(3,"div",19),E(4),y(5,"translate"),p()()),e&2){let t=h(2);l(4),q(" ",je(5,1,"plugins.compat.node_too_low",wu(4,M6,t.plugin.displayName,t.nodeMinVersion,t.nodeInstalledVersion))," ")}}function SW(e,u){if(e&1&&(c(0,"li",14)(1,"div",17),S(2,"i",18),p(),c(3,"div",19),E(4),y(5,"translate"),p()()),e&2){let t=h(2);l(4),q(" ",je(5,1,"plugins.compat.hb_too_low",wu(4,M6,t.plugin.displayName,t.hbMinVersion,t.hbInstalledVersion))," ")}}function IW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",12),p(),c(2,"ul",13),x(3,wW,6,8,"li",14),x(4,SW,6,8,"li",14),p(),c(5,"ngb-alert",15)(6,"p",16),E(7),y(8,"translate"),p()()),e&2){let t=h();l(),Z(C1("",t.action==="install"?"far fa-fw fa-arrow-alt-circle-down":t.action==="update"?"far fa-fw fa-arrow-alt-circle-up":"fas fa-fw fa-code-compare"," primary-text")),l(2),w(t.isValidNode?-1:3),l(),w(t.isValidHb?-1:4),l(),b("dismissible",!1),l(2),L(B(8,7,"plugins.compat.are_you_sure"))}}function AW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",20),p(),c(2,"ul",13)(3,"li",14)(4,"div",17),S(5,"i",18),p(),c(6,"div",19),E(7),y(8,"translate"),p()()(),c(9,"ngb-alert",15)(10,"p",21),E(11),y(12,"translate"),p(),c(13,"p",16)(14,"a",22),E(15),y(16,"translate"),S(17,"i",23),p()()()),e&2){let t=h();l(7),q(" ",je(8,4,"plugins.compat.hb_node_too_low",wu(12,yW,t.nodeMinVersion,t.nodeInstalledVersion,t.plugin.latestVersion))," "),l(2),b("dismissible",!1),l(2),L(je(12,7,"plugins.compat.node_first",ke(16,vW))),l(4),q(" ",B(16,10,"plugins.compat.node_link")," ")}}function kW(e,u){if(e&1&&(c(0,"div",11),S(1,"i",20),p(),c(2,"ul",13)(3,"li",14)(4,"div",17),S(5,"i",18),p(),c(6,"div",19),E(7),y(8,"translate"),p()()(),c(9,"ngb-alert",15)(10,"p",21),E(11),y(12,"translate"),p(),c(13,"p",16)(14,"a",22),E(15),y(16,"translate"),S(17,"i",23),p()()()),e&2){let t=h();l(7),q(" ",je(8,4,"plugins.compat.hb_node_too_low",wu(12,BW,t.nodeMinVersion,t.nodeInstalledVersion,t.plugin.latestVersion))," "),l(2),b("dismissible",!1),l(2),L(je(12,7,"plugins.compat.node_first",ke(16,xW))),l(4),q(" ",B(16,10,"plugins.compat.node_link")," ")}}function $W(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function TW(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function PW(e,u){if(e&1){let t=H();c(0,"button",25),O("click",function(){j(t);let n=h();return N(n.$activeModal.close(!0))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.label_continue")," "))}var j6=(()=>{class e{$activeModal=I(ve);$settings=I(ze);plugin;isValidNode;isValidHb;action;nodeMinVersion;nodeInstalledVersion;hbMinVersion;hbInstalledVersion;constructor(){}ngOnInit(){this.nodeMinVersion=(0,Yl.minVersion)(this.plugin.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Yl.minVersion)(this.plugin.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",isValidNode:"isValidNode",isValidHb:"isValidHb",action:"action"},decls:18,vars:16,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger"],[1,"text-center","mb-3"],[2,"font-size","75px"],[1,"list-group","list-group-box","mb-3","text-start"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],["type","warning",1,"mb-0",3,"dismissible"],[1,"text-center","mb-0"],[1,"me-3"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],[1,"text-start","flex-grow-1"],[1,"fab","fa-fw","fa-node-js","primary-text",2,"font-size","75px"],[1,"text-center","mb-1"],["href","https://homebridge.io/w/JTKEF","target","_blank","rel","noopener noreferrer"],[1,"fa","fa-fw","fa-external-link-alt"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4),x(8,IW,9,9),x(9,AW,18,17),x(10,kW,18,17),p(),c(11,"div",5)(12,"div",6),x(13,$W,3,3,"button",7),p(),c(14,"div",8),x(15,TW,3,3,"button",7),p(),c(16,"div",9),x(17,PW,3,3,"button",10),p()()()),i&2&&(l(3),L(B(4,8,"plugins.compat.title")),l(2),K("aria-label",B(6,10,"form.button_close")),l(3),w(ke(12,us).includes(n.plugin.name)?-1:8),l(),w(n.plugin.name==="homebridge"?9:-1),l(),w(n.plugin.name==="homebridge-config-ui-x"?10:-1),l(3),w(ke(13,us).includes(n.plugin.name)?-1:13),l(2),w(ke(14,us).includes(n.plugin.name)?15:-1),l(2),w(ke(15,us).includes(n.plugin.name)?-1:17))},dependencies:[Be,du],encapsulation:2})}return e})();var Dt=[];for(let e=0;e<256;++e)Dt.push((e+256).toString(16).slice(1));function N6(e,u=0){return(Dt[e[u+0]]+Dt[e[u+1]]+Dt[e[u+2]]+Dt[e[u+3]]+"-"+Dt[e[u+4]]+Dt[e[u+5]]+"-"+Dt[e[u+6]]+Dt[e[u+7]]+"-"+Dt[e[u+8]]+Dt[e[u+9]]+"-"+Dt[e[u+10]]+Dt[e[u+11]]+Dt[e[u+12]]+Dt[e[u+13]]+Dt[e[u+14]]+Dt[e[u+15]]).toLowerCase()}var Zl,OW=new Uint8Array(16);function Ql(){if(!Zl){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");Zl=crypto.getRandomValues.bind(crypto)}return Zl(OW)}var MW=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),e1={randomUUID:MW};function jW(e,u,t){if(e1.randomUUID&&!u&&!e)return e1.randomUUID();e=e||{};let i=e.random??e.rng?.()??Ql();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,u){if(t=t||0,t<0||t+16>u.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let n=0;n<16;++n)u[t+n]=i[n];return u}return N6(i)}var is=jW;var q6=Le(of(),1);var V6=(()=>{class e{$api=I(he);$toastr=I(_e);$translate=I(Ee);constructor(){}downloadDumpFile(){this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"}).subscribe({next:t=>{(0,q6.saveAs)(t.body,"homebridge-deconz.json.gz")},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("plugins.settings.deconz.dump_no_exist"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["app-homebridge-deconz"]],decls:3,vars:0,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-download"]],template:function(i,n){i&1&&(c(0,"button",0),O("click",function(){return n.downloadDumpFile()}),S(1,"i",1),E(2,` Download Dump File
24
24
  `),p())},encapsulation:2})}return e})();var R6=Le(of(),1);var L6=(()=>{class e{$api=I(he);$translate=I(Ee);$toastr=I(_e);constructor(){}downloadDumpFile(){this.$api.get("/plugins/custom-plugins/homebridge-hue/dump-file",{observe:"response",responseType:"blob"}).subscribe({next:t=>{(0,R6.saveAs)(t.body,"homebridge-hue.json.gz")},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("plugins.settings.hue.dump_no_exist"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["app-homebridge-hue"]],decls:3,vars:0,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-download"]],template:function(i,n){i&1&&(c(0,"button",0),O("click",function(){return n.downloadDumpFile()}),S(1,"i",1),E(2,` Download Dump File
25
- `),p())},encapsulation:2})}return e})();var z6=(()=>{class e{transform(t){return t.replace(/\$\{\{HOSTNAME\}\}/g,location.hostname)}static \u0275fac=function(i){return new(i||e)};static \u0275pipe=d1({name:"interpolateMd",type:e,pure:!0})}return e})();function NW(e,u){if(e&1&&(S(0,"markdown",5),y(1,"interpolateMd")),e&2){let t=h();b("data",B(1,1,t.schema.headerDisplay))}}function qW(e,u){if(e&1){let t=H();c(0,"button",31),y(1,"translate"),O("click",function(){j(t);let n=h().$implicit,f=h(2);return N(f.removeBlock(n.__uuid__))}),S(2,"i",32),p()}e&2&&b("ngbTooltip",B(1,1,"form.button_delete"))}function VW(e,u){if(e&1){let t=H();c(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),E(4),p(),c(5,"div",23),x(6,qW,3,3,"button",24),c(7,"button",25),y(8,"translate"),S(9,"i",26),p(),S(10,"i",27),y(11,"translate"),p()()(),c(12,"div",28)(13,"div",29)(14,"app-schema-form",30),Me("dataChange",function(n){let f=j(t).$implicit;return Oe(f.config,n)||(f.config=n),N(n)}),O("isValid",function(n){let f=j(t).$index,r=h(2);return N(r.onIsValid(n,f))}),p()()()()}if(e&2){let t=u.$implicit,i=u.$index,n=h(2);b("ngbAccordionItem",t.__uuid__)("collapsed",n.show!==t.__uuid__)("id",t.__uuid__),l(4),L(t.name),l(2),w(n.plugin.name!=="homebridge-config-ui-x"&&n.show===t.__uuid__?6:-1),l(),b("ngbTooltip",B(8,10,"form.button_edit")),l(3),b("ngClass",n.formBlocksValid[i]?"fa-circle-check green-text":n.strictValidation?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text")("ngbTooltip",B(11,12,n.formBlocksValid[i]?"form.label_valid":n.strictValidation?"form.label_invalid_strict":"form.label_invalid")),l(4),b("configSchema",n.schema),Pe("data",t.config)}}function RW(e,u){if(e&1){let t=H();c(0,"div",18),O("show",function(n){j(t);let f=h();return N(f.blockShown(n))})("hide",function(n){j(t);let f=h();return N(f.blockHidden(n))}),ft(1,VW,15,14,"div",19,nt),p()}if(e&2){let t=h();b("closeOthers",!0),l(),rt(t.pluginConfig)}}function LW(e,u){e&1&&S(0,"app-homebridge-deconz")}function zW(e,u){e&1&&S(0,"app-homebridge-hue")}function HW(e,u){if(e&1){let t=H();c(0,"div",7)(1,"app-schema-form",30),Me("dataChange",function(n){j(t);let f=h();return Oe(f.pluginConfig[0].config,n)||(f.pluginConfig[0].config=n),N(n)}),O("isValid",function(n){j(t);let f=h();return N(f.onIsValid(n,0))}),p(),x(2,LW,1,0,"app-homebridge-deconz"),x(3,zW,1,0,"app-homebridge-hue"),p()}if(e&2){let t=h();l(),b("configSchema",t.schema),Pe("data",t.pluginConfig[0].config),l(),w(t.plugin.name==="homebridge-deconz"?2:-1),l(),w(t.plugin.name==="homebridge-hue"?3:-1)}}function UW(e,u){if(e&1&&(S(0,"markdown",5),y(1,"interpolateMd")),e&2){let t=h();b("data",B(1,1,t.schema.footerDisplay))}}function WW(e,u){if(e&1&&(S(0,"i",14),y(1,"translate")),e&2){let t=h();b("ngClass",t.formIsValid?"fa-circle-check green-text":t.strictValidation?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text")("ngbTooltip",B(1,2,t.formIsValid?"form.label_valid":t.strictValidation?"form.label_invalid_strict":"form.label_invalid"))}}function GW(e,u){if(e&1){let t=H();c(0,"button",33),O("click",function(){j(t);let n=h();return N(n.addBlock())}),S(1,"i",34),p()}}function KW(e,u){e&1&&(c(0,"span"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"form.button_save")))}function JW(e,u){e&1&&S(0,"i",17)}var H6=(()=>{class e{$activeModal=I(ve);$api=I(he);$plugin=I(_i);$modal=I(it);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginAlias;pluginType;pluginConfig=[];form={};show="";saveInProgress;childBridges=[];isFirstSave=!1;formBlocksValid={};formIsValid=!0;strictValidation=!1;constructor(){}ngOnInit(){this.pluginAlias=this.schema.pluginAlias,this.pluginType=this.schema.pluginType,this.strictValidation=this.schema.strictValidation,this.loadPluginConfig()}loadPluginConfig(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{for(let i of t){let n={__uuid__:is(),name:i.name||this.schema.pluginAlias,config:i};this.pluginConfig.push(n)}this.pluginConfig.length?this.show=this.pluginConfig[0].__uuid__:(this.isFirstSave=!0,this.addBlock()),this.plugin.name==="homebridge-hue"&&this.pluginConfig.length&&this.homebridgeHueFix(this.pluginConfig[0].config)},error:t=>{console.error(t),this.$toastr.error(t.error?.message||this.$translate.instant("plugins.config.load_error"),this.$translate.instant("toast.title_error"))}})}save(){return G(this,null,function*(){this.saveInProgress=!0;let t=this.pluginConfig.map(i=>i.config);try{let i=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,t));if(this.saveInProgress=!1,this.plugin.name==="homebridge-config-ui-x")this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let n=this.$modal.open(un,{size:"lg",backdrop:"static"});n.componentInstance.bridges=this.childBridges.map(f=>({name:f.name,username:f.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(i){this.saveInProgress=!1,console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}blockShown(t){this.show=t;for(let i of this.pluginConfig)i.name=i.config.name||i.name}blockHidden(t){this.show===t&&(this.show="")}addBlock(){let t=is();this.pluginConfig.push({__uuid__:t,name:this.schema.pluginAlias,config:{[this.pluginType]:this.schema.pluginAlias}}),this.formBlocksValid[this.pluginConfig.length-1]=!1,this.blockShown(t)}removeBlock(t){let i=this.pluginConfig.findIndex(n=>n.__uuid__===t);this.pluginConfig.splice(i,1),delete this.formBlocksValid[i],Object.keys(this.formBlocksValid).length||(this.formIsValid=!0)}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}homebridgeHueFix(t){if(this.schema.schema.properties.users={type:"object",properties:{}},!(!t.users||typeof t.users!="object"))for(let i of Object.keys(t.users))this.schema.schema.properties.users.properties[i]={type:"string"}}onIsValid(t,i){this.formBlocksValid[i]=t,this.formIsValid=Object.values(this.formBlocksValid).every(n=>n)}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema"},decls:24,vars:18,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"plugin-md",3,"data"],["ngbAccordion","",3,"closeOthers"],[1,"card","card-body"],[1,"mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl","me-2",3,"ngClass","ngbTooltip"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["ngbAccordion","",3,"show","hide","closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],[1,"d-flex","align-items-center"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip"],["ngbAccordionToggle","","container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-primary","ms-2","me-2",3,"ngbTooltip"],[1,"fa","fa-fw","fa-edit"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl",3,"ngClass","ngbTooltip"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body"],[3,"dataChange","isValid","configSchema","data"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-danger","ms-2",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-trash"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-fw","fa-plus"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.close("Dismiss")}),p()(),c(6,"div",4),x(7,NW,2,3,"markdown",5),x(8,RW,3,1,"div",6),x(9,HW,4,4,"div",7),c(10,"div",8),x(11,UW,2,3,"markdown",5),p()(),c(12,"div",9)(13,"div",10)(14,"button",11),O("click",function(){return n.$activeModal.close()}),E(15),y(16,"translate"),p()(),S(17,"div",12),c(18,"div",13),x(19,WW,2,4,"i",14),x(20,GW,2,0,"button",15),c(21,"button",16),O("click",function(){return n.save()}),x(22,KW,3,3,"span"),x(23,JW,1,0,"i",17),p()()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,14,"form.button_close")),l(3),w(n.schema.headerDisplay?7:-1),l(),w(n.pluginConfig.length&&!n.schema.singular?8:-1),l(),w(n.pluginConfig.length&&n.schema.singular?9:-1),l(2),w(n.schema.footerDisplay?11:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(16,16,"form.button_close")," "),l(4),w(n.schema.singular?19:-1),l(),w(n.schema.singular?-1:20),l(),b("disabled",n.saveInProgress||!n.formIsValid&&n.strictValidation),l(),w(n.saveInProgress?-1:22),l(),w(n.saveInProgress?23:-1))},dependencies:[tn,en,ef,Xr,Jr,Kr,Qi,Wr,Ur,zt,Qn,V6,L6,Be,z6,Gr],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var XW=(e,u)=>({"green-text":e,"grey-text":u}),YW=(e,u)=>({"btn-danger":e,"btn-elegant":u}),ZW=(e,u,t)=>({"fa-broom":e,"fa-undo":u,"fa-spinner fa-pulse":t});function QW(e,u){e&1&&(c(0,"div",12),S(1,"i",13),p(),c(2,"p",14),E(3),y(4,"translate"),p()),e&2&&(l(3),L(B(4,1,"reset.bridge_accessories.empty")))}function eG(e,u){if(e&1){let t=H();c(0,"li",18)(1,"span"),E(2),S(3,"br"),c(4,"small",19),S(5,"i",20),E(6),y(7,"translate"),c(8,"span",21),E(9),p()()(),c(10,"button",22),y(11,"translate"),O("click",function(){let n=j(t).$implicit,f=h(2);return N(f.toggleList(n._id))}),S(12,"i",23),p()()}if(e&2){let t=u.$implicit,i=h(2);l(2),q(" ",t.name," "),l(3),b("ngClass",Xu(12,XW,t._isPaired,!t._isPaired)),l(),q(" ",B(7,8,t._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," \xB7 "),l(3),L(t._username),l(),b("disabled",i.clicked)("ngClass",Xu(15,YW,!i.toDelete.includes(t._id),i.toDelete.includes(t._id))),K("aria-label",B(11,10,"form.button_delete")),l(2),b("ngClass",wu(18,ZW,!i.toDelete.includes(t._id),i.toDelete.includes(t._id)&&!i.clicked,i.toDelete.includes(t._id)&&i.clicked))}}function tG(e,u){if(e&1&&(c(0,"div",12),S(1,"i",15),p(),c(2,"ul",16)(3,"li"),E(4),y(5,"translate"),p(),c(6,"li"),E(7),y(8,"translate"),p()(),c(9,"ul",17),ft(10,eG,13,22,"li",18,nt),p()),e&2){let t=h();l(4),L(B(5,2,"reset.bridge_accessories.list_1")),l(3),L(B(8,4,"reset.clear_cache_single.list_3")),l(3),rt(t.pairings)}}function uG(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}if(e&2){let t=h();b("disabled",t.clicked),l(),q(" ",B(2,2,"form.button_close")," ")}}function iG(e,u){if(e&1){let t=H();c(0,"button",25),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function nG(e,u){if(e&1&&E(0),e&2){let t=h(3);q(" (",t.toDelete.length,") ")}}function fG(e,u){if(e&1&&(E(0),y(1,"translate"),x(2,nG,1,1)),e&2){let t=h(2);q(" ",B(1,2,"form.button_remove")," "),l(2),w(t.toDelete.length>0?2:-1)}}function rG(e,u){e&1&&S(0,"i",27)}function oG(e,u){if(e&1){let t=H();c(0,"button",26),O("click",function(){j(t);let n=h();return N(n.cleanBridges())}),x(1,fG,3,4),x(2,rG,1,0,"i",27),p()}if(e&2){let t=h();b("disabled",!t.toDelete.length||t.clicked),l(),w(t.clicked?-1:1),l(),w(t.clicked?2:-1)}}var U6=(()=>{class e{$activeModal=I(ve);$api=I(he);$router=I(cu);$toastr=I(_e);$translate=I(Ee);childBridges=[];clicked=!1;pairings=[];toDelete=[];constructor(){}ngOnInit(){this.loadPairings()}loadPairings(){return G(this,null,function*(){try{this.pairings=(yield ae(this.$api.get("/server/pairings"))).filter(t=>t._category==="bridge"&&!t._main&&this.childBridges.find(i=>i.username===t._username)).sort((t,i)=>t.name.localeCompare(i.name))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("settings.unpair_bridge.load_error"),this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}toggleList(t){this.toDelete.includes(t)?this.toDelete=this.toDelete.filter(i=>i!==t):this.toDelete.push(t)}cleanBridges(){return this.clicked=!0,this.$api.delete("/server/pairings/accessories",{body:this.toDelete.map(t=>({id:t}))}).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("reset.accessory_ind.done"),this.$translate.instant("toast.title_success")),this.$activeModal.close(),this.$router.navigate(["/restart"],{queryParams:{restarting:!0}})},error:t=>{this.clicked=!1,console.error(t),this.$toastr.error(this.$translate.instant("reset.accessory_ind.fail"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{childBridges:"childBridges"},decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"disabled"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-circle-check","primary-text",2,"font-size","75px"],[1,"mb-0","text-center"],[1,"fas","fa-fw","fa-broom","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"fas","fa-fw","fa-link",3,"ngClass"],[1,"font-monospace"],[1,"btn","btn-danger","m-0","ms-3",3,"click","disabled","ngClass"],[1,"fas","fa-fw",3,"ngClass"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4),x(8,QW,5,3),x(9,tG,12,6),p(),c(10,"div",5)(11,"div",6),x(12,uG,3,4,"button",7),p(),c(13,"div",8),x(14,iG,3,3,"button",9),p(),c(15,"div",10),x(16,oG,3,3,"button",11),p()()()),i&2&&(l(3),L(B(4,8,"child_bridge.reset_accessories")),l(2),b("disabled",n.clicked),K("aria-label",B(6,10,"form.button_close")),l(3),w(n.pairings.length===0?8:-1),l(),w(n.pairings.length>0?9:-1),l(3),w(n.pairings.length>0?12:-1),l(2),w(n.pairings.length===0?14:-1),l(2),w(n.pairings.length>0?16:-1))},dependencies:[zt,Be],encapsulation:2})}return e})();var G6=Le(of(),1);var K6=Le($1(),1),J6=Le(T1(),1);var aG=e=>({prefix:e}),sG=e=>({link:e}),W6=(e,u,t,i)=>({"fa-circle-o":e,"fa-spinner fa-pulse":u,"fa-check-circle green-text":t,"fa-times-circle red-text":i}),DG=(e,u,t)=>({"fa-circle-o":e,"fa-spinner fa-pulse":u,"fa-times-circle red-text":t});function lG(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"plugins.manage.scoped.process")))}function dG(e,u){e&1&&(S(0,"li",8),y(1,"translate"),c(2,"li"),E(3),y(4,"translate"),p()),e&2&&(b("innerHTML",B(1,2,"plugins.manage.scoped.windows"),de),l(3),L(B(4,4,"plugins.manage.manual_update_command")))}function cG(e,u){if(e&1&&(c(0,"pre",9),E(1),p()),e&2){let t=h();l(),F1(`hb-service stop
25
+ `),p())},encapsulation:2})}return e})();var z6=(()=>{class e{transform(t){return t.replace(/\$\{\{HOSTNAME\}\}/g,location.hostname)}static \u0275fac=function(i){return new(i||e)};static \u0275pipe=d1({name:"interpolateMd",type:e,pure:!0})}return e})();function NW(e,u){if(e&1&&(S(0,"markdown",5),y(1,"interpolateMd")),e&2){let t=h();b("data",B(1,1,t.schema.headerDisplay))}}function qW(e,u){if(e&1){let t=H();c(0,"button",31),y(1,"translate"),O("click",function(){j(t);let n=h().$implicit,f=h(2);return N(f.removeBlock(n.__uuid__))}),S(2,"i",32),p()}e&2&&b("ngbTooltip",B(1,1,"form.button_delete"))}function VW(e,u){if(e&1){let t=H();c(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),E(4),p(),c(5,"div",23),x(6,qW,3,3,"button",24),c(7,"button",25),y(8,"translate"),S(9,"i",26),p(),S(10,"i",27),y(11,"translate"),p()()(),c(12,"div",28)(13,"div",29)(14,"app-schema-form",30),Me("dataChange",function(n){let f=j(t).$implicit;return Oe(f.config,n)||(f.config=n),N(n)}),O("isValid",function(n){let f=j(t).$index,r=h(2);return N(r.onIsValid(n,f))}),p()()()()}if(e&2){let t=u.$implicit,i=u.$index,n=h(2);b("ngbAccordionItem",t.__uuid__)("collapsed",n.show!==t.__uuid__)("id",t.__uuid__),l(4),L(t.name),l(2),w(n.plugin.name!=="homebridge-config-ui-x"&&n.show===t.__uuid__?6:-1),l(),b("ngbTooltip",B(8,10,"form.button_edit")),l(3),b("ngClass",n.formBlocksValid[i]?"fa-circle-check green-text":n.strictValidation?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text")("ngbTooltip",B(11,12,n.formBlocksValid[i]?"form.label_valid":n.strictValidation?"form.label_invalid_strict":"form.label_invalid")),l(4),b("configSchema",n.schema),Pe("data",t.config)}}function RW(e,u){if(e&1){let t=H();c(0,"div",18),O("show",function(n){j(t);let f=h();return N(f.blockShown(n))})("hide",function(n){j(t);let f=h();return N(f.blockHidden(n))}),ft(1,VW,15,14,"div",19,nt),p()}if(e&2){let t=h();b("closeOthers",!0),l(),rt(t.pluginConfig)}}function LW(e,u){e&1&&S(0,"app-homebridge-deconz")}function zW(e,u){e&1&&S(0,"app-homebridge-hue")}function HW(e,u){if(e&1){let t=H();c(0,"div",7)(1,"app-schema-form",30),Me("dataChange",function(n){j(t);let f=h();return Oe(f.pluginConfig[0].config,n)||(f.pluginConfig[0].config=n),N(n)}),O("isValid",function(n){j(t);let f=h();return N(f.onIsValid(n,0))}),p(),x(2,LW,1,0,"app-homebridge-deconz"),x(3,zW,1,0,"app-homebridge-hue"),p()}if(e&2){let t=h();l(),b("configSchema",t.schema),Pe("data",t.pluginConfig[0].config),l(),w(t.plugin.name==="homebridge-deconz"?2:-1),l(),w(t.plugin.name==="homebridge-hue"?3:-1)}}function UW(e,u){if(e&1&&(S(0,"markdown",5),y(1,"interpolateMd")),e&2){let t=h();b("data",B(1,1,t.schema.footerDisplay))}}function WW(e,u){if(e&1&&(S(0,"i",14),y(1,"translate")),e&2){let t=h();b("ngClass",t.formIsValid?"fa-circle-check green-text":t.strictValidation?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text")("ngbTooltip",B(1,2,t.formIsValid?"form.label_valid":t.strictValidation?"form.label_invalid_strict":"form.label_invalid"))}}function GW(e,u){if(e&1){let t=H();c(0,"button",33),O("click",function(){j(t);let n=h();return N(n.addBlock())}),S(1,"i",34),p()}}function KW(e,u){e&1&&(c(0,"span"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"form.button_save")))}function JW(e,u){e&1&&S(0,"i",17)}var H6=(()=>{class e{$activeModal=I(ve);$api=I(he);$plugin=I(_i);$modal=I(it);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;schema;pluginAlias;pluginType;pluginConfig=[];form={};show="";saveInProgress;childBridges=[];isFirstSave=!1;formBlocksValid={};formIsValid=!0;strictValidation=!1;constructor(){}ngOnInit(){this.pluginAlias=this.schema.pluginAlias,this.pluginType=this.schema.pluginType,this.strictValidation=this.schema.strictValidation,this.loadPluginConfig()}loadPluginConfig(){this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`).subscribe({next:t=>{for(let i of t){let n={__uuid__:is(),name:i.name||this.schema.pluginAlias,config:i};this.pluginConfig.push(n)}this.pluginConfig.length?this.show=this.pluginConfig[0].__uuid__:(this.isFirstSave=!0,this.addBlock()),this.plugin.name==="homebridge-hue"&&this.pluginConfig.length&&this.homebridgeHueFix(this.pluginConfig[0].config)},error:t=>{console.error(t),this.$toastr.error(t.error?.message||this.$translate.instant("plugins.config.load_error"),this.$translate.instant("toast.title_error"))}})}save(){return G(this,null,function*(){this.saveInProgress=!0;let t=this.pluginConfig.map(i=>i.config);try{let i=yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,t));if(this.saveInProgress=!1,this.plugin.name==="homebridge-config-ui-x")this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(this.plugin,!0);return}if(!["homebridge","homebridge-config-ui-x"].includes(this.plugin.name)&&(yield this.getChildBridges(),this.childBridges.length>0)){this.$activeModal.close();let n=this.$modal.open(un,{size:"lg",backdrop:"static"});n.componentInstance.bridges=this.childBridges.map(f=>({name:f.name,username:f.username}));return}this.$activeModal.close(),this.$modal.open(pu,{size:"lg",backdrop:"static"})}catch(i){this.saveInProgress=!1,console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}blockShown(t){this.show=t;for(let i of this.pluginConfig)i.name=i.config.name||i.name}blockHidden(t){this.show===t&&(this.show="")}addBlock(){let t=is();this.pluginConfig.push({__uuid__:t,name:this.schema.pluginAlias,config:{[this.pluginType]:this.schema.pluginAlias}}),this.formBlocksValid[this.pluginConfig.length-1]=!1,this.blockShown(t)}removeBlock(t){let i=this.pluginConfig.findIndex(n=>n.__uuid__===t);this.pluginConfig.splice(i,1),delete this.formBlocksValid[i],Object.keys(this.formBlocksValid).length||(this.formIsValid=!0)}getChildBridges(){return G(this,null,function*(){try{(yield ae(this.$api.get("/status/homebridge/child-bridges"))).forEach(i=>{this.plugin.name===i.plugin&&this.childBridges.push(i)})}catch(t){console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error")),this.childBridges=[]}})}homebridgeHueFix(t){if(this.schema.schema.properties.users={type:"object",properties:{}},!(!t.users||typeof t.users!="object"))for(let i of Object.keys(t.users))this.schema.schema.properties.users.properties[i]={type:"string"}}onIsValid(t,i){this.formBlocksValid[i]=t,this.formIsValid=Object.values(this.formBlocksValid).every(n=>n)}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",schema:"schema"},decls:24,vars:18,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"plugin-md",3,"data"],["ngbAccordion","",3,"closeOthers"],[1,"card","card-body"],[1,"mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl","me-2",3,"ngClass","ngbTooltip"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],["ngbAccordion","",3,"show","hide","closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],[1,"d-flex","align-items-center"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip"],["ngbAccordionToggle","","container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-primary","ms-2","me-2",3,"ngbTooltip"],[1,"fa","fa-fw","fa-edit"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"fa","fa-fw","fa-xl",3,"ngClass","ngbTooltip"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body"],[3,"dataChange","isValid","configSchema","data"],["container","modal","placement","left","openDelay","150","triggers","hover",1,"btn","btn-danger","ms-2",3,"click","ngbTooltip"],[1,"fa","fa-fw","fa-trash"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-fw","fa-plus"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.close("Dismiss")}),p()(),c(6,"div",4),x(7,NW,2,3,"markdown",5),x(8,RW,3,1,"div",6),x(9,HW,4,4,"div",7),c(10,"div",8),x(11,UW,2,3,"markdown",5),p()(),c(12,"div",9)(13,"div",10)(14,"button",11),O("click",function(){return n.$activeModal.close()}),E(15),y(16,"translate"),p()(),S(17,"div",12),c(18,"div",13),x(19,WW,2,4,"i",14),x(20,GW,2,0,"button",15),c(21,"button",16),O("click",function(){return n.save()}),x(22,KW,3,3,"span"),x(23,JW,1,0,"i",17),p()()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.saveInProgress),K("aria-label",B(5,14,"form.button_close")),l(3),w(n.schema.headerDisplay?7:-1),l(),w(n.pluginConfig.length&&!n.schema.singular?8:-1),l(),w(n.pluginConfig.length&&n.schema.singular?9:-1),l(2),w(n.schema.footerDisplay?11:-1),l(3),b("disabled",n.saveInProgress),l(),q(" ",B(16,16,"form.button_close")," "),l(4),w(n.schema.singular?19:-1),l(),w(n.schema.singular?-1:20),l(),b("disabled",n.saveInProgress||!n.formIsValid&&n.strictValidation),l(),w(n.saveInProgress?-1:22),l(),w(n.saveInProgress?23:-1))},dependencies:[tn,en,ef,Xr,Jr,Kr,Qi,Wr,Ur,zt,Qn,V6,L6,Be,z6,Gr],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return e})();var XW=(e,u)=>({"green-text":e,"grey-text":u}),YW=(e,u)=>({"btn-danger":e,"btn-elegant":u}),ZW=(e,u,t)=>({"fa-broom":e,"fa-undo":u,"fa-spinner fa-pulse":t});function QW(e,u){e&1&&(c(0,"div",12),S(1,"i",13),p(),c(2,"p",14),E(3),y(4,"translate"),p()),e&2&&(l(3),L(B(4,1,"reset.bridge_accessories.empty")))}function eG(e,u){if(e&1){let t=H();c(0,"li",18)(1,"span"),E(2),S(3,"br"),c(4,"small",19),S(5,"i",20),E(6),y(7,"translate"),c(8,"span",21),E(9),p()()(),c(10,"button",22),y(11,"translate"),O("click",function(){let n=j(t).$implicit,f=h(2);return N(f.toggleList(n._id))}),S(12,"i",23),p()()}if(e&2){let t=u.$implicit,i=h(2);l(2),q(" ",t.name," "),l(3),b("ngClass",Xu(12,XW,t._isPaired,!t._isPaired)),l(),q(" ",B(7,8,t._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," \xB7 "),l(3),L(t._username),l(),b("disabled",i.clicked)("ngClass",Xu(15,YW,!i.toDelete.includes(t._id),i.toDelete.includes(t._id))),K("aria-label",B(11,10,"form.button_delete")),l(2),b("ngClass",wu(18,ZW,!i.toDelete.includes(t._id),i.toDelete.includes(t._id)&&!i.clicked,i.toDelete.includes(t._id)&&i.clicked))}}function tG(e,u){if(e&1&&(c(0,"div",12),S(1,"i",15),p(),c(2,"ul",16)(3,"li"),E(4),y(5,"translate"),p(),c(6,"li"),E(7),y(8,"translate"),p()(),c(9,"ul",17),ft(10,eG,13,22,"li",18,nt),p()),e&2){let t=h();l(4),L(B(5,2,"reset.bridge_accessories.list_1")),l(3),L(B(8,4,"reset.clear_cache_single.list_3")),l(3),rt(t.pairings)}}function uG(e,u){if(e&1){let t=H();c(0,"button",24),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}if(e&2){let t=h();b("disabled",t.clicked),l(),q(" ",B(2,2,"form.button_close")," ")}}function iG(e,u){if(e&1){let t=H();c(0,"button",25),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(1),y(2,"translate"),p()}e&2&&(l(),q(" ",B(2,1,"form.button_close")," "))}function nG(e,u){if(e&1&&E(0),e&2){let t=h(3);q(" (",t.toDelete.length,") ")}}function fG(e,u){if(e&1&&(E(0),y(1,"translate"),x(2,nG,1,1)),e&2){let t=h(2);q(" ",B(1,2,"form.button_remove")," "),l(2),w(t.toDelete.length>0?2:-1)}}function rG(e,u){e&1&&S(0,"i",27)}function oG(e,u){if(e&1){let t=H();c(0,"button",26),O("click",function(){j(t);let n=h();return N(n.cleanBridges())}),x(1,fG,3,4),x(2,rG,1,0,"i",27),p()}if(e&2){let t=h();b("disabled",!t.toDelete.length||t.clicked),l(),w(t.clicked?-1:1),l(),w(t.clicked?2:-1)}}var U6=(()=>{class e{$activeModal=I(ve);$api=I(he);$router=I(cu);$toastr=I(_e);$translate=I(Ee);childBridges=[];clicked=!1;pairings=[];toDelete=[];constructor(){}ngOnInit(){this.loadPairings()}loadPairings(){return G(this,null,function*(){try{this.pairings=(yield ae(this.$api.get("/server/pairings"))).filter(t=>t._category==="bridge"&&!t._main&&this.childBridges.find(i=>i.username===t._username)).sort((t,i)=>t.name.localeCompare(i.name))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("settings.unpair_bridge.load_error"),this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}toggleList(t){this.toDelete.includes(t)?this.toDelete=this.toDelete.filter(i=>i!==t):this.toDelete.push(t)}cleanBridges(){return this.clicked=!0,this.$api.delete("/server/pairings/accessories",{body:this.toDelete.map(t=>({id:t}))}).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("reset.accessory_ind.done"),this.$translate.instant("toast.title_success")),this.$activeModal.close(),this.$router.navigate(["/restart"],{queryParams:{restarting:!0}})},error:t=>{this.clicked=!1,console.error(t),this.$toastr.error(this.$translate.instant("reset.accessory_ind.fail"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{childBridges:"childBridges"},decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"disabled"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-circle-check","primary-text",2,"font-size","75px"],[1,"mb-0","text-center"],[1,"fas","fa-fw","fa-broom","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"fas","fa-fw","fa-link",3,"ngClass"],[1,"font-monospace"],[1,"btn","btn-danger","m-0","ms-3",3,"click","disabled","ngClass"],[1,"fas","fa-fw",3,"ngClass"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4),x(8,QW,5,3),x(9,tG,12,6),p(),c(10,"div",5)(11,"div",6),x(12,uG,3,4,"button",7),p(),c(13,"div",8),x(14,iG,3,3,"button",9),p(),c(15,"div",10),x(16,oG,3,3,"button",11),p()()()),i&2&&(l(3),L(B(4,8,"child_bridge.reset_accessories")),l(2),b("disabled",n.clicked),K("aria-label",B(6,10,"form.button_close")),l(3),w(n.pairings.length===0?8:-1),l(),w(n.pairings.length>0?9:-1),l(3),w(n.pairings.length>0?12:-1),l(2),w(n.pairings.length===0?14:-1),l(2),w(n.pairings.length>0?16:-1))},dependencies:[zt,Be],encapsulation:2})}return e})();var G6=Le(of(),1);var K6=Le(O1(),1),J6=Le(M1(),1);var aG=e=>({prefix:e}),sG=e=>({link:e}),W6=(e,u,t,i)=>({"fa-circle-o":e,"fa-spinner fa-pulse":u,"fa-check-circle green-text":t,"fa-times-circle red-text":i}),DG=(e,u,t)=>({"fa-circle-o":e,"fa-spinner fa-pulse":u,"fa-times-circle red-text":t});function lG(e,u){e&1&&(c(0,"li"),E(1),y(2,"translate"),p()),e&2&&(l(),L(B(2,1,"plugins.manage.scoped.process")))}function dG(e,u){e&1&&(S(0,"li",8),y(1,"translate"),c(2,"li"),E(3),y(4,"translate"),p()),e&2&&(b("innerHTML",B(1,2,"plugins.manage.scoped.windows"),de),l(3),L(B(4,4,"plugins.manage.manual_update_command")))}function cG(e,u){if(e&1&&(c(0,"pre",9),E(1),p()),e&2){let t=h();l(),F1(`hb-service stop
26
26
  npm install -g `,t.plugin.newHbScope.to,"@",t.plugin.newHbScope.switch,`
27
27
  npm uninstall -g `,t.plugin.newHbScope.from,`
28
28
  hb-service start`)}}function pG(e,u){if(e&1&&(c(0,"div",10)(1,"ul",18)(2,"li"),S(3,"i",19),E(4),y(5,"translate"),c(6,"span",20),E(7),p()(),c(8,"li"),S(9,"i",19),E(10),y(11,"translate"),c(12,"span",20),E(13),p()(),c(14,"li"),S(15,"i",19),E(16),y(17,"translate"),p()()()),e&2){let t=h();l(3),b("ngClass",Ki(14,W6,!t.installing&&!t.installed&&!t.failure,t.installing,t.installed&&!t.failure,!t.installed&&t.failure)),l(),q(" ",B(5,8,"plugins.manage.install")," "),l(3),L(t.plugin.newHbScope.to),l(2),b("ngClass",Ki(19,W6,!t.uninstalling&&!t.uninstalled&&!t.failure,t.uninstalling,t.uninstalled&&!t.failure,!t.uninstalled&&t.failure)),l(),q(" ",B(11,10,"plugins.manage.uninstall")," "),l(3),L(t.plugin.newHbScope.from),l(2),b("ngClass",wu(24,DG,!t.restarting&&!t.failure,t.restarting,t.failure)),l(),q(" ",B(17,12,"menu.hbrestart.title")," ")}}function mG(e,u){if(e&1){let t=H();c(0,"div",11)(1,"p"),E(2),y(3,"translate"),p(),c(4,"p",20),E(5),p(),c(6,"button",21),O("click",function(){j(t);let n=h();return N(n.downloadLogFile())}),E(7),y(8,"translate"),p()()}if(e&2){let t=h();l(2),L(B(3,3,"plugins.manage.scoped.error")),l(3),L(t.failure),l(2),L(B(8,5,"form.button_download"))}}function FG(e,u){if(e&1){let t=H();c(0,"button",22),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(2),y(3,"translate"),p()}if(e&2){let t=h();b("disabled",t.installing||t.uninstalling||t.restarting),K("aria-label",B(1,3,"form.button_close")),l(2),q(" ",B(3,5,"form.button_close")," ")}}function CG(e,u){if(e&1){let t=H();c(0,"button",22),y(1,"translate"),O("click",function(){j(t);let n=h();return N(n.$activeModal.dismiss("Dismiss"))}),E(2),y(3,"translate"),p()}if(e&2){let t=h();b("disabled",t.installing||t.uninstalling||t.restarting),K("aria-label",B(1,3,"form.button_close")),l(2),q(" ",B(3,5,"form.button_close")," ")}}function hG(e,u){e&1&&(c(0,"span"),E(1),y(2,"translate"),p()),e&2&&(l(),q(" ",B(2,1,"form.label_continue")," "))}function gG(e,u){e&1&&S(0,"i",24)}function bG(e,u){if(e&1){let t=H();c(0,"button",23),O("click",function(){j(t);let n=h();return N(n.doSwitch())}),x(1,hG,3,3,"span"),x(2,gG,1,0,"i",24),p()}if(e&2){let t=h();b("disabled",t.installing||t.uninstalling||t.restarting||!t.onlineUpdateOk||t.failure),l(),w(!t.installing&&!t.uninstalling&&!t.restarting?1:-1),l(),w((t.installing||t.uninstalling||t.restarting)&&!t.failure?2:-1)}}var X6=(()=>{class e{$activeModal=I(ve);$api=I(he);$router=I(cu);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);$ws=I(ei);plugin;installing=!1;installed=!1;uninstalling=!1;uninstalled=!1;restarting=!1;failure="";onlineUpdateOk;moreInfo='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';prefix='<span class="font-monospace">@homebridge-plugins/</span>';io;term;termTarget;fitAddon=new J6.FitAddon;errorLog="";constructor(){this.term=new K6.Terminal({theme:{background:"#00000000",foreground:this.$settings.actualLightingMode==="light"?"#333333":"#eeeeee",cursor:"#d2d2d2",selection:"#d2d2d2"},allowTransparency:!0}),this.term.loadAddon(this.fitAddon)}ngOnInit(){this.onlineUpdateOk=this.$settings.env.platform!=="win32",this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",t=>{this.term.write(t);let i=t.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();i&&(this.errorLog+=`${i}\r
29
- `)})}doSwitch(){this.installing=!0,this.io.request("install",{name:this.plugin.newHbScope.to,version:this.plugin.newHbScope.switch,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.installing=!1,this.installed=!0,this.uninstalling=!0,this.io.request("uninstall",{name:this.plugin.newHbScope.from,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.uninstalling=!1,this.uninstalled=!0,this.restarting=!0,this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{this.$activeModal.close(),this.$router.navigate(["/restart"])},error:t=>{this.restarting=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})},error:t=>{this.uninstalling=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})},error:t=>{this.installing=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}downloadLogFile(){let t=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,G6.saveAs)(t,`${this.plugin.name}-error.log`)}ngOnDestroy(){this.io.end(),this.term.dispose()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:31,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"mb-3","text-center"],[1,"fas","fa-fw","fa-arrow-right-arrow-left","primary-text",2,"font-size","75px"],[1,"mb-0"],[3,"innerHTML"],[1,"mt-3","mb-0"],[1,"text-center"],[1,"alert","alert-error","mb-0"],["id","plugin-output",1,"mb-0",3,"hidden"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"d-inline-block","text-start","mt-3","mb-3",2,"list-style-type","none"],[1,"fa","fa-fw",3,"ngClass"],[1,"font-monospace"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4)(8,"div",5),S(9,"i",6),p(),c(10,"ul",7),S(11,"li",8),y(12,"translate"),c(13,"li"),E(14),y(15,"translate"),p(),S(16,"li",8),y(17,"translate"),x(18,lG,3,3,"li"),x(19,dG,5,6),p(),x(20,cG,2,3,"pre",9),x(21,pG,18,28,"div",10),x(22,mG,9,7,"div",11),S(23,"div",12),p(),c(24,"div",13)(25,"div",14),x(26,FG,4,7,"button",15),p(),c(27,"div",10),x(28,CG,4,7,"button",15),p(),c(29,"div",16),x(30,bG,3,3,"button",17),p()()()),i&2&&(l(3),L(B(4,15,"plugins.manage.scoped.switch")),l(2),b("disabled",n.installing||n.uninstalling||n.restarting),K("aria-label",B(6,17,"form.button_close")),l(6),b("innerHTML",je(12,19,"plugins.manage.scoped.info_1",eu(27,aG,n.prefix)),de),l(3),L(B(15,22,"plugins.manage.scoped_message")),l(2),b("innerHTML",je(17,24,"plugins.manage.scoped.info_2",eu(29,sG,n.moreInfo)),de),l(2),w(n.onlineUpdateOk?18:-1),l(),w(n.onlineUpdateOk?-1:19),l(),w(n.onlineUpdateOk?-1:20),l(),w(n.onlineUpdateOk?21:-1),l(),w(n.failure?22:-1),l(),b("hidden",!n.onlineUpdateOk||n.failure),l(3),w(n.onlineUpdateOk?26:-1),l(2),w(n.onlineUpdateOk?-1:28),l(2),w(n.onlineUpdateOk?30:-1))},dependencies:[zt,Be],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}"]})}return e})();var EG=e=>({pluginName:e}),_G=e=>({count:e});function yG(e,u){e&1&&(c(0,"div",5),S(1,"i",13),p())}function vG(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"plugins.uninstall_remove_child_bridge")," ")}function BG(e,u){if(e&1&&(E(0),y(1,"translate")),e&2){let t=h(4);q(" ",je(1,1,"plugins.uninstall_remove_child_bridges",eu(4,_G,t.childBridges.length))," ")}}function xG(e,u){if(e&1){let t=H();c(0,"label",24)(1,"input",25),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.removeChildBridges,n)||(f.removeChildBridges=n),N(n)}),p(),x(2,vG,2,3),x(3,BG,2,6),S(4,"span",23),p()}if(e&2){let t=h(3);l(),Pe("ngModel",t.removeChildBridges),l(),w(t.childBridges.length===1?2:-1),l(),w(t.childBridges.length>1?3:-1)}}function wG(e,u){if(e&1){let t=H();c(0,"p",16)(1,"label",21)(2,"input",22),Me("ngModelChange",function(n){j(t);let f=h(2);return Oe(f.removeConfig,n)||(f.removeConfig=n),N(n)}),p(),E(3),y(4,"translate"),S(5,"span",23),p(),x(6,xG,5,3,"label",24),p()}if(e&2){let t=h(2);l(2),Pe("ngModel",t.removeConfig),l(),q(" ",B(4,3,"plugins.uninstall_remove_plugin_config")," "),l(3),w(t.hasChildBridges?6:-1)}}function SG(e,u){e&1&&(c(0,"ul",17)(1,"li"),E(2),y(3,"translate"),p(),c(4,"li"),E(5),y(6,"translate"),p()()),e&2&&(l(2),L(B(3,2,"plugins.uninstall_warn_1")),l(3),L(B(6,4,"plugins.uninstall_warn_2")))}function IG(e,u){e&1&&(c(0,"ngb-alert",18),E(1),y(2,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,2,"plugins.uninstall_remove_config_required")," "))}function AG(e,u){if(e&1&&(c(0,"div",14),S(1,"i",15),p(),c(2,"div",9),x(3,wG,7,5,"p",16),p(),x(4,SG,7,6,"ul",17),x(5,IG,3,4,"ngb-alert",18),c(6,"ngb-alert",19)(7,"p",20),E(8),y(9,"translate"),p()()),e&2){let t=h();l(3),w(t.pluginAlias&&t.pluginType?3:-1),l(),w(t.hasChildBridges&&t.removeChildBridges?4:-1),l(),w(!t.pluginAlias||!t.pluginType?5:-1),l(),b("dismissible",!1),l(2),L(je(9,5,"plugins.uninstall_remove_confirmation",eu(8,EG,t.plugin.displayName)))}}function kG(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"plugins.manage.uninstall")," ")}function $G(e,u){e&1&&S(0,"i",12)}var Y6=(()=>{class e{$activeModal=I(ve);$api=I(he);$modal=I(it);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;childBridges;action;loading=!0;uninstalling=!1;removeConfig=!0;removeChildBridges=!0;hasChildBridges=!1;pluginType;pluginAlias;constructor(){}ngOnInit(){return G(this,null,function*(){try{this.childBridges.length&&(this.hasChildBridges=!0);let t=yield this.getAlias();this.pluginType=t.pluginType,this.pluginAlias=t.pluginAlias}finally{this.loading=!1}})}doUninstall(){return G(this,null,function*(){if(this.uninstalling=!0,this.removeConfig&&this.pluginType&&this.pluginAlias)try{yield this.removePluginConfig()}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.config.remove_error"),this.$translate.instant("toast.title_error"))}if(this.hasChildBridges&&this.removeChildBridges)try{yield Promise.all(this.childBridges.map(i=>this.removeChildBridge(i.username.replace(/:/g,""))))}catch(i){console.error(i)}this.$activeModal.dismiss();let t=this.$modal.open(tf,{size:"lg",backdrop:"static"});t.componentInstance.action="Uninstall",t.componentInstance.pluginName=this.plugin.name,t.componentInstance.pluginDisplayName=this.plugin.displayName})}getAlias(){return G(this,null,function*(){return ae(this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`))})}removePluginConfig(){return G(this,null,function*(){yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,[])),yield ae(this.$api.put(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}/enable`,{})),this.$toastr.success(this.$translate.instant("plugins.settings.plugin_config_saved"),this.$translate.instant("toast.title_success"))})}removeChildBridge(t){return G(this,null,function*(){try{yield ae(this.$api.delete(`/server/pairings/${t}`))}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.uninstall_bridge_error"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",childBridges:"childBridges",action:"action"},decls:20,vars:17,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-trash","primary-text",2,"font-size","75px"],[1,"d-inline-block","text-start","mb-1"],[1,"mb-3","text-start"],["type","info",1,"mb-3",3,"dismissible"],["type","warning",1,"mb-0",3,"dismissible"],[1,"mb-0"],["for","remove-plugin-config",1,"hb-uix-switch","d-block"],["id","remove-plugin-config","type","checkbox",3,"ngModelChange","ngModel"],[1,"hb-uix-slider","hb-uix-round"],["for","remove-plugin-child-bridges",1,"hb-uix-switch","d-block"],["id","remove-plugin-child-bridges","type","checkbox",3,"ngModelChange","ngModel"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,yG,2,0,"div",5),x(8,AG,10,10),p(),c(9,"div",6)(10,"div",7)(11,"button",8),y(12,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),E(13),y(14,"translate"),p()(),S(15,"div",9),c(16,"div",10)(17,"button",11),O("click",function(){return n.doUninstall()}),x(18,kG,2,3),x(19,$G,1,0,"i",12),p()()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.uninstalling),K("aria-label",B(5,11,"form.button_close")),l(3),w(n.loading?7:-1),l(),w(n.loading?-1:8),l(3),b("disabled",n.uninstalling),K("aria-label",B(12,13,"form.button_close")),l(2),q(" ",B(14,15,"form.button_close")," "),l(4),b("disabled",n.loading||n.uninstalling),l(),w(n.uninstalling?-1:18),l(),w(n.uninstalling?19:-1))},dependencies:[tu,Ji,vt,Zu,du,Be],encapsulation:2})}return e})();var _i=(()=>{class e{$api=I(he);$modal=I(it);$customPluginsService=I(_6);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);constructor(){}installPlugin(t,i="latest"){let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Install",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i}uninstallPlugin(t,i){let n=this.$modal.open(Y6,{size:"lg",backdrop:"static"});n.componentInstance.action="Uninstall",n.componentInstance.plugin=t,n.componentInstance.childBridges=i}checkAndUpdatePlugin(t,i="latest"){return G(this,null,function*(){(yield this.checkHbAndNodeVersion(t,"update"))&&(yield this.updatePlugin(t,i))})}updatePlugin(t,i){return G(this,null,function*(){let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Update",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i,n.componentInstance.latestVersion=t.latestVersion,n.componentInstance.installedVersion=t.installedVersion,n.componentInstance.isDisabled=t.disabled})}upgradeHomebridge(t,i="latest"){return G(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(t,"update")))return;let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Update",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i,n.componentInstance.latestVersion=t.latestVersion,n.componentInstance.installedVersion=t.installedVersion})}installAlternateVersion(t){return G(this,null,function*(){let i=this.$modal.open($6,{size:"lg",backdrop:"static"});i.componentInstance.plugin=t;try{let{action:n,version:f,engines:r}=yield i.result;return(yield this.checkHbAndNodeVersion(Se(X({},t),{updateEngines:r}),n))?t.name==="homebridge"?yield this.upgradeHomebridge(t,f):t.installedVersion?yield this.updatePlugin(t,f):this.installPlugin(t,f):void 0}catch{}})}bridgeSettings(t,i=!1){return G(this,null,function*(){let n;if(t.settingsSchema)try{n=yield this.loadConfigSchema(t.name)}catch(r){console.error(r),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let f=this.$modal.open(O6,{size:"lg",backdrop:"static"});f.componentInstance.schema=n,f.componentInstance.plugin=t,f.componentInstance.justInstalled=i})}settings(t){return G(this,null,function*(){let i;if(t.settingsSchema)try{i=yield this.loadConfigSchema(t.name)}catch(f){console.error(f),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}if(i&&i.customUi)return this.$customPluginsService.openCustomSettingsUi(t,i);if(this.$customPluginsService.plugins[t.name])return this.$customPluginsService.openSettings(t,i);let n=this.$modal.open(t.settingsSchema?H6:Xl,{size:"lg",backdrop:"static"});return n.componentInstance.schema=i,n.componentInstance.plugin=t,n.result.catch(()=>{})})}jsonEditor(t){return G(this,null,function*(){let i;if(t.settingsSchema)try{i=yield this.loadConfigSchema(t.name)}catch(f){console.error(f)}let n=this.$modal.open(Xl,{size:"lg",backdrop:"static"});return n.componentInstance.schema=i,n.componentInstance.plugin=t,n.result.catch(f=>console.error(f))})}checkHbAndNodeVersion(t,i){return G(this,null,function*(){let n=!0,f=!0;try{t.updateEngines?.node&&(0,uf.lt)(this.$settings.env.nodeVersion,(0,uf.minVersion)(t.updateEngines.node))&&(n=!1),t.updateEngines?.homebridge&&(0,uf.lt)(this.$settings.env.homebridgeVersion,(0,uf.minVersion)(t.updateEngines.homebridge))&&(f=!1)}catch(r){return console.error(r),this.$toastr.error(r.message,this.$translate.instant("toast.title_error")),!1}if(!n||!f)try{let r=this.$modal.open(j6,{size:"lg",backdrop:"static"});return r.componentInstance.plugin=t,r.componentInstance.isValidNode=n,r.componentInstance.isValidHb=f,r.componentInstance.action=i,yield r.result}catch{return!1}return!0})}loadConfigSchema(t){return G(this,null,function*(){return ae(this.$api.get(`/plugins/config-schema/${encodeURIComponent(t)}`))})}resetChildBridges(t){return G(this,null,function*(){let i=this.$modal.open(U6,{size:"lg",backdrop:"static"});i.componentInstance.childBridges=t})}switchToScoped(t){return G(this,null,function*(){let i=this.$modal.open(X6,{size:"lg",backdrop:"static"});i.componentInstance.plugin=t})}static \u0275fac=function(i){return new(i||e)};static \u0275prov=Ot({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();export{Gl as a,ql as b,tt as c,nQ as d,Xe as e,p4 as f,F4 as g,jl as h,lq as i,C4 as j,C6 as k,E6 as l,_6 as m,v6 as n,x6 as o,tf as p,$6 as q,Xl as r,O6 as s,j6 as t,H6 as u,Y6 as v,_i as w};
29
+ `)})}doSwitch(){this.installing=!0,this.io.request("install",{name:this.plugin.newHbScope.to,version:this.plugin.newHbScope.switch,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.installing=!1,this.installed=!0,this.uninstalling=!0,this.io.request("uninstall",{name:this.plugin.newHbScope.from,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.uninstalling=!1,this.uninstalled=!0,this.restarting=!0,this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}).subscribe({next:()=>{this.$activeModal.close(),this.$router.navigate(["/restart"])},error:t=>{this.restarting=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})},error:t=>{this.uninstalling=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})},error:t=>{this.installing=!1,this.failure=t.message,console.error(t),this.$toastr.error(t.message,this.$translate.instant("toast.title_error"))}})}downloadLogFile(){let t=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,G6.saveAs)(t,`${this.plugin.name}-error.log`)}ngOnDestroy(){this.io.end(),this.term.dispose()}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:31,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"mb-3","text-center"],[1,"fas","fa-fw","fa-arrow-right-arrow-left","primary-text",2,"font-size","75px"],[1,"mb-0"],[3,"innerHTML"],[1,"mt-3","mb-0"],[1,"text-center"],[1,"alert","alert-error","mb-0"],["id","plugin-output",1,"mb-0",3,"hidden"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"d-inline-block","text-start","mt-3","mb-3",2,"list-style-type","none"],[1,"fa","fa-fw",3,"ngClass"],[1,"font-monospace"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),y(4,"translate"),p(),c(5,"button",3),y(6,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(7,"div",4)(8,"div",5),S(9,"i",6),p(),c(10,"ul",7),S(11,"li",8),y(12,"translate"),c(13,"li"),E(14),y(15,"translate"),p(),S(16,"li",8),y(17,"translate"),x(18,lG,3,3,"li"),x(19,dG,5,6),p(),x(20,cG,2,3,"pre",9),x(21,pG,18,28,"div",10),x(22,mG,9,7,"div",11),S(23,"div",12),p(),c(24,"div",13)(25,"div",14),x(26,FG,4,7,"button",15),p(),c(27,"div",10),x(28,CG,4,7,"button",15),p(),c(29,"div",16),x(30,bG,3,3,"button",17),p()()()),i&2&&(l(3),L(B(4,15,"plugins.manage.scoped.switch")),l(2),b("disabled",n.installing||n.uninstalling||n.restarting),K("aria-label",B(6,17,"form.button_close")),l(6),b("innerHTML",je(12,19,"plugins.manage.scoped.info_1",eu(27,aG,n.prefix)),de),l(3),L(B(15,22,"plugins.manage.scoped_message")),l(2),b("innerHTML",je(17,24,"plugins.manage.scoped.info_2",eu(29,sG,n.moreInfo)),de),l(2),w(n.onlineUpdateOk?18:-1),l(),w(n.onlineUpdateOk?-1:19),l(),w(n.onlineUpdateOk?-1:20),l(),w(n.onlineUpdateOk?21:-1),l(),w(n.failure?22:-1),l(),b("hidden",!n.onlineUpdateOk||n.failure),l(3),w(n.onlineUpdateOk?26:-1),l(2),w(n.onlineUpdateOk?-1:28),l(2),w(n.onlineUpdateOk?30:-1))},dependencies:[zt,Be],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}"]})}return e})();var EG=e=>({pluginName:e}),_G=e=>({count:e});function yG(e,u){e&1&&(c(0,"div",5),S(1,"i",13),p())}function vG(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"plugins.uninstall_remove_child_bridge")," ")}function BG(e,u){if(e&1&&(E(0),y(1,"translate")),e&2){let t=h(4);q(" ",je(1,1,"plugins.uninstall_remove_child_bridges",eu(4,_G,t.childBridges.length))," ")}}function xG(e,u){if(e&1){let t=H();c(0,"label",24)(1,"input",25),Me("ngModelChange",function(n){j(t);let f=h(3);return Oe(f.removeChildBridges,n)||(f.removeChildBridges=n),N(n)}),p(),x(2,vG,2,3),x(3,BG,2,6),S(4,"span",23),p()}if(e&2){let t=h(3);l(),Pe("ngModel",t.removeChildBridges),l(),w(t.childBridges.length===1?2:-1),l(),w(t.childBridges.length>1?3:-1)}}function wG(e,u){if(e&1){let t=H();c(0,"p",16)(1,"label",21)(2,"input",22),Me("ngModelChange",function(n){j(t);let f=h(2);return Oe(f.removeConfig,n)||(f.removeConfig=n),N(n)}),p(),E(3),y(4,"translate"),S(5,"span",23),p(),x(6,xG,5,3,"label",24),p()}if(e&2){let t=h(2);l(2),Pe("ngModel",t.removeConfig),l(),q(" ",B(4,3,"plugins.uninstall_remove_plugin_config")," "),l(3),w(t.hasChildBridges?6:-1)}}function SG(e,u){e&1&&(c(0,"ul",17)(1,"li"),E(2),y(3,"translate"),p(),c(4,"li"),E(5),y(6,"translate"),p()()),e&2&&(l(2),L(B(3,2,"plugins.uninstall_warn_1")),l(3),L(B(6,4,"plugins.uninstall_warn_2")))}function IG(e,u){e&1&&(c(0,"ngb-alert",18),E(1),y(2,"translate"),p()),e&2&&(b("dismissible",!1),l(),q(" ",B(2,2,"plugins.uninstall_remove_config_required")," "))}function AG(e,u){if(e&1&&(c(0,"div",14),S(1,"i",15),p(),c(2,"div",9),x(3,wG,7,5,"p",16),p(),x(4,SG,7,6,"ul",17),x(5,IG,3,4,"ngb-alert",18),c(6,"ngb-alert",19)(7,"p",20),E(8),y(9,"translate"),p()()),e&2){let t=h();l(3),w(t.isConfigured?3:-1),l(),w(t.hasChildBridges&&t.removeChildBridges?4:-1),l(),w(t.isConfigured&&(!t.pluginAlias||!t.pluginType)?5:-1),l(),b("dismissible",!1),l(2),L(je(9,5,"plugins.uninstall_remove_confirmation",eu(8,EG,t.plugin.displayName)))}}function kG(e,u){e&1&&(E(0),y(1,"translate")),e&2&&q(" ",B(1,1,"plugins.manage.uninstall")," ")}function $G(e,u){e&1&&S(0,"i",12)}var Y6=(()=>{class e{$activeModal=I(ve);$api=I(he);$modal=I(it);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);plugin;childBridges;action;loading=!0;uninstalling=!1;removeConfig=!0;removeChildBridges=!0;hasChildBridges=!1;isConfigured=!1;pluginType;pluginAlias;constructor(){}ngOnInit(){return G(this,null,function*(){try{this.childBridges.length&&(this.hasChildBridges=!0);let t=yield this.getAlias();this.pluginType=t.pluginType,this.pluginAlias=t.pluginAlias,(yield ae(this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`))).length&&(this.isConfigured=!0)}finally{this.loading=!1}})}doUninstall(){return G(this,null,function*(){if(this.uninstalling=!0,this.removeConfig&&this.isConfigured)try{yield this.removePluginConfig()}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.config.remove_error"),this.$translate.instant("toast.title_error"))}if(this.hasChildBridges&&this.removeChildBridges)try{yield Promise.all(this.childBridges.map(i=>this.removeChildBridge(i.username.replace(/:/g,""))))}catch(i){console.error(i)}this.$activeModal.dismiss();let t=this.$modal.open(tf,{size:"lg",backdrop:"static"});t.componentInstance.action="Uninstall",t.componentInstance.pluginName=this.plugin.name,t.componentInstance.pluginDisplayName=this.plugin.displayName})}getAlias(){return G(this,null,function*(){return ae(this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`))})}removePluginConfig(){return G(this,null,function*(){yield ae(this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,[])),yield ae(this.$api.put(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}/enable`,{})),this.$toastr.success(this.$translate.instant("plugins.settings.plugin_config_saved"),this.$translate.instant("toast.title_success"))})}removeChildBridge(t){return G(this,null,function*(){try{yield ae(this.$api.delete(`/server/pairings/${t}`))}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.uninstall_bridge_error"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||e)};static \u0275cmp=Y({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin",childBridges:"childBridges",action:"action"},decls:20,vars:17,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-trash","primary-text",2,"font-size","75px"],[1,"d-inline-block","text-start","mb-1"],[1,"mb-3","text-start"],["type","info",1,"mb-3",3,"dismissible"],["type","warning",1,"mb-0",3,"dismissible"],[1,"mb-0"],["for","remove-plugin-config",1,"hb-uix-switch","d-block"],["id","remove-plugin-config","type","checkbox",3,"ngModelChange","ngModel"],[1,"hb-uix-slider","hb-uix-round"],["for","remove-plugin-child-bridges",1,"hb-uix-switch","d-block"],["id","remove-plugin-child-bridges","type","checkbox",3,"ngModelChange","ngModel"]],template:function(i,n){i&1&&(c(0,"div",0)(1,"div",1)(2,"h5",2),E(3),p(),c(4,"button",3),y(5,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),p()(),c(6,"div",4),x(7,yG,2,0,"div",5),x(8,AG,10,10),p(),c(9,"div",6)(10,"div",7)(11,"button",8),y(12,"translate"),O("click",function(){return n.$activeModal.dismiss("Dismiss")}),E(13),y(14,"translate"),p()(),S(15,"div",9),c(16,"div",10)(17,"button",11),O("click",function(){return n.doUninstall()}),x(18,kG,2,3),x(19,$G,1,0,"i",12),p()()()()),i&2&&(l(3),L(n.plugin.displayName||n.plugin.name),l(),b("disabled",n.uninstalling),K("aria-label",B(5,11,"form.button_close")),l(3),w(n.loading?7:-1),l(),w(n.loading?-1:8),l(3),b("disabled",n.uninstalling),K("aria-label",B(12,13,"form.button_close")),l(2),q(" ",B(14,15,"form.button_close")," "),l(4),b("disabled",n.loading||n.uninstalling),l(),w(n.uninstalling?-1:18),l(),w(n.uninstalling?19:-1))},dependencies:[tu,Ji,vt,Zu,du,Be],encapsulation:2})}return e})();var _i=(()=>{class e{$api=I(he);$modal=I(it);$customPluginsService=I(_6);$settings=I(ze);$toastr=I(_e);$translate=I(Ee);constructor(){}installPlugin(t,i="latest"){let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Install",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i}uninstallPlugin(t,i){let n=this.$modal.open(Y6,{size:"lg",backdrop:"static"});n.componentInstance.action="Uninstall",n.componentInstance.plugin=t,n.componentInstance.childBridges=i}checkAndUpdatePlugin(t,i="latest"){return G(this,null,function*(){(yield this.checkHbAndNodeVersion(t,"update"))&&(yield this.updatePlugin(t,i))})}updatePlugin(t,i){return G(this,null,function*(){let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Update",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i,n.componentInstance.latestVersion=t.latestVersion,n.componentInstance.installedVersion=t.installedVersion,n.componentInstance.isDisabled=t.disabled})}upgradeHomebridge(t,i="latest"){return G(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(t,"update")))return;let n=this.$modal.open(tf,{size:"lg",backdrop:"static"});n.componentInstance.action="Update",n.componentInstance.pluginName=t.name,n.componentInstance.pluginDisplayName=t.displayName,n.componentInstance.targetVersion=i,n.componentInstance.latestVersion=t.latestVersion,n.componentInstance.installedVersion=t.installedVersion})}installAlternateVersion(t){return G(this,null,function*(){let i=this.$modal.open($6,{size:"lg",backdrop:"static"});i.componentInstance.plugin=t;try{let{action:n,version:f,engines:r}=yield i.result;return(yield this.checkHbAndNodeVersion(Se(X({},t),{updateEngines:r}),n))?t.name==="homebridge"?yield this.upgradeHomebridge(t,f):t.installedVersion?yield this.updatePlugin(t,f):this.installPlugin(t,f):void 0}catch{}})}bridgeSettings(t,i=!1){return G(this,null,function*(){let n;if(t.settingsSchema)try{n=yield this.loadConfigSchema(t.name)}catch(r){console.error(r),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let f=this.$modal.open(O6,{size:"lg",backdrop:"static"});f.componentInstance.schema=n,f.componentInstance.plugin=t,f.componentInstance.justInstalled=i})}settings(t){return G(this,null,function*(){let i;if(t.settingsSchema)try{i=yield this.loadConfigSchema(t.name)}catch(f){console.error(f),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}if(i&&i.customUi)return this.$customPluginsService.openCustomSettingsUi(t,i);if(this.$customPluginsService.plugins[t.name])return this.$customPluginsService.openSettings(t,i);let n=this.$modal.open(t.settingsSchema?H6:Xl,{size:"lg",backdrop:"static"});return n.componentInstance.schema=i,n.componentInstance.plugin=t,n.result.catch(()=>{})})}jsonEditor(t){return G(this,null,function*(){let i;if(t.settingsSchema)try{i=yield this.loadConfigSchema(t.name)}catch(f){console.error(f)}let n=this.$modal.open(Xl,{size:"lg",backdrop:"static"});return n.componentInstance.schema=i,n.componentInstance.plugin=t,n.result.catch(f=>console.error(f))})}checkHbAndNodeVersion(t,i){return G(this,null,function*(){let n=!0,f=!0;try{t.updateEngines?.node&&(0,uf.lt)(this.$settings.env.nodeVersion,(0,uf.minVersion)(t.updateEngines.node))&&(n=!1),t.updateEngines?.homebridge&&(0,uf.lt)(this.$settings.env.homebridgeVersion,(0,uf.minVersion)(t.updateEngines.homebridge))&&(f=!1)}catch(r){return console.error(r),this.$toastr.error(r.message,this.$translate.instant("toast.title_error")),!1}if(!n||!f)try{let r=this.$modal.open(j6,{size:"lg",backdrop:"static"});return r.componentInstance.plugin=t,r.componentInstance.isValidNode=n,r.componentInstance.isValidHb=f,r.componentInstance.action=i,yield r.result}catch{return!1}return!0})}loadConfigSchema(t){return G(this,null,function*(){return ae(this.$api.get(`/plugins/config-schema/${encodeURIComponent(t)}`))})}resetChildBridges(t){return G(this,null,function*(){let i=this.$modal.open(U6,{size:"lg",backdrop:"static"});i.componentInstance.childBridges=t})}switchToScoped(t){return G(this,null,function*(){let i=this.$modal.open(X6,{size:"lg",backdrop:"static"});i.componentInstance.plugin=t})}static \u0275fac=function(i){return new(i||e)};static \u0275prov=Ot({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();export{Gl as a,ql as b,tt as c,nQ as d,Xe as e,p4 as f,F4 as g,jl as h,lq as i,C4 as j,C6 as k,E6 as l,_6 as m,v6 as n,x6 as o,tf as p,$6 as q,Xl as r,O6 as s,j6 as t,H6 as u,Y6 as v,_i as w};