homebridge-config-ui-x 5.12.1-beta.7 → 5.12.1-beta.8
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.
- package/package.json +8 -3
- package/public/{chunk-ZMEMMUUF.js → chunk-2AOJ6IEA.js} +1 -1
- package/public/{chunk-KLWYBXMO.js → chunk-3NFIJAVV.js} +1 -1
- package/public/chunk-5HBMNH3H.js +1 -0
- package/public/{chunk-7LOFSGZK.js → chunk-5QV4AFTV.js} +1 -1
- package/public/{chunk-IXSMCZ5A.js → chunk-5RVYAZX5.js} +1 -1
- package/public/{chunk-G5C66QEU.js → chunk-5ZOCCWK4.js} +1 -1
- package/public/chunk-7CUUFGVO.js +4 -0
- package/public/{chunk-S3E6JDMS.js → chunk-AE4N4VVU.js} +1 -1
- package/public/{chunk-7AD56BSX.js → chunk-AHP7QTOZ.js} +1 -1
- package/public/{chunk-VFZPU4ZL.js → chunk-AJOSXNZD.js} +1 -1
- package/public/{chunk-UCTE5J3F.js → chunk-BXHRVU6R.js} +1 -1
- package/public/{chunk-EKYMLGZU.js → chunk-EGU3464G.js} +1 -1
- package/public/{chunk-K73S26T3.js → chunk-FTKW2K5C.js} +1 -1
- package/public/{chunk-S5H22WRF.js → chunk-GCBDS3GC.js} +1 -1
- package/public/{chunk-2QUH2FXS.js → chunk-HU77Q72N.js} +1 -1
- package/public/{chunk-YQXFTYEI.js → chunk-I5UU2IJZ.js} +6 -6
- package/public/{chunk-PQPDMNKK.js → chunk-IFDM5E2G.js} +1 -1
- package/public/{chunk-4J3J7FSY.js → chunk-ILSKYQPT.js} +1 -1
- package/public/chunk-L2CC3C2O.js +1 -0
- package/public/{chunk-SCW535TW.js → chunk-L6HJRDN2.js} +1 -1
- package/public/{chunk-ARR3OK4P.js → chunk-M4HMWZLV.js} +1 -1
- package/public/{chunk-BADNEAHD.js → chunk-MWE467IB.js} +1 -1
- package/public/{chunk-KDNXPUO5.js → chunk-MZ3VFGHZ.js} +1 -1
- package/public/{chunk-RGRPV7TK.js → chunk-NUELHUTK.js} +1 -1
- package/public/{chunk-3WNDNRRB.js → chunk-NVT3NZOF.js} +1 -1
- package/public/chunk-OJHJQUWN.js +19 -0
- package/public/{chunk-YIHVWXAX.js → chunk-PQTJEZPB.js} +1 -1
- package/public/{chunk-JTQQTKY7.js → chunk-QIA4NWRZ.js} +1 -1
- package/public/{chunk-F332UHUK.js → chunk-QJZKXCTT.js} +1 -1
- package/public/{chunk-VY4NTNG3.js → chunk-RZDYLE7I.js} +1 -1
- package/public/{chunk-MTYIEY2M.js → chunk-TGO22LD4.js} +1 -1
- package/public/{chunk-GFJO2QTW.js → chunk-TILWVCNC.js} +1 -1
- package/public/chunk-TQLAUKPX.js +1 -0
- package/public/{chunk-55DZYJHI.js → chunk-U3WYF2L2.js} +1 -1
- package/public/{chunk-JNPGEJ3W.js → chunk-VLOR45KQ.js} +1 -1
- package/public/{chunk-6P53ACWC.js → chunk-XDDHMABU.js} +1 -1
- package/public/{chunk-5VXOT5GC.js → chunk-XGDK3N5D.js} +1 -1
- package/public/{chunk-WZXTVC6W.js → chunk-XKDAPCBY.js} +1 -1
- package/public/{chunk-ZH3VNDIS.js → chunk-XXVKRPGV.js} +1 -1
- package/public/{chunk-KAPGBFLJ.js → chunk-Y2KMEFIC.js} +1 -1
- package/public/{chunk-PSSWIPLS.js → chunk-YKKWB4CO.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-XUQ5G5JD.js → main-YHQ3GPK2.js} +1 -1
- package/public/chunk-3VAD7GQK.js +0 -1
- package/public/chunk-C5UZ5BUH.js +0 -1
- package/public/chunk-D3QQAOPW.js +0 -1
- package/public/chunk-HOHCTPYN.js +0 -4
- package/public/chunk-HZA5LDUU.js +0 -19
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{a as bi}from"./chunk-QIA4NWRZ.js";import{a as ot,b as Ie,c as Pe,d as $e}from"./chunk-AJOSXNZD.js";import{a as ue,b as pi,c as yn,d as Tt}from"./chunk-TILWVCNC.js";import{a as ai}from"./chunk-UUDM2ZE6.js";import{a as di}from"./chunk-M4HMWZLV.js";import{a as gt,b as ut,c as _t}from"./chunk-Q2RBJQKF.js";import{a as oi}from"./chunk-5QV4AFTV.js";import{a as Ge}from"./chunk-V62JRIHN.js";import{a as si}from"./chunk-CU6MTMVY.js";import{a as ii,c as Me,d as at,e as qe,f as rt,g as lt,h as st,i as ye,k as dt,l as ct,m as mt,x as ni,z as pt}from"./chunk-HOWYXHPL.js";import{a as fn}from"./chunk-MRHB36HC.js";import{a as hn}from"./chunk-IVGUGJ5O.js";import{a as bn}from"./chunk-MM3ZUHP2.js";import{a as Cn}from"./chunk-ZIFXCMBJ.js";import{a as vn}from"./chunk-AYPSIX2K.js";import{a as xn}from"./chunk-QMHMKWPA.js";import{a as xe}from"./chunk-5ZOCCWK4.js";import{a as sn}from"./chunk-ZONYERCP.js";import{a as dn}from"./chunk-YD4U26CQ.js";import{a as cn}from"./chunk-YXAXWARF.js";import{a as mn}from"./chunk-YBWJOGCK.js";import{a as pn}from"./chunk-IBPLHJH5.js";import{a as gn}from"./chunk-3X54YJUZ.js";import{a as un}from"./chunk-BT3EMPD7.js";import{a as _n}from"./chunk-ALTMINMJ.js";import{a as Zi}from"./chunk-7LZXNMQ7.js";import{a as en}from"./chunk-5GNJNTLA.js";import{a as tn}from"./chunk-ZBOWFMAD.js";import{a as nn}from"./chunk-3RTPACYF.js";import{a as on}from"./chunk-X35N33BQ.js";import{a as an}from"./chunk-2R4HORTN.js";import{a as rn}from"./chunk-UU7UROHF.js";import{a as ln}from"./chunk-X5XGTC24.js";import{a as Vt,b as ft,c as ci,d as mi,e as gi,f as ui,g as _i,h as fi,i as hi,l as ht,m as bt,n as Ct,o as vt,p as xt,q as yt}from"./chunk-PQTJEZPB.js";import{a as Et,c as ri,d as li}from"./chunk-ZCGZM7LU.js";import{a as Ci}from"./chunk-IFDM5E2G.js";import{a as Be}from"./chunk-SGI3H2QJ.js";import{a as De}from"./chunk-I5AP453W.js";import{s as q,t as ae}from"./chunk-BNNKKGLH.js";import{e as pe}from"./chunk-QJZKXCTT.js";import{C as ve,D as ti,b as Te,c as Kt,e as be,j as Qt,l as Ce,n as Yt,q as Xt,t as tt,u as it,w as nt,x as Zt,y as ei}from"./chunk-XKDAPCBY.js";import{b as W}from"./chunk-HU77Q72N.js";import{C as F,D as j,F as U,H as he,I as N,o as Gt,u as Jt}from"./chunk-AHP7QTOZ.js";import{Ab as _,Ac as Ve,Bc as fe,Cb as Z,Db as ee,Dc as m,Eb as te,Ec as g,F as Je,Fb as x,Fc as z,Gb as l,Hb as r,Ib as v,Jb as T,Kb as I,Lb as G,Mb as zt,Mc as Ze,Nb as Wt,Nc as We,O as Ft,Oc as et,R as Oe,Rb as V,Sb as oe,Ua as se,Va as jt,X as Ee,Xb as E,Ya as Ht,Yb as ie,Za as o,Zb as p,aa as b,d as me,ea as re,ec as Ke,fc as Qe,ga as B,gc as Ye,ha as w,hc as Re,ic as Se,jc as J,kc as c,lc as k,mb as R,mc as y,n as He,nb as L,nc as _e,oc as Xe,pb as Ot,qb as Rt,rc as Q,sa as C,sc as Y,tb as Mt,tc as X,uc as qt,va as Ut,wc as ne,xc as le,yb as P,yc as ze,zb as u,zc as de}from"./chunk-JJ5CEM72.js";import{a as Gi}from"./chunk-FDGOZLRL.js";import{a as Ji}from"./chunk-WVBGE4PG.js";import{a as Ki}from"./chunk-J3GYRR3Q.js";import{a as Qi}from"./chunk-MOTTUPLZ.js";import{a as Yi}from"./chunk-P4ODKUQK.js";import{a as Xi}from"./chunk-QPIMSYGY.js";import{a as D,b as A,c as Lt,g as ce,h as S}from"./chunk-VJN6YUS2.js";var Le=ce(ot(),1);var vi=(()=>{class n{jsonSchemaForm=b(ft,{host:!0,self:!0,optional:!0});jsfPatch=We(!1);constructor(){let e=this.jsonSchemaForm,i=e.jsf.buildLayout.bind(e.jsf);e.jsf.buildLayout=t=>{if(i(t),e.jsf.formValues&&this.jsfPatch())return this.fixNestedArrayLayout(e.jsf.layout,e.jsf.formValues)}}fixNestedArrayLayout(e,i){return this.fixArray(e,i,""),e}fixArray(e,i,t){if(Array.isArray(e)){let a=e.filter(f=>f.name!=="_bridge"),d=a.filter(f=>f.items&&Array.isArray(f.items)).flatMap(f=>f.items).filter(f=>f.dataType==="array"||f.arrayItem);a.concat(d).filter(f=>f.dataType==="array"||f.arrayItem).forEach(f=>{this.fixNestedArray(f,i,t)})}else this.fixNestedArray(e,i,t)}fixNestedArray(e,i,t){if(e.items&&Array.isArray(e.items)){let a=e.items.find(d=>d.type==="$ref");if(a){let d=e.items.filter(M=>M.type==="section"||M.type==="div"),h=d.length>0?d.reduce((M,$)=>M.id>$.id?M:$):this.getItemTemplateFromRef(a),f=this.getDataFromPointer(i,a.dataPointer.replace(t,""));if(f===null)return;if(Array.isArray(f)){for(;e.items.length-1<f.length;){let M=Et(h);M._id=li("new_"),e.items.unshift(M)}f.forEach((M,$)=>{this.fixArray(e.items[$],M,a.dataPointer)})}else this.fixArray(e.items,i,a.dataPointer)}else this.fixArray(e.items,i,t);e.items.filter(d=>d.items&&Array.isArray(d.items)).forEach(d=>{this.fixArray(d.items,i,t)})}}getDataFromPointer(e,i){let t=e;return i.substring(1).split(/\//).filter(a=>a!=="-").forEach(a=>{try{t=t[a]}catch{t=null}}),t}getItemTemplateFromRef(e){let i={type:"section",items:[]},t=Et(e);return ri(t,i),t}static \u0275fac=function(i){return new(i||n)};static \u0275dir=Ot({type:n,selectors:[["","jsfPatch",""]],inputs:{jsfPatch:[1,"jsfPatch"]}})}return n})();function Bn(n,s){if(n&1){let e=V();l(0,"json-schema-form",1),E("onChanges",function(t){B(e);let a=p();return w(a.onChanges(t))})("isValid",function(t){B(e);let a=p();return w(a.validChange(t))}),r()}if(n&2){let e=p();x("jsfPatch",e.configSchema().fixArrays)("options",e.jsonFormOptions)("schema",e.configSchema().schema)("UISchema",e.configSchema().uiSchema)("layout",e.configSchema().layout)("form",e.configSchema().form)("data",e.currentData())("language",e.language())}}var Bt=(()=>{class n{$settings=b(W);availableLanguages=["de","en","es","fr","it","pt","zh"];configSchema=We.required();data=We.required();dataChange=Ze();dataChanged=Ze();isValid=Ze();currentData=C(null);language=C("en");jsonFormOptions={addSubmit:!1,loadExternalAssets:!1,returnEmptyFields:!1,setSchemaDefaults:!0,autocomplete:!1};lastValidState=void 0;validationTimeout=null;lastDataReference=null;processingInternalChange=!1;constructor(){Ut(()=>{let e=this.data();this.processingInternalChange||this.lastDataReference!==e&&(this.lastDataReference=e,this.currentData.set(e))})}ngOnInit(){let e=this.$settings.env.lang.split("-")[0];this.availableLanguages.includes(e)&&this.language.set(e)}ngOnDestroy(){this.validationTimeout&&clearTimeout(this.validationTimeout)}onChanges(e){this.processingInternalChange=!0;let i=this.data();if(i&&typeof i=="object"&&typeof e=="object"){for(let t of Object.keys(i))t in e||delete i[t];Object.assign(i,e),this.dataChange.emit(i),this.dataChanged.emit(i)}else this.dataChange.emit(e),this.dataChanged.emit(e);queueMicrotask(()=>{this.processingInternalChange=!1})}validChange(e){this.validationTimeout&&clearTimeout(this.validationTimeout),this.validationTimeout=setTimeout(()=>{this.lastValidState!==e&&(this.lastValidState=e,this.isValid.emit(e))},50)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["app-schema-form"]],inputs:{configSchema:[1,"configSchema"],data:[1,"data"]},outputs:{dataChange:"dataChange",dataChanged:"dataChanged",isValid:"isValid"},decls:2,vars:1,consts:[["framework","bootstrap-5",1,"ng-bs5-validate",3,"jsfPatch","options","schema","UISchema","layout","form","data","language"],["framework","bootstrap-5",1,"ng-bs5-validate",3,"onChanges","isValid","jsfPatch","options","schema","UISchema","layout","form","data","language"]],template:function(i,t){i&1&&(zt(0),u(1,Bn,1,8,"json-schema-form",0),Wt()),i&2&&(o(),_(t.configSchema().schema?1:-1))},dependencies:[ci,ft,vi],encapsulation:2})}return n})();var Ne=(()=>{class n{$api=b(N);$modal=b(ae);$toastr=b(U);$translate=b(F);injector=b(re);openCorrectRestartModalForPlugin(e){return S(this,null,function*(){let i=yield this.getChildBridgesForPlugin(e);if(i.length){let t=R([{provide:ni,useValue:{bridges:i.map(a=>({name:a.name,username:a.username,matterSerialNumber:a.matterSerialNumber}))}}],this.injector);this.$modal.open(pi,{size:"lg",backdrop:"static",injector:t})}else this.$modal.open(ue,{size:"lg",backdrop:"static"})})}getChildBridgesForPlugin(e){return S(this,null,function*(){try{return(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>e===t.plugin)}catch(i){return console.error(i),this.$toastr.error(i.message,this.$translate.instant("toast.title_error")),[]}})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=Ee({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var wn=Lt({"../../../../i18n/bg.json":()=>Gi(),"../../../../i18n/ca.json":()=>Ji(),"../../../../i18n/cs.json":()=>Ki(),"../../../../i18n/de.json":()=>Qi(),"../../../../i18n/en.json":()=>Yi(),"../../../../i18n/es.json":()=>Xi(),"../../../../i18n/fi.json":()=>Zi(),"../../../../i18n/fr.json":()=>en(),"../../../../i18n/he.json":()=>tn(),"../../../../i18n/hu.json":()=>nn(),"../../../../i18n/id.json":()=>on(),"../../../../i18n/it.json":()=>an(),"../../../../i18n/ja.json":()=>rn(),"../../../../i18n/ko.json":()=>ln(),"../../../../i18n/mk.json":()=>sn(),"../../../../i18n/nl.json":()=>dn(),"../../../../i18n/no.json":()=>cn(),"../../../../i18n/pl.json":()=>mn(),"../../../../i18n/pt-BR.json":()=>pn(),"../../../../i18n/pt.json":()=>gn(),"../../../../i18n/ru.json":()=>un(),"../../../../i18n/sl.json":()=>_n(),"../../../../i18n/sv.json":()=>fn(),"../../../../i18n/th.json":()=>hn(),"../../../../i18n/tr.json":()=>bn(),"../../../../i18n/uk.json":()=>Cn(),"../../../../i18n/zh-CN.json":()=>vn(),"../../../../i18n/zh-TW.json":()=>xn()});var kn=["custompluginui"],Sn=(n,s,e,i,t)=>({"fa-circle-check":n,"green-text":s,"fa-circle-exclamation":e,"red-text":i,"orange-text":t});function Mn(n,s){n&1&&(l(0,"div",6),v(1,"i",18),r())}function En(n,s){if(n&1){let e=V();l(0,"div",8)(1,"app-schema-form",19),X("dataChange",function(t){B(e);let a=p();return Y(a.pluginConfig[0],t)||(a.pluginConfig[0]=t),w(t)}),E("isValid",function(t){B(e);let a=p();return w(a.onIsValid(t))}),r()()}if(n&2){let e=p();o(),x("configSchema",e.schema),Q("data",e.pluginConfig[0])}}function Vn(n,s){if(n&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p(2);return w(t.formActionSubject.next("cancel"))}),c(1),r()}if(n&2){let e=p(2);o(),y(" ",e.formCancelButtonLabel()," ")}}function Tn(n,s){if(n&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p(2);return w(t.formActionSubject.next("submit"))}),c(1),r()}if(n&2){let e=p(2);x("disabled",!e.formValid()),o(),y(" ",e.formSubmitButtonLabel()," ")}}function In(n,s){if(n&1){let e=V();l(0,"div",8)(1,"app-schema-form",20),E("dataChange",function(t){B(e);let a=p();return w(a.formData.set(t))})("dataChanged",function(t){B(e);let a=p();return w(a.formUpdatedSubject.next(t))})("isValid",function(t){B(e);let a=p();return w(a.formValidEvent(t))}),r(),l(2,"div",21),u(3,Vn,2,1,"button",22),u(4,Tn,2,2,"button",23),r()()}if(n&2){let e=p();o(),x("configSchema",e.formSchema())("data",e.formData()),o(2),_(e.formCancelButtonLabel()?3:-1),o(),_(e.formSubmitButtonLabel()?4:-1)}}function Pn(n,s){n&1&&(l(0,"div",9),v(1,"i",18),r())}function $n(n,s){if(n&1&&(v(0,"i",26),m(1,"translate")),n&2){let e=p();J(fe(6,Sn,e.formIsValid(),e.formIsValid(),!e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function Dn(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"form.button_save")," ")}function Nn(n,s){n&1&&v(0,"i",17)}var xi=(()=>{class n{$activeModal=b(q);$api=b(N);$cb=b(Ne);$plugin=b(we);$settings=b(W);$toastr=b(U);$translate=b(F);$ws=b(xe);modalData=b(qe);customPluginUiElementTarget=et("custompluginui");plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=this.modalData.pluginConfig??[];pluginAlias=C("");pluginType=C("platform");loading=C(!0);saveInProgress=C(!1);pluginSpinner=C(!1);saveButtonDisabled=C(!1);uiLoaded=C(!1);showSchemaForm=C(!1);formId=C(void 0);formSchema=C(void 0);formData=C(void 0);formSubmitButtonLabel=C(void 0);formCancelButtonLabel=C(void 0);formValid=C(!0);isFirstSave=C(!1);formIsValid=C(!0);strictValidation=C(!1);io;basePath="";iframe;schemaFormRecentlyUpdated=!1;schemaFormRecentlyRefreshed=!1;destroy$=new me;schemaFormUpdatedSubject=new me;schemaFormRefreshSubject=new me;formUpdatedSubject=new me;formActionSubject=new me;ngOnInit(){let e=this.schema,i=this.plugin;if(!e||!i){console.error("CustomPluginsComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this.pluginConfig.length===0&&this.isFirstSave.set(!0),this.io=this.$ws.connectToNamespace("plugins/settings-ui"),this.basePath=`/plugins/settings-ui/${encodeURIComponent(i.name)}`,this.initialize(),this.schemaFormRefreshSubject.pipe(Oe(this.destroy$)).subscribe(this.schemaFormRefresh.bind(this)),this.schemaFormUpdatedSubject.pipe(Oe(this.destroy$)).subscribe(()=>{this.schemaFormUpdated()}),this.formUpdatedSubject.pipe(Je(100),Ft(1),Oe(this.destroy$)).subscribe(this.formUpdated.bind(this)),this.formActionSubject.pipe(Oe(this.destroy$)).subscribe(this.formActionEvent.bind(this)),window.addEventListener("message",this.handleMessage,!1)}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),this.destroy$.next(),this.destroy$.complete(),this.io&&this.io.end(),this.schemaFormRefreshSubject.complete(),this.schemaFormUpdatedSubject.complete(),this.formUpdatedSubject.complete(),this.formActionSubject.complete()}onIsValid(e){this.formIsValid.set(e)}formValidEvent(e){this.formValid.set(e)}savePluginConfig(e=!1){return S(this,null,function*(){let i=this.plugin;if(i){this.saveInProgress.set(!0);try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(i.name)}`,this.pluginConfig);if(this.saveInProgress.set(!1),e){if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(i,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(i.name)}}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return S(this,null,function*(){let e=this.plugin;e&&(this.io.socket.emit("start",e.name),this.io.socket.on("response",i=>{i.action="response",this.iframe.contentWindow.postMessage(i,he.api.origin)}),this.io.socket.on("stream",i=>{i.action="stream",this.iframe.contentWindow.postMessage(i,he.api.origin)}),this.io.socket.on("ready",()=>{this.loading.set(!1),this.loadUi()}))})}loadUi(){let e=this.plugin;e&&(this.iframe=this.customPluginUiElementTarget()?.nativeElement,this.iframe&&(this.iframe.src=`${he.api.base+this.basePath}/index.html?origin=${encodeURIComponent(location.origin)}&v=${encodeURIComponent(e.installedVersion)}`))}handleMessage=e=>{if(e.origin===he.api.origin||e.origin===window.origin)switch(e.data.action){case"loaded":this.injectDefaultStyles(e),this.confirmReady(e);break;case"request":{this.handleRequest(e);break}case"scrollHeight":this.setiFrameHeight(e),this.uiLoaded.set(!0);break;case"config.get":{this.requestResponse(e,this.getConfigBlocks());break}case"config.save":{this.requestResponse(e,this.savePluginConfig());break}case"config.update":{this.handleUpdateConfig(e,e.data.pluginConfig);break}case"config.schema":{this.requestResponse(e,this.schema);break}case"cachedAccessories.get":{this.handleGetCachedAccessories(e);break}case"cachedMatterAccessories.get":{this.handleGetCachedMatterAccessories(e);break}case"schema.show":{this.formEnd(),this.showSchemaForm.set(!0);break}case"schema.hide":{this.showSchemaForm.set(!1);break}case"form.create":{this.showSchemaForm.set(!1),this.formCreate(e.data.formId,e.data.schema,e.data.data,e.data.submitButton,e.data.cancelButton);break}case"form.end":{this.formEnd();break}case"user.lightingMode":{this.requestResponse(e,this.$settings.actualLightingMode);break}case"i18n.lang":{this.requestResponse(e,this.$translate.getCurrentLang());break}case"i18n.translations":{this.requestResponse(e,wn(`../../../../i18n/${this.$translate.getCurrentLang()}.json`));break}case"close":{this.$activeModal.close();break}case"toast.success":this.$toastr.success(e.data.message,e.data.title);break;case"toast.error":this.$toastr.error(e.data.message,e.data.title);break;case"toast.warning":this.$toastr.warning(e.data.message,e.data.title);break;case"toast.info":this.$toastr.info(e.data.message,e.data.title);break;case"spinner.show":this.pluginSpinner.set(!0);break;case"spinner.hide":this.pluginSpinner.set(!1);break;case"button.save.disabled":this.saveButtonDisabled.set(!0);break;case"button.save.enabled":this.saveButtonDisabled.set(!1);break}};confirmReady(e){e.source.postMessage({action:"ready"},e.origin)}setiFrameHeight(e){this.iframe.style.height=`${e.data.scrollHeight+10}px`}handleRequest(e){this.io.socket.emit("request",e.data)}handleUpdateConfig(e,i){if(!Array.isArray(i))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array")},!1);for(let t of i)if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array_objects"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array_objects")},!1);return this.schemaFormRecentlyUpdated||this.updateConfigBlocks(i),this.showSchemaForm()&&this.schemaFormRefreshSubject.next(void 0),this.requestResponse(e,this.getConfigBlocks())}requestResponse(e,i,t=!0){e.source.postMessage({action:"response",requestId:e.data.requestId,success:t,data:i},e.origin)}injectDefaultStyles(e){return S(this,null,function*(){let i=Array.from(window.document.body.classList).find(M=>M.startsWith("config-ui-x-")),t=window.document.body.classList.contains("dark-mode"),a=e.source;a.postMessage({action:"body-class",class:i},e.origin),a.postMessage({action:"body-class",class:"modal-content"},e.origin),t&&a.postMessage({action:"body-class",class:"dark-mode"},e.origin);let d=Array.from(document.querySelectorAll("link"));for(let M of d)if(M.getAttribute("rel")==="stylesheet"){let $=M.getAttribute("href"),ge=document.baseURI+($.startsWith("/")?$.substring(1):$);a.postMessage({action:"link-element",href:ge,rel:"stylesheet"},e.origin)}let h=Array.from(document.querySelectorAll("style"));for(let M of h)a.postMessage({action:"inline-style",style:M.innerHTML},e.origin);let f=`
|
|
2
|
+
body {
|
|
3
|
+
height: unset !important;
|
|
4
|
+
background-color: ${t?"#242424":"#FFFFFF"} !important;
|
|
5
|
+
color: ${t?"#FFFFFF":"#000000"} !important;
|
|
6
|
+
}
|
|
7
|
+
`;a.postMessage({action:"inline-style",style:f},e.origin)})}getConfigBlocks(){return this.pluginConfig}updateConfigBlocks(e){for(let i=0;i<e.length;i++){let t=e[i];t[this.pluginType()]=this.pluginAlias(),this.pluginConfig[i]?Object.assign(this.pluginConfig[i],t):this.pluginConfig[i]=t}this.pluginConfig.length>e.length&&(this.pluginConfig.length=e.length)}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},he.api.origin)}}schemaFormRefresh(){if(this.schemaFormRecentlyUpdated){this.schemaFormRecentlyUpdated=!1;return}this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm()&&(this.showSchemaForm.set(!1),queueMicrotask(()=>{this.showSchemaForm.set(!0)}))}formCreate(e,i,t,a,d){return S(this,null,function*(){yield this.formEnd(),this.formId.set(e),this.formSchema.set(i),this.formData.set(t),this.formSubmitButtonLabel.set(a),this.formCancelButtonLabel.set(d)})}formEnd(){return S(this,null,function*(){this.formId()&&(this.formId.set(void 0),this.formSchema.set(void 0),this.formData.set(void 0),this.formSubmitButtonLabel.set(void 0),this.formCancelButtonLabel.set(void 0),yield new Promise(e=>setTimeout(e)))})}formUpdated(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:"change",formData:e}},he.api.origin)}formActionEvent(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:e,formData:this.formData()}},he.api.origin)}handleGetCachedAccessories(e){return S(this,null,function*(){let i=this.plugin;if(i)try{let t=yield this.$api.get("/server/cached-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===i.name))}catch(t){console.error("Failed to get cached accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}handleGetCachedMatterAccessories(e){return S(this,null,function*(){let i=this.plugin;if(i)try{let t=yield this.$api.get("/server/matter-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===i.name))}catch(t){console.error("Failed to get cached Matter accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],viewQuery:function(i,t){i&1&&Ke(t.customPluginUiElementTarget,kn,5),i&2&&Qe()},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","my-5","w-100"],["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","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-circle-notch","fa-spin"],[1,"fa","fa-circle-notch","fa-spin",2,"font-size","75px"],[3,"dataChange","isValid","configSchema","data"],[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"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"]],template:function(i,t){if(i&1){let a=V();l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),r()(),l(6,"div",5),u(7,Mn,2,0,"div",6),v(8,"iframe",7,0),u(10,En,2,2,"div",8),u(11,In,5,4,"div",8),u(12,Pn,2,0,"div",9),r(),l(13,"div",10)(14,"div",11)(15,"button",12),E("click",function(){return B(a),w(t.dismissModal())}),c(16),m(17,"translate"),r()(),v(18,"div",13),l(19,"div",14),u(20,$n,2,12,"i",15),l(21,"button",16),E("click",function(){return B(a),w(t.savePluginConfig(!0))}),u(22,Dn,2,3),u(23,Nn,1,0,"i",17),r()()()()}i&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,13,"form.button_close")),o(3),_(t.loading()?7:-1),o(3),_(t.uiLoaded()&&t.pluginConfig.length&&t.schema.singular&&t.showSchemaForm()?10:-1),o(),_(t.formId()?11:-1),o(),_(t.pluginSpinner()?12:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(17,15,"form.button_close")," "),o(4),_(t.saveButtonDisabled()?-1:20),o(),x("disabled",t.saveInProgress()||t.saveButtonDisabled()),o(),_(t.saveInProgress()?-1:22),o(),_(t.saveInProgress()?23:-1))},dependencies:[Bt,mi,Be,j],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 n})();var yi=(()=>{class n{injector=b(re);$api=b(N);$modal=b(ae);plugins={};openSettings(e,i){return S(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=R([{provide:qe,useValue:{plugin:e,schema:i,pluginConfig:t}}],this.injector);return this.$modal.open(this.plugins[e.name],{size:"lg",backdrop:"static",injector:a}).result.catch(()=>{})})}openCustomSettingsUi(e,i){return S(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=R([{provide:qe,useValue:{plugin:e,schema:i,pluginConfig:t}}],this.injector);return this.$modal.open(xi,{size:"lg",backdrop:"static",injector:a}).result.catch(()=>{})})}loadPluginConfig(e){return S(this,null,function*(){return this.$api.get(`/config-editor/plugin/${encodeURIComponent(e)}`)})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=Ee({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Ei=ce(Ge(),1);var Bi=ce(Ge(),1);var An=["pluginlogoutput"];function Ln(n,s){if(n&1){let e=V();l(0,"button",15),m(1,"translate"),m(2,"translate"),E("click",function(){B(e);let t=p();return w(t.restartChildBridges())}),v(3,"i",16),r()}if(n&2){let e=p();x("ngbTooltip",g(1,4,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))("openDelay",150)("disabled",e.midAction()),P("aria-label",g(2,6,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}var wi=(()=>{class n{$activeModal=b(q);$api=b(N);$log=b(di);$modal=b(ae);$toastr=b(U);$translate=b(F);injector=b(re);modalData=b(rt);termTarget=et("pluginlogoutput");plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];midAction=C(!1);resizeEvent=new me;pluginAlias;ngOnInit(){this.getPluginLog()}ngOnDestroy(){this.$log.destroyTerminal()}onWindowResize(){this.resizeEvent.next(void 0)}restartChildBridges(){return S(this,null,function*(){this.midAction.set(!0);try{for(let e of this.childBridges)yield this.$api.put(`/server/restart/${e.username}`,{});this.$toastr.success(this.$translate.instant("plugins.manage.child_bridge_restart"),this.$translate.instant("toast.title_success")),this.midAction.set(!1)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}})}downloadLogFile(){return S(this,null,function*(){this.midAction.set(!0);let e=R([{provide:ii,useValue:{title:this.$translate.instant("logs.title_download_log_file"),message:this.$translate.instant("logs.download_warning"),confirmButtonLabel:this.$translate.instant("form.button_download"),faIconClass:"fas fa-user-secret primary-text"}}],this.injector),i=this.$modal.open(oi,{size:"lg",backdrop:"static",injector:e});try{yield i.result;try{let t=yield this.$api.get("/platform-tools/hb-service/log/download?colour=yes",{observe:"response",responseType:"text"});if(!t.body)return;let a=t.body.split(`
|
|
8
|
+
`),d="",h=!1;a.forEach(f=>{if(f){if(h)if(f.match(/36m\[.*?\]/))h=!1;else{d+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
9
|
+
`;return}f.includes(`36m[${this.pluginAlias}]`)&&(d+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
10
|
+
`,h=!0)}}),this.plugin&&(0,Bi.saveAs)(new Blob([d],{type:"text/plain;charset=utf-8"}),`${this.plugin.name}.log.txt`),this.midAction.set(!1)}catch(t){let a;try{t instanceof Jt&&t.error?.text&&(a=JSON.parse(yield t.error.text()).message)}catch(d){console.error(d)}this.$toastr.error(a||this.$translate.instant("logs.download.error"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}}catch{this.midAction.set(!1)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}getPluginLog(){return S(this,null,function*(){if(this.plugin)try{let e=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`);if(!this.plugin)return;this.pluginAlias=this.plugin.name==="homebridge-config-ui-x"?"Homebridge UI":e[0]?.name||this.plugin.name,this.$log.startTerminal(this.termTarget(),{},this.resizeEvent,this.pluginAlias)}catch(e){console.error(e);let i=e instanceof Error?e.error?.message||e.message:this.$translate.instant("toast.title_error");this.$toastr.error(i,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],viewQuery:function(i,t){i&1&&Ke(t.termTarget,An,5),i&2&&Qe()},hostBindings:function(i,t){i&1&&E("resize",function(){return t.onWindowResize()},Ht)},decls:22,vars:21,consts:[["pluginlogoutput",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[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","disabled"],[1,"text-center"],[1,"text-end"],["container","modal","placement","top","triggers","hover",1,"btn","btn-primary",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-download"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"ngbTooltip","openDelay","disabled"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-power-off"]],template:function(i,t){if(i&1){let a=V();l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),r()(),l(6,"div",5),v(7,"div",6,0),r(),l(9,"div",7)(10,"div",8)(11,"button",9),m(12,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),c(13),m(14,"translate"),r()(),v(15,"div",10),l(16,"div",11)(17,"button",12),m(18,"translate"),m(19,"translate"),E("click",function(){return B(a),w(t.downloadLogFile())}),v(20,"i",13),r(),u(21,Ln,4,8,"button",14),r()()()}i&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),x("disabled",t.midAction()),P("aria-label",g(5,11,"form.button_close")),o(7),x("disabled",t.midAction()),P("aria-label",g(12,13,"form.button_close")),o(2),y(" ",g(14,15,"form.button_close")," "),o(4),x("ngbTooltip",g(18,17,"logs.title_download_log_file"))("openDelay",150)("disabled",t.midAction()),P("aria-label",g(19,19,"logs.title_download_log_file")),o(4),_(t.childBridges.length?21:-1))},dependencies:[Be,j],encapsulation:2})}return n})();var ki=ce(ot(),1);var It=()=>({app:"Homebridge v2"});function Fn(n,s){n&1&&(l(0,"div",5),v(1,"i",12),r())}function Un(n,s){n&1&&(l(0,"p",9),c(1,"All your plugins are marked as compatible with Homebridge v2."),r())}function jn(n,s){n&1&&(l(0,"p",9),c(1,"To ignore this warning and continue with the update, click continue below."),r())}function Hn(n,s){if(n&1&&(l(0,"p",9),c(1," Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does "),l(2,"span",17),c(3,"not"),r(),c(4," necessarily mean that they won't work. We just can't guarantee that they will. "),r(),l(5,"p",9),c(6," For more information about this update, please see the "),l(7,"a",18),c(8,"wiki page"),r(),c(9,". "),r(),u(10,jn,2,0,"p",9)),n&2){let e=p(2);o(10),_(e.isUpdating?10:-1)}}function On(n,s){n&1&&(l(0,"div",19),c(1," Node.js Version"),v(2,"br"),l(3,"span",20),c(4),m(5,"translate"),r()(),l(6,"div",21),v(7,"i",22),r()),n&2&&(o(4),k(z(5,1,"status.readiness.node_yes",ne(4,It))))}function Rn(n,s){n&1&&(l(0,"div",19),c(1," Node.js Version"),v(2,"br"),l(3,"span",20),c(4),m(5,"translate"),r(),v(6,"br"),l(7,"a",23),c(8),m(9,"translate"),v(10,"i",24),r()(),l(11,"div",21),v(12,"i",25),r()),n&2&&(o(4),k(z(5,2,"status.readiness.node_no",ne(7,It))),o(4),y(" ",g(9,5,"plugins.compat.node_link")," "))}function zn(n,s){n&1&&v(0,"i",26)}function Wn(n,s){n&1&&v(0,"i",27)}function qn(n,s){if(n&1&&(l(0,"li",16)(1,"div",19),c(2),r(),l(3,"div",21),u(4,zn,1,0,"i",26),u(5,Wn,1,0,"i",27),r()()),n&2){let e=s.$implicit;o(2),k(e.displayName),o(2),_(e.hb2Ready==="supported"?4:-1),o(),_(e.hb2Ready==="unknown"?5:-1)}}function Gn(n,s){if(n&1&&(l(0,"div",13),v(1,"img",14),r(),u(2,Un,2,0,"p",9),u(3,Hn,11,1),l(4,"ul",15)(5,"li",16),u(6,On,8,5)(7,Rn,13,8),r(),ee(8,qn,6,3,"li",16,Z),r()),n&2){let e=p();o(2),_(e.allPluginsSupported()?2:-1),o(),_(e.allPluginsSupported()?-1:3),o(3),_(e.nodeReady()?6:7),o(2),te(e.installedPlugins())}}function Jn(n,s){if(n&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal("Dismiss"))}),c(2),m(3,"translate"),r()}n&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function Kn(n,s){if(n&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal("Dismiss"))}),c(2),m(3,"translate"),r()}n&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function Qn(n,s){if(n&1){let e=V();l(0,"button",29),E("click",function(){B(e);let t=p();return w(t.closeModal("update"))}),c(1),m(2,"translate"),r()}if(n&2){let e=p();x("disabled",e.loading()),o(),y(" ",g(2,2,"form.button_continue")," ")}}var Si=(()=>{class n{$activeModal=b(q);$api=b(N);$settings=b(W);$toastr=b(U);$translate=b(F);$ws=b(xe);io;modalData=b(pt);isUpdating=this.modalData.isUpdating;skipIfCompatible=this.modalData.skipIfCompatible;loading=C(!0);installedPlugins=C([]);allPluginsSupported=C(!0);nodeReady=C(!1);ngOnInit(){this.initialize()}initialize(){return S(this,null,function*(){this.io=this.$ws.getExistingNamespace("status"),this.io.socket.connected&&(yield this.checkHomebridgeUiVersion()),yield this.loadInstalledPlugins(),this.loading.set(!1)})}checkHomebridgeUiVersion(){return S(this,null,function*(){try{let{nodeVersion:e}=yield He(this.io.request("get-homebridge-server-info"));this.nodeReady.set((0,ki.satisfies)(e,">=20"))}catch(e){console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}loadInstalledPlugins(){return S(this,null,function*(){this.installedPlugins.set([]),this.loading.set(!0);let e=this.$settings.env.homebridgeVersion.split(".")[0];try{let t=(yield this.$api.get("/plugins")).filter(a=>a.name!=="homebridge-config-ui-x").map(a=>{let d=a.engines?.homebridge?.split("||").map(f=>f.trim())||[],h=e==="2"?"hide":d.some(f=>f.startsWith("^2")||f.startsWith(">=2"))?"supported":"unknown";return h==="unknown"&&this.allPluginsSupported.set(!1),A(D({},a),{hb2Ready:h})}).sort((a,d)=>a.name.localeCompare(d.name));this.installedPlugins.set(t),this.skipIfCompatible&&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"))}})}closeModal(e){this.$activeModal.close(e)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],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"],[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-circle-notch","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-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,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),E("click",function(){return t.closeModal("Dismiss")}),r()(),l(7,"div",4),u(8,Fn,2,0,"div",5)(9,Gn,10,3),r(),l(10,"div",6)(11,"div",7),u(12,Jn,4,6,"button",8),r(),l(13,"div",9),u(14,Kn,4,6,"button",8),r(),l(15,"div",10),u(16,Qn,3,4,"button",11),r()()()),i&2&&(o(3),k(z(4,6,"status.readiness.title",ne(11,It))),o(2),P("aria-label",g(6,9,"form.button_close")),o(3),_(t.loading()?8:9),o(4),_(t.isUpdating?12:-1),o(2),_(t.isUpdating?-1:14),o(2),_(t.isUpdating?16:-1))},dependencies:[Gt,j],encapsulation:2})}return n})();var Yn=(n,s,e,i,t)=>({iconStar:n,iconThumbsUp:s,iconCoffee:e,iconHeart:i,link:t}),Vi=(n,s,e,i)=>({"fa-arrow-alt-circle-down":n,"fa-code-compare":s,"fa-arrow-alt-circle-up":e,"fa-trash":i}),Xn=()=>["homebridge","homebridge-config-ui-x"],Zn=n=>({pluginName:n});function eo(n,s){n&1&&(l(0,"p",13),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"plugins.settings.restart_required")))}function to(n,s){n&1&&(l(0,"p",13),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"restart.child_bridges")))}function io(n,s){if(n&1&&(v(0,"p",12),m(1,"translate"),u(2,eo,3,3,"p",13),u(3,to,3,3,"p",13)),n&2){let e=p(3);x("innerHTML",z(1,3,e.supportMessageKey(),fe(6,Yn,e.iconStar,e.iconThumbsUp,e.iconCoffee,e.iconHeart,e.donationLink())),se),o(2),_(e.childBridges().length===0?2:-1),o(),_(e.childBridges().length>0?3:-1)}}function no(n,s){if(n&1&&(l(0,"div",9),v(1,"i",10),r(),l(2,"h5",11),c(3),r(),u(4,io,4,12)),n&2){let e=p(2);o(3),Xe("",e.pastTenseVerb(),": ",e.pluginDisplayName," (",e.targetVersionPretty(),")"),o(),_(e.isDisabled?-1:4)}}function oo(n,s){if(n&1&&(l(0,"div",6),u(1,no,5,4),r()),n&2){let e=p();o(),_(e.justUpdatedPlugin()?1:-1)}}function ao(n,s){if(n&1&&(l(0,"div",7)(1,"div",9),v(2,"i",14),r(),l(3,"ul",15)(4,"li"),c(5),m(6,"translate"),r(),l(7,"li"),c(8),m(9,"translate"),r()(),l(10,"pre",16),c(11),r()()),n&2){let e=p();o(2),J(Ve(10,Vi,e.action==="Install",e.action==="Update"&&e.installedVersion,e.action==="Update"&&!e.installedVersion,e.action==="Uninstall")),o(3),k(g(6,6,"plugins.manage.online_updates")),o(3),k(g(9,8,"plugins.manage.manual_update_command")),o(3),_e(`hb-service stop
|
|
11
|
+
npm install -g `,e.pluginName,"@",e.targetVersion,`
|
|
12
|
+
hb-service start`)}}function ro(n,s){if(n&1&&(l(0,"span"),c(1),r()),n&2){let e=p(3);o(),y("v",e.installedVersion," \u2192 ")}}function lo(n,s){if(n&1&&(l(0,"h5",18),u(1,ro,2,1,"span"),c(2),r()),n&2){let e=p(2);o(),_(e.installedVersion?1:-1),o(),y(" ",e.targetVersionPretty()," ")}}function so(n,s){n&1&&(l(0,"div",26),v(1,"i",27),r())}function co(n,s){if(n&1&&v(0,"markdown",28),n&2){let e=p(4);x("data",e.versionNotes())}}function mo(n,s){n&1&&(l(0,"div",29),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"plugins.manage.notes_none")))}function po(n,s){if(n&1&&(l(0,"div",29),c(1),m(2,"translate"),v(3,"br"),c(4),m(5,"translate"),v(6,"br"),c(7),m(8,"translate"),v(9,"br"),r()),n&2){let e=p(6);o(),y(" ",z(2,3,"plugins.manage.notes_beta_1",le(10,Zn,e.pluginDisplayName))),o(3),y(" ",g(5,6,"plugins.manage.notes_beta_2")),o(3),y(" ",g(8,8,"plugins.manage.notes_beta_3"))}}function go(n,s){n&1&&(l(0,"div",29),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"plugins.manage.notes_latest")))}function uo(n,s){if(n&1&&u(0,po,10,12,"div",29)(1,go,3,3,"div",29),n&2){let e=p(5);_(e.targetVersion.includes("beta")||e.targetVersion.includes("alpha")||e.targetVersion.includes("next")?0:1)}}function _o(n,s){if(n&1&&u(0,mo,3,3,"div",29)(1,uo,2,1),n&2){let e=p(4);_(e.versionNotesShow()?0:1)}}function fo(n,s){if(n&1&&u(0,co,1,1,"markdown",28)(1,_o,2,1),n&2){let e=p(3);_(e.versionNotes()?0:1)}}function ho(n,s){if(n&1&&(l(0,"div",25),u(1,so,2,0,"div",26)(2,fo,2,1),r()),n&2){let e=p(2);o(),_(e.action==="Update"&&!e.versionNotesLoaded()?1:2)}}function bo(n,s){n&1&&(l(0,"div",26),v(1,"i",27),r())}function Co(n,s){if(n&1&&v(0,"markdown",28),n&2){let e=p(4);x("data",e.fullChangelog())}}function vo(n,s){n&1&&(v(0,"div",31),m(1,"translate")),n&2&&x("innerHTML",g(1,1,"plugins.manage.changelog_none"),se)}function xo(n,s){if(n&1&&u(0,Co,1,1,"markdown",28)(1,vo,2,3,"div",31),n&2){let e=p(3);_(e.fullChangelog()?0:1)}}function yo(n,s){if(n&1&&(l(0,"div",30),u(1,bo,2,0,"div",26)(2,xo,2,1),r()),n&2){let e=p(2);o(),_(e.action==="Update"&&!e.fullChangelogLoaded()?1:2)}}function Bo(n,s){n&1&&(l(0,"span",34),v(1,"i",37),r())}function wo(n,s){if(n&1){let e=V();l(0,"a",38),E("click",function(){B(e);let t=p(3);return w(t.downloadBackupFile())}),v(1,"i",39),r()}}function ko(n,s){if(n&1&&(l(0,"div",24)(1,"p",32)(2,"span",33),c(3),m(4,"translate"),r(),u(5,Bo,2,0,"span",34)(6,wo,2,0,"a",35),r(),l(7,"p",36),c(8),m(9,"translate"),r()()),n&2){let e=p(2);o(3),k(g(4,3,"plugins.manage.backup")),o(2),_(e.downloadingBackup()?5:6),o(3),k(g(9,5,"plugins.manage.hb_restart"))}}function So(n,s){if(n&1){let e=V();l(0,"div",6)(1,"div",9),v(2,"i",17),r(),u(3,lo,3,2,"h5",18),l(4,"ul",19,0),E("activeIdChange",function(t){B(e);let a=p();return w(a.releaseNotesTab.set(t))}),l(6,"li",20)(7,"button",21),c(8),m(9,"translate"),r(),Mt(10,ho,3,1,"ng-template",22),r(),l(11,"li",20)(12,"button",21),c(13),m(14,"translate"),r(),Mt(15,yo,3,1,"ng-template",22),r()(),v(16,"div",23),u(17,ko,10,7,"div",24),r()}if(n&2){let e=Ye(5),i=p();o(2),J(Ve(14,Vi,i.action==="Install"&&!i.installedVersion,i.action==="Install"&&i.installedVersion,i.action==="Update",i.action==="Uninstall")),o(),_(i.latestVersion?3:-1),o(),x("activeId",i.releaseNotesTab()),o(2),x("ngbNavItem",1),o(2),k(g(9,10,"plugins.manage.notes")),o(3),x("ngbNavItem",2),o(2),k(g(14,12,"plugins.manage.changelog")),o(3),x("ngbNavOutlet",e),o(),_(ne(19,Xn).includes(i.pluginName)?17:-1)}}function Mo(n,s){if(n&1){let e=V();l(0,"button",46),m(1,"translate"),E("click",function(){B(e);let t=p(2);return w(t.dismissModal())}),c(2),m(3,"translate"),r()}n&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function Eo(n,s){if(n&1){let e=V();l(0,"button",46),m(1,"translate"),E("click",function(){B(e);let t=p(2);return w(t.dismissModal())}),c(2),m(3,"translate"),r()}n&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function Vo(n,s){if(n&1){let e=V();l(0,"button",47),E("click",function(){B(e);let t=p(2);return w(t.update())}),c(1),m(2,"translate"),r()}n&2&&(o(),k(g(2,1,"form.button_continue")))}function To(n,s){if(n&1){let e=V();l(0,"button",47),E("click",function(){B(e);let t=p(2);return w(t.childBridges().length>0?t.onRestartChildBridgeClick():t.onRestartHomebridgeClick())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"menu.tooltip_restart")," "))}function Io(n,s){if(n&1){let e=V();l(0,"button",48),E("click",function(){B(e);let t=p(2);return w(t.downloadLogFile())}),c(1),m(2,"translate"),r()}n&2&&(o(),k(g(2,1,"form.button_download")))}function Po(n,s){if(n&1&&(l(0,"div",8)(1,"div",40),u(2,Mo,4,6,"button",41),r(),l(3,"div",42),u(4,Eo,4,6,"button",41),r(),l(5,"div",43),u(6,Vo,3,3,"button",44),u(7,To,3,3,"button",44),u(8,Io,3,3,"button",45),r()()),n&2){let e=p();o(2),_(!e.justUpdatedPlugin()&&e.onlineUpdateOk()||e.justUpdatedPlugin()&&(!e.isDisabled||e.actionFailed())?2:-1),o(2),_(e.justUpdatedPlugin()&&e.isDisabled&&!e.actionFailed()||!e.onlineUpdateOk()?4:-1),o(2),_(e.onlineUpdateOk()&&e.releaseNotesShow()?6:-1),o(),_(e.justUpdatedPlugin()&&!e.isDisabled?7:-1),o(),_(e.actionFailed()?8:-1)}}var Ae=(()=>{class n{$activeModal=b(q);$api=b(N);$backup=b(bi);$modal=b(ae);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(F);$ws=b(xe);injector=b(re);modalData=b(ye);initialIsConfigured=this.modalData.isConfigured??!1;pluginName=this.modalData.pluginName;pluginDisplayName=this.modalData.pluginDisplayName??"";targetVersion=this.modalData.targetVersion??"";latestVersion=this.modalData.latestVersion??"";installedVersion=this.modalData.installedVersion??"";isDisabled=this.modalData.isDisabled??!1;action=this.modalData.action;onRefreshPluginList=this.modalData.onRefreshPluginList??(()=>{});verifiedPlugin=this.modalData.verifiedPlugin??!1;verifiedPlusPlugin=this.modalData.verifiedPlusPlugin??!1;funding=this.modalData.funding??null;targetVersionPretty=C("");actionComplete=C(!1);actionFailed=C(!1);justUpdatedPlugin=C(!1);updateToBeta=C(!1);childBridges=C([]);pastTenseVerb=C("");onlineUpdateOk=C(!1);versionNotes=C("");versionNotesLoaded=C(!1);versionNotesShow=C(!1);fullChangelog=C("");fullChangelogLoaded=C(!1);releaseNotesShow=C(!1);isConfigured=C(this.initialIsConfigured);supportMessageKey=C("");donationLink=C("");downloadingBackup=C(!1);presentTenseVerb=C("");releaseNotesTab=C(1);iconStar='<i class="fas fa-star orange-text"></i>';iconThumbsUp='<i class="fas fa-thumbs-up orange-text"></i>';iconCoffee='<i class="fas fa-coffee pink-text"></i>';iconHeart='<i class="fas fa-heart pink-text"></i>';io;toastSuccess;term=new _t;termTarget;fitAddon=new gt;webLinksAddon=new ut;errorLog="";constructor(){this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){let e=this.targetVersion,i=this.latestVersion;switch(this.targetVersionPretty.set(e==="latest"?`v${i}`:/^\d/.test(e)?`v${e}`:e),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 a=t.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();a&&(this.errorLog+=`${a}\r
|
|
13
|
+
`)}),this.toastSuccess=this.$translate.instant("toast.title_success"),this.onlineUpdateOk.set(!(["homebridge","homebridge-config-ui-x"].includes(this.pluginName)&&this.$settings.env.platform==="win32")),this.action){case"Install":this.install(),this.presentTenseVerb.set(this.$translate.instant("plugins.manage.install")),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.installed"));break;case"Uninstall":this.uninstall(),this.presentTenseVerb.set(this.$translate.instant("plugins.manage.uninstall")),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.uninstalled"));break;case"Update":switch(this.targetVersion){case"latest":this.updateToBeta.set(!1);break;case"alpha":case"beta":case"test":this.updateToBeta.set(!0);break}this.presentTenseVerb.set(this.$translate.instant("plugins.manage.update")),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.updated")),this.getVersionNotes();break}this.determineSupportMessage()}determineSupportMessage(){if(this.supportMessageKey.set("plugins.manage.support_github"),this.donationLink.set(""),!["homebridge","homebridge-config-ui-x"].includes(this.pluginName)&&(this.verifiedPlugin||this.verifiedPlusPlugin)&&this.funding&&Math.random()<.5){let e=null;if(typeof this.funding=="string")e=this.funding;else if(Array.isArray(this.funding)){let i=this.funding.map(t=>typeof t=="string"?t:t?.url).filter(Boolean);e=i.length>0?i[Math.floor(Math.random()*i.length)]:null}else this.funding?.url&&(e=this.funding.url);if(e){let i=/ko-?fi/i.test(e);this.supportMessageKey.set(i?"plugins.manage.support_kofi":"plugins.manage.support_donate"),this.donationLink.set(`<a href="${e}" target="_blank" rel="noopener noreferrer"><i class="fas fa-external-link-alt primary-text"></i></a>`)}}}ngOnDestroy(){this.io.end()}update(){if(this.releaseNotesShow.set(!1),this.versionNotes.set(""),this.fullChangelog.set(""),!!this.onlineUpdateOk()){if(this.pluginName==="homebridge"){this.upgradeHomebridge();return}this.io.request("update",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){if(this.pluginName==="homebridge-config-ui-x")try{this.$settings.webroot&&this.$settings.webroot!=="/"&&(yield this.$api.put("/server/webroot",{webroot:this.$settings.webroot})),yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),window.location.href="restart"}catch(e){console.error("Failed to update webroot or set restart flag:",e),window.location.href="restart"}else{try{yield this.getChildBridges()}catch(i){console.error(i)}let e=this.onRefreshPluginList;e&&e(),!this.isConfigured()&&this.childBridges().length===0?(this.$toastr.success(`${this.pastTenseVerb()} ${this.pluginName}`,this.toastSuccess),this.$activeModal.close(),this.$router.navigate(["/plugins"])):(this.actionComplete.set(!0),this.justUpdatedPlugin.set(!0),this.$router.navigate(["/plugins"]))}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}}onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}onRestartChildBridgeClick(){return S(this,null,function*(){try{for(let i of this.childBridges())yield this.$api.put(`/server/restart/${i.username}`,{});let e=R([{provide:rt,useValue:{plugin:{name:this.pluginName,displayName:this.pluginDisplayName},childBridges:this.childBridges()}}],this.injector);this.$modal.open(wi,{size:"xl",backdrop:"static",injector:e})}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error"))}finally{this.$activeModal.close()}})}downloadLogFile(){let e=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,Ei.saveAs)(e,`${this.pluginName}-error.log`)}downloadBackupFile(){return S(this,null,function*(){this.downloadingBackup.set(!0);try{yield this.$backup.downloadBackup()}catch(e){console.error(e);let i=e instanceof Error?e.message:this.$translate.instant("toast.title_error");this.$toastr.error(i,this.$translate.instant("toast.title_error"))}finally{this.downloadingBackup.set(!1)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}install(){if(this.onlineUpdateOk()){if(this.pluginName==="homebridge"){this.upgradeHomebridge();return}this.io.request("install",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){this.$toastr.success(`${this.pastTenseVerb()} ${this.pluginName}`,this.toastSuccess);let e=this.onRefreshPluginList;e&&e();try{let t=(yield this.$api.get("/plugins")).find(a=>a.name===this.pluginName);this.$activeModal.close({action:"just-installed",plugin:t})}catch(i){console.error("Failed to fetch updated plugin data:",i),this.$activeModal.close({action:"just-installed",pluginName:this.pluginName})}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$router.navigate(["/plugins"]),this.$toastr.error(e.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:()=>{let e=this.onRefreshPluginList;e&&e(),this.$activeModal.close(),this.$router.navigate(["/plugins"]),this.$modal.open(ue,{size:"lg",backdrop:"static"})},error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}upgradeHomebridge(){return S(this,null,function*(){let e="update";if(Number(this.installedVersion.split(".")[0])<2&&["2","alpha","beta"].includes(this.targetVersion.split(".")[0])){let i=R([{provide:pt,useValue:{isUpdating:!0,skipIfCompatible:!1}}],this.injector);e=yield this.$modal.open(Si,{size:"lg",backdrop:"static",injector:i}).result}e==="update"?this.io.request("homebridge-update",{version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){this.$activeModal.close();try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),this.$router.navigate(["/restart"])}catch(i){console.error(i),this.$router.navigate(["/restart"])}}),error:i=>{this.actionFailed.set(!0),console.error(i);let t=i instanceof Error?i.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}}):this.$activeModal.close()})}getVersionNotes(){return S(this,null,function*(){this.releaseNotesShow.set(!0);try{let e=yield this.$api.get(`/plugins/release/${encodeURIComponent(this.pluginName)}`);this.fullChangelog.set(e.changelog),e.latestVersion&&this.targetVersion==="latest"&&this.targetVersionPretty.set(e.latestVersion);let i=this.targetVersion,t=this.latestVersion;!(["beta","alpha","test","next"].includes(i)||i.includes("-"))&&(i==="latest"||i===t)?(this.versionNotesShow.set(!0),e.notes&&this.versionNotes.set(e.notes)):(this.versionNotesShow.set(!1),this.versionNotesLoaded.set(!0))}catch(e){console.error("Error loading release notes:",e)}this.fullChangelogLoaded.set(!0),this.versionNotesLoaded.set(!0)})}getChildBridges(){return S(this,null,function*(){let i=(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>this.pluginName===t.plugin);this.childBridges.set(i)})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],decls:11,vars:9,consts:[["nav","ngbNav"],[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-check-circle","primary-text",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"fas","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"p-2","mb-0"],[1,"far","primary-text",2,"font-size","75px"],[1,"mb-4","text-center"],["ngbNav","",1,"nav-tabs","px-0",3,"activeIdChange","activeId"],[1,"w-50","m-0",3,"ngbNavItem"],["ngbNavLink","",1,"w-100","release-tab"],["ngbNavContent",""],[1,"mt-2",3,"ngbNavOutlet"],[1,"mt-4","mb-0"],[1,"alert","release-notes","p-3","pb-1","my-0"],[1,"w-100","text-center","primary-text","mt-3","mb-4"],[1,"fa","fa-circle-notch","fa-spin",2,"font-size","75px"],[1,"plugin-md",3,"data"],[1,"w-100","text-center","grey-text","mt-3","mb-4"],[1,"alert","release-notes","p-3","pb-1","my-0",2,"border-top-left-radius","0","border-top-right-radius","0"],[1,"w-100","text-center","grey-text","mt-3","mb-4",3,"innerHTML"],[1,"w-100","text-center","mb-1","small"],[1,"grey-text"],[1,"mx-1"],["href","javascript:void(0)"],[1,"w-100","text-center","mb-0","small","grey-text"],[1,"fa","fa-circle-notch","fa-spin"],["href","javascript:void(0)",3,"click"],[1,"fa","fa-download","mx-1"],[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,t){i&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),v(6,"div",5),u(7,oo,2,1,"div",6),u(8,ao,12,15,"div",7),u(9,So,18,20,"div",6),u(10,Po,9,5,"div",8),r()),i&2&&(o(3),k(t.pluginDisplayName),o(),P("aria-label",g(5,7,"form.button_close")),o(2),x("hidden",!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()),o(),_(t.actionComplete()?7:-1),o(),_(t.onlineUpdateOk()?-1:8),o(),_(t.releaseNotesShow()&&!t.actionComplete()&&t.onlineUpdateOk()?9:-1),o(),_(!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()||t.actionFailed()?10:-1))},dependencies:[Pe,Ie,$e,hi,_i,ui,gi,fi,j],styles:[".plugin-modal-body[_ngcontent-%COMP%] .release-notes[_ngcontent-%COMP%]{box-shadow:none;max-height:39vh;overflow:auto;border:0;border-top-left-radius:0;border-top-right-radius:0}.plugin-modal-body[_ngcontent-%COMP%] .release-tab[_ngcontent-%COMP%]{font-size:1rem;color:#d3d3d3}.plugin-modal-body[_ngcontent-%COMP%] .tab-content[_ngcontent-%COMP%]{border-radius:0 0 20px 20px} .nav-tabs{--bs-nav-tabs-border-width: 0} .plugin-md{text-align:left;font-size:.85rem;word-wrap:break-word} .plugin-md img{max-width:100%} .plugin-md h1{font-size:1.3rem;font-weight:300} .plugin-md h2{font-size:1.2rem;font-weight:300} .plugin-md h3{font-size:1.1rem;font-weight:300} .plugin-md h4{font-size:1rem;font-weight:300} .plugin-md h5{font-size:.9rem;font-weight:300} .plugin-md pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}"]})}return n})();var Ti=ce(ot(),1);var $o=()=>["homebridge","homebridge-config-ui-x"];function Do(n,s){n&1&&(l(0,"div",5),v(1,"i",12),r())}function No(n,s){if(n&1&&(v(0,"i",20),l(1,"h6",21),c(2),m(3,"translate"),r(),l(4,"p",21),c(5),m(6,"translate"),l(7,"span",22),c(8),r()()),n&2){let e=p(2);o(2),k(g(3,3,"plugins.manage.select_version")),o(3),y(" ",g(6,5,"plugins.status_installed"),": "),o(3),y("v",e.plugin==null?null:e.plugin.installedVersion)}}function Ao(n,s){n&1&&(v(0,"i",23),l(1,"h6",21),c(2),m(3,"translate"),r()),n&2&&(o(2),k(g(3,1,"plugins.manage.select_version")))}function Lo(n,s){n&1&&v(0,"i",26)}function Fo(n,s){n&1&&v(0,"i",27)}function Uo(n,s){if(n&1){let e=V();l(0,"li",14)(1,"span",8),c(2),v(3,"br"),l(4,"small",24),c(5),r()(),l(6,"button",25),E("click",function(){let t=B(e).$implicit,a=p(2);return w(a.doInstall(t.version))}),u(7,Lo,1,0,"i",26)(8,Fo,1,0,"i",27),r()()}if(n&2){let e=s.$implicit,i=p(2);o(2),y(" ",e.tag," "),o(3),y("v",e.version),o(2),_((i.plugin==null?null:i.plugin.installedVersion)===e.version?7:8)}}function jo(n,s){n&1&&c(0," \u2713 ")}function Ho(n,s){if(n&1&&(l(0,"option",17),c(1),u(2,jo,1,0),r()),n&2){let e=s.$implicit,i=p(2);x("value",e.version)("selected",i.versionSelect==e.version),o(),y(" v",e.version," "),o(),_(e.version==(i.plugin==null?null:i.plugin.installedVersion)?2:-1)}}function Oo(n,s){n&1&&v(0,"i",26)}function Ro(n,s){n&1&&v(0,"i",27)}function zo(n,s){if(n&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p(2);return w(t.doInstall(t.versionSelect))}),u(1,Oo,1,0,"i",26)(2,Ro,1,0,"i",27),r()}if(n&2){let e=p(2);o(),_((e.plugin==null?null:e.plugin.installedVersion)===e.versionSelect?1:2)}}function Wo(n,s){if(n&1&&(l(0,"ul",19)(1,"li",28)(2,"div",8),c(3),m(4,"translate"),v(5,"br"),l(6,"span",29),c(7),m(8,"translate"),r()(),l(9,"div",30),v(10,"input",31),m(11,"translate"),v(12,"label",32),r()()()),n&2){let e=p(2);o(3),y(" ",g(4,4,"plugins.manage.hide_updates")),o(4),k(g(8,6,"plugins.manage.hide_updates_desc")),o(3),x("formControl",e.hideUpdatesFormControl),P("aria-label",g(11,8,"plugins.manage.hide_updates"))}}function qo(n,s){if(n&1){let e=V();l(0,"div",6),u(1,No,9,7)(2,Ao,4,3),l(3,"ul",13),ee(4,Uo,9,3,"li",14,Z),l(6,"li",14)(7,"div",15),c(8),m(9,"translate"),v(10,"br"),l(11,"select",16),X("ngModelChange",function(t){B(e);let a=p();return Y(a.versionSelect,t)||(a.versionSelect=t),w(t)}),ee(12,Ho,3,4,"option",17,Z),r()(),u(14,zo,3,1,"button",18),r()(),u(15,Wo,13,10,"ul",19),r()}if(n&2){let e=p();o(),_(e.plugin!=null&&e.plugin.installedVersion?1:2),o(3),te(e.versionsWithTags()),o(4),y(" ",g(9,5,"plugins.manage.all_versions")," "),o(3),Q("ngModel",e.versionSelect),o(),te(e.versions()),o(2),_(e.versionSelect?14:-1),o(),_(e.plugin!=null&&e.plugin.installedVersion&&!ne(7,$o).includes(e.plugin==null?null:e.plugin.name)?15:-1)}}var Ii=(()=>{class n{$activeModal=b(q);$api=b(N);$settings=b(W);$toastr=b(U);$translate=b(F);modalData=b(ct);plugin=this.modalData.plugin;onRefreshPluginList=this.modalData.onRefreshPluginList;_versionSelect=C("");loading=C(!0);versions=C([]);versionsWithTags=C([]);get versionSelect(){return this._versionSelect()}set versionSelect(e){this._versionSelect.set(e)}isUpdateHidden=C(!1);hideUpdatesFormControl=new Qt(!1);ngOnInit(){let e=this.plugin;e&&(this.versionSelect=e.installedVersion||e.latestVersion,this.lookupVersions(),this.isUpdateHidden.set(this.$settings.env.plugins.hideUpdatesFor&&this.$settings.env.plugins.hideUpdatesFor.includes(e.name)),this.hideUpdatesFormControl.patchValue(this.isUpdateHidden()),this.hideUpdatesFormControl.valueChanges.pipe(Je(750)).subscribe(i=>{i!==null&&this.toggleHideUpdates(i)}))}doInstall(e){let i=this.plugin;if(!i)return;let t=this.versions().find(a=>a.version===e);this.$activeModal.close({name:i.name,version:e,engines:t?.engines,action:i.installedVersion?"alternate":"install"})}toggleHideUpdates(e){return S(this,null,function*(){let i=this.plugin;if(!i)return;let t=this.$settings.env.plugins?.hideUpdatesFor||[];e?t.includes(i.name)||(t=[...t,i.name].sort((a,d)=>a.localeCompare(d))):t=t.filter(a=>a!==i.name);try{yield this.$api.put("/config-editor/ui/plugins/hide-updates-for",{body:t}),this.$settings.setEnvItem("plugins.hideUpdatesFor",t);let a=this.onRefreshPluginList;a&&a()}catch(a){this.hideUpdatesFormControl.patchValue(this.isUpdateHidden(),{emitEvent:!1}),console.error(a);let d=a instanceof Error?a.message:this.$translate.instant("toast.title_error");this.$toastr.error(d,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}lookupVersions(){return S(this,null,function*(){let e=this.plugin;if(e)try{let i=yield this.$api.get(`/plugins/lookup/${encodeURIComponent(e.name)}/versions`),t=[],a=[];for(let[h,f]of Object.entries(i.versions))t.push({version:h,engines:f.engines||null}),Object.keys(i.tags).filter(M=>i.tags[M]===h).forEach(M=>{a.push({version:h,tag:M})});let d=this.plugin;d?.installedVersion&&!t.find(h=>h.version===d.installedVersion)&&t.push({version:d.installedVersion,engines:d.engines||null}),t.sort((h,f)=>(0,Ti.rcompare)(h.version,f.version)),a.sort((h,f)=>{let M=["latest","next","beta","alpha"],$=M.includes(h.tag)?M.indexOf(h.tag):999,ge=M.includes(f.tag)?M.indexOf(f.tag):999;return $-ge}),this.versions.set(t),this.versionsWithTags.set(a),!t.find(h=>h.version===this.versionSelect)&&i.tags.latest&&(this.versionSelect=i.tags.latest),this.loading.set(!1)}catch(i){console.error(i);let t=i instanceof Error?i.error?.message||i.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100"],[1,"w-100","text-center","primary-text","my-5","w-100"],[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-circle-notch","fa-spin",2,"font-size","75px"],[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","font-monospace",2,"font-size","0.875rem",3,"ngModelChange","ngModel"],[3,"value","selected"],[1,"btn","btn-primary","m-0","ms-3","py-1"],[1,"list-group","list-group-box","mt-3","mb-0"],[1,"fas","fa-code-compare","primary-text","mb-3",2,"font-size","75px"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-arrow-alt-circle-down","primary-text","mb-3",2,"font-size","75px"],[1,"grey-text","font-monospace"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click"],[1,"fas","fa-rotate-right"],[1,"fas","fa-arrow-alt-circle-down"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"grey-text","small"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox","id","hidePluginUpdates",1,"rendux-input",3,"formControl"],["for","hidePluginUpdates",1,"rendux-label","ms-3"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,Do,2,0,"div",5)(8,qo,16,8,"div",6),r(),l(9,"div",7),v(10,"div",8),l(11,"div",9)(12,"button",10),m(13,"translate"),E("click",function(){return t.dismissModal()}),c(14),m(15,"translate"),r()(),v(16,"div",11),r()()),i&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),P("aria-label",g(5,5,"form.button_close")),o(3),_(t.loading()?7:8),o(5),P("aria-label",g(13,7,"form.button_close")),o(2),y(" ",g(15,9,"form.button_close")," "))},dependencies:[ve,it,nt,Te,tt,be,Ce,ti,Xt,j],encapsulation:2})}return n})();var Pi=ce(yn(),1);var wt=(()=>{class n{transform(e){return e.replace(/\$\{\{HOSTNAME\}\}/g,location.hostname)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=Rt({name:"interpolateMd",type:n,pure:!0})}return n})();var Go=(n,s,e,i,t)=>({"fa-circle-check":n,"green-text":s,"fa-circle-exclamation":e,"red-text":i,"orange-text":t}),Jo=(n,s,e)=>({"fa-circle-check green-text":n,"fa-circle-exclamation red-text":s,"fa-circle-exclamation orange-text":e});function Ko(n,s){n&1&&(l(0,"div",5),v(1,"i",14),r())}function Qo(n,s){n&1&&(l(0,"div",6),c(1),m(2,"translate"),m(3,"translate"),r()),n&2&&(o(),_e(" ",g(2,2,"plugins.settings.message_manual_config_required")," ",g(3,4,"plugins.settings.message_consult_documentation")," "))}function Yo(n,s){if(n&1&&(v(0,"markdown",7),m(1,"interpolateMd")),n&2){let e=p();x("data",g(1,1,e.schema==null?null:e.schema.headerDisplay))}}function Xo(n,s){if(n&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p(2).$index,a=p(2);return w(a.removeBlock(t))}),v(2,"i",29),r()}n&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function Zo(n,s){if(n&1){let e=V();u(0,Xo,3,4,"button",25),l(1,"button",26),m(2,"translate"),E("click",function(){B(e);let t=p().$index,a=p(2);return w(a.editBlock(t))}),v(3,"i",27),r()}if(n&2){let e=p().$index,i=p(2);_(i.show()==="configBlock."+e?0:-1),o(),x("ngbTooltip",g(2,3,"form.button_edit"))("openDelay",150)}}function ea(n,s){if(n&1&&(v(0,"i",30),m(1,"translate")),n&2){let e=p().$index,i=p(2);J(fe(6,Go,i.formBlocksValid()[e],i.formBlocksValid()[e],!i.formBlocksValid()[e],i.strictValidation()&&!i.formBlocksValid()[e],!i.strictValidation()&&!i.formBlocksValid()[e])),x("ngbTooltip",g(1,4,i.formBlocksValid()[e]?"form.label_valid":i.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function ta(n,s){if(n&1){let e=V();l(0,"div",16)(1,"div",18)(2,"div",19)(3,"h5",20),c(4),r(),l(5,"div"),u(6,Zo,4,5),u(7,ea,2,12,"i",21),r()()(),l(8,"div",22)(9,"div",23)(10,"ngx-monaco-editor",24),E("ngModelChange",function(t){B(e);let a=p(2);return w(a.currentBlock.set(t))})("onInit",function(t){B(e);let a=p(2);return w(a.onEditorInit(t))}),r()()()()}if(n&2){let e=s.$implicit,i=s.$index,t=p(2);x("ngbAccordionItem","configBlock."+i)("collapsed",t.show()!=="configBlock."+i)("id","configBlock."+i),o(4),k(e.name||t.pluginAlias()),o(2),_(!(t.schema!=null&&t.schema.singular)||t.pluginConfig().length>1?6:-1),o(),_(t.schema!=null&&t.schema.singular?-1:7),o(3),x("options",t.editorOptions)("ngModel",t.currentBlock())}}function ia(n,s){if(n&1&&(l(0,"div",17),v(1,"markdown",7),m(2,"interpolateMd"),r()),n&2){let e=p(2);o(),x("data",g(2,1,e.schema==null?null:e.schema.footerDisplay))}}function na(n,s){if(n&1&&(l(0,"div",15),ee(1,ta,11,8,"div",16,Z),r(),u(3,ia,3,3,"div",17)),n&2){let e=p();x("closeOthers",!0),o(),te(e.pluginConfig()),o(2),_(e.schema!=null&&e.schema.footerDisplay?3:-1)}}function oa(n,s){if(n&1&&(v(0,"i",35),m(1,"translate")),n&2){let e=p(2);J(de(6,Jo,e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function aa(n,s){if(n&1){let e=V();l(0,"button",36),E("click",function(){B(e);let t=p(2);return w(t.addBlock())}),v(1,"i",37),r()}}function ra(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"form.button_save")," ")}function la(n,s){n&1&&v(0,"i",34)}function sa(n,s){if(n&1){let e=V();u(0,oa,2,10,"i",31),u(1,aa,2,0,"button",32),l(2,"button",33),E("click",function(){B(e);let t=p();return w(t.save())}),u(3,ra,2,3),u(4,la,1,0,"i",34),r()}if(n&2){let e=p();_(e.schema!=null&&e.schema.singular?0:-1),o(),_(e.schema!=null&&e.schema.singular?-1:1),o(),x("disabled",e.saveInProgress()||!e.formIsValid()&&e.strictValidation()),o(),_(e.saveInProgress()?-1:3),o(),_(e.saveInProgress()?4:-1)}}function da(n,s){if(n&1){let e=V();l(0,"button",38),E("click",function(){B(e);let t=p();return w(t.openFullConfigEditor())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"plugins.settings.label_open_config_editor")," "))}var $t=(()=>{class n{$activeModal=b(q);$api=b(N);$cb=b(Ne);$md=b(ai);$plugin=b(we);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(F);modalData=b(Me);plugin=this.modalData.plugin;schema=this.modalData.schema;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");pluginAlias=C("");pluginType=C(null);loading=C(!0);canConfigure=C(!1);show=C("");pluginConfig=C([]);currentBlock=C(void 0);currentBlockIndex=C(null);saveInProgress=C(!1);isFirstSave=C(!1);monacoEditor;formBlocksValid=C({});formIsValid=C(!0);strictValidation=C(!1);editorOptions;get arrayKey(){return this.pluginType()==="accessory"?"accessories":"platforms"}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light"},this.strictValidation.set(this.schema?.strictValidation||!1),this.$md.detect.mobile()?(this.loading.set(!1),this.canConfigure.set(!1)):this.loadPluginAlias()}onEditorInit(e){return S(this,null,function*(){window.editor=e,this.monacoEditor=e,this.setupSchemaValidation(),this.monacoEditor.onDidChangeModelContent(()=>setTimeout(()=>this.onValidationChange(),300)),window.monaco.editor.onDidChangeMarkers(t=>{let a=this.monacoEditor.getModel()?.uri;a&&t.some(d=>d.toString()===a.toString())&&this.onValidationChange()}),yield this.monacoEditor.getModel().setValue(this.currentBlock()),yield this.monacoEditor.getAction("editor.action.formatDocument").run()})}ngOnDestroy(){try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let i=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias}/config.json`,a=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(d=>d.uri!==i);window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:a})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}addBlock(){if(!this.saveCurrentBlock()){this.$toastr.error(this.$translate.instant("plugins.config.please_fix"),this.$translate.instant("toast.title_error"));return}this.pluginConfig.update(e=>[...e,{[this.pluginType()]:this.pluginAlias(),name:this.pluginAlias()}]),this.editBlock(this.pluginConfig().length-1)}editBlock(e){if(this.currentBlockIndex()!==null){if(!this.saveCurrentBlock())return;this.formBlocksValid.update(i=>A(D({},i),{[this.currentBlockIndex()]:this.isJsonValid()}))}this.show.set(`configBlock.${e}`),this.currentBlockIndex.set(e),this.currentBlock.set(JSON.stringify(this.pluginConfig()[e],null,4)),e in this.formBlocksValid()||this.formBlocksValid.update(i=>A(D({},i),{[e]:!0})),this.updateOverallValidation(),setTimeout(()=>this.onValidationChange(),150)}removeBlock(e){let i=this.pluginConfig()[e],t=this.pluginConfig().findIndex(a=>a===i);t>-1&&this.pluginConfig.update(a=>{let d=[...a];return d.splice(t,1),d}),this.currentBlockIndex.set(null),this.currentBlock.set(void 0),this.show.set("")}save(){return S(this,null,function*(){if(this.saveInProgress.set(!0),!this.saveCurrentBlock()){this.saveInProgress.set(!1);return}try{let e=this.plugin;if(!e)return;let i=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,this.pluginConfig());if(this.$activeModal.close(),this.isFirstSave()&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(e,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(e.name)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}closeModal(){this.$activeModal.close()}setupSchemaValidation(){let e=this.schema?.schema;e||(e=this.createBasicSchema());let t=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias()}/config.json`,a=Tt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"}),h=[...e.required||[]];this.pluginType()==="platform"?(h.includes("platform")||h.push("platform"),e.properties?.platform?e.properties.platform.const=this.pluginAlias():e.properties=A(D({},e.properties),{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",const:this.pluginAlias()}})):(h.includes("accessory")||h.push("accessory"),h.includes("name")||h.push("name"),e.properties?.accessory?e.properties.accessory.const=this.pluginAlias():e.properties=A(D({},e.properties),{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to.",const:this.pluginAlias()}})),window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:[{uri:t,fileMatch:["*"],schema:A(D({},e),{required:h,properties:A(D({},e.properties),{_bridge:a})})}]})}createBasicSchema(){let e=Tt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"});return this.pluginType()==="platform"?{type:"object",required:["platform"],title:this.$translate.instant("plugins.button_settings"),properties:{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the platform."},_bridge:e}}:{type:"object",required:["accessory","name"],title:this.$translate.instant("plugins.button_settings"),properties:{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the accessory."},_bridge:e}}}isJsonValid(){if(!this.monacoEditor)return!0;let e=this.monacoEditor.getModel();if(!e)return!0;let i=window.monaco.editor.getModelMarkers({resource:e.uri}),t=window.monaco;return!i.filter(d=>d.severity===t.MarkerSeverity.Error||d.severity===t.MarkerSeverity.Warning).length}onValidationChange(){this.currentBlockIndex()!==null&&this.monacoEditor&&(this.formBlocksValid.update(e=>A(D({},e),{[this.currentBlockIndex()]:this.isJsonValid()})),this.updateOverallValidation())}updateOverallValidation(){this.formIsValid.set(Object.values(this.formBlocksValid()).every(e=>e))}loadPluginAlias(){return S(this,null,function*(){let e=this.plugin;if(e)try{let i=yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);i.pluginAlias&&i.pluginType?(this.pluginAlias.set(i.pluginAlias),this.pluginType.set(i.pluginType),this.loadHomebridgeConfig()):this.loading.set(!1)}catch{this.loading.set(!1)}})}loadHomebridgeConfig(){return S(this,null,function*(){let e=this.plugin;if(!e)return;let i=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`);this.pluginConfig.set(i),this.canConfigure.set(!0),this.loading.set(!1),this.initializeValidationState(),this.pluginConfig().length?this.editBlock(0):(this.isFirstSave.set(!0),this.addBlock())})}saveCurrentBlock(){if(this.currentBlockIndex()!==null&&this.monacoEditor){let e=this.monacoEditor.getModel().getValue().trim(),i;e.charAt(0)==='"'&&e.charAt(e.length-1)==="]"&&(e=`{${e}}`);try{i=Pi.default.parse(e)}catch(d){return console.error(d),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error")),!1}if(Array.isArray(i)||typeof i!="object"||i===null)return this.$toastr.error(this.$translate.instant("plugins.config.must_be_object"),this.$translate.instant("toast.title_error")),!1;let t=i;if(!t[this.pluginType()]&&Array.isArray(t[this.arrayKey])&&t[this.arrayKey].length&&Object.keys(t).length===1&&(t=t[this.arrayKey][0]),this.pluginType()==="accessory"&&(!t.name||typeof t.name!="string"))return this.$toastr.error(this.$translate.instant("plugins.config.name_property"),this.$translate.instant("toast.title_error")),t.name="",this.monacoEditor.getModel().setValue(JSON.stringify(t,null,4)),!1;let a=this.pluginConfig()[this.currentBlockIndex()];Object.keys(a).forEach(d=>delete a[d]),Object.assign(a,t),a[this.pluginType()]=this.pluginAlias()}return!0}initializeValidationState(){let e={};for(let i=0;i<this.pluginConfig().length;i+=1)e[i]=!0;this.formBlocksValid.set(e),this.updateOverallValidation()}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],decls:20,vars:16,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","my-5","w-100"],[1,"alert","alert-warning","mb-0"],[1,"plugin-md",3,"data"],[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"],[1,"btn","btn-primary"],[1,"fa","fa-circle-notch","fa-spin",2,"font-size","75px"],["ngbAccordion","",3,"closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],[1,"mt-3"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0","py-2","ps-1"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"class","ngbTooltip","openDelay"],["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","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2","me-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["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-circle-notch","fa-spin"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"],[1,"btn","btn-primary",3,"click"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.closeModal()}),r()(),l(6,"div",4),u(7,Ko,2,0,"div",5),u(8,Qo,4,6,"div",6),u(9,Yo,2,3,"markdown",7),u(10,na,4,2),r(),l(11,"div",8)(12,"div",9)(13,"button",10),E("click",function(){return t.closeModal()}),c(14),m(15,"translate"),r()(),v(16,"div",11),l(17,"div",12),u(18,sa,5,5),u(19,da,3,3,"button",13),r()()()),i&2&&(o(3),_e("",(t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)," - ",t.pluginType()),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,12,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(!t.loading()&&!t.canConfigure()?8:-1),o(),_(t.schema!=null&&t.schema.headerDisplay?9:-1),o(),_(!t.loading()&&t.canConfigure()?10:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(15,14,"form.button_close")," "),o(4),_(t.canConfigure()?18:-1),o(),_(t.canConfigure()?-1:19))},dependencies:[yt,xt,vt,Be,bt,ht,Ci,ve,be,Ce,Ct,Pe,Ie,$e,j,wt],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 n})();var Dt=n=>({link:n}),$i=(n,s)=>({"green-text":n,"grey-text":s});function ca(n,s){if(n&1){let e=V();l(0,"button",14),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal())}),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()),P("aria-label",g(1,2,"form.button_close"))}}function ma(n,s){n&1&&(l(0,"div",6),v(1,"i",15),r())}function pa(n,s){n&1&&(l(0,"li"),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"child_bridge.bridges_paired_2")))}function ga(n,s){if(n&1&&(l(0,"li"),c(1),m(2,"translate"),r(),u(3,pa,3,3,"li")),n&2){let e,i=p(2);o(),k(g(2,2,"child_bridge.bridges_paired")),o(2),_(i.configBlocks().length===1&&!i.deviceInfo().get((e=i.configBlocks()[0]._bridge)==null?null:e.username)&&i.originalBridges().length===0?3:-1)}}function ua(n,s){if(n&1&&(l(0,"option",30),c(1),r()),n&2){let e=s.$implicit,i=s.$index;x("value",i),o(),k(e.name||e.platform||e.accessory)}}function _a(n,s){if(n&1){let e=V();l(0,"ul",22)(1,"li",26),c(2),m(3,"translate"),r(),l(4,"li",24)(5,"label",27),c(6),m(7,"translate"),r(),l(8,"div",28)(9,"select",29),E("ngModelChange",function(t){B(e);let a=p(3);return a.selectedBlock.set(t),w(a.onBlockChange(t))}),ee(10,ua,2,2,"option",30,Z),r()()()()}if(n&2){let e=p(3);o(2),k(g(3,3,"form.label.changes_kept")),o(4),y(" ",g(7,5,"accessories.plugin")," "),o(3),x("ngModel",e.selectedBlock()),o(),te(e.configBlocks())}}function fa(n,s){if(n&1&&c(0),n&2){let e=p().$implicit;_e(" ",e.name," \xB7 ",e.username," ")}}function ha(n,s){if(n&1&&c(0),n&2){let e=p().$implicit;y(" ",e.username," ")}}function ba(n,s){if(n&1&&(l(0,"option",30),u(1,fa,1,2)(2,ha,1,1),r()),n&2){let e=s.$implicit;x("value",e.username),o(),_(e.name?1:2)}}function Ca(n,s){if(n&1){let e=V();l(0,"li",24)(1,"label",31),c(2),m(3,"translate"),r(),l(4,"div",28)(5,"select",32,0),E("change",function(){B(e);let t=Ye(6),a=p(3);return w(a.onLinkBridgeChange(t.value))}),l(7,"option",30),c(8),m(9,"translate"),r(),ee(10,ba,3,2,"option",30,Z),r()()()}if(n&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.or_link")),o(6),k(g(9,4,"child_bridge.config.select_existing")),o(2),te(e.bridgesAvailableForLink())}}function va(n,s){n&1&&(l(0,"li",24)(1,"label",33),c(2,"Child Bridge"),r(),l(3,"div",34),c(4),m(5,"translate"),r()()),n&2&&(o(4),y(" ",g(5,1,"child_bridge.config.prevent")," "))}function xa(n,s){if(n&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),E("change",function(){B(e);let t=p(3);return w(t.toggleExternalBridge(t.configBlocks()[t.selectedBlock()],!t.enabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),v(6,"label",37),r()()}if(n&2){let e=p(3);o(2),y(" ",g(3,4,e.currentlySelectedLink()?"child_bridge.config.or_link":"child_bridge.config.use")," "),o(3),x("id","toggleExternalBridgeInput_"+e.selectedBlock())("checked",e.enabledBlocks()[e.selectedBlock()]),o(),x("for","toggleExternalBridgeInput_"+e.selectedBlock())}}function ya(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),n&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.name")),o(3),y(" ",e.currentlySelectedLink().name," ")}}function Ba(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),n&2){let e,i=p(3);o(2),k(g(3,2,"users.label_username")),o(3),y(" ",((e=i.currentlySelectedLink())==null?null:e.username)||((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)," ")}}function wa(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),n&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.port")),o(3),y(" ",e.currentlySelectedLink().port," ")}}function ka(n,s){if(n&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),l(4,"code"),c(5,"-D"),r()(),l(6,"div",35)(7,"input",50),m(8,"translate"),X("ngModelChange",function(t){B(e);let a=p(5);return Y(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled,t)||(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled=t),w(t)}),r(),v(9,"label",37),r()()}if(n&2){let e=p(5);o(2),y("",g(3,5,"child_bridge.config.debug")," "),o(5),x("id","homebridgeDebugMode_"+e.selectedBlock()),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.debugModeEnabled),P("aria-label",g(8,7,"settings.startup.debug")),o(2),x("for","homebridgeDebugMode_"+e.selectedBlock())}}function Sa(n,s){if(n&1){let e=V();l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),l(4,"span",41),c(5),m(6,"translate"),r(),v(7,"br")(8,"small",42),m(9,"translate"),r(),l(10,"div",43)(11,"input",44),E("input",function(t){let a;B(e);let d=p(4);return w(d.onScheduledRestartCronChange(t.target.value,(a=d.configBlocks()[d.selectedBlock()]._bridge)==null?null:a.username))}),r()()(),u(12,ka,10,9,"li",25),l(13,"li",24)(14,"label",33)(15,"span",45),c(16,"DEBUG"),r(),v(17,"br")(18,"small",46),m(19,"translate"),r(),l(20,"div",28)(21,"input",47),X("ngModelChange",function(t){B(e);let a=p(4);return Y(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG=t),w(t)}),r()()(),l(22,"li",24)(23,"label",33)(24,"span",45),c(25,"NODE_OPTIONS"),r(),v(26,"br"),l(27,"small",48),c(28),m(29,"translate"),r()(),l(30,"div",28)(31,"input",49),X("ngModelChange",function(t){B(e);let a=p(4);return Y(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS=t),w(t)}),r()()()}if(n&2){let e,i=p(4);o(2),y(" ",g(3,13,"settings.startup.scheduled_restart")," "),o(3),k(g(6,15,"common.labels.beta")),o(3),x("innerHtml",z(9,17,"settings.startup.scheduled_restart_desc",le(25,Dt,i.linkCron)),se),o(3),Re("letter-spacing","0.15em")("text-align","center"),x("value",i.getScheduledRestartCron((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)),o(),_(i.canShowBridgeDebug()?12:-1),o(6),x("innerHTML",z(19,20,"settings.service.debug_tooltip",le(27,Dt,i.linkDebug)),se),o(3),Q("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.DEBUG),o(7),k(g(29,23,"settings.service.node_tooltip")),o(3),Q("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.NODE_OPTIONS)}}function Ma(n,s){if(n&1){let e=V();l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",28)(5,"input",39),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.name,t)||(a.configBlocks()[a.selectedBlock()]._bridge.name=t),w(t)}),r()()(),l(6,"li",24)(7,"label",33),c(8),m(9,"translate"),r(),l(10,"div",28)(11,"input",40),m(12,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer,t)||(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer=t),w(t)}),r()()(),l(13,"li",24)(14,"label",33),c(15),m(16,"translate"),r(),l(17,"div",28)(18,"input",40),m(19,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.model,t)||(a.configBlocks()[a.selectedBlock()]._bridge.model=t),w(t)}),r()()(),l(20,"li",24)(21,"label",33),c(22),m(23,"translate"),r(),l(24,"div",28)(25,"input",40),m(26,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision,t)||(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision=t),w(t)}),r()()(),u(27,Sa,32,29)}if(n&2){let e=p(3);o(2),k(g(3,16,"child_bridge.config.name")),o(3),Se("is-invalid",e.getHapNameValidationError(e.selectedBlock())),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.name),o(3),k(g(9,18,"child_bridge.config.manufacturer")),o(3),x("placeholder",g(12,20,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.manufacturer),o(4),k(g(16,22,"child_bridge.config.model")),o(3),x("placeholder",g(19,24,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.model),o(4),k(g(23,26,"child_bridge.config.firmware")),o(3),Se("font-monospace",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),x("placeholder",g(26,28,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),o(2),_(e.justInstalled?-1:27)}}function Ea(n,s){n&1&&(l(0,"li",55)(1,"div",57)(2,"div",58)(3,"div")(4,"div",59),v(5,"i",60),r(),l(6,"div",61),c(7),m(8,"translate"),r()()()()()),n&2&&(o(7),k(g(8,1,"child_bridge.return_to_pair")))}function Va(n,s){n&1&&(l(0,"span"),c(1),m(2,"translate"),r()),n&2&&(o(),y(" \xB7 ",g(2,1,"status.code_scan")," "))}function Ta(n,s){if(n&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),E("change",function(){let t;B(e);let a=p(5);return w(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"hap"))}),r(),v(7,"label",37),r()()}if(n&2){let e,i=p(5);o(2),k(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideHapUnpairing_"+i.selectedBlock())("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"hap")),P("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideHapUnpairing_"+i.selectedBlock())}}function Ia(n,s){if(n&1&&(l(0,"li",55)(1,"div",57),v(2,"app-qrcode",62),l(3,"p",63),c(4),r(),l(5,"p",64),v(6,"i",65),c(7),m(8,"translate"),u(9,Va,3,3,"span"),r()()(),u(10,Ta,8,9,"li",25)),n&2){let e,i,t,a,d,h,f=p(4);o(2),x("data",(e=f.deviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e._setupCode),o(2),y(" ",(i=f.deviceInfo().get((i=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pincode," "),o(2),J(ze(9,$i,(t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t._isPaired,!((t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t._isPaired))),o(),y(" ",g(8,7,(a=f.deviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((d=f.deviceInfo().get((d=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:d.username))!=null&&d._isPaired?-1:9),o(),_((h=f.deviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h._isPaired?-1:10)}}function Pa(n,s){n&1&&(l(0,"span"),c(1),m(2,"translate"),r()),n&2&&(o(),y(" \xB7 ",g(2,1,"status.code_scan")," "))}function $a(n,s){if(n&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),E("change",function(){let t;B(e);let a=p(7);return w(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"matter"))}),r(),v(7,"label",37),r()()}if(n&2){let e,i=p(7);o(2),k(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideMatterUnpairing_"+i.selectedBlock())("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"matter")),P("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideMatterUnpairing_"+i.selectedBlock())}}function Da(n,s){if(n&1&&(l(0,"li",55)(1,"div",57),v(2,"app-qrcode",62),l(3,"p",63),c(4),r(),l(5,"p",64),v(6,"i",65),c(7),m(8,"translate"),u(9,Pa,3,3,"span"),r()()(),u(10,$a,8,9,"li",25)),n&2){let e,i,t,a,d,h,f=p(6);o(2),x("data",(e=f.matterDeviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e.setupUri),o(2),y(" ",(i=f.matterDeviceInfo().get((i=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pin," "),o(2),J(ze(9,$i,(t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t.commissioned,!((t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t.commissioned))),o(),y(" ",g(8,7,(a=f.matterDeviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a.commissioned?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((d=f.matterDeviceInfo().get((d=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:d.username))!=null&&d.commissioned?-1:9),o(),_((h=f.matterDeviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h.commissioned?-1:10)}}function Na(n,s){n&1&&(l(0,"li",55)(1,"div",57)(2,"div",70)(3,"div")(4,"div",59),v(5,"i",60),r(),l(6,"div",61),c(7),m(8,"translate"),r()()()()()),n&2&&(o(7),k(g(8,1,"child_bridge.return_to_pair")))}function Aa(n,s){if(n&1){let e=V();l(0,"li",67)(1,"ul",68)(2,"li"),c(3),m(4,"translate"),r(),l(5,"li"),c(6),m(7,"translate"),r()()(),u(8,Da,11,12),u(9,Na,9,3,"li",55),l(10,"li",24)(11,"label",33),c(12),m(13,"translate"),r(),l(14,"div",28)(15,"input",69),X("ngModelChange",function(t){B(e);let a=p(5);return Y(a.configBlocks()[a.selectedBlock()]._bridge.matter.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.matter.port=t),w(t)}),r()()()}if(n&2){let e,i,t=p(5);o(3),k(g(4,8,"child_bridge.config.matter_note_1")),o(3),k(g(7,10,"child_bridge.config.matter_note_2")),o(2),_((e=t.matterDeviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username))!=null&&e.setupUri?8:-1),o(),_(t.matterDeviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username)&&!((i=t.matterDeviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username))!=null&&i.setupUri)?9:-1),o(3),k(g(13,12,"child_bridge.config.port")),o(3),Se("is-invalid",t.getMatterPortValidationError(t.selectedBlock())),Q("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.matter.port)}}function La(n,s){if(n&1){let e=V();l(0,"ul",23)(1,"li",25)(2,"label",33),v(3,"i",66),c(4),m(5,"translate"),l(6,"span",41),c(7),m(8,"translate"),r()(),l(9,"div",35)(10,"input",36),E("change",function(){B(e);let t=p(4);return w(t.toggleMatterBridge(t.configBlocks()[t.selectedBlock()],!t.matterEnabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),v(11,"label",37),r()(),u(12,Aa,16,14),r()}if(n&2){let e,i=p(4);o(4),y(" ",g(5,6,"matter_bridge.config.use")," "),o(3),k(g(8,8,"common.labels.beta")),o(3),x("id","toggleMatterBridgeInput_"+i.selectedBlock())("checked",i.matterEnabledBlocks()[i.selectedBlock()]),o(),x("for","toggleMatterBridgeInput_"+i.selectedBlock()),o(),_(i.matterEnabledBlocks()[i.selectedBlock()]&&((e=i.configBlocks()[i.selectedBlock()]._bridge)!=null&&e.matter)&&((e=i.configBlocks()[i.selectedBlock()]._bridge)!=null&&e.username)?12:-1)}}function Fa(n,s){if(n&1){let e=V();l(0,"ul",23)(1,"li",25)(2,"span",8),v(3,"i",51),c(4),m(5,"translate"),r(),l(6,"div",52),v(7,"input",53)(8,"label",54),r()(),u(9,Ea,9,3,"li",55),u(10,Ia,11,12),l(11,"li",24)(12,"label",33),c(13),m(14,"translate"),r(),l(15,"div",28)(16,"input",56),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.port=t),w(t)}),r()()()(),u(17,La,13,10,"ul",23)}if(n&2){let e,i,t=p(3);o(4),y(" ",g(5,12,"child_bridge.config.enable_hap")," "),o(3),x("id","toggleHapInput_"+t.selectedBlock())("checked",!0)("disabled",!0),o(),x("for","toggleHapInput_"+t.selectedBlock()),o(),_((e=t.configBlocks()[t.selectedBlock()]._bridge)!=null&&e.username&&t.deviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username)===!1?9:-1),o(),_(t.deviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username)?10:-1),o(3),k(g(14,14,"child_bridge.config.port")),o(3),Se("is-invalid",t.getHapPortValidationError(t.selectedBlock())),Q("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.port),o(),_(t.isMatterSupported&&!t.configBlocks()[t.selectedBlock()].accessory?17:-1)}}function Ua(n,s){if(n&1&&(u(0,_a,12,7,"ul",22),l(1,"ul",23),u(2,Ca,12,6,"li",24),u(3,va,6,3,"li",24),u(4,xa,7,6,"li",25),u(5,ya,6,4,"li",24),u(6,Ba,6,4,"li",24),u(7,wa,6,4,"li",24),u(8,Ma,28,30),r(),u(9,Fa,18,16)),n&2){let e,i,t,a,d=p(2);_(d.configBlocks().length>1?0:-1),o(2),_(!((e=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&e.username)&&d.bridgesAvailableForLink().length&&!d.currentBridgeHasLinks()?2:-1),o(),_(d.currentBridgeHasLinks()?3:-1),o(),_(d.currentBridgeHasLinks()?-1:4),o(),_(d.currentlySelectedLink()?5:-1),o(),_((d.currentlySelectedLink()||(i=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&i.username)&&(d.currentlySelectedLink()||!d.currentBridgeHasLinks())?6:-1),o(),_(d.currentlySelectedLink()?7:-1),o(),_(!d.currentlySelectedLink()&&((t=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&t.username)?8:-1),o(),_(!d.currentlySelectedLink()&&((a=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&a.username)?9:-1)}}function ja(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"child_bridge.confirm_delete_2")," ")}function Ha(n,s){if(n&1&&(l(0,"li"),v(1,"i",72),c(2),l(3,"span",48),c(4," \xB7 "),r(),l(5,"span",73),c(6),r()()),n&2){let e,i=s.$implicit,t=p(3);o(2),y(" ",i.bridgeName||((e=t.deviceInfo().get(i.id))==null?null:e.displayName)," "),o(4),k(i.id)}}function Oa(n,s){if(n&1&&(l(0,"li"),v(1,"i",74),c(2),l(3,"span",48),c(4," \xB7 "),r(),l(5,"span",73),c(6),r()()),n&2){let e=s.$implicit;o(2),y(" ",e.name," "),o(4),k(e.username)}}function Ra(n,s){if(n&1&&(l(0,"ngb-alert",19)(1,"p"),c(2),m(3,"translate"),u(4,ja,2,3),r(),l(5,"div",10)(6,"ul",71),ee(7,Ha,7,2,"li",null,Z),ee(9,Oa,7,2,"li",null,Z),r()()()),n&2){let e=p(2);x("dismissible",!1),o(2),y(" ",g(3,3,"child_bridge.confirm_delete_1")," "),o(2),_(e.deletingPairedBridge()?4:-1),o(3),te(e.deleteBridges()),o(2),te(e.deleteMatterBridges())}}function za(n,s){n&1&&(l(0,"ngb-alert",20),c(1),m(2,"translate"),r()),n&2&&(x("dismissible",!1),o(),k(g(2,2,"child_bridge.must_configure_plugin")))}function Wa(n,s){if(n&1){let e=V();l(0,"ngb-alert",21)(1,"div",17),c(2),m(3,"translate"),m(4,"translate"),r(),l(5,"button",75),E("click",function(){B(e);let t=p(2);return w(t.openFullConfigEditor())}),c(6),m(7,"translate"),r()()}n&2&&(x("dismissible",!1),o(2),_e(" ",g(3,4,"plugins.settings.message_manual_config_required")," ",g(4,6,"plugins.settings.message_consult_documentation")," "),o(4),y(" ",g(7,8,"plugins.settings.label_open_config_editor")," "))}function qa(n,s){if(n&1){let e=V();l(0,"div",10)(1,"img",16),E("error",function(){B(e);let t=p();return w(t.handleIconError())}),r()(),l(2,"ul",17),v(3,"li",18),m(4,"translate"),u(5,ga,4,4),r(),u(6,Ua,10,9),u(7,Ra,11,5,"ngb-alert",19),u(8,za,3,4,"ngb-alert",20),u(9,Wa,8,10,"ngb-alert",21)}if(n&2){let e=p();o(),x("src",e.plugin.icon,jt),o(2),x("innerHTML",z(4,7,"child_bridge.about",le(10,Dt,e.linkChildBridges)),se),o(2),_(e.configBlocks().length?5:-1),o(),_(e.canConfigure()&&e.configBlocks().length?6:-1),o(),_(e.deleteBridges().length||e.deleteMatterBridges().length?7:-1),o(),_(!e.configBlocks().length&&e.canConfigure?8:-1),o(),_(e.canConfigure()?-1:9)}}function Ga(n,s){if(n&1){let e=V();l(0,"button",76),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()),o(),y(" ",g(2,2,"form.button_close")," ")}}function Ja(n,s){n&1&&v(0,"i",78)}function Ka(n,s){if(n&1){let e=V();l(0,"button",77),E("click",function(){B(e);let t=p();return w(t.save())}),c(1),m(2,"translate"),u(3,Ja,1,0,"i",78),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()||e.hasValidationErrors),o(),y(" ",g(2,3,"form.button_save")," "),o(2),_(e.saveInProgress()?3:-1)}}function Qa(n,s){if(n&1){let e=V();l(0,"button",79),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function Ya(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"form.button_save")," ")}function Xa(n,s){n&1&&v(0,"i",78)}function Za(n,s){if(n&1){let e=V();l(0,"button",77),E("click",function(){B(e);let t=p(2);return w(t.save())}),u(1,Ya,2,3),u(2,Xa,1,0,"i",78),r()}if(n&2){let e=p(2);x("disabled",e.saveInProgress()||e.loading()||e.hasValidationErrors),o(),_(e.saveInProgress()?-1:1),o(),_(e.saveInProgress()?2:-1)}}function er(n,s){if(n&1){let e=V();l(0,"button",81),E("click",function(){B(e);let t=p(2);return w(t.openPluginConfig())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"plugins.button_settings")," "))}function tr(n,s){if(n&1&&(u(0,Za,3,3,"button",11),u(1,er,3,3,"button",80)),n&2){let e=p();_(e.configBlocks().length?0:-1),o(),_(e.configBlocks().length?-1:1)}}var Di=(()=>{class n{$activeModal=b(q);$api=b(N);$modal=b(ae);$plugin=b(we);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(F);modalData=b(at);plugin=this.modalData.plugin;schema=this.modalData.schema;justInstalled=this.modalData.justInstalled??!1;loading=C(!0);canConfigure=C(!0);saveInProgress=C(!1);configBlocks=C([]);selectedBlock=C("0");isPlatform=C(!1);enabledBlocks=C({});matterEnabledBlocks=C({});matterExplicitlyDisabledBeforeChildBridge=new Set;bridgeConfigs=new Map;originalScheduledRestartCrons=new Map;originalHideAlerts=new Map;bridgeCache=C(new Map);originalBridges=C([]);deviceInfo=C(new Map);matterBridgeCache=C(new Map);originalMatterBridges=C([]);matterDeviceInfo=C(new Map);deleteMatterBridges=C([]);canShowBridgeDebug=C(!1);deleteBridges=C([]);deletingPairedBridge=C(!1);accessoryBridgeLinks=C([]);bridgesAvailableForLink=C([]);currentlySelectedLink=C(null);currentBridgeHasLinks=C(!1);isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");defaultIcon="assets/hb-icon.png";linkChildBridges='<a href="https://github.com/homebridge/homebridge/wiki/Child-Bridges" target="_blank"><i class="fas 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-external-link-alt primary-text"></i></a>';linkCron='<a href="https://crontab.guru/" target="_blank" rel="noopener noreferrer"><i class="fa fa-external-link-alt primary-text"></i></a>';ngOnInit(){this.initialize()}handleIconError(){this.plugin&&(this.plugin.icon=this.defaultIcon)}onBlockChange(e){this.selectedBlock.set(e);let i=this.configBlocks(),t=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(d=>d.index===e)||null),this.currentBridgeHasLinks.set(this.accessoryBridgeLinks().some(d=>d.usesIndex===e));let a=[];if(i[Number(e)].accessory)for(let[d,h]of Array.from(this.bridgeCache().entries()))t[d]&&!this.deleteBridges().some(f=>f.id===h.username)&&d<Number(e)&&a.push({index:d.toString(),usesIndex:e,name:h.name,port:h.port,username:h.username});this.bridgesAvailableForLink.set(a)}onLinkBridgeChange(e){if(e){let i=this.configBlocks(),t=this.selectedBlock(),a=i.findIndex(h=>h._bridge?.username===e);this.accessoryBridgeLinks.update(h=>[...h,{index:t,usesIndex:a.toString(),name:this.bridgeCache().get(a)?.name,port:this.bridgeCache().get(a)?.port,username:e}]),this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(h=>h.index===t)||null),this.enabledBlocks.update(h=>A(D({},h),{[Number(t)]:!0}));let d=i[Number(t)];d._bridge={username:e}}}initialize(){return S(this,null,function*(){try{yield Promise.all([this.getPluginType(),this.loadPluginConfig(),this.loadBridgeConfigs()]),this.canShowBridgeDebug.set(this.$settings.isFeatureEnabled("childBridgeDebugMode"))}catch(e){console.error("Failed to initialize:",e);let i=e instanceof Error?e.message:"Failed to initialize component";this.$toastr.error(i,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getPluginType(){return S(this,null,function*(){let e=this.plugin;if(e)try{let i=yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);this.isPlatform.set(i.pluginType==="platform")}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to load plugin type";this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}loadPluginConfig(){return S(this,null,function*(){let e=this.plugin;if(e)try{let i=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`);this.configBlocks.set(i);for(let[f,M]of i.entries()){if(M._bridge&&this.enabledBlocks.update($=>A(D({},$),{[f]:!0})),M._bridge&&M._bridge.username){let $=Array.from(this.bridgeCache().entries()).find(([,H])=>H.username===M._bridge.username),ge=$?$[0]:-1,O=$?$[1]:void 0;if(O)M._bridge.env={},this.accessoryBridgeLinks.update(H=>[...H,{index:f.toString(),usesIndex:ge.toString(),name:O.name,port:O.port,username:M._bridge.username}]);else{if(M._bridge.env=M._bridge.env||{},this.bridgeCache.update(H=>new Map(H).set(f,M._bridge)),yield this.getDeviceInfo(M._bridge.username),!M._bridge.name){let H=this.deviceInfo().get(M._bridge.username);H&&(M._bridge.name=H.displayName)}this.originalBridges.update(H=>[...H,JSON.parse(JSON.stringify(M._bridge))])}}M._bridge&&M._bridge.matter&&(M.accessory?delete M._bridge.matter:(this.matterEnabledBlocks.update($=>A(D({},$),{[f]:!0})),this.matterBridgeCache.update($=>new Map($).set(f,{port:M._bridge.matter.port})),this.originalMatterBridges.update($=>[...$,{port:M._bridge.matter.port}]),M._bridge.username&&(yield this.getMatterCommissioningInfo(M._bridge.username))))}this.justInstalled&&this.bridgeCache().size===0&&i.forEach((f,M)=>{this.enabledBlocks.update($=>A(D({},$),{[M]:!0})),this.toggleExternalBridge(f,!0,M.toString())}),this.accessoryBridgeLinks().find(f=>f.username===this.bridgeCache().get(Number(this.selectedBlock()))?.username)&&this.currentBridgeHasLinks.set(!0);let a=this.selectedBlock(),d=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(f=>f.index===a)||null);let h=[];if(i[Number(a)]?.accessory)for(let[f,M]of Array.from(this.bridgeCache().entries()))d[f]&&!this.deleteBridges().some($=>$.id===M.username)&&f<Number(a)&&h.push({index:f.toString(),usesIndex:a,name:M.name,port:M.port,username:M.username});this.bridgesAvailableForLink.set(h)}catch(i){this.canConfigure.set(!1),console.error(i)}})}toggleExternalBridge(e,i,t){return S(this,null,function*(){let a=this.plugin;if(a){if(i){let d=this.bridgeCache().get(Number(t)),h=this.matterBridgeCache().get(Number(t));if(e._bridge={username:d?d.username:this.generateUsername(),port:yield this.getUnusedPort(),name:d?.name||this.sanitizeBridgeName(a.displayName||a.name),model:d?.model,manufacturer:d?.manufacturer,firmwareRevision:d?.firmwareRevision,debugModeEnabled:d?.debugModeEnabled,env:d?.env||{}},h&&!this.matterExplicitlyDisabledBeforeChildBridge.has(Number(t))&&(e._bridge.matter={port:h.port??(yield this.getUnusedMatterPort())},this.matterEnabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0})),e._bridge.username&&(this.originalMatterBridges().some(M=>M.port===h.port)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(M=>new Map(M).set(e._bridge.username,{port:h.port}))),e._bridge.username)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update(M=>M.filter($=>$.identifier!==f))}this.deleteBridges().some(f=>f.id===e._bridge.username)&&this.deleteBridges.update(f=>f.filter(M=>M.id!==e._bridge.username)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.bridgeCache.update(f=>new Map(f).set(Number(t),e._bridge)),yield this.getDeviceInfo(e._bridge.username),this.enabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0}))}else{if(this.enabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1})),e._bridge?.matter&&this.matterEnabledBlocks()[Number(t)]&&this.matterBridgeCache.update(d=>new Map(d).set(Number(t),{port:e._bridge.matter.port})),this.accessoryBridgeLinks().some(d=>d.index===t))this.accessoryBridgeLinks.update(d=>d.filter(h=>h.index!==t)),this.currentlySelectedLink.set(null);else{let d=this.originalBridges().find(h=>h.username===e._bridge.username);if(d&&!this.deleteBridges().some(h=>h.id===e._bridge.username)){let h=this.deviceInfo().get(e._bridge.username);this.deleteBridges.update(f=>[...f,{id:e._bridge.username,bridgeName:e._bridge.name||d.displayName,paired:h?h._isPaired:!1}])}if(e._bridge?.username){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges().some(M=>M.identifier===h)&&this.matterExplicitlyDisabledBeforeChildBridge.add(Number(t))}if(e._bridge?.matter&&e._bridge.username&&this.originalMatterBridges().some(f=>f.port===e._bridge.matter.port)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if(!this.deleteMatterBridges().some(M=>M.identifier===f)){let M=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update($=>[...$,{username:e._bridge.username,identifier:f,name:M}])}}}this.matterEnabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1})),delete e._bridge}this.deletingPairedBridge.set(this.deleteBridges().some(d=>d.paired))}})}get hasValidationErrors(){let e=this.configBlocks(),i=this.enabledBlocks();for(let[t,a]of e.entries())if(i[t]&&a._bridge?.username&&(this.getHapNameValidationError(t.toString())||this.getHapPortValidationError(t.toString())))return!0;return!1}getUnusedPort(){return S(this,null,function*(){try{return(yield this.$api.get("/server/port/new")).port}catch{return Math.floor(Math.random()*30001+3e4)}})}getUnusedMatterPort(){return S(this,null,function*(){try{return(yield this.$api.get("/server/port/new/matter")).port}catch{return Math.floor(Math.random()*12+5530)}})}getDeviceInfo(e){return S(this,null,function*(){try{let i=yield this.$api.get(`/server/pairings/${e.replace(/:/g,"")}`);this.deviceInfo.update(t=>new Map(t).set(e,i))}catch(i){console.error(i),this.deviceInfo.update(t=>new Map(t).set(e,!1))}})}sanitizeBridgeName(e){if(!e)return e;let i=e.replace(/[^\p{L}\p{N} ']/gu,"");return i=i.replace(/^[ ']+|[ ']+$/g,""),i=i.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu,""),i}getMatterCommissioningInfo(e){return S(this,null,function*(){try{let t=(yield this.$api.get("/status/homebridge/child-bridges")).find(a=>a.username===e);t&&t.matterSetupUri?this.matterDeviceInfo.update(a=>new Map(a).set(e,{setupUri:t.matterSetupUri,pin:t.matterPin,serialNumber:t.matterSerialNumber,commissioned:t.matterCommissioned,deviceCount:t.matterDeviceCount,port:t.matterConfig?.port})):this.matterDeviceInfo.update(a=>new Map(a).set(e,{port:t?.matterConfig?.port}))}catch(i){console.error(i),this.matterDeviceInfo.update(t=>new Map(t).set(e,{}))}})}toggleMatterBridge(e,i,t){return S(this,null,function*(){let a=this.plugin;if(a){if(e.accessory){this.matterEnabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1}));return}if(i){this.matterEnabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0}));let d=this.matterBridgeCache().get(Number(t));e._bridge||(e._bridge={env:{}});let h;if(d?.port?h=d.port:h=yield this.getUnusedMatterPort(),e._bridge.matter={port:h},this.matterBridgeCache.update(f=>new Map(f).set(Number(t),{port:h})),e._bridge.username){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update($=>$.filter(ge=>ge.identifier!==f)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.originalMatterBridges().some($=>$.port===h)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update($=>new Map($).set(e._bridge.username,{port:h}))}}else{this.matterEnabledBlocks.update(h=>A(D({},h),{[Number(t)]:!1}));let d=this.originalMatterBridges().some(h=>e._bridge?.matter&&h.port===e._bridge.matter.port);if(e._bridge&&e._bridge.matter&&(this.matterBridgeCache.update(h=>new Map(h).set(Number(t),{port:e._bridge.matter.port})),delete e._bridge.matter),e._bridge?.username&&(this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,null)),d)){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),f=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(M=>[...M,{username:e._bridge.username,identifier:h,name:f}])}e._bridge&&Object.keys(e._bridge).length===0&&delete e._bridge}}})}getMatterPortValidationError(e){let i=this.configBlocks()[Number(e)],t=i._bridge?.matter?.port;if(!t&&t!==0)return!1;if(typeof t!="number"||!Number.isInteger(t)||t<1024||t>65535||[5353,8080,8443].includes(t))return!0;let a=i._bridge?.port;return a&&t===a}getHapNameValidationError(e){let i=this.configBlocks()[Number(e)];if(!i._bridge?.name)return!1;let t=i._bridge.name;return!/^[\p{L}\p{N}][\p{L}\p{N} ']*[\p{L}\p{N}]$/u.test(t)}getHapPortValidationError(e){let i=this.configBlocks(),t=this.enabledBlocks(),a=i[Number(e)],d=a._bridge?.port;if(!d&&d!==0)return!1;if(typeof d!="number"||!Number.isInteger(d)||d<1025||d>65533)return!0;for(let[f,M]of i.entries())if(f.toString()!==e&&t[f]&&M._bridge?.port===d)return!0;let h=a._bridge?.matter?.port;return h&&d===h}normalizeMatterConfig(e){e._bridge?.matter&&(!e._bridge.matter.port&&e._bridge.matter.port!==0&&(e._bridge.matter.port=void 0),e._bridge.matter.port===void 0&&delete e._bridge.matter)}save(){return S(this,null,function*(){let e=this.plugin;if(e){this.saveInProgress.set(!0);try{let i=this.configBlocks(),t=this.matterEnabledBlocks();for(let[O,H]of i.entries()){if(H._bridge?.username){if(this.getHapNameValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.name_error"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}if(this.getHapPortValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.port_error",{type:"HAP"}),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}}if(t[O]&&this.getMatterPortValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.port_error",{type:"Matter"}),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}this.normalizeMatterConfig(H)}yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,i);for(let O of this.deleteBridges())try{yield this.$api.delete(`/server/pairings/${O.id.replace(/:/g,"")}`)}catch(H){console.error(H),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let a=this.deleteMatterBridges().filter(O=>!this.deleteBridges().some(H=>H.id===O.username));for(let O of a)try{let H=O.username.replace(/:/g,"");yield this.$api.delete(`/server/pairings/${H}/matter`)}catch(H){console.error(H),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let d=this.hasScheduledRestartCronChanged(),h=this.hasHideAlertsChanged(),f=this.hasBridgeConfigChanged(),M=this.deleteBridges().length>0||this.deleteMatterBridges().length>0,$=!d&&!h&&!f&&!M,ge=h&&!d&&!f&&!M;for(let[O,H]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(St=>St.id===O))continue;let ke=this.originalHideAlerts.get(O),Fe=!!H.hideHapAlert,Ue=!!H.hideMatterAlert,At=ke?!!ke.hideHapAlert:!1,je=ke?!!ke.hideMatterAlert:!1;try{Fe!==At&&(yield this.saveHideAlert(O,"hap",Fe)),Ue!==je&&(yield this.saveHideAlert(O,"matter",Ue))}catch(St){console.error(St)}}for(let[O,H]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(je=>je.id===O))continue;let ke=H.scheduledRestartCron||null,Fe=this.originalScheduledRestartCrons.get(O)||null,Ue=ke===""?null:ke;if(Ue!==(Fe===""?null:Fe))try{yield this.saveScheduledRestartCron(O,Ue)}catch(je){console.error(je)}}if(d)try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{})}catch(O){console.error(O)}$?this.$activeModal.close():ge?this.$activeModal.close("refresh"):(this.$activeModal.close(),this.$modal.open(ue,{size:"lg",backdrop:"static"}))}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to save configuration";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}finally{this.saveInProgress.set(!1)}}})}openPluginConfig(){let e=this.plugin;e&&(this.$activeModal.close(),this.$plugin.settings({name:e.name,settingsSchema:!0,links:{}}))}generateUsername(){let e="0123456789ABCDEF",i="0E:";for(let t=0;t<5;t+=1)i+=e.charAt(Math.round(Math.random()*15)),i+=e.charAt(Math.round(Math.random()*15)),t!==4&&(i+=":");return i}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close("Dismiss")}getMatterBridgeName(e){let i=this.configBlocks().find(t=>t._bridge?.username===e);return i?._bridge?.name?i._bridge.name:i.name||i.platform||i.accessory}loadBridgeConfigs(){return S(this,null,function*(){let e=this.$settings.env.bridges||[];this.bridgeConfigs.clear(),this.originalScheduledRestartCrons.clear(),this.originalHideAlerts.clear();for(let i of e){let t=i.username.toUpperCase();this.bridgeConfigs.set(t,i),this.originalScheduledRestartCrons.set(t,i.scheduledRestartCron||null),this.originalHideAlerts.set(t,{hideHapAlert:i.hideHapAlert,hideMatterAlert:i.hideMatterAlert})}})}isUnpairingHidden(e,i){let t=this.bridgeConfigs.get(e.toUpperCase());return t?i==="hap"?!!t.hideHapAlert:!!t.hideMatterAlert:!1}toggleHideUnpairing(e,i){let t=e.toUpperCase(),d=!this.isUnpairingHidden(e,i),h=this.bridgeConfigs.get(t);h||(h={username:t},this.bridgeConfigs.set(t,h)),i==="hap"?d?h.hideHapAlert=!0:delete h.hideHapAlert:d?h.hideMatterAlert=!0:delete h.hideMatterAlert}getScheduledRestartCron(e){return e&&this.bridgeConfigs.get(e.toUpperCase())?.scheduledRestartCron||""}onScheduledRestartCronChange(e,i){if(!i)return;let t=i.toUpperCase(),a=this.bridgeConfigs.get(t);a||(a={username:t},this.bridgeConfigs.set(t,a));let d=e?.trim();d?a.scheduledRestartCron=d:delete a.scheduledRestartCron}hasScheduledRestartCronChanged(){for(let[e,i]of this.bridgeConfigs.entries()){let t=i.scheduledRestartCron||null,a=this.originalScheduledRestartCrons.get(e)||null;if((t===""?null:t)!==(a===""?null:a))return!0}return!1}hasBridgeConfigChanged(){let e=this.configBlocks();if(e.length!==this.originalBridges().length)return!0;for(let[,i]of e.entries()){if(!i._bridge)continue;let t=this.originalBridges().find(M=>M.username===i._bridge.username);if(!t||i._bridge.name!==t.name||i._bridge.port!==t.port||i._bridge.model!==t.model||i._bridge.manufacturer!==t.manufacturer||i._bridge.firmwareRevision!==t.firmwareRevision||i._bridge.debugModeEnabled!==t.debugModeEnabled)return!0;let a=i._bridge.env||{},d=t.env||{};if(a.DEBUG!==d.DEBUG||a.NODE_OPTIONS!==d.NODE_OPTIONS)return!0;let h=!!i._bridge.matter,f=!!t.matter;if(h!==f||h&&f&&i._bridge.matter.port!==t.matter.port)return!0}return!1}hasHideAlertsChanged(){for(let[e,i]of this.bridgeConfigs.entries()){let t=this.originalHideAlerts.get(e),a=!!i.hideHapAlert,d=!!i.hideMatterAlert,h=t?!!t.hideHapAlert:!1,f=t?!!t.hideMatterAlert:!1;if(a!==h||d!==f)return!0}return!1}updateLocalBridgeConfig(e,i){let t=e.toUpperCase(),a=this.$settings.env.bridges||[],d=a.findIndex(h=>h.username.toUpperCase()===t);d!==-1?Object.assign(a[d],i):a.push(D({username:t},i)),this.$settings.env.bridges=a}saveHideAlert(e,i,t){return S(this,null,function*(){let a=e.toUpperCase(),d=i==="hap"?`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-hap-alert`:`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-matter-alert`;try{yield this.$api.put(d,{value:t}),this.updateLocalBridgeConfig(a,{hideHapAlert:t})}catch(h){throw console.error(`Failed to update hide ${i} alert:`,h),h}})}saveScheduledRestartCron(e,i){return S(this,null,function*(){let t=e.toUpperCase();try{if(yield this.$api.put(`/config-editor/ui/bridges/${encodeURIComponent(t)}/scheduled-restart-cron`,{value:i||null}),i)this.updateLocalBridgeConfig(t,{scheduledRestartCron:i});else{let a=this.$settings.env.bridges||[],d=a.findIndex(h=>h.username.toUpperCase()===t);d!==-1&&(delete a[d].scheduledRestartCron,this.$settings.env.bridges=a)}}catch(a){throw console.error("Failed to update scheduled restart cron:",a),a}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],decls:16,vars:8,consts:[["bridgeLinkSelect",""],[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","my-5","w-100"],[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-circle-notch","fa-spin",2,"font-size","75px"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[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","list-group-box","mt-3","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[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","ngModel"],[3,"value"],["for","bridgeLink",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridgeLink",1,"custom-select",3,"change"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox",1,"rendux-input",3,"change","id","checked"],[1,"rendux-label",3,"for"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text","font-monospace"],["type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],[1,"badge","badge-primary","ms-1"],[1,"grey-text",3,"innerHtml"],[1,"text-start","text-md-end","w-100","w-md-50","d-flex","flex-column","align-items-end"],["type","text","placeholder","mm hh dd MM ww","maxlength","30",1,"form-control","custom-input","font-monospace",3,"input","value"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],["type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"grey-text"],["type","text","placeholder","--max-old-space-size=512 --max-http-header-size=8192",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],["type","checkbox",1,"rendux-input",3,"ngModelChange","id","ngModel"],[1,"fas","fa-xl","fa-hap","me-2","my-2"],[1,"text-end","grey-text","d-flex","align-items-center",2,"opacity","0.5","cursor","not-allowed"],["type","checkbox",1,"rendux-input",2,"pointer-events","none",3,"id","checked","disabled"],[1,"rendux-label",2,"cursor","not-allowed",3,"for"],[1,"list-group-item","text-center"],["type","number","min","1025","max","65533",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"w-100","d-flex","flex-column","text-center"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text","p-3"],[1,"text-center","grey-text"],[1,"fas","fa-qrcode","fa-2x","mb-2","primary-text"],[1,"text-center","small","grey-text"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"mx-auto","mt-3","mb-1","font-monospace"],[1,"grey-text","mx-auto","small","mb-1",2,"max-width","400px"],[1,"fas","fa-link"],[1,"fas","fa-xl","fa-matter","me-2","my-2"],[1,"list-group-item"],[1,"grey-text","small"],["type","number","min","1024","max","65535","placeholder","e.g. 5540",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text"],[1,"d-inline-block","text-start","mb-0"],[1,"fas","fa-lg","fa-hap","me-1"],[1,"grey-text","font-monospace"],[1,"fas","fa-lg","fa-matter","me-1"],[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-circle-notch","fa-spin"],["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,t){i&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),u(4,ca,2,4,"button",4),r(),l(5,"div",5),u(6,ma,2,0,"div",6),u(7,qa,10,12),r(),l(8,"div",7)(9,"div",8),u(10,Ga,3,4,"button",9),r(),l(11,"div",10),u(12,Ka,4,5,"button",11),u(13,Qa,3,3,"button",12),r(),l(14,"div",13),u(15,tr,2,2),r()()()),i&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),_(t.justInstalled?-1:4),o(2),_(t.loading()?6:-1),o(),_(t.loading()?-1:7),o(3),_(t.canConfigure()&&!t.justInstalled?10:-1),o(2),_(t.justInstalled?12:-1),o(),_(t.canConfigure()?-1:13),o(2),_(t.canConfigure()&&!t.justInstalled?15:-1))},dependencies:[ve,it,nt,Kt,Yt,Te,tt,be,ei,Zt,Ce,De,si,j],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}.qr-code-placeholder[_ngcontent-%COMP%]{width:175px;height:175px;border:2px solid currentColor;border-radius:8px;background-color:#f8f9fa;padding:20px} body.dark-mode .qr-code-placeholder, [class*=config-ui-x-dark-mode] .qr-code-placeholder{background-color:#1a1a1a}"]})}return n})();var Nt=ce(ot(),1);var kt=()=>["homebridge","homebridge-config-ui-x"],Ni=(n,s,e)=>({pluginName:n,minVersion:s,installedVersion:e}),ir=(n,s,e)=>({minVersion:n,installedVersion:s,latestVersion:e,packageName:"Homebridge"}),nr=()=>({packageName:"Homebridge"}),or=(n,s,e)=>({minVersion:n,installedVersion:s,latestVersion:e,packageName:"Homebridge UI"}),ar=()=>({packageName:"Homebridge UI"});function rr(n,s){if(n&1&&(l(0,"li",14)(1,"div",17),v(2,"i",18),r(),l(3,"div",19),c(4),m(5,"translate"),r()()),n&2){let e=p(2);o(4),y(" ",z(5,1,"plugins.compat.node_too_low",de(4,Ni,e.plugin.displayName,e.nodeMinVersion,e.nodeInstalledVersion))," ")}}function lr(n,s){if(n&1&&(l(0,"li",14)(1,"div",17),v(2,"i",18),r(),l(3,"div",19),c(4),m(5,"translate"),r()()),n&2){let e=p(2);o(4),y(" ",z(5,1,"plugins.compat.hb_too_low",de(4,Ni,e.plugin.displayName,e.hbMinVersion,e.hbInstalledVersion))," ")}}function sr(n,s){if(n&1&&(l(0,"div",11),v(1,"i",12),r(),l(2,"ul",13),u(3,rr,6,8,"li",14),u(4,lr,6,8,"li",14),r(),l(5,"ngb-alert",15)(6,"p",16),c(7),m(8,"translate"),r()()),n&2){let e=p();o(),J(qt("",e.action==="install"?"far fa-arrow-alt-circle-down":e.action==="update"?"far fa-arrow-alt-circle-up":"fas fa-code-compare"," primary-text")),o(2),_(e.isValidNode?-1:3),o(),_(e.isValidHb?-1:4),o(),x("dismissible",!1),o(2),k(g(8,7,"common.phrases.are_you_sure"))}}function dr(n,s){if(n&1&&(l(0,"div",11),v(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),v(5,"i",18),r(),l(6,"div",19),c(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),c(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),c(15),m(16,"translate"),v(17,"i",23),r()()()),n&2){let e=p();o(7),y(" ",z(8,4,"plugins.compat.hb_node_too_low",de(12,ir,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),x("dismissible",!1),o(2),k(z(12,7,"plugins.compat.node_first",ne(16,nr))),o(4),y(" ",g(16,10,"plugins.compat.node_link")," ")}}function cr(n,s){if(n&1&&(l(0,"div",11),v(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),v(5,"i",18),r(),l(6,"div",19),c(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),c(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),c(15),m(16,"translate"),v(17,"i",23),r()()()),n&2){let e=p();o(7),y(" ",z(8,4,"plugins.compat.hb_node_too_low",de(12,or,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),x("dismissible",!1),o(2),k(z(12,7,"plugins.compat.node_first",ne(16,ar))),o(4),y(" ",g(16,10,"plugins.compat.node_link")," ")}}function mr(n,s){if(n&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function pr(n,s){if(n&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function gr(n,s){if(n&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}n&2&&(o(),y(" ",g(2,1,"form.button_continue")," "))}var Ai=(()=>{class n{$activeModal=b(q);$settings=b(W);modalData=b(dt);plugin=this.modalData.plugin;isValidNode=this.modalData.isValidNode??!1;isValidHb=this.modalData.isValidHb??!1;action=this.modalData.action??null;nodeMinVersion;nodeInstalledVersion;hbMinVersion;hbInstalledVersion;ngOnInit(){let e=this.plugin;if(!e){console.error("PluginCompatibilityComponent: plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.nodeMinVersion=(0,Nt.minVersion)(e.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Nt.minVersion)(e.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close(!0)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],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-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-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,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(7,"div",4),u(8,sr,9,9),u(9,dr,18,17),u(10,cr,18,17),r(),l(11,"div",5)(12,"div",6),u(13,mr,3,3,"button",7),r(),l(14,"div",8),u(15,pr,3,3,"button",7),r(),l(16,"div",9),u(17,gr,3,3,"button",10),r()()()),i&2&&(o(3),k(g(4,8,"plugins.compat.title")),o(2),P("aria-label",g(6,10,"form.button_close")),o(3),_(t.plugin&&!ne(12,kt).includes(t.plugin.name)?8:-1),o(),_(t.plugin&&t.plugin.name==="homebridge"?9:-1),o(),_(t.plugin&&t.plugin.name==="homebridge-config-ui-x"?10:-1),o(3),_(t.plugin&&!ne(13,kt).includes(t.plugin.name)?13:-1),o(2),_(t.plugin&&ne(14,kt).includes(t.plugin.name)?15:-1),o(2),_(t.plugin&&!ne(15,kt).includes(t.plugin.name)?17:-1))},dependencies:[De,j],encapsulation:2})}return n})();var Li=ce(Ge(),1);var Fi=(()=>{class n{$api=b(N);$toastr=b(U);$translate=b(F);downloadDumpFile(){return S(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"});(0,Li.saveAs)(e.body,"homebridge-deconz.json.gz")}catch(e){console.error(e),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||n)};static \u0275cmp=L({type:n,selectors:[["app-homebridge-deconz"]],decls:4,vars:3,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(i,t){i&1&&(T(0,"button",0),ie("click",function(){return t.downloadDumpFile()}),G(1,"i",1),c(2),m(3,"translate"),I()),i&2&&(o(2),y(" ",g(3,1,"plugins.settings.custom.download_dump_file "),`
|
|
14
|
+
`))},dependencies:[j],encapsulation:2})}return n})();var Ui=ce(Ge(),1);var ji=(()=>{class n{$api=b(N);$translate=b(F);$toastr=b(U);downloadDumpFile(){return S(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-hue/dump-file",{observe:"response",responseType:"blob"});(0,Ui.saveAs)(e.body,"homebridge-hue.json.gz")}catch(e){console.error(e),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||n)};static \u0275cmp=L({type:n,selectors:[["app-homebridge-hue"]],decls:4,vars:3,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(i,t){i&1&&(T(0,"button",0),ie("click",function(){return t.downloadDumpFile()}),G(1,"i",1),c(2),m(3,"translate"),I()),i&2&&(o(2),y(" ",g(3,1,"plugins.settings.custom.download_dump_file "),`
|
|
15
|
+
`))},dependencies:[j],encapsulation:2})}return n})();var ur=(n,s,e,i,t)=>({"fa-circle-check":n,"green-text":s,"fa-circle-exclamation":e,"red-text":i,"orange-text":t});function _r(n,s){if(n&1&&(v(0,"markdown",5),m(1,"interpolateMd")),n&2){let e=p();x("data",g(1,1,e.schema.headerDisplay))}}function fr(n,s){if(n&1){let e=V();l(0,"button",31),m(1,"translate"),E("click",function(){B(e);let t=p().$implicit,a=p(2);return w(a.removeBlock(t.__uuid__))}),v(2,"i",32),r()}n&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function hr(n,s){if(n&1){let e=V();l(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),c(4),r(),l(5,"div",23),u(6,fr,3,4,"button",24),l(7,"button",25),m(8,"translate"),v(9,"i",26),r(),v(10,"i",27),m(11,"translate"),r()()(),l(12,"div",28)(13,"div",29)(14,"app-schema-form",30),X("dataChange",function(t){let a=B(e).$implicit;return Y(a.config,t)||(a.config=t),w(t)}),E("isValid",function(t){let a=B(e).$index,d=p(2);return w(d.onIsValid(t,a))}),r()()()()}if(n&2){let e=s.$implicit,i=s.$index,t=p(2);x("ngbAccordionItem",e.__uuid__)("collapsed",t.show()!==e.__uuid__)("id",e.__uuid__),o(4),k(e.name),o(2),_(t.plugin.name!=="homebridge-config-ui-x"&&t.show()===e.__uuid__?6:-1),o(),x("ngbTooltip",g(8,21,"form.button_edit"))("openDelay",150),o(3),Se("fa-circle-check",t.formBlocksValid()[i]===!0)("green-text",t.formBlocksValid()[i]===!0)("fa-circle-exclamation",t.formBlocksValid()[i]===!1)("red-text",t.strictValidation()&&t.formBlocksValid()[i]===!1)("orange-text",!t.strictValidation()&&t.formBlocksValid()[i]===!1),x("ngbTooltip",g(11,23,t.formBlocksValid()[i]?"form.label_valid":t.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150),o(4),x("configSchema",t.schema),Q("data",e.config)}}function br(n,s){if(n&1){let e=V();l(0,"div",18),E("show",function(t){B(e);let a=p();return w(a.blockShown(t))})("hide",function(t){B(e);let a=p();return w(a.blockHidden(t))}),ee(1,hr,15,25,"div",19,Z),r()}if(n&2){let e=p();x("closeOthers",!0),o(),te(e.pluginConfig())}}function Cr(n,s){n&1&&v(0,"app-homebridge-deconz")}function vr(n,s){n&1&&v(0,"app-homebridge-hue")}function xr(n,s){if(n&1){let e=V();l(0,"div",7)(1,"app-schema-form",30),X("dataChange",function(t){B(e);let a=p();return Y(a.pluginConfig()[0].config,t)||(a.pluginConfig()[0].config=t),w(t)}),E("isValid",function(t){B(e);let a=p();return w(a.onIsValid(t,0))}),r(),u(2,Cr,1,0,"app-homebridge-deconz"),u(3,vr,1,0,"app-homebridge-hue"),r()}if(n&2){let e=p();o(),x("configSchema",e.schema),Q("data",e.pluginConfig()[0].config),o(),_(e.plugin.name==="homebridge-deconz"?2:-1),o(),_(e.plugin.name==="homebridge-hue"?3:-1)}}function yr(n,s){if(n&1&&(l(0,"div",8),v(1,"markdown",5),m(2,"interpolateMd"),r()),n&2){let e=p();o(),x("data",g(2,1,e.schema.footerDisplay))}}function Br(n,s){if(n&1&&(v(0,"i",33),m(1,"translate")),n&2){let e=p();J(fe(6,ur,e.formIsValid(),e.formIsValid(),!e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function wr(n,s){if(n&1){let e=V();l(0,"button",34),E("click",function(){B(e);let t=p();return w(t.addBlock())}),v(1,"i",35),r()}}function kr(n,s){n&1&&(l(0,"span"),c(1),m(2,"translate"),r()),n&2&&(o(),k(g(2,1,"form.button_save")))}function Sr(n,s){n&1&&v(0,"i",17)}var Hi=(()=>{class n{$activeModal=b(q);$api=b(N);$cb=b(Ne);$plugin=b(we);$settings=b(W);$toastr=b(U);$translate=b(F);modalData=b(Me);plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=C([]);show=C("");saveInProgress=C(!1);formBlocksValid=C({});formIsValid=C(!0);strictValidation=C(!1);pluginAlias=C("");pluginType=C("platform");isFirstSave=C(!1);form={};ngOnInit(){let e=this.schema,i=this.plugin;if(!e||!i){console.error("PluginConfigComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this.loadPluginConfig()}save(){return S(this,null,function*(){this.saveInProgress.set(!0);let e=this.pluginConfig().map(t=>t.config),i=this.plugin;if(!i){this.saveInProgress.set(!1);return}try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(i.name)}`,e);if(this.saveInProgress.set(!1),i.name==="homebridge-config-ui-x")this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(i,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(i.name)}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}blockShown(e){this.show.set(e);let i=this.pluginConfig();for(let t of i)t.name=t.config.name||t.name}blockHidden(e){this.show()===e&&this.show.set("")}addBlock(){let e=Vt(),i=this.schema;this.pluginConfig.update(t=>[...t,{__uuid__:e,name:i.pluginAlias,config:{[this.pluginType()]:i.pluginAlias}}]),this.formBlocksValid.update(t=>A(D({},t),{[this.pluginConfig().length-1]:!1})),this.blockShown(e)}removeBlock(e){let i=this.pluginConfig().findIndex(t=>t.__uuid__===e);this.pluginConfig.update(t=>t.filter(a=>a.__uuid__!==e)),this.formBlocksValid.update(t=>{let a=D({},t);return delete a[i],a}),Object.keys(this.formBlocksValid()).length||this.formIsValid.set(!0)}onIsValid(e,i){this.formBlocksValid.update(t=>A(D({},t),{[i]:e})),this.formIsValid.set(Object.values(this.formBlocksValid()).every(t=>t))}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}loadPluginConfig(){return S(this,null,function*(){let e=this.plugin,i=this.schema;if(!(!e||!i))try{let a=(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`)).map(d=>({__uuid__:Vt(),name:d.name||i.pluginAlias,config:d}));this.pluginConfig.set(a),this.pluginConfig().length?this.show.set(this.pluginConfig()[0].__uuid__):(this.isFirstSave.set(!0),this.addBlock()),e.name==="homebridge-hue"&&this.pluginConfig().length&&this.homebridgeHueFix(this.pluginConfig()[0].config)}catch(t){console.error(t);let a=t?.error?.message||this.$translate.instant("plugins.config.load_error");this.$toastr.error(a,this.$translate.instant("toast.title_error"))}})}homebridgeHueFix(e){let i=this.schema;if(i&&(i.schema.properties.users={type:"object",properties:{}},!(!e.users||typeof e.users!="object")))for(let t of Object.keys(e.users))i.schema.properties.users.properties[t]={type:"string"}}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],decls:23,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","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["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-circle-notch","fa-spin"],["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","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","placement","left","triggers","hover",1,"btn","btn-primary","ms-2","me-2",3,"ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body"],[3,"dataChange","isValid","configSchema","data"],["container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,_r,2,3,"markdown",5),u(8,br,3,1,"div",6),u(9,xr,4,4,"div",7),u(10,yr,3,3,"div",8),r(),l(11,"div",9)(12,"div",10)(13,"button",11),E("click",function(){return t.closeModal()}),c(14),m(15,"translate"),r()(),v(16,"div",12),l(17,"div",13),u(18,Br,2,12,"i",14),u(19,wr,2,0,"button",15),l(20,"button",16),E("click",function(){return t.save()}),u(21,kr,3,3,"span"),u(22,Sr,1,0,"i",17),r()()()()),i&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,14,"form.button_close")),o(3),_(t.schema.headerDisplay?7:-1),o(),_(t.pluginConfig().length&&!t.schema.singular?8:-1),o(),_(t.pluginConfig().length&&t.schema.singular?9:-1),o(),_(t.schema.footerDisplay?10:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(15,16,"form.button_close")," "),o(4),_(t.schema.singular?18:-1),o(),_(t.schema.singular?-1:19),o(),x("disabled",t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),o(),_(t.saveInProgress()?-1:21),o(),_(t.saveInProgress()?22:-1))},dependencies:[Pe,Ie,$e,yt,xt,vt,Be,bt,ht,Bt,Fi,ji,Ct,j,wt],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 n})();var Mr=(n,s)=>({"btn-danger":n,"btn-elegant":s}),Er=(n,s,e)=>({"fa-broom":n,"fa-undo":s,"fa-circle-notch fa-spin":e});function Vr(n,s){n&1&&(T(0,"div",12),G(1,"i",13),I(),T(2,"p",14),c(3),m(4,"translate"),I()),n&2&&(o(3),k(g(4,1,"reset.bridge_accessories.empty")))}function Tr(n,s){if(n&1&&G(0,"i",26)(1,"i",27),n&2){let e=p().$implicit;Re("opacity",e._protocol==="matter"&&e._matterOnly?"0.25":"1"),o(),Re("opacity",e._protocol==="matter"?"1":"0.25")}}function Ir(n,s){n&1&&G(0,"i",20)}function Pr(n,s){if(n&1){let e=V();T(0,"li",18)(1,"span",19),u(2,Tr,2,4)(3,Ir,1,0,"i",20),I(),T(4,"span",21),c(5),G(6,"br"),T(7,"small",22)(8,"span",23),c(9),I()()(),T(10,"button",24),m(11,"translate"),ie("click",function(){let t=B(e).$implicit,a=p(2);return w(a.toggleList(t._id,t._protocol))}),G(12,"i",25),I()()}if(n&2){let e=s.$implicit,i=p(2);o(2),_(i.isMatterSupported?2:3),o(3),y(" ",e.name," "),o(4),k(e._username),o(),J(ze(11,Mr,!i.isInList(e._id,e._protocol),i.isInList(e._id,e._protocol))),oe("disabled",i.clicked()),P("aria-label",g(11,9,"form.button_delete")),o(2),J(de(14,Er,!i.isInList(e._id,e._protocol),i.isInList(e._id,e._protocol)&&!i.clicked(),i.isInList(e._id,e._protocol)&&i.clicked()))}}function $r(n,s){if(n&1&&(T(0,"div",12),G(1,"i",15),I(),T(2,"ul",16)(3,"li"),c(4),m(5,"translate"),I(),T(6,"li"),c(7),m(8,"translate"),I()(),T(9,"ul",17),ee(10,Pr,13,18,"li",18,Z),I()),n&2){let e=p();o(4),k(g(5,2,"reset.bridge_accessories.list_1")),o(3),k(g(8,4,"reset.clear_cache_single.list_3")),o(3),te(e.pairings())}}function Dr(n,s){if(n&1){let e=V();T(0,"button",28),ie("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),I()}if(n&2){let e=p();oe("disabled",e.clicked()),o(),y(" ",g(2,2,"form.button_close")," ")}}function Nr(n,s){if(n&1){let e=V();T(0,"button",29),ie("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),I()}n&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function Ar(n,s){if(n&1&&c(0),n&2){let e=p(3);y(" (",e.toDelete().length,") ")}}function Lr(n,s){if(n&1&&(c(0),m(1,"translate"),u(2,Ar,1,1)),n&2){let e=p(2);y(" ",g(1,2,"form.button_reset")," "),o(2),_(e.toDelete().length>0?2:-1)}}function Fr(n,s){n&1&&G(0,"i",31)}function Ur(n,s){if(n&1){let e=V();T(0,"button",30),ie("click",function(){B(e);let t=p();return w(t.cleanBridges())}),u(1,Lr,3,4),u(2,Fr,1,0,"i",31),I()}if(n&2){let e=p();oe("disabled",!e.toDelete().length||e.clicked()),o(),_(e.clicked()?-1:1),o(),_(e.clicked()?2:-1)}}var Oi=(()=>{class n{$activeModal=b(q);$api=b(N);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(F);modalData=b(st);childBridges=this.modalData.childBridges??[];clicked=C(!1);pairings=C([]);toDelete=C([]);isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");ngOnInit(){this.loadPairings()}toggleList(e,i){let t=this.toDelete();t.some(a=>a.id===e&&a.protocol===i)?this.toDelete.set(t.filter(a=>a.id!==e||a.protocol!==i)):this.toDelete.update(a=>[...a,{id:e,protocol:i}])}isInList(e,i){return this.toDelete().some(t=>t.id===e&&t.protocol===i)}cleanBridges(){return S(this,null,function*(){this.clicked.set(!0);try{yield this.$api.delete("/server/pairings/accessories",{body:this.toDelete()}),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}})}catch(e){this.clicked.set(!1),console.error(e);let i=e instanceof Error?e.message:"Failed to clean bridges";this.$toastr.error(i,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}loadPairings(){return S(this,null,function*(){try{let e=yield this.$api.get("/server/pairings"),i=this.childBridges.length>0?this.childBridges[0].plugin:null,t=e.filter(h=>h._category==="bridge"&&!h._main&&this.childBridges.find(f=>f.username===h._username)).sort((h,f)=>h.name.localeCompare(f.name)),a=e.filter(h=>h._matterOnly&&h._plugin===i).sort((h,f)=>h.name.localeCompare(f.name)),d=[];for(let h of t)d.push(A(D({},h),{_protocol:"hap",_displayName:h.name})),this.isMatterSupported&&h._matter&&d.push(A(D({},h),{_protocol:"matter",_displayName:h.name}));if(this.isMatterSupported)for(let h of a)d.push(A(D({},h),{_protocol:"matter",_displayName:h.name}));this.pairings.set(d)}catch(e){console.error(e);let i=e instanceof Error?e.message:"Failed to load pairings";this.$toastr.error(i,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],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-circle-check","primary-text",2,"font-size","75px"],[1,"mb-0","text-center"],[1,"fas","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,"me-3"],[1,"fas","fa-lg","fa-hap"],[1,"flex-grow-1"],[1,"grey-text"],[1,"font-monospace"],[1,"btn","btn-danger","m-0","ms-3",3,"click","disabled"],[1,"fas"],[1,"fas","fa-lg","fa-hap","me-2"],[1,"fas","fa-lg","fa-matter"],["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-circle-notch","fa-spin"]],template:function(i,t){i&1&&(T(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),I(),T(5,"button",3),m(6,"translate"),ie("click",function(){return t.dismissModal()}),I()(),T(7,"div",4),u(8,Vr,5,3),u(9,$r,12,6),I(),T(10,"div",5)(11,"div",6),u(12,Dr,3,4,"button",7),I(),T(13,"div",8),u(14,Nr,3,3,"button",9),I(),T(15,"div",10),u(16,Ur,3,3,"button",11),I()()()),i&2&&(o(3),k(g(4,8,"child_bridge.reset_accessories")),o(2),oe("disabled",t.clicked()),P("aria-label",g(6,10,"form.button_close")),o(3),_(t.pairings().length===0?8:-1),o(),_(t.pairings().length>0?9:-1),o(3),_(t.pairings().length>0?12:-1),o(2),_(t.pairings().length===0?14:-1),o(2),_(t.pairings().length>0?16:-1))},dependencies:[j],encapsulation:2})}return n})();var zi=ce(Ge(),1);var jr=n=>({prefix:n}),Hr=n=>({link:n}),Ri=(n,s,e,i)=>({"fa-circle-o":n,"fa-circle-notch fa-spin":s,"fa-check-circle green-text":e,"fa-times-circle red-text":i}),Or=(n,s,e)=>({"fa-circle-o":n,"fa-circle-notch fa-spin":s,"fa-times-circle red-text":e});function Rr(n,s){n&1&&(T(0,"li"),c(1),m(2,"translate"),I()),n&2&&(o(),k(g(2,1,"plugins.manage.scoped.process")))}function zr(n,s){n&1&&(G(0,"li",8),m(1,"translate"),T(2,"li"),c(3),m(4,"translate"),I()),n&2&&(oe("innerHTML",g(1,2,"plugins.manage.scoped.windows"),se),o(3),k(g(4,4,"plugins.manage.manual_update_command")))}function Wr(n,s){if(n&1&&(T(0,"pre",9),c(1),I()),n&2){let e=p();o(),Xe(`hb-service stop
|
|
16
|
+
npm install -g `,e.plugin.newHbScope.to,"@",e.plugin.newHbScope.switch,`
|
|
17
|
+
npm uninstall -g `,e.plugin.newHbScope.from,`
|
|
18
|
+
hb-service start`)}}function qr(n,s){if(n&1&&(T(0,"div",10)(1,"ul",18)(2,"li"),G(3,"i",19),c(4),m(5,"translate"),T(6,"span",20),c(7),I()(),T(8,"li"),G(9,"i",19),c(10),m(11,"translate"),T(12,"span",20),c(13),I()(),T(14,"li"),G(15,"i",19),c(16),m(17,"translate"),I()()()),n&2){let e=p();o(3),J(Ve(17,Ri,!e.installing()&&!e.installed()&&!e.failure(),e.installing(),e.installed()&&!e.failure(),!e.installed()&&e.failure())),o(),y(" ",g(5,11,"plugins.manage.install")," "),o(3),k(e.plugin.newHbScope.to),o(2),J(Ve(22,Ri,!e.uninstalling()&&!e.uninstalled()&&!e.failure(),e.uninstalling(),e.uninstalled()&&!e.failure(),!e.uninstalled()&&e.failure())),o(),y(" ",g(11,13,"plugins.manage.uninstall")," "),o(3),k(e.plugin.newHbScope.from),o(2),J(de(27,Or,!e.restarting()&&!e.failure(),e.restarting(),e.failure())),o(),y(" ",g(17,15,"menu.hbrestart.title")," ")}}function Gr(n,s){if(n&1){let e=V();T(0,"div",11)(1,"p"),c(2),m(3,"translate"),I(),T(4,"p",20),c(5),I(),T(6,"button",21),ie("click",function(){B(e);let t=p();return w(t.downloadLogFile())}),c(7),m(8,"translate"),I()()}if(n&2){let e=p();o(2),k(g(3,3,"plugins.manage.scoped.error")),o(3),k(e.failure()),o(2),k(g(8,5,"form.button_download"))}}function Jr(n,s){if(n&1){let e=V();T(0,"button",22),m(1,"translate"),ie("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(2),m(3,"translate"),I()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),P("aria-label",g(1,3,"form.button_close")),o(2),y(" ",g(3,5,"form.button_close")," ")}}function Kr(n,s){if(n&1){let e=V();T(0,"button",22),m(1,"translate"),ie("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(2),m(3,"translate"),I()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),P("aria-label",g(1,3,"form.button_close")),o(2),y(" ",g(3,5,"form.button_close")," ")}}function Qr(n,s){n&1&&(T(0,"span"),c(1),m(2,"translate"),I()),n&2&&(o(),k(g(2,1,"form.button_continue")))}function Yr(n,s){n&1&&G(0,"i",24)}function Xr(n,s){if(n&1){let e=V();T(0,"button",23),ie("click",function(){B(e);let t=p();return w(t.doSwitch())}),u(1,Qr,3,3,"span"),u(2,Yr,1,0,"i",24),I()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()||!e.onlineUpdateOk()||e.failure()),o(),_(!e.installing()&&!e.uninstalling()&&!e.restarting()?1:-1),o(),_((e.installing()||e.uninstalling()||e.restarting())&&!e.failure()?2:-1)}}var Wi=(()=>{class n{$activeModal=b(q);$api=b(N);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(F);$ws=b(xe);modalData=b(mt);plugin=this.modalData.plugin;installing=C(!1);installed=C(!1);uninstalling=C(!1);uninstalled=C(!1);restarting=C(!1);failure=C("");onlineUpdateOk=C(!1);io;term;termTarget;fitAddon=new gt;webLinksAddon=new ut;errorLog="";moreInfo='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa-external-link-alt primary-text"></i></a>';prefix='<span class="font-monospace">@homebridge-plugins/</span>';constructor(){this.term=new _t({theme:{background:"#00000000",foreground:this.$settings.actualLightingMode==="light"?"#333333":"#eeeeee",cursor:"#d2d2d2",selectionBackground:"#d2d2d2"},allowTransparency:!0,allowProposedApi:!0}),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){this.onlineUpdateOk.set(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",e=>{this.term.write(e);let i=e.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();i&&(this.errorLog+=`${i}\r
|
|
19
|
+
`)})}doSwitch(){return S(this,null,function*(){if(this.plugin)try{this.installing.set(!0),yield He(this.io.request("install",{name:this.plugin.newHbScope.to,version:this.plugin.newHbScope.switch,termCols:this.term.cols,termRows:this.term.rows})),this.installing.set(!1),this.installed.set(!0),this.uninstalling.set(!0),yield He(this.io.request("uninstall",{name:this.plugin.newHbScope.from,termCols:this.term.cols,termRows:this.term.rows})),this.uninstalling.set(!1),this.uninstalled.set(!0),this.restarting.set(!0),yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),this.$activeModal.close(),this.$router.navigate(["/restart"])}catch(e){this.installing()&&this.installing.set(!1),this.uninstalling()&&this.uninstalling.set(!1),this.restarting()&&this.restarting.set(!1);let i=e instanceof Error?e.message:"An error occurred";this.failure.set(i),console.error(e),this.$toastr.error(i,this.$translate.instant("toast.title_error"))}})}downloadLogFile(){if(!this.plugin)return;let e=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,zi.saveAs)(e,`${this.plugin.name}-error.log`)}ngOnDestroy(){this.io.end(),this.term.dispose()}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],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-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"],[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-circle-notch","fa-spin"]],template:function(i,t){i&1&&(T(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),I(),T(5,"button",3),m(6,"translate"),ie("click",function(){return t.dismissModal()}),I()(),T(7,"div",4)(8,"div",5),G(9,"i",6),I(),T(10,"ul",7),G(11,"li",8),m(12,"translate"),T(13,"li"),c(14),m(15,"translate"),I(),G(16,"li",8),m(17,"translate"),u(18,Rr,3,3,"li"),u(19,zr,5,6),I(),u(20,Wr,2,3,"pre",9),u(21,qr,18,31,"div",10),u(22,Gr,9,7,"div",11),G(23,"div",12),I(),T(24,"div",13)(25,"div",14),u(26,Jr,4,7,"button",15),I(),T(27,"div",10),u(28,Kr,4,7,"button",15),I(),T(29,"div",16),u(30,Xr,3,3,"button",17),I()()()),i&2&&(o(3),k(g(4,15,"plugins.manage.scoped.switch")),o(2),oe("disabled",t.installing()||t.uninstalling()||t.restarting()),P("aria-label",g(6,17,"form.button_close")),o(6),oe("innerHTML",z(12,19,"plugins.manage.scoped.info_1",le(27,jr,t.prefix)),se),o(3),k(g(15,22,"plugins.manage.scoped_message")),o(2),oe("innerHTML",z(17,24,"plugins.manage.scoped.info_2",le(29,Hr,t.moreInfo)),se),o(2),_(t.onlineUpdateOk()?18:-1),o(),_(t.onlineUpdateOk()?-1:19),o(),_(t.plugin&&!t.onlineUpdateOk()?20:-1),o(),_(t.plugin&&t.onlineUpdateOk()?21:-1),o(),_(t.failure()?22:-1),o(),oe("hidden",!t.onlineUpdateOk()||t.failure()),o(3),_(t.onlineUpdateOk()?26:-1),o(2),_(t.onlineUpdateOk()?-1:28),o(2),_(t.onlineUpdateOk()?30:-1))},dependencies:[j],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}"]})}return n})();var Zr=n=>({pluginName:n}),el=n=>({count:n});function tl(n,s){n&1&&(l(0,"div",5),v(1,"i",13),r())}function il(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"plugins.uninstall_remove_child_bridge")," ")}function nl(n,s){if(n&1&&(c(0),m(1,"translate")),n&2){let e=p(4);y(" ",z(1,1,"plugins.uninstall_remove_child_bridges",le(4,el,e.childBridges.length))," ")}}function ol(n,s){if(n&1){let e=V();l(0,"label",24)(1,"input",25),E("ngModelChange",function(t){B(e);let a=p(3);return w(a.removeChildBridges.set(t))}),r(),u(2,il,2,3),u(3,nl,2,6),v(4,"span",23),r()}if(n&2){let e=p(3);o(),x("ngModel",e.removeChildBridges()),o(),_(e.childBridges.length===1?2:-1),o(),_(e.childBridges.length>1?3:-1)}}function al(n,s){if(n&1){let e=V();l(0,"p",16)(1,"label",21)(2,"input",22),E("ngModelChange",function(t){B(e);let a=p(2);return w(a.removeConfig.set(t))}),r(),c(3),m(4,"translate"),v(5,"span",23),r(),u(6,ol,5,3,"label",24),r()}if(n&2){let e=p(2);o(2),x("ngModel",e.removeConfig()),o(),y(" ",g(4,3,"plugins.uninstall_remove_plugin_config")," "),o(3),_(e.hasChildBridges()?6:-1)}}function rl(n,s){n&1&&(l(0,"ul",17)(1,"li"),c(2),m(3,"translate"),r(),l(4,"li"),c(5),m(6,"translate"),r()()),n&2&&(o(2),k(g(3,2,"plugins.uninstall_warn_1")),o(3),k(g(6,4,"plugins.uninstall_warn_2")))}function ll(n,s){n&1&&(l(0,"ngb-alert",18),c(1),m(2,"translate"),r()),n&2&&(x("dismissible",!1),o(),y(" ",g(2,2,"plugins.uninstall_remove_config_required")," "))}function sl(n,s){if(n&1&&(l(0,"div",14),v(1,"i",15),r(),l(2,"div",9),u(3,al,7,5,"p",16),r(),u(4,rl,7,6,"ul",17),u(5,ll,3,4,"ngb-alert",18),l(6,"ngb-alert",19)(7,"p",20),c(8),m(9,"translate"),r()()),n&2){let e=p();o(3),_(e.isConfigured()?3:-1),o(),_(e.hasChildBridges()&&e.removeChildBridges()?4:-1),o(),_(e.isConfigured()&&(!e.pluginAlias()||!e.pluginType())?5:-1),o(),x("dismissible",!1),o(2),k(z(9,5,"plugins.uninstall_remove_confirmation",le(8,Zr,e.plugin==null?null:e.plugin.displayName)))}}function dl(n,s){n&1&&(c(0),m(1,"translate")),n&2&&y(" ",g(1,1,"plugins.manage.uninstall")," ")}function cl(n,s){n&1&&v(0,"i",12)}var qi=(()=>{class n{$activeModal=b(q);$api=b(N);$modal=b(ae);$toastr=b(U);$translate=b(F);injector=b(re);modalData=b(lt);plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];action=this.modalData.action??"";loading=C(!0);uninstalling=C(!1);removeConfig=C(!0);removeChildBridges=C(!0);hasChildBridges=C(!1);isConfigured=C(!1);pluginType=C(null);pluginAlias=C(null);ngOnInit(){this.initialize()}doUninstall(){return S(this,null,function*(){if(this.uninstalling.set(!0),this.removeConfig()&&this.isConfigured())try{yield this.removePluginConfig()}catch(i){console.error(i);let t=i instanceof Error?i.message:"Unknown error";this.$toastr.error(t,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)}if(this.$activeModal.dismiss(),!this.plugin)return;let e=R([{provide:ye,useValue:{action:"Uninstall",pluginName:this.plugin.name,pluginDisplayName:this.plugin.displayName}}],this.injector);this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:e})})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return S(this,null,function*(){if(this.plugin)try{this.childBridges.length&&this.hasChildBridges.set(!0);let e=yield this.getAlias();this.pluginType.set(e.pluginType),this.pluginAlias.set(e.pluginAlias),(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`)).length&&this.isConfigured.set(!0)}catch(e){console.error("Failed to initialize:",e);let i=e instanceof Error?e.message:"Failed to load plugin information";this.$toastr.error(i,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getAlias(){return S(this,null,function*(){if(!this.plugin)throw new Error("Plugin not set");return this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`)})}removePluginConfig(){return S(this,null,function*(){this.plugin&&(yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,[]),yield 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(e){return S(this,null,function*(){try{yield this.$api.delete(`/server/pairings/${e}`)}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to remove child bridge";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=L({type:n,selectors:[["ng-component"]],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","my-5","w-100"],[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-circle-notch","fa-spin"],[1,"fa","fa-circle-notch","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","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,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,tl,2,0,"div",5),u(8,sl,10,10),r(),l(9,"div",6)(10,"div",7)(11,"button",8),m(12,"translate"),E("click",function(){return t.dismissModal()}),c(13),m(14,"translate"),r()(),v(15,"div",9),l(16,"div",10)(17,"button",11),E("click",function(){return t.doUninstall()}),u(18,dl,2,3),u(19,cl,1,0,"i",12),r()()()()),i&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),x("disabled",t.uninstalling()),P("aria-label",g(5,11,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(t.loading()?-1:8),o(3),x("disabled",t.uninstalling()),P("aria-label",g(12,13,"form.button_close")),o(2),y(" ",g(14,15,"form.button_close")," "),o(4),x("disabled",t.loading()||t.uninstalling()),o(),_(t.uninstalling()?-1:18),o(),_(t.uninstalling()?19:-1))},dependencies:[ve,Te,be,Ce,De,j],encapsulation:2})}return n})();var we=(()=>{class n{$api=b(N);$modal=b(ae);$customPluginsService=b(yi);$settings=b(W);$toastr=b(U);$translate=b(F);injector=b(re);pluginListRefreshSubject=new me;onPluginListRefresh=this.pluginListRefreshSubject.asObservable();installPlugin(e,i){return S(this,null,function*(){let t=R([{provide:ye,useValue:{action:"Install",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:i,isConfigured:e.isConfigured,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),verifiedPlugin:e.verifiedPlugin,verifiedPlusPlugin:e.verifiedPlusPlugin,funding:e.funding}}],this.injector),a=this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t});try{let d=yield a.result;d?.action==="just-installed"&&d?.plugin&&(d.plugin.isConfigured?this.$modal.open(ue,{size:"lg",backdrop:"static"}):yield this.settings(d.plugin))}catch{}})}uninstallPlugin(e,i){let t=R([{provide:lt,useValue:{plugin:e,childBridges:i,action:"Uninstall"}}],this.injector);this.$modal.open(qi,{size:"lg",backdrop:"static",injector:t})}checkAndUpdatePlugin(e,i){return S(this,null,function*(){(yield this.checkHbAndNodeVersion(e,"update"))&&(yield this.updatePlugin(e,i))})}updatePlugin(e,i){return S(this,null,function*(){let t=R([{provide:ye,useValue:{action:"Update",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:i,latestVersion:e.latestVersion,installedVersion:e.installedVersion,isDisabled:e.disabled,isConfigured:e.isConfigured,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),verifiedPlugin:e.verifiedPlugin,verifiedPlusPlugin:e.verifiedPlusPlugin,funding:e.funding}}],this.injector),a=this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t});try{let d=yield a.result;d?.action==="just-installed"&&d?.plugin&&(d.plugin.isConfigured?this.$modal.open(ue,{size:"lg",backdrop:"static"}):yield this.settings(d.plugin))}catch{}})}upgradeHomebridge(e,i){return S(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(e,"update")))return;let t=R([{provide:ye,useValue:{action:"Update",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:i,latestVersion:e.latestVersion,installedVersion:e.installedVersion}}],this.injector);this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t})})}installAlternateVersion(e){return S(this,null,function*(){let i=R([{provide:ct,useValue:{plugin:e,onRefreshPluginList:()=>this.pluginListRefreshSubject.next()}}],this.injector),t=this.$modal.open(Ii,{size:"lg",backdrop:"static",injector:i});try{let{action:a,version:d,engines:h}=yield t.result;return(yield this.checkHbAndNodeVersion(A(D({},e),{updateEngines:h}),a))?e.name==="homebridge"?yield this.upgradeHomebridge(e,d):e.installedVersion?yield this.updatePlugin(e,d):this.installPlugin(e,d):void 0}catch{}})}bridgeSettings(e,i=!1){return S(this,null,function*(){let t;if(e.settingsSchema)try{t=yield this.loadConfigSchema(e.name)}catch(h){console.error(h),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let a=R([{provide:at,useValue:{schema:t,plugin:e,justInstalled:i}}],this.injector),d=this.$modal.open(Di,{size:"lg",backdrop:"static",injector:a});try{(yield d.result)==="refresh"&&this.pluginListRefreshSubject.next()}catch{}})}settings(e){return S(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(d){console.error(d),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(e,i);if(this.$customPluginsService.plugins[e.name])return this.$customPluginsService.openSettings(e,i);let t=R([{provide:Me,useValue:{schema:i,plugin:e}}],this.injector);return this.$modal.open(e.settingsSchema?Hi:$t,{size:"lg",backdrop:"static",injector:t}).result.catch(()=>{})})}jsonEditor(e){return S(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(d){console.error(d)}let t=R([{provide:Me,useValue:{schema:i,plugin:e}}],this.injector);return this.$modal.open($t,{size:"lg",backdrop:"static",injector:t}).result.catch(d=>console.error(d))})}checkHbAndNodeVersion(e,i){return S(this,null,function*(){let t=!0,a=!0;try{e.updateEngines?.node&&(0,Le.lt)(this.$settings.env.nodeVersion,(0,Le.minVersion)(e.updateEngines.node))&&(t=!1),e.updateEngines?.homebridge&&(0,Le.lt)(this.$settings.env.homebridgeVersion,(0,Le.minVersion)(e.updateEngines.homebridge))&&(a=!1)}catch(d){return console.error(d),this.$toastr.error(d.message,this.$translate.instant("toast.title_error")),!1}if(!t||!a)try{let d=R([{provide:dt,useValue:{plugin:e,isValidNode:t,isValidHb:a,action:i}}],this.injector);return yield this.$modal.open(Ai,{size:"lg",backdrop:"static",injector:d}).result}catch{return!1}return!0})}loadConfigSchema(e){return S(this,null,function*(){return this.$api.get(`/plugins/config-schema/${encodeURIComponent(e)}`)})}resetChildBridges(e){return S(this,null,function*(){let i=R([{provide:st,useValue:{childBridges:e}}],this.injector);this.$modal.open(Oi,{size:"lg",backdrop:"static",injector:i})})}switchToScoped(e){return S(this,null,function*(){let i=R([{provide:mt,useValue:{plugin:e}}],this.injector);this.$modal.open(Wi,{size:"lg",backdrop:"static",injector:i})})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=Ee({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{wi as a,Si as b,we as c};
|