UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge.

20 lines • 190 kB
import{a as yi}from"./chunk-4IBV7BRV.js";import{a as Di}from"./chunk-ZJFU36MA.js";import{a as lt,b as Ie,c as $e,d as De}from"./chunk-RBTY27L3.js";import{a as _e,b as $t,d as ki,e as Mi,f as Ei,g as Nn,h as Dt}from"./chunk-A2ANF3NM.js";import{a as xi}from"./chunk-HKSUEG7C.js";import{a as wi}from"./chunk-JV663RTB.js";import{a as _t,b as ft,c as ht}from"./chunk-NHCHC3LD.js";import{a as vi}from"./chunk-ZIPKQJZO.js";import{a as Ge}from"./chunk-M5NPMQ5Y.js";import{a as xe}from"./chunk-GXCQWWJO.js";import{a as si,e as rt,h as di,i as ci,q as mi,r as pi,s as Ee,t as Te,u as Pe,v as gi,w as ui,x as _i,y as fi,z as hi}from"./chunk-NAG4LCT2.js";import{a as bi,c as Se,d as st,e as We,f as dt,g as ct,h as mt,i as ue,k as pt,l as Ve,m as gt,x as Ci,z as ut}from"./chunk-CG4JSQF7.js";import{a as Tn}from"./chunk-B5QIREVT.js";import{a as Pn}from"./chunk-EP2NVMBU.js";import{a as Vn}from"./chunk-CUY6HWWM.js";import{a as In}from"./chunk-3AI6EKM7.js";import{a as $n}from"./chunk-2KV2L7HE.js";import{a as Dn}from"./chunk-IKTVH6LN.js";import{a as An}from"./chunk-4G2XYXT5.js";import{a as xn}from"./chunk-T43PZS3N.js";import{a as yn}from"./chunk-7KZ77E2Z.js";import{a as wn}from"./chunk-QLNGMKWW.js";import{a as Sn}from"./chunk-DYYSQPHA.js";import{a as Bn}from"./chunk-AIIMV7FR.js";import{a as kn}from"./chunk-KNS7MZUM.js";import{a as Mn}from"./chunk-YAKFETOG.js";import{a as En}from"./chunk-3L64227F.js";import{a as gn}from"./chunk-NVSGHRYE.js";import{a as un}from"./chunk-ZECOZYXL.js";import{a as _n}from"./chunk-EJLAU4L4.js";import{a as fn}from"./chunk-OIP5BJMA.js";import{a as hn}from"./chunk-KWIPHOFZ.js";import{a as bn}from"./chunk-F5JHUVM3.js";import{a as Cn}from"./chunk-YBQFZBC5.js";import{a as vn}from"./chunk-KPZK4T3G.js";import{a as It,b as bt,c as Si,d as Bi,e as Ti,f as Pi,g as Vi,h as Ii,i as $i,l as Ct,m as vt,n as xt,o as yt,p as wt,q as St}from"./chunk-MW7EO4UO.js";import{a as Ai}from"./chunk-M4XHMFKM.js";import{a as Ae}from"./chunk-BHEY3G3X.js";import{a as ye}from"./chunk-YMS6PENN.js";import{s as K,t as ae}from"./chunk-YATM6BZO.js";import{e as pe}from"./chunk-ODMFCOQJ.js";import{a as qe}from"./chunk-XPK2EQJA.js";import{C as ve,D as li,b as tt,c as it,e as be,j as ti,l as Ce,n as ii,o as ni,q as oi,t as nt,u as ot,w as at,x as ai,y as ri}from"./chunk-ORSKS7BY.js";import{b as q}from"./chunk-4NRNA47I.js";import{C as R,D as H,F as U,H as he,I as j,o as Zt,u as ei}from"./chunk-QCMOCU6Q.js";import{Ab as f,Ac as Yt,Bc as He,Cb as ee,Cc as Xt,Db as te,Dc as d,Eb as ie,Ec as p,F as Be,Fb as y,Fc as G,Gb as r,Hb as l,Ib as v,Jb as I,Kb as $,Lb as J,Lc as Me,Mb as Kt,Nb as Jt,O as Pt,Oc as Ze,Pc as ze,Qc as et,Sb as T,Ta as re,Tb as oe,Ua as Ke,X as ke,Xa as qt,Xb as E,Ya as o,Yb as ne,Zb as g,aa as C,d as ge,ea as se,ec as Je,fc as Qe,ga as B,gc as Ye,ha as k,ic as D,jc as Qt,kc as m,lb as z,lc as S,ma as Ut,mb as O,mc as w,n as Ue,nc as fe,ob as Wt,oc as Xe,pb as Gt,rc as Y,sa as x,sb as Vt,sc as X,tc as Z,va as Ht,xb as V,yc as le,za as zt,zb as _,zc as de}from"./chunk-ZMC752RO.js";import{a as ln}from"./chunk-HHSHX5JT.js";import{a as sn}from"./chunk-3ZMAXAHP.js";import{a as dn}from"./chunk-DHLHKSWH.js";import{a as cn}from"./chunk-M7FRJSLH.js";import{a as mn}from"./chunk-MHY7DWGU.js";import{a as pn}from"./chunk-CNG3C27N.js";import{a as L,b as F,c as Rt,g as me,h as M}from"./chunk-B4AJQJMI.js";var je=me(lt(),1);var Ni=(()=>{class n{host=C(zt);jsonSchemaForm=C(bt,{host:!0,self:!0,optional:!0});observer;patchingInProgress=!1;jsfPatch=ze(!1);constructor(){let e=this.jsonSchemaForm;if(!e)return;let i=e.jsf.buildLayout.bind(e.jsf);e.jsf.buildLayout=t=>(i(t),e.jsf.formValues&&this.jsfPatch()?this.fixNestedArrayLayout(e.jsf.layout,e.jsf.formValues):e.jsf.layout)}ngAfterViewInit(){this.patchAccessibility();let e=!1;this.observer=new MutationObserver(i=>{if(!this.patchingInProgress){for(let t of i){let a=t.target;if(a?.closest&&(a.closest(".dropdown-menu")||a.closest("ngb-typeahead-window")||a.closest(".cdk-overlay-container")||a.closest('[role="listbox"]')))return}e||(e=!0,requestAnimationFrame(()=>{e=!1,this.patchAccessibility()}))}}),this.observer.observe(this.host.nativeElement,{childList:!0,subtree:!0})}ngOnDestroy(){this.observer?.disconnect(),this.observer=void 0}patchAccessibility(){if(this.patchingInProgress)return;this.patchingInProgress=!0;let e=this.host.nativeElement;this.patchExpandableFieldsetLegends(e),this.patchDeleteButtons(e),this.patchCheckboxRadioDuplicateText(e),this.patchBasicControlNames(e),this.patchingInProgress=!1}patchExpandableFieldsetLegends(e){e.querySelectorAll("fieldset").forEach(t=>{let a=t,s=a.querySelector("legend");if(!s)return;let u=this.cleanSectionTitle((s.textContent||"").trim());if(!u)return;let b=s.querySelector("button")||s.querySelector("a")||s.querySelector('[data-bs-toggle="collapse"]')||s.querySelector("[aria-expanded]")||s,h=this.findCollapseBody(a,b),P=a.querySelector(":scope > button.jsf-fieldset-proxy");P||(P=document.createElement("button"),P.type="button",P.className="jsf-fieldset-proxy visually-hidden-focusable",a.insertBefore(P,a.firstChild),P.addEventListener("click",W=>{W.preventDefault(),b.click(),window.setTimeout(()=>{this.syncProxyExpanded(a,P,b,h)},0)}),P.addEventListener("keydown",W=>{(W.key==="Enter"||W.key===" ")&&(W.preventDefault(),P.click())})),P.textContent=u,P.setAttribute("role","button"),P.setAttribute("tabindex","0"),P.setAttribute("aria-label",u),P.removeAttribute("aria-describedby"),h?(h.id||(h.id=`jsf_collapse_${Math.random().toString(36).slice(2)}`),P.setAttribute("aria-controls",h.id)):P.removeAttribute("aria-controls"),a.setAttribute("role","presentation"),s.setAttribute("aria-hidden","true"),s.querySelectorAll("button, a, [tabindex]").forEach(W=>{W.setAttribute("tabindex","-1")}),this.syncProxyExpanded(a,P,b,h)})}syncProxyExpanded(e,i,t,a){let u=this.getExpandedState(e,a,t)?"true":"false";i.getAttribute("aria-expanded")!==u&&i.setAttribute("aria-expanded",u)}findCollapseBody(e,i){if(i){let t=i.getAttribute("aria-controls");if(t){let s=document.getElementById(t);if(s)return s}let a=i.getAttribute("data-bs-target")||i.getAttribute("data-target");if(a&&a.startsWith("#")){let s=document.getElementById(a.slice(1));if(s)return s}}return e.querySelector(":scope .collapse")}getExpandedState(e,i,t){let a=t?.getAttribute("aria-expanded");return a==="true"?!0:a==="false"||t?.classList.contains("collapsed")?!1:i?i.classList.contains("show"):this.isFieldsetExpanded(e)}isFieldsetExpanded(e){let i=e.querySelectorAll("input, select, textarea, button, a");for(let t of i){let a=t;if(this.isVisiblyRendered(a)){if(a.tagName.toLowerCase()==="legend"||a.classList.contains("jsf-fieldset-proxy"))continue;return!0}}return!1}isVisiblyRendered(e){let i=window.getComputedStyle(e);return i.display==="none"||i.visibility==="hidden"||e.getAttribute("aria-hidden")==="true"?!1:e.getClientRects().length>0}patchDeleteButtons(e){e.querySelectorAll("button.btn-close").forEach(t=>{let a=t;if(a.hasAttribute("data-jsf-a11y-delete"))return;let s=this.findNearestItemName(a,e);a.setAttribute("aria-label",s?`Delete ${s}`:"Delete"),a.removeAttribute("title"),a.setAttribute("data-jsf-a11y-delete","true")})}findNearestItemName(e,i){let a=e.closest(".list-group-item")||e.closest(".card")||e.closest("li")||e.closest("fieldset")||e.parentElement||i,s=a.querySelector("legend");if(s){let b=this.cleanSectionTitle((s.textContent||"").trim());if(b)return b}let u=a.querySelector("h1, h2, h3, h4, h5, h6");if(u){let b=this.cleanSectionTitle((u.textContent||"").trim());if(b)return b}return""}cleanSectionTitle(e){let i=(e||"").replace(fi,"").trim();return i=i.replace(hi,"").trim(),i.length>80&&(i=i.slice(0,80).trim()),i}patchCheckboxRadioDuplicateText(e){e.querySelectorAll("input").forEach(t=>{let a=t,s=(a.getAttribute("type")||"").toLowerCase();if(s!=="checkbox"&&s!=="radio"||a.hasAttribute("data-jsf-a11y-processed"))return;let u=a.id?e.querySelector(`label[for="${a.id}"]`):null,b=a.closest("label"),h=u||b,P=this.getLabelText(h);if(!P)return;this.hasExplicitA11yName(a)||a.setAttribute("aria-label",P),a.setAttribute("data-jsf-a11y-processed","true"),b&&b.contains(a)&&b.querySelectorAll("*").forEach(A=>{if(A===a||A.contains(a)||A.hasAttribute("data-jsf-a11y-hidden"))return;(A.classList.contains("hb-uix-slider")||A.classList.contains("hb-uix-round"))&&(A.setAttribute("aria-hidden","true"),A.setAttribute("data-jsf-a11y-hidden","true"))});let W=a.parentElement;if(W)for(let A=0;A<W.children.length;A+=1){let N=W.children[A];if(!(N instanceof HTMLElement)||N===a||h&&N===h||N.hasAttribute("data-jsf-a11y-hidden")||this.isInteractiveElement(N))continue;let ce=(N.textContent||"").trim();ce&&ce===P&&(N.setAttribute("aria-hidden","true"),N.setAttribute("data-jsf-a11y-hidden","true"))}})}getLabelText(e){return e?(e.textContent||"").replace(ci," ").trim():""}hasExplicitA11yName(e){let i=e.getAttribute("aria-label");if(i&&i.trim())return!0;let t=e.getAttribute("aria-labelledby");if(t&&t.trim())return!0;let a=e.getAttribute("title");return!!(a&&a.trim())}isInteractiveElement(e){let i=e.tagName.toLowerCase();if(["a","button","input","select","textarea"].includes(i))return!0;let t=e.getAttribute("tabindex");if(t!==null&&Number.parseInt(t,10)>=0)return!0;let a=e.getAttribute("role");return a!=null&&["button","link","menuitem","tab","option"].includes(a)}patchBasicControlNames(e){e.querySelectorAll("input, select, textarea").forEach(t=>{let a=t;if(a instanceof HTMLInputElement){let u=(a.getAttribute("type")||"").toLowerCase();if(u==="checkbox"||u==="radio")return}if(a.hasAttribute("data-jsf-a11y-labeled"))return;if(this.hasExplicitA11yName(a)){a.setAttribute("data-jsf-a11y-labeled","true");return}let s="";if(a.id&&(s=(e.querySelector(`label[for="${a.id}"]`)?.textContent||"").trim()),!s){let u=a.closest("label");s=this.getLabelText(u)}s&&(a.setAttribute("aria-label",s),a.setAttribute("data-jsf-a11y-labeled","true"))})}fixNestedArrayLayout(e,i){return this.fixArray(e,i,""),e}fixArray(e,i,t){if(Array.isArray(e)){let a=e.filter(b=>b.name!=="_bridge"),s=a.filter(b=>b.items&&Array.isArray(b.items)).flatMap(b=>b.items).filter(b=>b.dataType==="array"||b.arrayItem);[...a,...s].filter(b=>b.dataType==="array"||b.arrayItem).forEach(b=>{this.fixNestedArray(b,i,t)})}else this.fixNestedArray(e,i,t)}fixNestedArray(e,i,t){if(e.items&&Array.isArray(e.items)){let a=e.items.find(s=>s.type==="$ref");if(a){let s=e.items.filter(h=>h.type==="section"||h.type==="div"),u=s.length>0?s.reduce((h,P)=>h.id>P.id?h:P):this.getItemTemplateFromRef(a),b=this.getDataFromPointer(i,a.dataPointer.replace(t,""));if(b===null)return;if(Array.isArray(b)){for(;e.items.length-1<b.length;){let h=$t(u);h._id=Mi("new_"),e.items.unshift(h)}b.forEach((h,P)=>{this.fixArray(e.items[P],h,a.dataPointer)})}else this.fixArray(e.items,i,a.dataPointer)}else this.fixArray(e.items,i,t);e.items.filter(s=>s.items&&Array.isArray(s.items)).forEach(s=>{this.fixArray(s.items,i,t)})}}getDataFromPointer(e,i){let t=e;return i.substring(1).split(di).filter(a=>a!=="-").forEach(a=>{try{t=t[a]}catch(s){t=null}}),t}getItemTemplateFromRef(e){let i={type:"section",items:[]},t=$t(e);return ki(t,i),t}static \u0275fac=function(i){return new(i||n)};static \u0275dir=Wt({type:n,selectors:[["","jsfPatch",""]],inputs:{jsfPatch:[1,"jsfPatch"]}})}return n})();function Ln(n,c){if(n&1){let e=T();r(0,"json-schema-form",1),E("onChanges",function(t){B(e);let a=g();return k(a.onChanges(t))})("isValid",function(t){B(e);let a=g();return k(a.validChange(t))}),l()}if(n&2){let e=g();y("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=C(q);availableLanguages=["de","en","es","fr","it","pt","zh"];configSchema=ze.required();data=ze.required();dataChange=Ze();dataChanged=Ze();isValid=Ze();currentData=x(null);language=x("en");jsonFormOptions={addSubmit:!1,loadExternalAssets:!1,returnEmptyFields:!1,setSchemaDefaults:!0,autocomplete:!1};lastValidState=void 0;validationTimeout=null;lastDataReference=null;processingInternalChange=!1;constructor(){Ht(()=>{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];e&&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=O({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&&(Kt(0),_(1,Ln,1,8,"json-schema-form",0),Jt()),i&2&&(o(),f(t.configSchema().schema?1:-1))},dependencies:[Si,bt,Ni],encapsulation:2,changeDetection:0})}return n})();var Ne=(()=>{class n{$api=C(j);$modal=C(ae);$toastr=C(U);$translate=C(R);injector=C(se);openCorrectRestartModalForPlugin(e){return M(this,null,function*(){let i=yield this.getChildBridgesForPlugin(e);if(i.length){let t=z([{provide:Ci,useValue:{bridges:i.map(a=>({name:a.name,username:a.username,matterSerialNumber:a.matterSerialNumber}))}}],this.injector);this.$modal.open(Ei,{size:"lg",backdrop:"static",injector:t})}else this.$modal.open(_e,{size:"lg",backdrop:"static"})})}getChildBridgesForPlugin(e){return M(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=ke({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var jn=Rt({"../../../../i18n/bg.json":()=>ln(),"../../../../i18n/ca.json":()=>sn(),"../../../../i18n/cs.json":()=>dn(),"../../../../i18n/de.json":()=>cn(),"../../../../i18n/en.json":()=>mn(),"../../../../i18n/es.json":()=>pn(),"../../../../i18n/fi.json":()=>gn(),"../../../../i18n/fr.json":()=>un(),"../../../../i18n/he.json":()=>_n(),"../../../../i18n/hu.json":()=>fn(),"../../../../i18n/id.json":()=>hn(),"../../../../i18n/it.json":()=>bn(),"../../../../i18n/ja.json":()=>Cn(),"../../../../i18n/ko.json":()=>vn(),"../../../../i18n/mk.json":()=>xn(),"../../../../i18n/nl.json":()=>yn(),"../../../../i18n/no.json":()=>wn(),"../../../../i18n/pl.json":()=>Sn(),"../../../../i18n/pt-BR.json":()=>Bn(),"../../../../i18n/pt.json":()=>kn(),"../../../../i18n/ru.json":()=>Mn(),"../../../../i18n/sl.json":()=>En(),"../../../../i18n/sv.json":()=>Tn(),"../../../../i18n/th.json":()=>Pn(),"../../../../i18n/tr.json":()=>Vn(),"../../../../i18n/uk.json":()=>In(),"../../../../i18n/vi.json":()=>$n(),"../../../../i18n/zh-CN.json":()=>Dn(),"../../../../i18n/zh-TW.json":()=>An()});var Fn=["custompluginui"];function On(n,c){n&1&&(r(0,"div",6),v(1,"i",18),l())}function Rn(n,c){if(n&1){let e=T();r(0,"div",8)(1,"app-schema-form",19),Z("dataChange",function(t){B(e);let a=g();return X(a.pluginConfig[0],t)||(a.pluginConfig[0]=t),k(t)}),E("dataChanged",function(t){B(e);let a=g();return k(a.schemaFormUpdatedSubject.next(t))})("isValid",function(t){B(e);let a=g();return k(a.onIsValid(t))}),l()()}if(n&2){let e=g();o(),y("configSchema",e.schema),Y("data",e.pluginConfig[0])}}function Un(n,c){if(n&1){let e=T();r(0,"button",23),E("click",function(){B(e);let t=g(2);return k(t.formActionSubject.next("cancel"))}),m(1),l()}if(n&2){let e=g(2);o(),w(" ",e.formCancelButtonLabel()," ")}}function Hn(n,c){if(n&1){let e=T();r(0,"button",24),E("click",function(){B(e);let t=g(2);return k(t.formActionSubject.next("submit"))}),m(1),l()}if(n&2){let e=g(2);y("disabled",!e.formValid()),o(),w(" ",e.formSubmitButtonLabel()," ")}}function zn(n,c){if(n&1){let e=T();r(0,"div",8)(1,"app-schema-form",19),E("dataChange",function(t){B(e);let a=g();return k(a.formData.set(t))})("dataChanged",function(t){B(e);let a=g();return k(a.formUpdatedSubject.next(t))})("isValid",function(t){B(e);let a=g();return k(a.formValidEvent(t))}),l(),r(2,"div",20),_(3,Un,2,1,"button",21),_(4,Hn,2,2,"button",22),l()()}if(n&2){let e=g();o(),y("configSchema",e.formSchema())("data",e.formData()),o(2),f(e.formCancelButtonLabel()?3:-1),o(),f(e.formSubmitButtonLabel()?4:-1)}}function qn(n,c){n&1&&(r(0,"div",9),v(1,"i",18),l())}function Wn(n,c){if(n&1&&(v(0,"i",25),d(1,"translate")),n&2){let e=g();D("fa-circle-check",e.formIsValid())("green-text",e.formIsValid())("fa-circle-exclamation",!e.formIsValid())("red-text",e.strictValidation()&&!e.formIsValid())("orange-text",!e.strictValidation()&&!e.formIsValid()),y("ngbTooltip",p(1,12,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function Gn(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"form.button_save")," ")}function Kn(n,c){n&1&&v(0,"i",17)}var Li=(()=>{class n{$activeModal=C(K);$api=C(j);$cb=C(Ne);$plugin=C(we);$settings=C(q);$toastr=C(U);$translate=C(R);$ws=C(xe);modalData=C(We);customPluginUiElementTarget=et("custompluginui");plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=this.modalData.pluginConfig??[];pluginAlias=x("");pluginType=x("platform");loading=x(!0);saveInProgress=x(!1);pluginSpinner=x(!1);saveButtonDisabled=x(!1);uiLoaded=x(!1);showSchemaForm=x(!1);formId=x(void 0);formSchema=x(void 0);formData=x(void 0);formSubmitButtonLabel=x(void 0);formCancelButtonLabel=x(void 0);formValid=x(!0);isFirstSave=x(!1);formIsValid=x(!0);strictValidation=x(!1);io;basePath="";iframe;schemaFormRecentlyRefreshed=!1;destroyRef=C(Ut);schemaFormUpdatedSubject=new ge;schemaFormRefreshSubject=new ge;formUpdatedSubject=new ge;formActionSubject=new ge;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(Be(250),qe(this.destroyRef)).subscribe(this.schemaFormRefresh.bind(this)),this.schemaFormUpdatedSubject.pipe(Be(250),Pt(1),qe(this.destroyRef)).subscribe(()=>{this.schemaFormUpdated()}),this.formUpdatedSubject.pipe(Be(100),Pt(1),qe(this.destroyRef)).subscribe(this.formUpdated.bind(this)),this.formActionSubject.pipe(qe(this.destroyRef)).subscribe(this.formActionEvent.bind(this)),window.addEventListener("message",this.handleMessage,!1)}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),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 M(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 M(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,jn(`../../../../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.updateConfigBlocks(i),this.pluginConfig[0]&&this.showSchemaForm()&&(this.pluginConfig[0]=L({},this.pluginConfig[0]),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 M(this,null,function*(){let i=[...window.document.body.classList].find(h=>h.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 s=[...document.querySelectorAll("link")];for(let h of s)if(h.getAttribute("rel")==="stylesheet"){let P=h.getAttribute("href"),W=document.baseURI+(P.startsWith("/")?P.substring(1):P);a.postMessage({action:"link-element",href:W,rel:"stylesheet"},e.origin)}let u=[...document.querySelectorAll("style")];for(let h of u)a.postMessage({action:"inline-style",style:h.innerHTML},e.origin);let b=`
      body {
        height: unset !important;
        background-color: ${t?"#242424":"#FFFFFF"} !important;
        color: ${t?"#FFFFFF":"#000000"} !important;
      }
    `;a.postMessage({action:"inline-style",style:b},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.iframe.contentWindow.postMessage({action:"stream",event:"configChanged",data:this.pluginConfig},he.api.origin)}}schemaFormRefresh(){this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm()&&(this.showSchemaForm.set(!1),queueMicrotask(()=>{this.showSchemaForm.set(!0)}))}formCreate(e,i,t,a,s){return M(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(s)})}formEnd(){return M(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 M(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 M(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=O({type:n,selectors:[["app-custom-plugins"]],viewQuery:function(i,t){i&1&&Je(t.customPluginUiElementTarget,Fn,5),i&2&&Qe()},decls:26,vars:22,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","modal-body-min-height"],[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",1,"plugin-iframe"],[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,"fa-circle-check","green-text","fa-circle-exclamation","red-text","orange-text","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","icon-xl"],[3,"dataChange","dataChanged","isValid","configSchema","data"],[1,"text-end","custom-form-action-buttons"],["type","button",1,"btn","btn-elegant"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button",1,"btn","btn-elegant",3,"click"],["type","button",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){i&1&&(r(0,"div",1)(1,"div",2)(2,"h5",3),m(3),l(),r(4,"button",4),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(6,"div",5),_(7,On,2,0,"div",6),v(8,"iframe",7,0),d(10,"translate"),d(11,"translate"),_(12,Rn,2,2,"div",8),_(13,zn,5,4,"div",8),_(14,qn,2,0,"div",9),l(),r(15,"div",10)(16,"div",11)(17,"button",12),E("click",function(){return t.dismissModal()}),m(18),d(19,"translate"),l()(),v(20,"div",13),r(21,"div",14),_(22,Wn,2,14,"i",15),r(23,"button",16),E("click",function(){return t.savePluginConfig(!0)}),_(24,Gn,2,3)(25,Kn,1,0,"i",17),l()()()()),i&2&&(o(3),S(t.plugin.displayName||t.plugin.name),o(),y("disabled",t.saveInProgress()),V("aria-label",p(5,14,"form.button_close")),o(3),f(t.loading()?7:-1),o(),V("title",p(10,16,"plugins.button_settings"))("aria-label",p(11,18,"plugins.button_settings")),o(4),f(t.uiLoaded()&&t.pluginConfig.length&&t.schema.singular&&t.showSchemaForm()?12:-1),o(),f(t.formId()?13:-1),o(),f(t.pluginSpinner()?14:-1),o(3),y("disabled",t.saveInProgress()),o(),w(" ",p(19,20,"form.button_close")," "),o(4),f(t.saveButtonDisabled()?-1:22),o(),y("disabled",t.saveInProgress()||t.saveButtonDisabled()),o(),f(t.saveInProgress()?25:24))},dependencies:[Bt,Bi,ye,H],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}.modal-body-min-height[_ngcontent-%COMP%]{min-height:110px}.plugin-iframe[_ngcontent-%COMP%]{border:0}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:16px;background-color:#ffffffb3}.custom-form-action-buttons[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]:last-child{margin-right:2px}"],changeDetection:0})}return n})();var ji=(()=>{class n{injector=C(se);$api=C(j);$modal=C(ae);plugins={};openSettings(e,i){return M(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=z([{provide:We,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 M(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=z([{provide:We,useValue:{plugin:e,schema:i,pluginConfig:t}}],this.injector);return this.$modal.open(Li,{size:"lg",backdrop:"static",injector:a}).result.catch(()=>{})})}loadPluginConfig(e){return M(this,null,function*(){return this.$api.get(`/config-editor/plugin/${encodeURIComponent(e)}`)})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=ke({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Wi=me(Ge(),1);var Fi=me(lt(),1);function Jn(n,c){n&1&&(r(0,"div",5),v(1,"i",12),l())}function Qn(n,c){if(n&1&&(v(0,"i",20),r(1,"h6",21),m(2),d(3,"translate"),l(),r(4,"p",21),m(5),d(6,"translate"),r(7,"span",22),m(8),l()()),n&2){let e=g(2);o(2),S(p(3,3,"plugins.manage.select_version")),o(3),w(" ",p(6,5,"plugins.status_installed"),": "),o(3),w("v",e.plugin==null?null:e.plugin.installedVersion)}}function Yn(n,c){n&1&&(v(0,"i",23),r(1,"h6",21),m(2),d(3,"translate"),l()),n&2&&(o(2),S(p(3,1,"plugins.manage.select_version")))}function Xn(n,c){n&1&&v(0,"i",26)}function Zn(n,c){n&1&&v(0,"i",27)}function eo(n,c){if(n&1){let e=T();r(0,"li",14)(1,"span",8),m(2),v(3,"br"),r(4,"small",24),m(5),l()(),r(6,"button",25),d(7,"translate"),d(8,"translate"),E("click",function(){let t=B(e).$implicit,a=g(2);return k(a.doInstall(t.version))}),_(9,Xn,1,0,"i",26)(10,Zn,1,0,"i",27),l()()}if(n&2){let e=c.$implicit,i=g(2);o(2),w(" ",e.tag," "),o(3),w("v",e.version),o(),V("aria-label",`${(i.plugin==null?null:i.plugin.installedVersion)===e.version?p(7,4,"plugins.manage.reinstall"):p(8,6,"plugins.manage.install")} v${e.version}`),o(3),f((i.plugin==null?null:i.plugin.installedVersion)===e.version?9:10)}}function to(n,c){n&1&&m(0," \u2713 ")}function io(n,c){if(n&1&&(r(0,"option",17),m(1),_(2,to,1,0),l()),n&2){let e=c.$implicit,i=g(2);y("value",e.version)("selected",i.versionSelect===e.version),o(),w(" v",e.version," "),o(),f(e.version===(i.plugin==null?null:i.plugin.installedVersion)?2:-1)}}function no(n,c){n&1&&v(0,"i",26)}function oo(n,c){n&1&&v(0,"i",27)}function ao(n,c){if(n&1){let e=T();r(0,"button",25),d(1,"translate"),d(2,"translate"),E("click",function(){B(e);let t=g(2);return k(t.doInstall(t.versionSelect))}),_(3,no,1,0,"i",26)(4,oo,1,0,"i",27),l()}if(n&2){let e=g(2);V("aria-label",`${(e.plugin==null?null:e.plugin.installedVersion)===e.versionSelect?p(1,2,"plugins.manage.reinstall"):p(2,4,"plugins.manage.install")} v${e.versionSelect}`),o(3),f((e.plugin==null?null:e.plugin.installedVersion)===e.versionSelect?3:4)}}function ro(n,c){n&1&&(r(0,"div",36),v(1,"i",41),l())}function lo(n,c){n&1&&(r(0,"div",36),v(1,"i",41),l())}function so(n,c){n&1&&(r(0,"div",36),v(1,"i",41),l())}function co(n,c){if(n&1&&(r(0,"li",28)(1,"label",29),v(2,"input",42),d(3,"translate"),r(4,"div",31),v(5,"i",43),l(),r(6,"div",33)(7,"div",34),m(8),d(9,"translate"),l(),r(10,"small",35),m(11),d(12,"translate"),l()(),_(13,so,2,0,"div",36),l()()),n&2){let e=g(3);o(2),y("formControl",e.updatePreferenceControl),V("aria-label",p(3,9,"plugins.manage.notifications_major")),o(3),D("primary-text",e.updatePreferenceControl.value==="major")("grey-text",e.updatePreferenceControl.value!=="major"),o(3),S(p(9,11,"plugins.manage.notifications_major")),o(3),S(p(12,13,"plugins.manage.notifications_major_desc")),o(2),f(e.updatePreferenceControl.value==="major"?13:-1)}}function mo(n,c){n&1&&(r(0,"div",36),v(1,"i",41),l())}function po(n,c){if(n&1&&(r(0,"ul",19),d(1,"translate"),r(2,"li",28)(3,"label",29),v(4,"input",30),d(5,"translate"),r(6,"div",31),v(7,"i",32),l(),r(8,"div",33)(9,"div",34),m(10),d(11,"translate"),l(),r(12,"small",35),m(13),d(14,"translate"),l()(),_(15,ro,2,0,"div",36),l()(),r(16,"li",28)(17,"label",29),v(18,"input",37),d(19,"translate"),r(20,"div",31),v(21,"i",38),l(),r(22,"div",33)(23,"div",34),m(24),d(25,"translate"),l(),r(26,"small",35),m(27),d(28,"translate"),l()(),_(29,lo,2,0,"div",36),l()(),_(30,co,14,15,"li",28),r(31,"li",28)(32,"label",29),v(33,"input",39),d(34,"translate"),r(35,"div",31),v(36,"i",40),l(),r(37,"div",33)(38,"div",34),m(39),d(40,"translate"),l(),r(41,"small",35),m(42),d(43,"translate"),l()(),_(44,mo,2,0,"div",36),l()()()),n&2){let e=g(2);V("aria-label",p(1,29,"plugins.manage.notifications")),o(4),y("formControl",e.updatePreferenceControl),V("aria-label",p(5,31,"plugins.manage.notifications_all")),o(3),D("primary-text",e.updatePreferenceControl.value==="all")("grey-text",e.updatePreferenceControl.value!=="all"),o(3),S(p(11,33,"plugins.manage.notifications_all")),o(3),S(p(14,35,"plugins.manage.notifications_all_desc")),o(2),f(e.updatePreferenceControl.value==="all"?15:-1),o(3),y("formControl",e.updatePreferenceControl),V("aria-label",p(19,37,"plugins.manage.notifications_beta")),o(3),D("primary-text",e.updatePreferenceControl.value==="beta")("grey-text",e.updatePreferenceControl.value!=="beta"),o(3),S(p(25,39,"plugins.manage.notifications_beta")),o(3),S(p(28,41,"plugins.manage.notifications_beta_desc")),o(2),f(e.updatePreferenceControl.value==="beta"?29:-1),o(),f(e.plugin.name==="homebridge"||e.plugin.name==="homebridge-config-ui-x"?30:-1),o(3),y("formControl",e.updatePreferenceControl),V("aria-label",p(34,43,"plugins.manage.notifications_none")),o(3),D("primary-text",e.updatePreferenceControl.value==="none")("grey-text",e.updatePreferenceControl.value!=="none"),o(3),S(p(40,45,"plugins.manage.notifications_none")),o(3),S(p(43,47,"plugins.manage.notifications_none_desc")),o(2),f(e.updatePreferenceControl.value==="none"?44:-1)}}function go(n,c){if(n&1){let e=T();r(0,"div",6),_(1,Qn,9,7)(2,Yn,4,3),r(3,"ul",13),te(4,eo,11,8,"li",14,ee),r(6,"li",14)(7,"div",15),m(8),d(9,"translate"),v(10,"br"),r(11,"select",16),d(12,"translate"),Z("ngModelChange",function(t){B(e);let a=g();return X(a.versionSelect,t)||(a.versionSelect=t),k(t)}),te(13,io,3,4,"option",17,ee),l()(),_(15,ao,5,6,"button",18),l()(),_(16,po,45,49,"ul",19),l()}if(n&2){let e=g();o(),f(e.plugin!=null&&e.plugin.installedVersion?1:2),o(3),ie(e.versionsWithTags()),o(4),w(" ",p(9,6,"plugins.manage.all_versions")," "),o(3),Y("ngModel",e.versionSelect),V("aria-label",p(12,8,"plugins.manage.all_versions")),o(2),ie(e.versions()),o(2),f(e.versionSelect?15:-1),o(),f(e.plugin!=null&&e.plugin.installedVersion?16:-1)}}var kt=(()=>{class n{$activeModal=C(K);$api=C(j);$settings=C(q);$toastr=C(U);$translate=C(R);modalData=C(Ve);plugin=this.modalData.plugin;onRefreshPluginList=this.modalData.onRefreshPluginList;onSettingsChange=this.modalData.onSettingsChange;_versionSelect=x("");loading=x(!0);versions=x([]);versionsWithTags=x([]);get versionSelect(){return this._versionSelect()}set versionSelect(e){this._versionSelect.set(e)}updatePreferenceControl=new ti("all");ngOnInit(){let e=this.plugin;if(!e)return;this.versionSelect=e.installedVersion||e.latestVersion,this.lookupVersions();let i=this.getCurrentUpdatePreference();this.updatePreferenceControl.setValue(i),this.updatePreferenceControl.valueChanges.pipe(Be(500)).subscribe(t=>{t!==null&&this.updatePreference(t)})}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"})}getCurrentUpdatePreference(){let e=this.plugin;return e?e.name==="homebridge"?this.$settings.env.homebridgeUpdatePolicy||"all":e.name==="homebridge-config-ui-x"?this.$settings.env.homebridgeUiUpdatePolicy||"all":this.$settings.env.plugins?.hideUpdatesFor?.includes(e.name)?"none":this.$settings.env.plugins?.showBetasFor?.includes(e.name)?"beta":"all":"all"}updatePreference(e){return M(this,null,function*(){let i=this.plugin;if(i)try{if(i.name==="homebridge")yield this.$api.put("/config-editor/ui",{key:"homebridgeUpdatePolicy",value:e}),this.$settings.env.homebridgeUpdatePolicy=e,yield this.$api.post("/plugins/clear-cache",{});else if(i.name==="homebridge-config-ui-x")yield this.$api.put("/config-editor/ui",{key:"homebridgeUiUpdatePolicy",value:e}),this.$settings.env.homebridgeUiUpdatePolicy=e,yield this.$api.post("/plugins/clear-cache",{});else{let s=e==="none",u=e==="beta",b=this.$settings.env.plugins?.hideUpdatesFor||[];s&&!b.includes(i.name)?b=[...b,i.name].sort((P,W)=>P.localeCompare(W)):s||(b=b.filter(P=>P!==i.name));let h=this.$settings.env.plugins?.showBetasFor||[];u&&!h.includes(i.name)?h=[...h,i.name].sort((P,W)=>P.localeCompare(W)):u||(h=h.filter(P=>P!==i.name)),yield this.$api.put("/config-editor/ui/plugins/hide-updates-for",{body:b}),yield this.$api.put("/config-editor/ui",{key:"plugins.showBetasFor",value:h}),this.$settings.setEnvItem("plugins.hideUpdatesFor",b),this.$settings.setEnvItem("plugins.showBetasFor",h),yield this.$api.post("/plugins/clear-cache",{})}let t=this.onRefreshPluginList;t&&t();let a=this.onSettingsChange;a&&a(),this.$toastr.success(this.$translate.instant("config.config_saved"),this.$translate.instant("toast.title_success"))}catch(t){console.error(t);let a=t instanceof Error?t.message:this.$translate.instant("toast.title_error");this.$toastr.error(a,this.$translate.instant("toast.title_error")),this.updatePreferenceControl.setValue(this.getCurrentUpdatePreference(),{emitEvent:!1})}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}lookupVersions(){return M(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[u,b]of Object.entries(i.versions))t.push({version:u,engines:b.engines||null}),Object.keys(i.tags).filter(h=>i.tags[h]===u).forEach(h=>{a.push({version:u,tag:h})});let s=this.plugin;s?.installedVersion&&!t.some(u=>u.version===s.installedVersion)&&t.push({version:s.installedVersion,engines:s.engines||null}),t.sort((u,b)=>(0,Fi.rcompare)(u.version,b.version)),a.sort((u,b)=>{let h=["latest","next","beta","alpha"],P=h.includes(u.tag)?h.indexOf(u.tag):999,W=h.includes(b.tag)?h.indexOf(b.tag):999;return P-W}),this.versions.set(t),this.versionsWithTags.set(a),!t.some(u=>u.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=O({type:n,selectors:[["app-manage-version"]],decls:16,vars:8,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","icon-xl"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"text-start","min-w-50"],[1,"custom-select","w-100","font-monospace","version-select",3,"ngModelChange","ngModel"],[3,"value","selected"],["type","button",1,"btn","btn-primary","m-0","ms-3","py-1"],["role","radiogroup",1,"list-group","list-group-box","mt-3","mb-0"],[1,"fas","fa-code-compare","primary-text","mb-3","icon-xl"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-arrow-alt-circle-down","primary-text","mb-3","icon-xl"],[1,"grey-text","font-monospace"],["type","button",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","text-start"],[1,"d-flex","align-items-center","w-100","mb-0","cursor-pointer"],["type","radio","name","updatePreference","value","all",1,"visually-hidden",3,"formControl"],[1,"me-3"],["aria-hidden","true",1,"fas","fa-bell","fa-2x"],[1,"flex-grow-1"],["aria-hidden","true"],[1,"grey-text"],[1,"ms-3"],["type","radio","name","updatePreference","value","beta",1,"visually-hidden",3,"formControl"],["aria-hidden","true",1,"fas","fa-vial","fa-2x"],["type","radio","name","updatePreference","value","none",1,"visually-hidden",3,"formControl"],["aria-hidden","true",1,"fas","fa-bell-slash","fa-2x"],["aria-hidden","true",1,"fas","fa-xl","fa-check-circle","primary-text"],["type","radio","name","updatePreference","value","major",1,"visually-hidden",3,"formControl"],["aria-hidden","true",1,"far","fa-bell","fa-fw","fa-2x"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),l(),r(4,"button",3),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(6,"div",4),_(7,Jn,2,0,"div",5)(8,go,17,10,"div",6),l(),r(9,"div",7),v(10,"div",8),r(11,"div",9)(12,"button",10),E("click",function(){return t.dismissModal()}),m(13),d(14,"translate"),l()(),v(15,"div",11),l()()),i&2&&(o(3),S((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),V("aria-label",p(5,4,"form.button_close")),o(3),f(t.loading()?7:8),o(6),w(" ",p(14,6,"form.button_close")," "))},dependencies:[ve,ot,at,it,nt,ni,be,Ce,li,oi,H],styles:[".version-select[_ngcontent-%COMP%]{font-size:.875rem}"],changeDetection:0})}return n})();var Ri=me(Ge(),1);var uo=["pluginlogoutput"];function _o(n,c){if(n&1){let e=T();r(0,"button",15),d(1,"translate"),d(2,"translate"),E("click",function(){B(e);let t=g();return k(t.restartChildBridges())}),v(3,"i",16),l()}if(n&2){let e=g();y("ngbTooltip",p(1,4,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))("openDelay",150)("disabled",e.midAction()),V("aria-label",p(2,6,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}var Oi=/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,fo=/36m\[.*?\]/,Ui=(()=>{class n{$activeModal=C(K);$api=C(j);$log=C(wi);$modal=C(ae);$toastr=C(U);$translate=C(R);$settings=C(q);injector=C(se);modalData=C(dt);termTarget=et("pluginlogoutput");plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];midAction=x(!1);resizeEvent=new ge;pluginAlias;get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()==="light"}ngOnInit(){this.getPluginLog()}ngOnDestroy(){this.$log.destroyTerminal()}onWindowResize(){this.resizeEvent.next(void 0)}restartChildBridges(){return M(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 M(this,null,function*(){this.midAction.set(!0);let e=z([{provide:bi,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(vi,{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(`
`),s="",u=!1;a.forEach(b=>{if(b){if(u)if(fo.test(b))u=!1;else{s+=`${b.replace(Oi,"")}\r
`;return}b.includes(`36m[${this.pluginAlias}]`)&&(s+=`${b.replace(Oi,"")}\r
`,u=!0)}}),this.plugin&&(0,Ri.saveAs)(new Blob([s],{type:"text/plain;charset=utf-8"}),`${this.plugin.name}.log.txt`),this.midAction.set(!1)}catch(t){let a;try{t instanceof ei&&t.error?.text&&(a=JSON.parse(yield t.error.text()).message)}catch(s){console.error(s)}this.$toastr.error(a||this.$translate.instant("logs.download.error"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}}catch(t){this.midAction.set(!1)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}getPluginLog(){return M(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.$settings.getTerminalOptions(),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=O({type:n,selectors:[["app-plugin-logs"]],viewQuery:function(i,t){i&1&&Je(t.termTarget,uo,5),i&2&&Qe()},hostBindings:function(i,t){i&1&&E("resize",function(){return t.onWindowResize()},qt)},decls:22,vars:27,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","plugin-log-output","terminal","align-self-end","w-100","h-100","mb-0"],[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","container","modal","placement","top","triggers","hover",1,"btn","btn-primary",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-download"],["type","button","container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"ngbTooltip","openDelay","disabled"],["type","button","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){i&1&&(r(0,"div",1)(1,"div",2)(2,"h5",3),m(3),l(),r(4,"button",4),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(6,"div",5),v(7,"div",6,0),l(),r(9,"div",7)(10,"div",8)(11,"button",9),d(12,"translate"),E("click",function(){return t.dismissModal()}),m(13),d(14,"translate"),l()(),v(15,"div",10),r(16,"div",11)(17,"button",12),d(18,"translate"),d(19,"translate"),E("click",function(){return t.downloadLogFile()}),v(20,"i",13),l(),_(21,_o,4,8,"button",14),l()()()),i&2&&(D("terminal-light-theme",t.isLightTerminalTheme),o(3),S((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),y("disabled",t.midAction()),V("aria-label",p(5,17,"form.button_close")),o(3),D("terminal-dark-bg",!t.isLightTerminalTheme)("terminal-light-bg",t.isLightTerminalTheme),o(4),y("disabled",t.midAction()),V("aria-label",p(12,19,"form.button_close")),o(2),w(" ",p(14,21,"form.button_close")," "),o(4),y("ngbTooltip",p(18,23,"logs.title_download_log_file"))("openDelay",150)("disabled",t.midAction()),V("aria-label",p(19,25,"logs.title_download_log_file")),o(4),f(t.childBridges.length?21:-1))},dependencies:[ye,H],encapsulation:2,changeDetection:0})}return n})();var Hi=me(lt(),1);var Nt=()=>({app:"Homebridge v2"});function ho(n,c){n&1&&(r(0,"div",5),v(1,"i",12),l())}function bo(n,c){n&1&&(r(0,"p",9),m(1,"All your plugins are marked as compatible with Homebridge v2."),l())}function Co(n,c){n&1&&(r(0,"p",9),m(1,"To ignore this warning and continue with the update, click continue below."),l())}function vo(n,c){if(n&1&&(r(0,"p",9),m(1," Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does "),r(2,"span",17),m(3,"not"),l(),m(4," necessarily mean that they won't work. We just can't guarantee that they will. "),l(),r(5,"p",9),m(6," For more information about this update, please see the "),r(7,"a",18),m(8,"wiki page"),l(),m(9,". "),l(),_(10,Co,2,0,"p",9)),n&2){let e=g(2);o(10),f(e.isUpdating?10:-1)}}function xo(n,c){n&1&&(r(0,"div",19),m(1," Node.js Version"),v(2,"br"),r(3,"span",20),m(4),d(5,"translate"),l()(),r(6,"div",21),v(7,"i",22),l()),n&2&&(o(4),S(G(5,1,"status.readiness.node_yes",le(4,Nt))))}function yo(n,c){n&1&&(r(0,"div",19),m(1," Node.js Version"),v(2,"br"),r(3,"span",20),m(4),d(5,"translate"),l(),v(6,"br"),r(7,"a",23),m(8),d(9,"translate"),v(10,"i",24),l()(),r(11,"div",21),v(12,"i",25),l()),n&2&&(o(4),S(G(5,2,"status.readiness.node_no",le(7,Nt))),o(4),w(" ",p(9,5,"plugins.compat.node_link")," "))}function wo(n,c){n&1&&v(0,"i",28)}function So(n,c){n&1&&v(0,"i",29)}function Bo(n,c){if(n&1){let e=T();r(0,"li",16)(1,"div",26)(2,"img",27),E("error",function(){let t=B(e).$implicit,a=g(2);return k(a.handleIconError(t))}),l()(),r(3,"div",19),m(4),l(),r(5,"div",21),_(6,wo,1,0,"i",28),_(7,So,1,0,"i",29),l()()}if(n&2){let e=c.$implicit;o(2),y("src",e.icon,Ke),o(2),S(e.displayName),o(2),f(e.hb2Ready==="supported"?6:-1),o(),f(e.hb2Ready==="unknown"?7:-1)}}function ko(n,c){if(n&1&&(r(0,"div",13),v(1,"img",14),l(),_(2,bo,2,0,"p",9)(3,vo,11,1),r(4,"ul",15)(5,"li",16),_(6,xo,8,5)(7,yo,13,8),l(),te(8,Bo,8,4,"li",16,ee),l()),n&2){let e=g();o(2),f(e.allPluginsSupported()?2:3),o(4),f(e.nodeReady()?6:7),o(2),ie(e.installedPlugins())}}function Mo(n,c){if(n&1){let e=T();r(0,"button",30),d(1,"translate"),E("click",function(){B(e);let t=g();return k(t.closeModal("Dismiss"))}),m(2),d(3,"translate"),l()}n&2&&(V("aria-label",p(1,2,"form.button_close")),o(2),w(" ",p(3,4,"form.button_close")," "))}function Eo(n,c){if(n&1){let e=T();r(0,"button",30),d(1,"translate"),E("click",function(){B(e);let t=g();return k(t.closeModal("Dismiss"))}),m(2),d(3,"translate"),l()}n&2&&(V("aria-label",p(1,2,"form.button_close")),o(2),w(" ",p(3,4,"form.button_close")," "))}function To(n,c){if(n&1){let e=T();r(0,"button",31),E("click",function(){B(e);let t=g();return k(t.closeModal("update"))}),m(1),d(2,"translate"),l()}if(n&2){let e=g();y("disabled",e.loading()),o(),w(" ",p(2,2,"form.button_continue")," ")}}var zi=(()=>{class n{$activeModal=C(K);$api=C(j);$settings=C(q);$toastr=C(U);$translate=C(R);$ws=C(xe);io;modalData=C(ut);isUpdating=this.modalData.isUpdating;skipIfCompatible=this.modalData.skipIfCompatible;defaultIcon="assets/hb-icon.png";loading=x(!0);installedPlugins=x([]);allPluginsSupported=x(!0);nodeReady=x(!1);ngOnInit(){this.initialize()}initialize(){return M(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 M(this,null,function*(){try{let{nodeVersion:e}=yield Ue(this.io.request("get-homebridge-server-info"));this.nodeReady.set((0,Hi.satisfies)(e,">=22"))}catch(e){console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}loadInstalledPlugins(){return M(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 s=a.engines?.homebridge?.split("||").map(b=>b.trim())||[],u=e==="2"?"hide":s.some(b=>b.startsWith("^2")||b.startsWith(">=2"))?"supported":"unknown";return u==="unknown"&&this.allPluginsSupported.set(!1),F(L({},a),{hb2Ready:u})}).sort((a,s)=>a.name.localeCompare(s.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"))}})}handleIconError(e){e.icon=this.defaultIcon}closeModal(e){this.$activeModal.close(e)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-hb-v2-modal"]],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","icon-xl"],[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"],[1,"me-3"],["alt","","aria-hidden","true",1,"plugin-icon-small",3,"error","src"],["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&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),d(4,"translate"),l(),r(5,"button",3),d(6,"translate"),E("click",function(){return t.closeModal("Dismiss")}),l()(),r(7,"div",4),_(8,ho,2,0,"div",5)(9,ko,10,2),l(),r(10,"div",6)(11,"div",7),_(12,Mo,4,6,"button",8),l(),r(13,"div",9),_(14,Eo,4,6,"button",8),l(),r(15,"div",10),_(16,To,3,4,"button",11),l()()()),i&2&&(o(3),S(G(4,6,"status.readiness.title",le(11,Nt))),o(2),V("aria-label",p(6,9,"form.button_close")),o(3),f(t.loading()?8:9),o(4),f(t.isUpdating?12:-1),o(2),f(t.isUpdating?-1:14),o(2),f(t.isUpdating?16:-1))},dependencies:[Zt,H],encapsulation:2,changeDetection:0})}return n})();var Po=(n,c,e,i,t)=>({iconStar:n,iconThumbsUp:c,iconCoffee:e,iconHeart:i,link:t}),Vo=()=>["homebridge","homebridge-config-ui-x"],Io=n=>({pluginName:n});function $o(n,c){n&1&&(r(0,"p",13),m(1),d(2,"translate"),l()),n&2&&(o(),S(p(2,1,"plugins.settings.restart_required")))}function Do(n,c){n&1&&(r(0,"p",13),m(1),d(2,"translate"),l()),n&2&&(o(),S(p(2,1,"restart.child_bridges")))}function Ao(n,c){if(n&1&&(v(0,"p",12),d(1,"translate"),_(2,$o,3,3,"p",13)(3,Do,3,3,"p",13)),n&2){let e=g(3);y("innerHTML",G(1,2,e.supportMessageKey(),Xt(5,Po,e.iconStar,e.iconThumbsUp,e.iconCoffee,e.iconHeart,e.donationLink())),re),o(2),f(e.childBridges().length===0?2:3)}}function No(n,c){if(n&1&&(r(0,"div",9),v(1,"i",10),l(),r(2,"h5",11),m(3),l(),_(4,Ao,4,11)),n&2){let e=g(2);o(3),Xe("",e.pastTenseVerb(),": ",e.pluginDisplayName," (",e.targetVersionPretty(),")"),o(),f(e.isDisabled?-1:4)}}function Lo(n,c){if(n&1&&(r(0,"div",6),_(1,No,5,4),l()),n&2){let e=g();o(),f(e.justUpdatedPlugin()?1:-1)}}function jo(n,c){if(n&1&&(r(0,"div",7)(1,"div",9),v(2,"i",14),l(),r(3,"ul",15)(4,"li"),m(5),d(6,"translate"),l(),r(7,"li"),m(8),d(9,"translate"),l()(),r(10,"pre",16),m(11),l()()),n&2){let e=g();o(2),D("fa-arrow-alt-circle-down",e.action==="Install")("fa-code-compare",e.action==="Update"&&e.installedVersion)("fa-arrow-alt-circle-up",e.action==="Update"&&!e.installedVersion)("fa-trash",e.action==="Uninstall"),o(3),S(p(6,12,"plugins.manage.online_updates")),o(3),S(p(9,14,"plugins.manage.manual_update_command")),o(3),fe(`hb-service stop
npm install -g `,e.pluginName,"@",e.targetVersion,`
hb-service start`)}}function Fo(n,c){if(n&1&&(r(0,"span"),m(1),l()),n&2){let e=g(3);o(),w("v",e.installedVersion," \u2192 ")}}function Oo(n,c){if(n&1&&(r(0,"h5",18),_(1,Fo,2,1,"span"),m(2),l()),n&2){let e=g(2);o(),f(e.installedVersion?1:-1),o(),w(" ",e.targetVersionPretty()," ")}}function Ro(n,c){n&1&&(r(0,"div",27),v(1,"i",28),l())}function Uo(n,c){if(n&1&&v(0,"markdown",29),n&2){let e=g(4);y("data",e.versionNotes())}}function Ho(n,c){n&1&&(r(0,"div",30),m(1),d(2,"translate"),l()),n&2&&(o(),w(" ",p(2,1,"plugins.manage.notes_none")," "))}function zo(n,c){if(n&1&&(r(0,"div",30),m(1),d(2,"translate"),v(3,"br"),m(4),d(5,"translate"),v(6,"br"),m(7),d(8,"translate"),v(9,"br"),l()),n&2){let e=g(6);o(),w(" ",G(2,3,"plugins.manage.notes_beta_1",de(10,Io,e.pluginDisplayName))),o(3),w(" ",p(5,6,"plugins.manage.notes_beta_2")),o(3),w(" ",p(8,8,"plugins.manage.notes_beta_3"))}}function qo(n,c){n&1&&(r(0,"div",30),m(1),d(2,"translate"),l()),n&2&&(o(),w(" ",p(2,1,"plugins.manage.notes_latest")," "))}function Wo(n,c){if(n&1&&_(0,zo,10,12,"div",30)(1,qo,3,3,"div",30),n&2){let e=g(5);f(e.targetVersion.includes("beta")||e.targetVersion.includes("alpha")||e.targetVersion.includes("next")?0:1)}}function Go(n,c){if(n&1&&_(0,Ho,3,3,"div",30)(1,Wo,2,1),n&2){let e=g(4);f(e.versionNotesShow()?0:1)}}function Ko(n,c){if(n&1&&_(0,Uo,1,1,"markdown",29)(1,Go,2,1),n&2){let e=g(3);f(e.versionNotes()?0:1)}}function Jo(n,c){if(n&1&&(r(0,"div",26),_(1,Ro,2,0,"div",27)(2,Ko,2,1),l()),n&2){let e=g(2);o(),f(e.action==="Update"&&!e.versionNotesLoaded()?1:2)}}function Qo(n,c){n&1&&(r(0,"div",27),v(1,"i",28),l())}function Yo(n,c){if(n&1&&v(0,"markdown",29),n&2){let e=g(4);y("data",e.fullChangelog())}}function Xo(n,c){n&1&&(v(0,"div",31),d(1,"translate")),n&2&&y("innerHTML",p(1,1,"plugins.manage.changelog_none"),re)}function Zo(n,c){if(n&1&&_(0,Yo,1,1,"markdown",29)(1,Xo,2,3,"div",31),n&2){let e=g(3);f(e.fullChangelog()?0:1)}}function ea(n,c){if(n&1&&(r(0,"div",26),_(1,Qo,2,0,"div",27)(2,Zo,2,1),l()),n&2){let e=g(2);o(),f(e.action==="Update"&&!e.fullChangelogLoaded()?1:2)}}function ta(n,c){n&1&&(r(0,"span",34),v(1,"i",37),l())}function ia(n,c){if(n&1){let e=T();r(0,"a",38),E("click",function(){B(e);let t=g(3);return k(t.downloadBackupFile())}),v(1,"i",39),l()}}function na(n,c){if(n&1&&(r(0,"div",25)(1,"p",32)(2,"span",33),m(3),d(4,"translate"),l(),_(5,ta,2,0,"span",34)(6,ia,2,0,"a",35),l(),r(7,"p",36),m(8),d(9,"translate"),l()()),n&2){let e=g(2);o(3),S(p(4,3,"plugins.manage.backup")),o(2),f(e.downloadingBackup()?5:6),o(3),S(p(9,5,"plugins.manage.hb_restart"))}}function oa(n,c){if(n&1){let e=T();r(0,"div",6)(1,"div",9),v(2,"i",17),l(),_(3,Oo,3,2,"h5",18),r(4,"ul",19,0),E("activeIdChange",function(t){B(e);let a=g();return k(a.releaseNotesTab.set(t))}),r(6,"li",20)(7,"button",21),m(8),d(9,"translate"),l(),Vt(10,Jo,3,1,"ng-template",22),l(),r(11,"li",20)(12,"button",23),m(13),d(14,"translate"),l(),Vt(15,ea,3,1,"ng-template",22),l()(),v(16,"div",24),_(17,na,10,7,"div",25),l()}if(n&2){let e=Ye(5),i=g();o(2),D("fa-arrow-alt-circle-down",i.action==="Install"&&!i.installedVersion)("fa-code-compare",i.action==="Install"&&i.installedVersion)("fa-arrow-alt-circle-up",i.action==="Update")("fa-trash",i.action==="Uninstall"),o(),f(i.latestVersion?3:-1),o(),y("activeId",i.releaseNotesTab()),o(2),y("ngbNavItem",1),o(2),S(p(9,16,"plugins.manage.notes")),o(3),y("ngbNavItem",2),o(2),w(" ",p(14,18,"plugins.manage.changelog")," "),o(3),y("ngbNavOutlet",e),o(),f(le(20,Vo).includes(i.pluginName)?17:-1)}}function aa(n,c){if(n&1){let e=T();r(0,"button",45),d(1,"translate"),E("click",function(){B(e);let t=g(2);return k(t.backToVersionModal&&!t.actionComplete()?t.goBack():t.dismissModal())}),m(2),d(3,"translate"),l()}if(n&2){let e=g(2);V("aria-label",p(1,2,e.backToVersionModal&&!e.actionComplete()?"form.button_back":"form.button_close")),o(2),w(" ",p(3,4,e.backToVersionModal&&!e.actionComplete()?"form.button_back":"form.button_close")," ")}}function ra(n,c){if(n&1){let e=T();r(0,"button",45),d(1,"translate"),E("click",function(){B(e);let t=g(2);return k(t.dismissModal())}),m(2),d(3,"translate"),l()}n&2&&(V("aria-label",p(1,2,"form.button_close")),o(2),w(" ",p(3,4,"form.button_close")," "))}function la(n,c){if(n&1){let e=T();r(0,"button",46),E("click",function(){B(e);let t=g(2);return k(t.update())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_continue")," "))}function sa(n,c){if(n&1){let e=T();r(0,"button",46),E("click",function(){B(e);let t=g(2);return k(t.childBridges().length>0?t.onRestartChildBridgeClick():t.onRestartHomebridgeClick())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"menu.tooltip_restart")," "))}function da(n,c){if(n&1){let e=T();r(0,"button",46),E("click",function(){B(e);let t=g(2);return k(t.downloadLogFile())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_download")," "))}function ca(n,c){if(n&1&&(r(0,"div",8)(1,"div",40),_(2,aa,4,6,"button",41),l(),r(3,"div",42),_(4,ra,4,6,"button",41),l(),r(5,"div",43),_(6,la,3,3,"button",44),_(7,sa,3,3,"button",44),_(8,da,3,3,"button",44),l()()),n&2){let e=g();o(2),f(!e.justUpdatedPlugin()&&e.onlineUpdateOk()||e.justUpdatedPlugin()&&(!e.isDisabled||e.actionFailed())?2:-1),o(2),f(e.justUpdatedPlugin()&&e.isDisabled&&!e.actionFailed()||!e.onlineUpdateOk()?4:-1),o(2),f(e.onlineUpdateOk()&&e.releaseNotesShow()?6:-1),o(),f(e.justUpdatedPlugin()&&!e.isDisabled?7:-1),o(),f(e.actionFailed()?8:-1)}}var ma=/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,pa=/ko-?fi/i,ga=/^\d/,Le=(()=>{class n{$activeModal=C(K);$api=C(j);$backup=C(Di);$modal=C(ae);$router=C(pe);$settings=C(q);$toastr=C(U);$translate=C(R);$ws=C(xe);injector=C(se);modalData=C(ue);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;backToVersionModal=this.modalData.backToVersionModal??null;targetVersionPretty=x("");actionComplete=x(!1);actionFailed=x(!1);justUpdatedPlugin=x(!1);updateToBeta=x(!1);childBridges=x([]);pastTenseVerb=x("");onlineUpdateOk=x(!1);versionNotes=x("");versionNotesLoaded=x(!1);versionNotesShow=x(!1);fullChangelog=x("");fullChangelogLoaded=x(!1);releaseNotesShow=x(!1);isConfigured=x(this.initialIsConfigured);supportMessageKey=x("");donationLink=x("");downloadingBackup=x(!1);presentTenseVerb=x("");releaseNotesTab=x(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;termTarget;fitAddon=new _t;webLinksAddon=new ft;errorLog="";get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()==="light"}constructor(){this.term=new ht(this.$settings.getTerminalOptions({disableStdin:!0})),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}`:ga.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(ma,"").trimEnd();a&&(this.errorLog+=`${a}\r
`)}),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.targetVersion===this.installedVersion?(this.presentTenseVerb.set(this.$translate.instant("plugins.manage.reinstall")),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.reinstalled"))):(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=pa.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:()=>M(this,null,function*(){if(this.pluginName==="homebridge-config-ui-x")try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),window.location.href="restart"}catch(e){console.error("Failed to 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 M(this,null,function*(){try{for(let i of this.childBridges())yield this.$api.put(`/server/restart/${i.username}`,{});let e=z([{provide:dt,useValue:{plugin:{name:this.pluginName,displayName:this.pluginDisplayName},childBridges:this.childBridges()}}],this.injector);this.$modal.open(Ui,{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,Wi.saveAs)(e,`${this.pluginName}-error.log`)}downloadBackupFile(){return M(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")}goBack(){return M(this,null,function*(){this.$activeModal.dismiss("Back");let e=z([{provide:Ve,useValue:{plugin:this.backToVersionModal,onRefreshPluginList:this.onRefreshPluginList}}],this.injector),i=this.$modal.open(kt,{size:"lg",backdrop:"static",injector:e});try{let{action:t,version:a}=yield i.result,s=z([{provide:ue,useValue:{action:t==="alternate"?"Update":"Install",pluginName:this.pluginName,pluginDisplayName:this.pluginDisplayName,targetVersion:a,latestVersion:this.latestVersion,installedVersion:this.installedVersion,isDisabled:this.isDisabled,isConfigured:this.initialIsConfigured,onRefreshPluginList:this.onRefreshPluginList,verifiedPlugin:this.verifiedPlugin,verifiedPlusPlugin:this.verifiedPlusPlugin,funding:this.funding,backToVersionModal:this.backToVersionModal}}],this.injector);this.$modal.open(n,{size:"lg",backdrop:"static",injector:s})}catch(t){}})}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:()=>M(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(_e,{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 M(this,null,function*(){let e="update";if(Number(this.installedVersion.split(".")[0])<2&&["2","alpha","beta"].includes(this.targetVersion.split(".")[0])){let i=z([{provide:ut,useValue:{isUpdating:!0,skipIfCompatible:!1}}],this.injector);e=yield this.$modal.open(zi,{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:()=>M(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 M(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 M(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=O({type:n,selectors:[["app-manage-plugin"]],decls:11,vars:15,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","icon-xl"],[1,"text-center","mb-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"fas","primary-text","icon-xl"],[1,"mb-3"],[1,"p-2","mb-0"],[1,"far","primary-text","icon-xl"],[1,"mb-4","text-center"],["ngbNav","",1,"nav-tabs","px-0",3,"activeIdChange","activeId"],[1,"w-50","m-0",3,"ngbNavItem"],["ngbNavLink","","type","button",1,"w-100","release-tab"],["ngbNavContent",""],["type","button","ngbNavLink","",1,"w-100","release-tab"],[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","icon-xl"],[1,"plugin-md",3,"data"],[1,"w-100","text-center","grey-text","mt-3","mb-4"],[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"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-primary",3,"click"]],template:function(i,t){i&1&&(r(0,"div",1)(1,"div",2)(2,"h5",3),m(3),l(),r(4,"button",4),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),v(6,"div",5),_(7,Lo,2,1,"div",6),_(8,jo,12,16,"div",7),_(9,oa,18,21,"div",6),_(10,ca,9,5,"div",8),l()),i&2&&(D("terminal-light-theme",t.isLightTerminalTheme),o(3),S(t.pluginDisplayName),o(),V("aria-label",p(5,13,"form.button_close")),o(2),D("terminal-light-bg",t.isLightTerminalTheme)("terminal-dark-bg",!t.isLightTerminalTheme),y("hidden",!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()),o(),f(t.actionComplete()?7:-1),o(),f(t.onlineUpdateOk()?-1:8),o(),f(t.releaseNotesShow()&&!t.actionComplete()&&t.onlineUpdateOk()?9:-1),o(),f(!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()||t.actionFailed()?10:-1))},dependencies:[$e,Ie,De,$i,Vi,Pi,Ti,Ii,H],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[_ngcontent-%COMP%]{--bs-nav-tabs-border-width: 0}"],changeDetection:0})}return n})();var Gi=me(Nn(),1);var Mt=(()=>{class n{transform(e){return e.replace(mi,location.hostname)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=Gt({name:"interpolateMd",type:n,pure:!0})}return n})();function ua(n,c){n&1&&(r(0,"div",5),v(1,"i",14),l())}function _a(n,c){n&1&&(r(0,"div",6),m(1),d(2,"translate"),d(3,"translate"),l()),n&2&&(o(),fe(" ",p(2,2,"plugins.settings.message_manual_config_required")," ",p(3,4,"plugins.settings.message_consult_documentation")," "))}function fa(n,c){if(n&1&&(v(0,"markdown",7),d(1,"interpolateMd")),n&2){let e=g();y("data",p(1,1,e.schema==null?null:e.schema.headerDisplay))}}function ha(n,c){if(n&1){let e=T();r(0,"button",28),d(1,"translate"),E("click",function(){B(e);let t=g(2).$index,a=g(2);return k(a.removeBlock(t))}),v(2,"i",29),l()}n&2&&y("ngbTooltip",p(1,2,"form.button_delete"))("openDelay",150)}function ba(n,c){if(n&1){let e=T();_(0,ha,3,4,"button",25),r(1,"button",26),d(2,"translate"),E("click",function(){B(e);let t=g().$index,a=g(2);return k(a.editBlock(t))}),v(3,"i",27),l()}if(n&2){let e=g().$index,i=g(2);f(i.show()===`configBlock.${e}`?0:-1),o(),y("ngbTooltip",p(2,3,"form.button_edit"))("openDelay",150)}}function Ca(n,c){if(n&1&&(v(0,"i",30),d(1,"translate")),n&2){let e=g().$index,i=g(2);D("fa-circle-check",i.formBlocksValid()[e])("green-text",i.formBlocksValid()[e])("fa-circle-exclamation",!i.formBlocksValid()[e])("red-text",i.strictValidation()&&!i.formBlocksValid()[e])("orange-text",!i.strictValidation()&&!i.formBlocksValid()[e]),y("ngbTooltip",p(1,12,i.formBlocksValid()[e]?"form.label_valid":i.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function va(n,c){if(n&1){let e=T();r(0,"div",16)(1,"div",18)(2,"div",19)(3,"h5",20),m(4),l(),r(5,"div"),_(6,ba,4,5),_(7,Ca,2,14,"i",21),l()()(),r(8,"div",22)(9,"div",23)(10,"ngx-monaco-editor",24),E("ngModelChange",function(t){B(e);let a=g(2);return k(a.currentBlock.set(t))})("onInit",function(t){B(e);let a=g(2);return k(a.onEditorInit(t))}),l()()()()}if(n&2){let e=c.$implicit,i=c.$index,t=c.$count,a=g(2);y("ngbAccordionItem",`configBlock.${i}`)("collapsed",a.show()!==`configBlock.${i}`)("id",`configBlock.${i}`),o(4),S(e.name||a.pluginAlias()),o(2),f(!(a.schema!=null&&a.schema.singular)||t>1?6:-1),o(),f(a.schema!=null&&a.schema.singular?-1:7),o(3),y("options",a.editorOptions)("ngModel",a.currentBlock())}}function xa(n,c){if(n&1&&(r(0,"div",17),v(1,"markdown",7),d(2,"interpolateMd"),l()),n&2){let e=g(2);o(),y("data",p(2,1,e.schema==null?null:e.schema.footerDisplay))}}function ya(n,c){if(n&1&&(r(0,"div",15),te(1,va,11,8,"div",16,ee),l(),_(3,xa,3,3,"div",17)),n&2){let e=g();y("closeOthers",!0),o(),ie(e.pluginConfig()),o(2),f(e.schema!=null&&e.schema.footerDisplay?3:-1)}}function wa(n,c){if(n&1&&(v(0,"i",35),d(1,"translate")),n&2){let e=g(2);D("fa-circle-check",e.formIsValid())("green-text",e.formIsValid())("fa-circle-exclamation",!e.formIsValid())("red-text",e.strictValidation()&&!e.formIsValid())("orange-text",!e.strictValidation()&&!e.formIsValid()),y("ngbTooltip",p(1,12,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function Sa(n,c){if(n&1){let e=T();r(0,"button",36),E("click",function(){B(e);let t=g(2);return k(t.addBlock())}),v(1,"i",37),l()}}function Ba(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"form.button_save")," ")}function ka(n,c){n&1&&v(0,"i",34)}function Ma(n,c){if(n&1){let e=T();_(0,wa,2,14,"i",31)(1,Sa,2,0,"button",32),r(2,"button",33),E("click",function(){B(e);let t=g();return k(t.save())}),_(3,Ba,2,3)(4,ka,1,0,"i",34),l()}if(n&2){let e=g();f(e.schema!=null&&e.schema.singular?0:1),o(2),y("disabled",e.saveInProgress()||!e.formIsValid()&&e.strictValidation()),o(),f(e.saveInProgress()?4:3)}}function Ea(n,c){if(n&1){let e=T();r(0,"button",38),E("click",function(){B(e);let t=g();return k(t.openFullConfigEditor())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"plugins.settings.label_open_config_editor")," "))}var Lt=(()=>{class n{$activeModal=C(K);$api=C(j);$cb=C(Ne);$md=C(xi);$plugin=C(we);$router=C(pe);$settings=C(q);$toastr=C(U);$translate=C(R);modalData=C(Se);plugin=this.modalData.plugin;schema=this.modalData.schema;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");pluginAlias=x("");pluginType=x(null);loading=x(!0);canConfigure=x(!1);show=x("");pluginConfig=x([]);currentBlock=x(void 0);currentBlockIndex=x(null);saveInProgress=x(!1);isFirstSave=x(!1);monacoEditor;formBlocksValid=x({});formIsValid=x(!0);strictValidation=x(!1);editorOptions;arrayKey=Me(()=>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 M(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(s=>s.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(s=>s.uri!==i);window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:a})}this.monacoEditor&&this.monacoEditor.dispose()}catch(e){}}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=>F(L({},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=>F(L({},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 s=[...a];return s.splice(t,1),s}),this.currentBlockIndex.set(null),this.currentBlock.set(void 0),this.show.set("")}save(){return M(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=Dt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"}),u=[...e.required||[]];this.pluginType()==="platform"?(u.includes("platform")||u.push("platform"),e.properties?.platform?e.properties.platform.const=this.pluginAlias():e.properties=F(L({},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()}})):(u.includes("accessory")||u.push("accessory"),u.includes("name")||u.push("name"),e.properties?.accessory?e.properties.accessory.const=this.pluginAlias():e.properties=F(L({},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:F(L({},e),{required:u,properties:F(L({},e.properties),{_bridge:a})})}]})}createBasicSchema(){let e=Dt(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(s=>s.severity===t.MarkerSeverity.Error||s.severity===t.MarkerSeverity.Warning).length}onValidationChange(){this.currentBlockIndex()!==null&&this.monacoEditor&&(this.formBlocksValid.update(e=>F(L({},e),{[this.currentBlockIndex()]:this.isJsonValid()})),this.updateOverallValidation())}updateOverallValidation(){this.formIsValid.set(Object.values(this.formBlocksValid()).every(e=>e))}loadPluginAlias(){return M(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(i){this.loading.set(!1)}})}loadHomebridgeConfig(){return M(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=Gi.default.parse(e)}catch(s){return console.error(s),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(s=>delete a[s]),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=O({type:n,selectors:[["app-manual-config"]],decls:20,vars:15,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"],["type","button",1,"btn","btn-primary"],[1,"fa","fa-circle-notch","fa-spin","icon-xl"],["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,"fa-circle-check","green-text","fa-circle-exclamation","red-text","orange-text","ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body","p-0","editor-body"],[1,"flex-grow-1","h-100","w-100","mb-0","pb-0",3,"ngModelChange","onInit","options","ngModel"],["type","button","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"ngbTooltip","openDelay"],["type","button","ngbAccordionToggle","","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2","me-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-edit"],["type","button","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,"fa-circle-check","green-text","fa-circle-exclamation","red-text","orange-text","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"],["type","button",1,"btn","btn-primary",3,"click"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),l(),r(4,"button",3),d(5,"translate"),E("click",function(){return t.closeModal()}),l()(),r(6,"div",4),_(7,ua,2,0,"div",5),_(8,_a,4,6,"div",6),_(9,fa,2,3,"markdown",7),_(10,ya,4,2),l(),r(11,"div",8)(12,"div",9)(13,"button",10),E("click",function(){return t.closeModal()}),m(14),d(15,"translate"),l()(),v(16,"div",11),r(17,"div",12),_(18,Ma,5,3)(19,Ea,3,3,"button",13),l()()()),i&2&&(o(3),fe("",(t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)," - ",t.pluginType()),o(),y("disabled",t.saveInProgress()),V("aria-label",p(5,11,"form.button_close")),o(3),f(t.loading()?7:-1),o(),f(!t.loading()&&!t.canConfigure()?8:-1),o(),f(t.schema!=null&&t.schema.headerDisplay?9:-1),o(),f(!t.loading()&&t.canConfigure()?10:-1),o(3),y("disabled",t.saveInProgress()),o(),w(" ",p(15,13,"form.button_close")," "),o(4),f(t.canConfigure()?18:19))},dependencies:[St,wt,yt,ye,vt,Ct,Ai,ve,be,Ce,xt,$e,Ie,De,H,Mt],styles:[".no-padding-card-body[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]{padding:0!important}.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}.editor-body[_ngcontent-%COMP%]{height:400px}"],changeDetection:0})}return n})();var jt=n=>({link:n});function Ta(n,c){if(n&1){let e=T();r(0,"button",14),d(1,"translate"),E("click",function(){B(e);let t=g();return k(t.closeModal())}),l()}if(n&2){let e=g();y("disabled",e.saveInProgress()),V("aria-label",p(1,2,"form.button_close"))}}function Pa(n,c){n&1&&(r(0,"div",6),v(1,"i",15),l())}function Va(n,c){n&1&&(r(0,"li"),m(1),d(2,"translate"),l()),n&2&&(o(),S(p(2,1,"child_bridge.bridges_paired_2")))}function Ia(n,c){if(n&1&&(r(0,"li"),m(1),d(2,"translate"),l(),_(3,Va,3,3,"li")),n&2){let e,i=g(2);o(),S(p(2,2,"child_bridge.bridges_paired")),o(2),f(i.configBlocks().length===1&&!i.deviceInfo().get((e=i.configBlocks()[0]._bridge)==null?null:e.username)&&i.originalBridges().length===0?3:-1)}}function $a(n,c){if(n&1&&(r(0,"option",30),m(1),l()),n&2){let e=c.$implicit,i=c.$index;y("value",i),o(),S(e.name||e.platform||e.accessory)}}function Da(n,c){if(n&1){let e=T();r(0,"ul",22)(1,"li",26),m(2),d(3,"translate"),l(),r(4,"li",24)(5,"label",27),m(6),d(7,"translate"),l(),r(8,"div",28)(9,"select",29),E("ngModelChange",function(t){B(e);let a=g(3);return a.selectedBlock.set(t),k(a.onBlockChange(t))}),te(10,$a,2,2,"option",30,ee),l()()()()}if(n&2){let e=g(3);o(2),S(p(3,3,"form.label.changes_kept")),o(4),w(" ",p(7,5,"accessories.plugin")," "),o(3),y("ngModel",e.selectedBlock()),o(),ie(e.configBlocks())}}function Aa(n,c){if(n&1&&m(0),n&2){let e=g().$implicit;fe(" ",e.name," \xB7 ",e.username," ")}}function Na(n,c){if(n&1&&m(0),n&2){let e=g().$implicit;w(" ",e.username," ")}}function La(n,c){if(n&1&&(r(0,"option",30),_(1,Aa,1,2)(2,Na,1,1),l()),n&2){let e=c.$implicit;y("value",e.username),o(),f(e.name?1:2)}}function ja(n,c){if(n&1){let e=T();r(0,"li",24)(1,"label",31),m(2),d(3,"translate"),l(),r(4,"div",28)(5,"select",32,0),E("change",function(){B(e);let t=Ye(6),a=g(3);return k(a.onLinkBridgeChange(t.value))}),r(7,"option",30),m(8),d(9,"translate"),l(),te(10,La,3,2,"option",30,ee),l()()()}if(n&2){let e=g(3);o(2),S(p(3,2,"child_bridge.config.or_link")),o(6),S(p(9,4,"child_bridge.config.select_existing")),o(2),ie(e.bridgesAvailableForLink())}}function Fa(n,c){n&1&&(r(0,"li",24)(1,"span",33),m(2,"Child Bridge"),l(),r(3,"div",34),m(4),d(5,"translate"),l()()),n&2&&(o(4),w(" ",p(5,1,"child_bridge.config.prevent")," "))}function Oa(n,c){if(n&1){let e=T();r(0,"li",25)(1,"span",8),m(2),d(3,"translate"),l(),r(4,"div",35)(5,"input",36),E("change",function(){B(e);let t=g(3);return k(t.toggleExternalBridge(t.configBlocks()[t.selectedBlock()],!t.enabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),l(),v(6,"label",37),l()()}if(n&2){let e=g(3);o(2),w(" ",p(3,4,e.currentlySelectedLink()?"child_bridge.config.or_link":"child_bridge.config.use")," "),o(3),y("id",`toggleExternalBridgeInput_${e.selectedBlock()}`)("checked",e.enabledBlocks()[e.selectedBlock()]),o(),y("for",`toggleExternalBridgeInput_${e.selectedBlock()}`)}}function Ra(n,c){if(n&1&&(r(0,"li",24)(1,"span",33),m(2),d(3,"translate"),l(),r(4,"div",38),m(5),l()()),n&2){let e=g(3);o(2),S(p(3,2,"child_bridge.config.name")),o(3),w(" ",e.currentlySelectedLink().name," ")}}function Ua(n,c){if(n&1&&(r(0,"li",24)(1,"span",33),m(2),d(3,"translate"),l(),r(4,"div",38),m(5),l()()),n&2){let e,i=g(3);o(2),S(p(3,2,"users.label_username")),o(3),w(" ",((e=i.currentlySelectedLink())==null?null:e.username)||((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)," ")}}function Ha(n,c){if(n&1&&(r(0,"li",24)(1,"span",33),m(2),d(3,"translate"),l(),r(4,"div",38),m(5),l()()),n&2){let e=g(3);o(2),S(p(3,2,"child_bridge.config.port")),o(3),w(" ",e.currentlySelectedLink().port," ")}}function za(n,c){if(n&1){let e=T();r(0,"li",25)(1,"span",8),m(2),d(3,"translate"),r(4,"code"),m(5,"-D"),l(),v(6,"br"),r(7,"small",59),m(8),d(9,"translate"),l()(),r(10,"div",35)(11,"input",61),d(12,"translate"),Z("ngModelChange",function(t){B(e);let a=g(6);return X(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled,t)||(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled=t),k(t)}),l(),v(13,"label",37),l()()}if(n&2){let e=g(6);o(2),w("",p(3,6,"child_bridge.config.debug")," "),o(6),S(p(9,8,"child_bridge.config.debug_desc")),o(3),y("id",`homebridgeDebugMode_${e.selectedBlock()}`),Y("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.debugModeEnabled),V("aria-label",p(12,10,"settings.startup.debug")),o(2),y("for",`homebridgeDebugMode_${e.selectedBlock()}`)}}function qa(n,c){if(n&1&&(r(0,"small",56),m(1),l()),n&2){let e=g(6);o(),w(" ",e.globalDebug(),", ")}}function Wa(n,c){if(n&1&&(r(0,"small",56),m(1),l()),n&2){let e=g(6);o(),w(" ",e.globalNodeOptions()," ")}}function Ga(n,c){if(n&1){let e=T();r(0,"li",24)(1,"label",49),m(2),d(3,"translate"),v(4,"br")(5,"small",50),d(6,"translate"),l(),r(7,"div",51)(8,"input",52),E("input",function(t){let a;B(e);let s=g(5);return k(s.onScheduledRestartCronChange(s.asInputElement(t.target).value,(a=s.configBlocks()[s.selectedBlock()]._bridge)==null?null:a.username))}),l()()(),_(9,za,14,12,"li",25),r(10,"li",24)(11,"label",53)(12,"span",54),m(13,"DEBUG"),l(),v(14,"br")(15,"small",55),d(16,"translate"),l(),r(17,"div",28),_(18,qa,2,1,"small",56),r(19,"input",57),Z("ngModelChange",function(t){B(e);let a=g(5);return X(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG=t),k(t)}),l()()(),r(20,"li",24)(21,"label",58)(22,"span",54),m(23,"NODE_OPTIONS"),l(),v(24,"br"),r(25,"small",59),m(26),d(27,"translate"),l()(),r(28,"div",28),_(29,Wa,2,1,"small",56),r(30,"input",60),Z("ngModelChange",function(t){B(e);let a=g(5);return X(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS=t),k(t)}),l()()()}if(n&2){let e,i=g(5);o(2),w(" ",p(3,10,"settings.startup.scheduled_restart")),o(3),y("innerHtml",G(6,12,"settings.startup.scheduled_restart_desc",de(20,jt,i.linkCron)),re),o(3),y("value",i.getScheduledRestartCron((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)),o(),f(i.canShowBridgeDebug()?9:-1),o(6),y("innerHTML",G(16,15,"settings.service.debug_tooltip_child",de(22,jt,i.linkDebug)),re),o(3),f(i.globalDebug()?18:-1),o(),Y("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.DEBUG),o(7),S(p(27,18,"settings.service.node_tooltip_child")),o(3),f(i.globalNodeOptions()?29:-1),o(),Y("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.NODE_OPTIONS)}}function Ka(n,c){if(n&1){let e=T();r(0,"li",24)(1,"label",43),m(2),d(3,"translate"),l(),r(4,"div",28)(5,"input",44),d(6,"translate"),Z("ngModelChange",function(t){B(e);let a=g(4);return X(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer,t)||(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer=t),k(t)}),l()()(),r(7,"li",24)(8,"label",45),m(9),d(10,"translate"),l(),r(11,"div",28)(12,"input",46),d(13,"translate"),Z("ngModelChange",function(t){B(e);let a=g(4);return X(a.configBlocks()[a.selectedBlock()]._bridge.model,t)||(a.configBlocks()[a.selectedBlock()]._bridge.model=t),k(t)}),l()()(),r(14,"li",24)(15,"label",47),m(16),d(17,"translate"),l(),r(18,"div",28)(19,"input",48),d(20,"translate"),Z("ngModelChange",function(t){B(e);let a=g(4);return X(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision,t)||(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision=t),k(t)}),l()()(),_(21,Ga,31,24)}if(n&2){let e=g(4);o(2),S(p(3,12,"child_bridge.config.manufacturer")),o(3),y("placeholder",p(6,14,"form.optional")),Y("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.manufacturer),o(4),S(p(10,16,"child_bridge.config.model")),o(3),y("placeholder",p(13,18,"form.optional")),Y("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.model),o(4),S(p(17,20,"child_bridge.config.firmware")),o(3),D("font-monospace",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),y("placeholder",p(20,22,"form.optional")),Y("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),o(2),f(e.justInstalled?-1:21)}}function Ja(n,c){if(n&1){let e=T();r(0,"li",24)(1,"label",39),m(2),d(3,"translate"),l(),r(4,"div",28)(5,"input",40),Z("ngModelChange",function(t){B(e);let a=g(3);return X(a.configBlocks()[a.selectedBlock()]._bridge.name,t)||(a.configBlocks()[a.selectedBlock()]._bridge.name=t),k(t)}),l()()(),r(6,"li",41),E("click",function(){B(e);let t=g(3);return k(t.showAdvanced.set(!t.showAdvanced()))})("keyup.enter",function(){B(e);let t=g(3);return k(t.showAdvanced.set(!t.showAdvanced()))}),r(7,"span",8),m(8),d(9,"translate"),l(),v(10,"i",42),l(),_(11,Ka,22,24)}if(n&2){let e=g(3);o(2),S(p(3,11,"child_bridge.config.name")),o(3),D("is-invalid",e.getHapNameValidationError(e.selectedBlock())),Y("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.name),o(),V("aria-expanded",e.showAdvanced()?"true":"false"),o(2),S(p(9,13,"common.labels.advanced")),o(2),D("fa-chevron-left",!e.showAdvanced())("fa-chevron-down",e.showAdvanced()),o(),f(e.showAdvanced()?11:-1)}}function Qa(n,c){n&1&&(r(0,"li",66)(1,"div",69)(2,"div",70)(3,"div")(4,"div",71),v(5,"i",72),l(),r(6,"div",73),m(7),d(8,"translate"),l()()()()()),n&2&&(o(7),S(p(8,1,"child_bridge.return_to_pair")))}function Ya(n,c){n&1&&(r(0,"span"),m(1),d(2,"translate"),l()),n&2&&(o(),w(" \xB7 ",p(2,1,"status.code_scan")))}function Xa(n,c){if(n&1){let e=T();r(0,"li",25)(1,"span",8),m(2),d(3,"translate"),l(),r(4,"div",35)(5,"input",36),d(6,"translate"),E("change",function(){let t;B(e);let a=g(5);return k(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"hap"))}),l(),v(7,"label",37),l()()}if(n&2){let e,i=g(5);o(2),S(p(3,5,"child_bridge.config.hide_pairing_alert")),o(3),y("id",`toggleHideHapUnpairing_${i.selectedBlock()}`)("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"hap")),V("aria-label",p(6,7,"child_bridge.config.hide_pairing_alert")),o(2),y("for",`toggleHideHapUnpairing_${i.selectedBlock()}`)}}function Za(n,c){if(n&1&&(r(0,"li",66)(1,"div",69),v(2,"app-qrcode",74),r(3,"p",75),m(4),l(),r(5,"p",76),v(6,"i",77),m(7),d(8,"translate"),_(9,Ya,3,3,"span"),l()()(),_(10,Xa,8,9,"li",25)),n&2){let e,i,t,a,s,u,b,h=g(4);o(2),y("data",(e=h.deviceInfo().get((e=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:e.username))==null?null:e._setupCode),o(2),w(" ",(i=h.deviceInfo().get((i=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pincode," "),o(2),D("green-text",(t=h.deviceInfo().get((t=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:t.username))==null?null:t._isPaired)("grey-text",!((a=h.deviceInfo().get((a=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:a.username))!=null&&a._isPaired)),o(),w(" ",p(8,9,(s=h.deviceInfo().get((s=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:s.username))!=null&&s._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),f((u=h.deviceInfo().get((u=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:u.username))!=null&&u._isPaired?-1:9),o(),f((b=h.deviceInfo().get((b=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:b.username))!=null&&b._isPaired?-1:10)}}function er(n,c){n&1&&(r(0,"span"),m(1),d(2,"translate"),l()),n&2&&(o(),w(" \xB7 ",p(2,1,"status.code_scan")))}function tr(n,c){if(n&1){let e=T();r(0,"li",25)(1,"span",8),m(2),d(3,"translate"),l(),r(4,"div",35)(5,"input",36),d(6,"translate"),E("change",function(){let t;B(e);let a=g(7);return k(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"matter"))}),l(),v(7,"label",37),l()()}if(n&2){let e,i=g(7);o(2),S(p(3,5,"child_bridge.config.hide_pairing_alert")),o(3),y("id",`toggleHideMatterUnpairing_${i.selectedBlock()}`)("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"matter")),V("aria-label",p(6,7,"child_bridge.config.hide_pairing_alert")),o(2),y("for",`toggleHideMatterUnpairing_${i.selectedBlock()}`)}}function ir(n,c){if(n&1&&(r(0,"li",66)(1,"div",69),v(2,"app-qrcode",74),r(3,"p",75),m(4),l(),r(5,"p",76),v(6,"i",77),m(7),d(8,"translate"),_(9,er,3,3,"span"),l()()(),_(10,tr,8,9,"li",25)),n&2){let e,i,t,a,s,u,b,h=g(6);o(2),y("data",(e=h.matterDeviceInfo().get((e=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:e.username))==null?null:e.setupUri),o(2),w(" ",(i=h.matterDeviceInfo().get((i=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pin," "),o(2),D("green-text",(t=h.matterDeviceInfo().get((t=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:t.username))==null?null:t.commissioned)("grey-text",!((a=h.matterDeviceInfo().get((a=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:a.username))!=null&&a.commissioned)),o(),w(" ",p(8,9,(s=h.matterDeviceInfo().get((s=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:s.username))!=null&&s.commissioned?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),f((u=h.matterDeviceInfo().get((u=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:u.username))!=null&&u.commissioned?-1:9),o(),f((b=h.matterDeviceInfo().get((b=h.configBlocks()[h.selectedBlock()]._bridge)==null?null:b.username))!=null&&b.commissioned?-1:10)}}function nr(n,c){n&1&&(r(0,"li",66)(1,"div",69)(2,"div",84)(3,"div")(4,"div",71),v(5,"i",72),l(),r(6,"div",73),m(7),d(8,"translate"),l()()()()()),n&2&&(o(7),S(p(8,1,"child_bridge.return_to_pair")))}function or(n,c){if(n&1){let e=T();r(0,"li",80)(1,"ul",81)(2,"li"),m(3),d(4,"translate"),l(),r(5,"li"),m(6),d(7,"translate"),l()()(),_(8,ir,11,11),_(9,nr,9,3,"li",66),r(10,"li",24)(11,"label",82),m(12),d(13,"translate"),v(14,"br"),r(15,"small",59),m(16),d(17,"translate"),l()(),r(18,"div",28)(19,"input",83),Z("ngModelChange",function(t){B(e);let a=g(5);return X(a.configBlocks()[a.selectedBlock()]._bridge.matter.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.matter.port=t),k(t)}),l()()()}if(n&2){let e,i,t=g(5);o(3),S(p(4,9,"child_bridge.config.matter_note_1")),o(3),S(p(7,11,"child_bridge.config.matter_note_2")),o(2),f((e=t.matterDeviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username))!=null&&e.setupUri?8:-1),o(),f(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),S(p(13,13,"child_bridge.config.port")),o(4),S(p(17,15,"child_bridge.config.matter_port_desc")),o(3),D("is-invalid",t.getMatterPortValidationError(t.selectedBlock())),Y("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.matter.port)}}function ar(n,c){if(n&1){let e=T();r(0,"ul",23)(1,"li",25)(2,"span",33),v(3,"i",78),m(4),d(5,"translate"),r(6,"span",79),m(7),d(8,"translate"),l()(),r(9,"div",35)(10,"input",36),E("change",function(){B(e);let t=g(4);return k(t.toggleMatterBridge(t.configBlocks()[t.selectedBlock()],!t.matterEnabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),l(),v(11,"label",37),l()(),_(12,or,20,17),l()}if(n&2){let e,i=g(4);o(4),w(" ",p(5,6,"matter_bridge.config.use")," "),o(3),S(p(8,8,"common.labels.beta")),o(3),y("id",`toggleMatterBridgeInput_${i.selectedBlock()}`)("checked",i.matterEnabledBlocks()[i.selectedBlock()]),o(),y("for",`toggleMatterBridgeInput_${i.selectedBlock()}`),o(),f(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 rr(n,c){if(n&1){let e=T();r(0,"ul",23)(1,"li",25)(2,"span",8),v(3,"i",62),m(4),d(5,"translate"),l(),r(6,"div",63),v(7,"input",64)(8,"label",65),l()(),_(9,Qa,9,3,"li",66),_(10,Za,11,11),r(11,"li",24)(12,"label",67),m(13),d(14,"translate"),v(15,"br"),r(16,"small",59),m(17),d(18,"translate"),l()(),r(19,"div",28)(20,"input",68),Z("ngModelChange",function(t){B(e);let a=g(3);return X(a.configBlocks()[a.selectedBlock()]._bridge.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.port=t),k(t)}),l()()()(),_(21,ar,13,10,"ul",23)}if(n&2){let e,i,t=g(3);o(4),w(" ",p(5,13,"child_bridge.config.enable_hap")," "),o(3),y("id",`toggleHapInput_${t.selectedBlock()}`)("checked",!0)("disabled",!0),o(),y("for",`toggleHapInput_${t.selectedBlock()}`),o(),f((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(),f(t.deviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username)?10:-1),o(3),S(p(14,15,"child_bridge.config.port")),o(4),S(p(18,17,"child_bridge.config.hap_port_desc")),o(3),D("is-invalid",t.getHapPortValidationError(t.selectedBlock())),Y("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.port),o(),f(t.isMatterSupported&&!t.configBlocks()[t.selectedBlock()].accessory?21:-1)}}function lr(n,c){if(n&1&&(_(0,Da,12,7,"ul",22),r(1,"ul",23),_(2,ja,12,6,"li",24),_(3,Fa,6,3,"li",24)(4,Oa,7,6,"li",25),_(5,Ra,6,4,"li",24),_(6,Ua,6,4,"li",24),_(7,Ha,6,4,"li",24),_(8,Ja,12,15),l(),_(9,rr,22,19)),n&2){let e,i,t,a,s=g(2);f(s.configBlocks().length>1?0:-1),o(2),f(!((e=s.configBlocks()[s.selectedBlock()]._bridge)!=null&&e.username)&&s.bridgesAvailableForLink().length&&!s.currentBridgeHasLinks()?2:-1),o(),f(s.currentBridgeHasLinks()?3:4),o(2),f(s.currentlySelectedLink()?5:-1),o(),f((s.currentlySelectedLink()||(i=s.configBlocks()[s.selectedBlock()]._bridge)!=null&&i.username)&&(s.currentlySelectedLink()||!s.currentBridgeHasLinks())?6:-1),o(),f(s.currentlySelectedLink()?7:-1),o(),f(!s.currentlySelectedLink()&&((t=s.configBlocks()[s.selectedBlock()]._bridge)!=null&&t.username)?8:-1),o(),f(!s.currentlySelectedLink()&&((a=s.configBlocks()[s.selectedBlock()]._bridge)!=null&&a.username)?9:-1)}}function sr(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"child_bridge.confirm_delete_2")," ")}function dr(n,c){if(n&1&&(r(0,"li"),v(1,"i",86),m(2),r(3,"span",59),m(4," \xB7 "),l(),r(5,"span",87),m(6),l()()),n&2){let e,i=c.$implicit,t=g(3);o(2),w(" ",i.bridgeName||((e=t.deviceInfo().get(i.id))==null?null:e.displayName)," "),o(4),S(i.id)}}function cr(n,c){if(n&1&&(r(0,"li"),v(1,"i",88),m(2),r(3,"span",59),m(4," \xB7 "),l(),r(5,"span",87),m(6),l()()),n&2){let e=c.$implicit;o(2),w(" ",e.name," "),o(4),S(e.username)}}function mr(n,c){if(n&1&&(r(0,"ngb-alert",19)(1,"p"),m(2),d(3,"translate"),_(4,sr,2,3),l(),r(5,"div",10)(6,"ul",85),te(7,dr,7,2,"li",null,ee),te(9,cr,7,2,"li",null,ee),l()()()),n&2){let e=g(2);y("dismissible",!1),o(2),w(" ",p(3,3,"child_bridge.confirm_delete_1")," "),o(2),f(e.deletingPairedBridge()?4:-1),o(3),ie(e.deleteBridges()),o(2),ie(e.deleteMatterBridges())}}function pr(n,c){n&1&&(r(0,"ngb-alert",20),m(1),d(2,"translate"),l()),n&2&&(y("dismissible",!1),o(),S(p(2,2,"child_bridge.must_configure_plugin")))}function gr(n,c){if(n&1){let e=T();r(0,"ngb-alert",21)(1,"div",17),m(2),d(3,"translate"),d(4,"translate"),l(),r(5,"button",89),E("click",function(){B(e);let t=g(2);return k(t.openFullConfigEditor())}),m(6),d(7,"translate"),l()()}n&2&&(y("dismissible",!1),o(2),fe(" ",p(3,4,"plugins.settings.message_manual_config_required")," ",p(4,6,"plugins.settings.message_consult_documentation")," "),o(4),w(" ",p(7,8,"plugins.settings.label_open_config_editor")," "))}function ur(n,c){if(n&1){let e=T();r(0,"div",10)(1,"img",16),E("error",function(){B(e);let t=g();return k(t.handleIconError())}),l()(),r(2,"ul",17),v(3,"li",18),d(4,"translate"),_(5,Ia,4,4),l(),_(6,lr,10,8),_(7,mr,11,5,"ngb-alert",19),_(8,pr,3,4,"ngb-alert",20),_(9,gr,8,10,"ngb-alert",21)}if(n&2){let e=g();o(),y("src",e.plugin.icon,Ke),o(2),y("innerHTML",G(4,7,"child_bridge.about",de(10,jt,e.linkChildBridges)),re),o(2),f(e.configBlocks().length?5:-1),o(),f(e.canConfigure()&&e.configBlocks().length?6:-1),o(),f(e.deleteBridges().length||e.deleteMatterBridges().length?7:-1),o(),f(!e.configBlocks().length&&e.canConfigure()?8:-1),o(),f(e.canConfigure()?-1:9)}}function _r(n,c){if(n&1){let e=T();r(0,"button",90),E("click",function(){B(e);let t=g();return k(t.closeModal())}),m(1),d(2,"translate"),l()}if(n&2){let e=g();y("disabled",e.saveInProgress()),o(),w(" ",p(2,2,"form.button_close")," ")}}function fr(n,c){n&1&&v(0,"i",92)}function hr(n,c){if(n&1){let e=T();r(0,"button",91),E("click",function(){B(e);let t=g();return k(t.save())}),m(1),d(2,"translate"),_(3,fr,1,0,"i",92),l()}if(n&2){let e=g();y("disabled",e.saveInProgress()||e.hasValidationErrors),o(),w(" ",p(2,3,"form.button_save")," "),o(2),f(e.saveInProgress()?3:-1)}}function br(n,c){if(n&1){let e=T();r(0,"button",93),E("click",function(){B(e);let t=g();return k(t.closeModal())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_close")," "))}function Cr(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"form.button_save")," ")}function vr(n,c){n&1&&v(0,"i",92)}function xr(n,c){if(n&1){let e=T();r(0,"button",91),E("click",function(){B(e);let t=g(2);return k(t.save())}),_(1,Cr,2,3)(2,vr,1,0,"i",92),l()}if(n&2){let e=g(2);y("disabled",e.saveInProgress()||e.loading()||e.hasValidationErrors),o(),f(e.saveInProgress()?2:1)}}function yr(n,c){if(n&1){let e=T();r(0,"button",95),E("click",function(){B(e);let t=g(2);return k(t.openPluginConfig())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"plugins.button_settings")," "))}function wr(n,c){if(n&1&&_(0,xr,3,2,"button",11)(1,yr,3,3,"button",94),n&2){let e=g();f(e.configBlocks().length?0:1)}}var Ki=(()=>{class n{$activeModal=C(K);$api=C(j);$modal=C(ae);$plugin=C(we);$router=C(pe);$settings=C(q);$toastr=C(U);$translate=C(R);modalData=C(st);plugin=this.modalData.plugin;schema=this.modalData.schema;justInstalled=this.modalData.justInstalled??!1;loading=x(!0);canConfigure=x(!0);saveInProgress=x(!1);configBlocks=x([]);selectedBlock=x("0");isPlatform=x(!1);enabledBlocks=x({});matterEnabledBlocks=x({});showAdvanced=x(!1);globalDebug=x("");globalNodeOptions=x("");matterExplicitlyDisabledBeforeChildBridge=new Set;bridgeConfigs=new Map;originalScheduledRestartCrons=new Map;originalHideAlerts=new Map;bridgeCache=x(new Map);originalBridges=x([]);deviceInfo=x(new Map);matterBridgeCache=x(new Map);originalMatterBridges=x([]);matterDeviceInfo=x(new Map);deleteMatterBridges=x([]);canShowBridgeDebug=x(!1);deleteBridges=x([]);deletingPairedBridge=x(!1);accessoryBridgeLinks=x([]);bridgesAvailableForLink=x([]);currentlySelectedLink=x(null);currentBridgeHasLinks=x(!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(s=>s.index===e)||null),this.currentBridgeHasLinks.set(this.accessoryBridgeLinks().some(s=>s.usesIndex===e));let a=[];if(i[Number(e)].accessory)for(let[s,u]of this.bridgeCache().entries())t[s]&&!this.deleteBridges().some(b=>b.id===u.username)&&s<Number(e)&&a.push({index:s.toString(),usesIndex:e,name:u.name,port:u.port,username:u.username});this.bridgesAvailableForLink.set(a)}onLinkBridgeChange(e){if(e){let i=this.configBlocks(),t=this.selectedBlock(),a=i.findIndex(u=>u._bridge?.username===e);this.accessoryBridgeLinks.update(u=>[...u,{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(u=>u.index===t)||null),this.enabledBlocks.update(u=>F(L({},u),{[Number(t)]:!0}));let s=i[Number(t)];s._bridge={username:e}}}initialize(){return M(this,null,function*(){try{yield Promise.all([this.getPluginType(),this.loadPluginConfig(),this.loadBridgeConfigs(),this.loadGlobalStartupSettings()]),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 M(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 M(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[b,h]of i.entries()){if(h._bridge&&this.enabledBlocks.update(P=>F(L({},P),{[b]:!0})),h._bridge&&h._bridge.username){let P=[...this.bridgeCache().entries()].find(([,N])=>N.username===h._bridge.username),W=P?P[0]:-1,A=P?P[1]:void 0;if(A)h._bridge.env={},this.accessoryBridgeLinks.update(N=>[...N,{index:b.toString(),usesIndex:W.toString(),name:A.name,port:A.port,username:h._bridge.username}]);else{if(h._bridge.env=h._bridge.env||{},this.bridgeCache.update(N=>new Map(N).set(b,h._bridge)),yield this.getDeviceInfo(h._bridge.username),!h._bridge.name){let N=this.deviceInfo().get(h._bridge.username);N&&(h._bridge.name=N.displayName)}this.originalBridges.update(N=>[...N,JSON.parse(JSON.stringify(h._bridge))])}}h._bridge&&h._bridge.matter&&(h.accessory?delete h._bridge.matter:(this.matterEnabledBlocks.update(P=>F(L({},P),{[b]:!0})),this.matterBridgeCache.update(P=>new Map(P).set(b,{port:h._bridge.matter.port})),this.originalMatterBridges.update(P=>[...P,{port:h._bridge.matter.port}]),h._bridge.username&&(yield this.getMatterCommissioningInfo(h._bridge.username))))}this.justInstalled&&this.bridgeCache().size===0&&i.forEach((b,h)=>{this.enabledBlocks.update(P=>F(L({},P),{[h]:!0})),this.toggleExternalBridge(b,!0,h.toString())}),this.accessoryBridgeLinks().find(b=>b.username===this.bridgeCache().get(Number(this.selectedBlock()))?.username)&&this.currentBridgeHasLinks.set(!0);let a=this.selectedBlock(),s=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(b=>b.index===a)||null);let u=[];if(i[Number(a)]?.accessory)for(let[b,h]of this.bridgeCache().entries())s[b]&&!this.deleteBridges().some(P=>P.id===h.username)&&b<Number(a)&&u.push({index:b.toString(),usesIndex:a,name:h.name,port:h.port,username:h.username});this.bridgesAvailableForLink.set(u)}catch(i){this.canConfigure.set(!1),console.error(i)}})}toggleExternalBridge(e,i,t){return M(this,null,function*(){let a=this.plugin;if(a){if(i){let s=this.bridgeCache().get(Number(t)),u=this.matterBridgeCache().get(Number(t));if(e._bridge={username:s?s.username:this.generateUsername(),port:yield this.getUnusedPort(),name:s?.name||this.sanitizeBridgeName(a.displayName||a.name),model:s?.model,manufacturer:s?.manufacturer,firmwareRevision:s?.firmwareRevision,debugModeEnabled:s?.debugModeEnabled,env:s?.env||{}},u&&!this.matterExplicitlyDisabledBeforeChildBridge.has(Number(t))&&(e._bridge.matter={port:u.port??(yield this.getUnusedMatterPort())},this.matterEnabledBlocks.update(b=>F(L({},b),{[Number(t)]:!0})),e._bridge.username&&(this.originalMatterBridges().some(h=>h.port===u.port)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,{port:u.port}))),e._bridge.username)){let b=e._bridge.username.replace(Ee,"-").replace(Te,"-").replace(Pe,"");this.deleteMatterBridges.update(h=>h.filter(P=>P.identifier!==b))}this.deleteBridges().some(b=>b.id===e._bridge.username)&&this.deleteBridges.update(b=>b.filter(h=>h.id!==e._bridge.username)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.bridgeCache.update(b=>new Map(b).set(Number(t),e._bridge)),yield this.getDeviceInfo(e._bridge.username),this.enabledBlocks.update(b=>F(L({},b),{[Number(t)]:!0}))}else{if(this.enabledBlocks.update(s=>F(L({},s),{[Number(t)]:!1})),e._bridge?.matter&&this.matterEnabledBlocks()[Number(t)]&&this.matterBridgeCache.update(s=>new Map(s).set(Number(t),{port:e._bridge.matter.port})),this.accessoryBridgeLinks().some(s=>s.index===t))this.accessoryBridgeLinks.update(s=>s.filter(u=>u.index!==t)),this.currentlySelectedLink.set(null);else{let s=this.originalBridges().find(u=>u.username===e._bridge.username);if(s&&!this.deleteBridges().some(u=>u.id===e._bridge.username)){let u=this.deviceInfo().get(e._bridge.username);this.deleteBridges.update(b=>[...b,{id:e._bridge.username,bridgeName:e._bridge.name||s.displayName,paired:u?u._isPaired:!1}])}if(e._bridge?.username){let u=e._bridge.username.replace(Ee,"-").replace(Te,"-").replace(Pe,"");this.deleteMatterBridges().some(h=>h.identifier===u)&&this.matterExplicitlyDisabledBeforeChildBridge.add(Number(t))}if(e._bridge?.matter&&e._bridge.username&&this.originalMatterBridges().some(b=>b.port===e._bridge.matter.port)){let b=e._bridge.username.replace(Ee,"-").replace(Te,"-").replace(Pe,"");if(!this.deleteMatterBridges().some(h=>h.identifier===b)){let h=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(P=>[...P,{username:e._bridge.username,identifier:b,name:h}])}}}this.matterEnabledBlocks.update(s=>F(L({},s),{[Number(t)]:!1})),delete e._bridge}this.deletingPairedBridge.set(this.deleteBridges().some(s=>s.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 M(this,null,function*(){try{return(yield this.$api.get("/server/port/new")).port}catch(e){return Math.floor(Math.random()*30001+3e4)}})}getUnusedMatterPort(){return M(this,null,function*(){try{return(yield this.$api.get("/server/port/new/matter")).port}catch(e){return Math.floor(Math.random()*12+5530)}})}getDeviceInfo(e){return M(this,null,function*(){try{let i=yield this.$api.get(`/server/pairings/${e.replace(rt,"")}`);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(gi,"");return i=i.replace(ui,""),i=i.replace(_i,""),i}getMatterCommissioningInfo(e){return M(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 M(this,null,function*(){let a=this.plugin;if(a){if(e.accessory){this.matterEnabledBlocks.update(s=>F(L({},s),{[Number(t)]:!1}));return}if(i){this.matterEnabledBlocks.update(b=>F(L({},b),{[Number(t)]:!0}));let s=this.matterBridgeCache().get(Number(t));e._bridge||(e._bridge={env:{}});let u;if(s?.port?u=s.port:u=yield this.getUnusedMatterPort(),e._bridge.matter={port:u},this.matterBridgeCache.update(b=>new Map(b).set(Number(t),{port:u})),e._bridge.username){let b=e._bridge.username.replace(Ee,"-").replace(Te,"-").replace(Pe,"");this.deleteMatterBridges.update(P=>P.filter(W=>W.identifier!==b)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.originalMatterBridges().some(P=>P.port===u)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(P=>new Map(P).set(e._bridge.username,{port:u}))}}else{this.matterEnabledBlocks.update(u=>F(L({},u),{[Number(t)]:!1}));let s=this.originalMatterBridges().some(u=>e._bridge?.matter&&u.port===e._bridge.matter.port);if(e._bridge&&e._bridge.matter&&(this.matterBridgeCache.update(u=>new Map(u).set(Number(t),{port:e._bridge.matter.port})),delete e._bridge.matter),e._bridge?.username&&(this.matterDeviceInfo.update(u=>new Map(u).set(e._bridge.username,null)),s)){let u=e._bridge.username.replace(Ee,"-").replace(Te,"-").replace(Pe,""),b=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(h=>[...h,{username:e._bridge.username,identifier:u,name:b}])}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!pi.test(t)}getHapPortValidationError(e){let i=this.configBlocks(),t=this.enabledBlocks(),a=i[Number(e)],s=a._bridge?.port;if(!s&&s!==0)return!1;if(typeof s!="number"||!Number.isInteger(s)||s<1025||s>65533)return!0;for(let[b,h]of i.entries())if(b.toString()!==e&&t[b]&&h._bridge?.port===s)return!0;let u=a._bridge?.matter?.port;return u&&s===u}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 M(this,null,function*(){let e=this.plugin;if(e){this.saveInProgress.set(!0);try{let i=this.configBlocks(),t=this.matterEnabledBlocks();for(let[A,N]of i.entries()){if(N._bridge?.username){if(this.getHapNameValidationError(A.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(A.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[A]&&this.getMatterPortValidationError(A.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(N)}yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,i);for(let A of this.deleteBridges())try{yield this.$api.delete(`/server/pairings/${A.id.replace(rt,"")}`)}catch(N){console.error(N),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let a=this.deleteMatterBridges().filter(A=>!this.deleteBridges().some(N=>N.id===A.username));for(let A of a)try{let N=A.username.replace(rt,"");yield this.$api.delete(`/server/pairings/${N}/matter`)}catch(N){console.error(N),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let s=this.hasScheduledRestartCronChanged(),u=this.hasHideAlertsChanged(),b=this.hasBridgeConfigChanged(),h=this.deleteBridges().length>0||this.deleteMatterBridges().length>0,P=!s&&!u&&!b&&!h,W=u&&!s&&!b&&!h;for(let[A,N]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(Tt=>Tt.id===A))continue;let ce=this.originalHideAlerts.get(A),Fe=!!N.hideHapAlert,Oe=!!N.hideMatterAlert,Ot=ce?!!ce.hideHapAlert:!1,Re=ce?!!ce.hideMatterAlert:!1;try{Fe!==Ot&&(yield this.saveHideAlert(A,"hap",Fe)),Oe!==Re&&(yield this.saveHideAlert(A,"matter",Oe))}catch(Tt){console.error(Tt)}}for(let[A,N]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(Re=>Re.id===A))continue;let ce=N.scheduledRestartCron||null,Fe=this.originalScheduledRestartCrons.get(A)||null,Oe=ce===""?null:ce;if(Oe!==(Fe===""?null:Fe))try{yield this.saveScheduledRestartCron(A,Oe)}catch(Re){console.error(Re)}}if(s)try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{})}catch(A){console.error(A)}P?this.$activeModal.close():W?this.$activeModal.close("refresh"):(this.$activeModal.close(),this.$modal.open(_e,{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")}loadBridgeConfigs(){return M(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})}})}loadGlobalStartupSettings(){return M(this,null,function*(){try{let e=yield this.$api.get("/platform-tools/hb-service/homebridge-startup-settings");this.globalDebug.set(e.ENV_DEBUG||""),this.globalNodeOptions.set(e.ENV_NODE_OPTIONS||"")}catch(e){}})}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(),s=!this.isUnpairingHidden(e,i),u=this.bridgeConfigs.get(t);u||(u={username:t},this.bridgeConfigs.set(t,u)),i==="hap"?s?u.hideHapAlert=!0:delete u.hideHapAlert:s?u.hideMatterAlert=!0:delete u.hideMatterAlert}getScheduledRestartCron(e){return e&&this.bridgeConfigs.get(e.toUpperCase())?.scheduledRestartCron||""}asInputElement(e){return e}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 s=e?.trim();s?a.scheduledRestartCron=s: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(h=>h.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||{},s=t.env||{};if(a.DEBUG!==s.DEBUG||a.NODE_OPTIONS!==s.NODE_OPTIONS)return!0;let u=!!i._bridge.matter,b=!!t.matter;if(u!==b||u&&b&&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,s=!!i.hideMatterAlert,u=t?!!t.hideHapAlert:!1,b=t?!!t.hideMatterAlert:!1;if(a!==u||s!==b)return!0}return!1}updateLocalBridgeConfig(e,i){let t=e.toUpperCase(),a=this.$settings.env.bridges||[],s=a.findIndex(u=>u.username.toUpperCase()===t);s!==-1?Object.assign(a[s],i):a.push(L({username:t},i)),this.$settings.env.bridges=a}saveHideAlert(e,i,t){return M(this,null,function*(){let a=e.toUpperCase(),s=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(s,{value:t}),this.updateLocalBridgeConfig(a,{hideHapAlert:t})}catch(u){throw console.error(`Failed to update hide ${i} alert:`,u),u}})}saveScheduledRestartCron(e,i){return M(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||[],s=a.findIndex(u=>u.username.toUpperCase()===t);s!==-1&&(delete a[s].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=O({type:n,selectors:[["app-plugin-bridge"]],decls:16,vars:7,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","icon-xl"],["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"],["for","bridge-name",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-name","type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["role","button","tabindex","0",1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","cursor-pointer",3,"click","keyup.enter"],[1,"fa","grey-text"],["for","bridge-manufacturer",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-manufacturer","type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],["for","bridge-model",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-model","type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],["for","bridge-firmware",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-firmware","type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],["for","bridge-scheduled-restart",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"grey-text",3,"innerHtml"],[1,"text-start","text-md-end","w-100","w-md-50","d-flex","flex-column","align-items-end"],["id","bridge-scheduled-restart","type","text","placeholder","mm hh dd MM ww","maxlength","30",1,"form-control","custom-input","font-monospace","cron-input",3,"input","value"],["for","bridge-debug",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],[1,"d-block","text-start","text-white","font-monospace","mb-1","global-env-prefix"],["id","bridge-debug","type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],["for","bridge-node-options",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"grey-text"],["id","bridge-node-options","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","hap-toggle-disabled"],["type","checkbox",1,"rendux-input","pointer-events-none",3,"id","checked","disabled"],[1,"rendux-label","cursor-not-allowed",3,"for"],[1,"list-group-item","text-center"],["for","bridge-hap-port",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-hap-port","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","qr-code-size",3,"data"],[1,"mx-auto","mt-3","mb-1","font-monospace"],[1,"grey-text","mx-auto","small","mb-1","qr-code-info"],[1,"fas","fa-link"],[1,"fas","fa-xl","fa-matter","me-2","my-2"],[1,"badge","badge-primary","ms-1"],[1,"list-group-item"],[1,"grey-text","small"],["for","bridge-matter-port",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridge-matter-port","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"],["type","button",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&&(r(0,"div",1)(1,"div",2)(2,"h5",3),m(3),l(),_(4,Ta,2,4,"button",4),l(),r(5,"div",5),_(6,Pa,2,0,"div",6)(7,ur,10,12),l(),r(8,"div",7)(9,"div",8),_(10,_r,3,4,"button",9),l(),r(11,"div",10),_(12,hr,4,5,"button",11),_(13,br,3,3,"button",12),l(),r(14,"div",13),_(15,wr,2,1),l()()()),i&2&&(o(3),S(t.plugin.displayName||t.plugin.name),o(),f(t.justInstalled?-1:4),o(2),f(t.loading()?6:7),o(4),f(t.canConfigure()&&!t.justInstalled?10:-1),o(2),f(t.justInstalled?12:-1),o(),f(t.canConfigure()?-1:13),o(2),f(t.canConfigure()&&!t.justInstalled?15:-1))},dependencies:[ve,ot,at,it,ii,tt,nt,be,ri,ai,Ce,Ae,yi,H],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}.cron-input[_ngcontent-%COMP%]{letter-spacing:.15em;text-align:center}.hap-toggle-disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.pointer-events-none[_ngcontent-%COMP%]{pointer-events:none}.qr-code-size[_ngcontent-%COMP%]{width:175px;height:175px}.qr-code-info[_ngcontent-%COMP%]{max-width:400px}.global-env-prefix[_ngcontent-%COMP%]{opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"],changeDetection:0})}return n})();var Ft=me(lt(),1);var Et=()=>["homebridge","homebridge-config-ui-x"],Ji=(n,c,e)=>({pluginName:n,minVersion:c,installedVersion:e}),Sr=(n,c,e)=>({minVersion:n,installedVersion:c,latestVersion:e,packageName:"Homebridge"}),Br=()=>({packageName:"Homebridge"}),kr=(n,c,e)=>({minVersion:n,installedVersion:c,latestVersion:e,packageName:"Homebridge UI"}),Mr=()=>({packageName:"Homebridge UI"});function Er(n,c){if(n&1&&(r(0,"li",13)(1,"div",16),v(2,"i",17),l(),r(3,"div",18),m(4),d(5,"translate"),l()()),n&2){let e=g(2);o(4),w(" ",G(5,1,"plugins.compat.node_too_low",He(4,Ji,e.plugin.displayName,e.nodeMinVersion,e.nodeInstalledVersion))," ")}}function Tr(n,c){if(n&1&&(r(0,"li",13)(1,"div",16),v(2,"i",17),l(),r(3,"div",18),m(4),d(5,"translate"),l()()),n&2){let e=g(2);o(4),w(" ",G(5,1,"plugins.compat.hb_too_low",He(4,Ji,e.plugin.displayName,e.hbMinVersion,e.hbInstalledVersion))," ")}}function Pr(n,c){if(n&1&&(r(0,"div",11),v(1,"i"),l(),r(2,"ul",12),_(3,Er,6,8,"li",13),_(4,Tr,6,8,"li",13),l(),r(5,"ngb-alert",14)(6,"p",15),m(7),d(8,"translate"),l()()),n&2){let e=g();o(),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 icon-xl`),o(2),f(e.isValidNode?-1:3),o(),f(e.isValidHb?-1:4),o(),y("dismissible",!1),o(2),S(p(8,6,"common.phrases.are_you_sure"))}}function Vr(n,c){if(n&1&&(r(0,"div",11),v(1,"i",19),l(),r(2,"ul",12)(3,"li",13)(4,"div",16),v(5,"i",17),l(),r(6,"div",18),m(7),d(8,"translate"),l()()(),r(9,"ngb-alert",14)(10,"p",20),m(11),d(12,"translate"),l(),r(13,"p",15)(14,"a",21),m(15),d(16,"translate"),v(17,"i",22),l()()()),n&2){let e=g();o(7),w(" ",G(8,4,"plugins.compat.hb_node_too_low",He(12,Sr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),y("dismissible",!1),o(2),S(G(12,7,"plugins.compat.node_first",le(16,Br))),o(4),w(" ",p(16,10,"plugins.compat.node_link")," ")}}function Ir(n,c){if(n&1&&(r(0,"div",11),v(1,"i",19),l(),r(2,"ul",12)(3,"li",13)(4,"div",16),v(5,"i",17),l(),r(6,"div",18),m(7),d(8,"translate"),l()()(),r(9,"ngb-alert",14)(10,"p",20),m(11),d(12,"translate"),l(),r(13,"p",15)(14,"a",21),m(15),d(16,"translate"),v(17,"i",22),l()()()),n&2){let e=g();o(7),w(" ",G(8,4,"plugins.compat.hb_node_too_low",He(12,kr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),y("dismissible",!1),o(2),S(G(12,7,"plugins.compat.node_first",le(16,Mr))),o(4),w(" ",p(16,10,"plugins.compat.node_link")," ")}}function $r(n,c){if(n&1){let e=T();r(0,"button",23),E("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_close")," "))}function Dr(n,c){if(n&1){let e=T();r(0,"button",23),E("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_close")," "))}function Ar(n,c){if(n&1){let e=T();r(0,"button",24),E("click",function(){B(e);let t=g();return k(t.closeModal())}),m(1),d(2,"translate"),l()}n&2&&(o(),w(" ",p(2,1,"form.button_continue")," "))}var Qi=(()=>{class n{$activeModal=C(K);$settings=C(q);modalData=C(pt);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,Ft.minVersion)(e.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Ft.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=O({type:n,selectors:[["app-plugin-compatibility"]],decls:18,vars:16,consts:[[1,"modal-content","modal-min-height"],[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"],[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","icon-xl"],[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&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),d(4,"translate"),l(),r(5,"button",3),d(6,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(7,"div",4),_(8,Pr,9,8),_(9,Vr,18,17),_(10,Ir,18,17),l(),r(11,"div",5)(12,"div",6),_(13,$r,3,3,"button",7),l(),r(14,"div",8),_(15,Dr,3,3,"button",7),l(),r(16,"div",9),_(17,Ar,3,3,"button",10),l()()()),i&2&&(o(3),S(p(4,8,"plugins.compat.title")),o(2),V("aria-label",p(6,10,"form.button_close")),o(3),f(t.plugin&&!le(12,Et).includes(t.plugin.name)?8:-1),o(),f(t.plugin&&t.plugin.name==="homebridge"?9:-1),o(),f(t.plugin&&t.plugin.name==="homebridge-config-ui-x"?10:-1),o(3),f(t.plugin&&!le(13,Et).includes(t.plugin.name)?13:-1),o(2),f(t.plugin&&le(14,Et).includes(t.plugin.name)?15:-1),o(2),f(t.plugin&&!le(15,Et).includes(t.plugin.name)?17:-1))},dependencies:[Ae,H],styles:[".modal-min-height[_ngcontent-%COMP%]{min-height:300px}"],changeDetection:0})}return n})();var Yi=me(Ge(),1);var Xi=(()=>{class n{$api=C(j);$toastr=C(U);$translate=C(R);downloadDumpFile(){return M(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"});(0,Yi.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=O({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&&(I(0,"button",0),ne("click",function(){return t.downloadDumpFile()}),J(1,"i",1),m(2),d(3,"translate"),$()),i&2&&(o(2),w(" ",p(3,1,"plugins.settings.custom.download_dump_file "),`
`))},dependencies:[H],encapsulation:2,changeDetection:0})}return n})();var Zi=me(Ge(),1);var en=(()=>{class n{$api=C(j);$translate=C(R);$toastr=C(U);downloadDumpFile(){return M(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-hue/dump-file",{observe:"response",responseType:"blob"});(0,Zi.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=O({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&&(I(0,"button",0),ne("click",function(){return t.downloadDumpFile()}),J(1,"i",1),m(2),d(3,"translate"),$()),i&2&&(o(2),w(" ",p(3,1,"plugins.settings.custom.download_dump_file "),`
`))},dependencies:[H],encapsulation:2,changeDetection:0})}return n})();function Nr(n,c){if(n&1&&(v(0,"markdown",5),d(1,"interpolateMd")),n&2){let e=g();y("data",p(1,1,e.schema.headerDisplay))}}function Lr(n,c){if(n&1){let e=T();r(0,"button",31),d(1,"translate"),E("click",function(){B(e);let t=g().$implicit,a=g(2);return k(a.removeBlock(t.__uuid__))}),v(2,"i",32),l()}n&2&&y("ngbTooltip",p(1,2,"form.button_delete"))("openDelay",150)}function jr(n,c){if(n&1){let e=T();r(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),m(4),l(),r(5,"div",23),_(6,Lr,3,4,"button",24),r(7,"button",25),d(8,"translate"),v(9,"i",26),l(),v(10,"i",27),d(11,"translate"),l()()(),r(12,"div",28)(13,"div",29)(14,"app-schema-form",30),Z("dataChange",function(t){let a=B(e).$implicit;return X(a.config,t)||(a.config=t),k(t)}),E("isValid",function(t){let a=B(e).$index,s=g(2);return k(s.onIsValid(t,a))}),l()()()()}if(n&2){let e=c.$implicit,i=g(2);y("ngbAccordionItem",e.__uuid__)("collapsed",i.show()!==e.__uuid__)("id",e.__uuid__),o(4),S(e.name),o(2),f(i.plugin.name!=="homebridge-config-ui-x"&&i.show()===e.__uuid__?6:-1),o(),y("ngbTooltip",p(8,21,"form.button_edit"))("openDelay",150),o(3),D("fa-circle-check",i.formBlocksValid()[i.i]===!0)("green-text",i.formBlocksValid()[i.i]===!0)("fa-circle-exclamation",i.formBlocksValid()[i.i]===!1)("red-text",i.strictValidation()&&i.formBlocksValid()[i.i]===!1)("orange-text",!i.strictValidation()&&i.formBlocksValid()[i.i]===!1),y("ngbTooltip",p(11,23,i.formBlocksValid()[i.i]?"form.label_valid":i.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150),o(4),y("configSchema",i.schema),Y("data",e.config)}}function Fr(n,c){if(n&1){let e=T();r(0,"div",18),E("show",function(t){B(e);let a=g();return k(a.blockShown(t))})("hide",function(t){B(e);let a=g();return k(a.blockHidden(t))}),te(1,jr,15,25,"div",19,ee),l()}if(n&2){let e=g();y("closeOthers",!0),o(),ie(e.pluginConfig())}}function Or(n,c){n&1&&v(0,"app-homebridge-deconz")}function Rr(n,c){n&1&&v(0,"app-homebridge-hue")}function Ur(n,c){if(n&1){let e=T();r(0,"div",7)(1,"app-schema-form",30),Z("dataChange",function(t){B(e);let a=g();return X(a.pluginConfig()[0].config,t)||(a.pluginConfig()[0].config=t),k(t)}),E("isValid",function(t){B(e);let a=g();return k(a.onIsValid(t,0))}),l(),_(2,Or,1,0,"app-homebridge-deconz"),_(3,Rr,1,0,"app-homebridge-hue"),l()}if(n&2){let e=g();o(),y("configSchema",e.schema),Y("data",e.pluginConfig()[0].config),o(),f(e.plugin.name==="homebridge-deconz"?2:-1),o(),f(e.plugin.name==="homebridge-hue"?3:-1)}}function Hr(n,c){if(n&1&&(r(0,"div",8),v(1,"markdown",5),d(2,"interpolateMd"),l()),n&2){let e=g();o(),y("data",p(2,1,e.schema.footerDisplay))}}function zr(n,c){if(n&1&&(v(0,"i",33),d(1,"translate")),n&2){let e=g();D("fa-circle-check",e.formIsValid())("green-text",e.formIsValid())("fa-circle-exclamation",!e.formIsValid())("red-text",e.strictValidation()&&!e.formIsValid())("orange-text",!e.strictValidation()&&!e.formIsValid()),y("ngbTooltip",p(1,12,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function qr(n,c){if(n&1){let e=T();r(0,"button",34),E("click",function(){B(e);let t=g();return k(t.addBlock())}),v(1,"i",35),l()}}function Wr(n,c){n&1&&(r(0,"span"),m(1),d(2,"translate"),l()),n&2&&(o(),S(p(2,1,"form.button_save")))}function Gr(n,c){n&1&&v(0,"i",17)}var tn=(()=>{class n{$activeModal=C(K);$api=C(j);$cb=C(Ne);$plugin=C(we);$settings=C(q);$toastr=C(U);$translate=C(R);modalData=C(Se);plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=x([]);show=x("");saveInProgress=x(!1);formBlocksValid=x({});formIsValid=x(!0);strictValidation=x(!1);pluginAlias=x("");pluginType=x("platform");isFirstSave=x(!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 M(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=It(),i=this.schema;this.pluginConfig.update(t=>[...t,{__uuid__:e,name:i.pluginAlias,config:{[this.pluginType()]:i.pluginAlias}}]),this.formBlocksValid.update(t=>F(L({},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=L({},t);return delete a[i],a}),Object.keys(this.formBlocksValid()).length||this.formIsValid.set(!0)}onIsValid(e,i){this.formBlocksValid.update(t=>F(L({},t),{[i]:e})),this.formIsValid.set(Object.values(this.formBlocksValid()).every(t=>t))}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}loadPluginConfig(){return M(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(s=>({__uuid__:It(),name:s.name||i.pluginAlias,config:s}));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=O({type:n,selectors:[["app-plugin-config"]],decls:23,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,"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,"fa-circle-check","green-text","fa-circle-exclamation","red-text","orange-text","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"],["type","button","container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip","openDelay"],["type","button","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"],["type","button","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&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),l(),r(4,"button",3),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(6,"div",4),_(7,Nr,2,3,"markdown",5),_(8,Fr,3,1,"div",6),_(9,Ur,4,4,"div",7),_(10,Hr,3,3,"div",8),l(),r(11,"div",9)(12,"div",10)(13,"button",11),E("click",function(){return t.closeModal()}),m(14),d(15,"translate"),l()(),v(16,"div",12),r(17,"div",13),_(18,zr,2,14,"i",14)(19,qr,2,0,"button",15),r(20,"button",16),E("click",function(){return t.save()}),_(21,Wr,3,3,"span")(22,Gr,1,0,"i",17),l()()()()),i&2&&(o(3),S(t.plugin.displayName||t.plugin.name),o(),y("disabled",t.saveInProgress()),V("aria-label",p(5,12,"form.button_close")),o(3),f(t.schema.headerDisplay?7:-1),o(),f(t.pluginConfig().length&&!t.schema.singular?8:-1),o(),f(t.pluginConfig().length&&t.schema.singular?9:-1),o(),f(t.schema.footerDisplay?10:-1),o(3),y("disabled",t.saveInProgress()),o(),w(" ",p(15,14,"form.button_close")," "),o(4),f(t.schema.singular?18:19),o(2),y("disabled",t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),o(),f(t.saveInProgress()?22:21))},dependencies:[$e,Ie,De,St,wt,yt,ye,vt,Ct,Bt,Xi,en,xt,H,Mt],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}"],changeDetection:0})}return n})();function Kr(n,c){n&1&&(I(0,"div",12),J(1,"i",13),$(),I(2,"p",14),m(3),d(4,"translate"),$()),n&2&&(o(3),S(p(4,1,"reset.bridge_accessories.empty")))}function Jr(n,c){if(n&1&&J(0,"i",26)(1,"i",27),n&2){let e=g().$implicit;D("opacity-muted",e._protocol==="matter"&&e._matterOnly),o(),D("opacity-muted",e._protocol!=="matter")}}function Qr(n,c){n&1&&J(0,"i",20)}function Yr(n,c){if(n&1){let e=T();I(0,"li",18)(1,"span",19),_(2,Jr,2,4)(3,Qr,1,0,"i",20),$(),I(4,"span",21),m(5),J(6,"br"),I(7,"small",22)(8,"span",23),m(9),$()()(),I(10,"button",24),d(11,"translate"),ne("click",function(){let t=B(e).$implicit,a=g(2);return k(a.toggleList(t._id,t._protocol))}),J(12,"i",25),$()()}if(n&2){let e=c.$implicit,i=g(2);o(2),f(i.isMatterSupported?2:3),o(3),w(" ",e.name," "),o(4),S(e._username),o(),D("btn-danger",!i.isInList(e._id,e._protocol))("btn-elegant",i.isInList(e._id,e._protocol)),oe("disabled",i.clicked()),V("aria-label",p(11,17,"form.button_delete")),o(2),D("fa-broom",!i.isInList(e._id,e._protocol))("fa-undo",i.isInList(e._id,e._protocol)&&!i.clicked())("fa-circle-notch",i.isInList(e._id,e._protocol)&&i.clicked())("fa-spin",i.isInList(e._id,e._protocol)&&i.clicked())}}function Xr(n,c){if(n&1&&(I(0,"div",12),J(1,"i",15),$(),I(2,"ul",16)(3,"li"),m(4),d(5,"translate"),$(),I(6,"li"),m(7),d(8,"translate"),$()(),I(9,"ul",17),te(10,Yr,13,19,"li",18,ee),$()),n&2){let e=g();o(4),S(p(5,2,"reset.bridge_accessories.list_1")),o(3),S(p(8,4,"reset.clear_cache_single.list_3")),o(3),ie(e.pairings())}}function Zr(n,c){if(n&1){let e=T();I(0,"button",28),ne("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(1),d(2,"translate"),$()}if(n&2){let e=g();oe("disabled",e.clicked()),o(),w(" ",p(2,2,"form.button_close")," ")}}function el(n,c){if(n&1){let e=T();I(0,"button",29),ne("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(1),d(2,"translate"),$()}n&2&&(o(),w(" ",p(2,1,"form.button_close")," "))}function tl(n,c){if(n&1&&m(0),n&2){let e=g(3);w(" (",e.toDelete().length,") ")}}function il(n,c){if(n&1&&(m(0),d(1,"translate"),_(2,tl,1,1)),n&2){let e=g(2);w(" ",p(1,2,"form.button_reset")," "),o(2),f(e.toDelete().length>0?2:-1)}}function nl(n,c){n&1&&J(0,"i",31)}function ol(n,c){if(n&1){let e=T();I(0,"button",30),ne("click",function(){B(e);let t=g();return k(t.cleanBridges())}),_(1,il,3,4)(2,nl,1,0,"i",31),$()}if(n&2){let e=g();oe("disabled",!e.toDelete().length||e.clicked()),o(),f(e.clicked()?2:1)}}var nn=(()=>{class n{$activeModal=C(K);$api=C(j);$router=C(pe);$settings=C(q);$toastr=C(U);$translate=C(R);modalData=C(mt);childBridges=this.modalData.childBridges??[];clicked=x(!1);pairings=x([]);toDelete=x([]);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 M(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 M(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(u=>u._category==="bridge"&&!u._main&&this.childBridges.find(b=>b.username===u._username)).sort((u,b)=>u.name.localeCompare(b.name)),a=e.filter(u=>u._matterOnly&&u._plugin===i).sort((u,b)=>u.name.localeCompare(b.name)),s=[];for(let u of t)s.push(F(L({},u),{_protocol:"hap",_displayName:u.name})),this.isMatterSupported&&u._matter&&s.push(F(L({},u),{_protocol:"matter",_displayName:u.name}));if(this.isMatterSupported)for(let u of a)s.push(F(L({},u),{_protocol:"matter",_displayName:u.name}));this.pairings.set(s)}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=O({type:n,selectors:[["app-reset-accessories"]],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","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","icon-xl"],[1,"mb-0","text-center"],[1,"fas","fa-broom","primary-text","icon-xl"],[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"],["type","button",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&&(I(0,"div",0)(1,"div",1)(2,"h5",2),m(3),d(4,"translate"),$(),I(5,"button",3),d(6,"translate"),ne("click",function(){return t.dismissModal()}),$()(),I(7,"div",4),_(8,Kr,5,3)(9,Xr,12,6),$(),I(10,"div",5)(11,"div",6),_(12,Zr,3,4,"button",7),$(),I(13,"div",8),_(14,el,3,3,"button",9),$(),I(15,"div",10),_(16,ol,3,2,"button",11),$()()()),i&2&&(o(3),S(p(4,7,"child_bridge.reset_accessories")),o(2),oe("disabled",t.clicked()),V("aria-label",p(6,9,"form.button_close")),o(3),f(t.pairings().length===0?8:9),o(4),f(t.pairings().length>0?12:-1),o(2),f(t.pairings().length===0?14:-1),o(2),f(t.pairings().length>0?16:-1))},dependencies:[H],styles:[".opacity-muted[_ngcontent-%COMP%]{opacity:.25}"],changeDetection:0})}return n})();var on=me(Ge(),1);var al=n=>({prefix:n}),rl=n=>({link:n});function ll(n,c){n&1&&(I(0,"li"),m(1),d(2,"translate"),$()),n&2&&(o(),S(p(2,1,"plugins.manage.scoped.process")))}function sl(n,c){n&1&&(J(0,"li",8),d(1,"translate"),I(2,"li"),m(3),d(4,"translate"),$()),n&2&&(oe("innerHTML",p(1,2,"plugins.manage.scoped.windows"),re),o(3),S(p(4,4,"plugins.manage.manual_update_command")))}function dl(n,c){if(n&1&&(I(0,"pre",9),m(1),$()),n&2){let e=g();o(),Xe(`hb-service stop
npm install -g `,e.plugin.newHbScope.to,"@",e.plugin.newHbScope.switch,`
npm uninstall -g `,e.plugin.newHbScope.from,`
hb-service start`)}}function cl(n,c){if(n&1&&(I(0,"div",10)(1,"ul",18)(2,"li"),J(3,"i",19),m(4),d(5,"translate"),I(6,"span",20),m(7),$()(),I(8,"li"),J(9,"i",19),m(10),d(11,"translate"),I(12,"span",20),m(13),$()(),I(14,"li"),J(15,"i",19),m(16),d(17,"translate"),$()()()),n&2){let e=g();o(3),D("fa-circle-o",!e.installing()&&!e.installed()&&!e.failure())("fa-circle-notch",e.installing())("fa-spin",e.installing())("fa-check-circle",e.installed()&&!e.failure())("green-text",e.installed()&&!e.failure())("fa-times-circle",!e.installed()&&e.failure())("red-text",!e.installed()&&e.failure()),o(),w(" ",p(5,43,"plugins.manage.install")," "),o(3),S(e.plugin.newHbScope.to),o(2),D("fa-circle-o",!e.uninstalling()&&!e.uninstalled()&&!e.failure())("fa-circle-notch",e.uninstalling())("fa-spin",e.uninstalling())("fa-check-circle",e.uninstalled()&&!e.failure())("green-text",e.uninstalled()&&!e.failure())("fa-times-circle",!e.uninstalled()&&e.failure())("red-text",!e.uninstalled()&&e.failure()),o(),w(" ",p(11,45,"plugins.manage.uninstall")," "),o(3),S(e.plugin.newHbScope.from),o(2),D("fa-circle-o",!e.restarting()&&!e.failure())("fa-circle-notch",e.restarting())("fa-spin",e.restarting())("fa-times-circle",e.failure())("red-text",e.failure()),o(),w(" ",p(17,47,"menu.hbrestart.title")," ")}}function ml(n,c){if(n&1){let e=T();I(0,"div",11)(1,"p"),m(2),d(3,"translate"),$(),I(4,"p",20),m(5),$(),I(6,"button",21),ne("click",function(){B(e);let t=g();return k(t.downloadLogFile())}),m(7),d(8,"translate"),$()()}if(n&2){let e=g();o(2),S(p(3,3,"plugins.manage.scoped.error")),o(3),S(e.failure()),o(2),w(" ",p(8,5,"form.button_download")," ")}}function pl(n,c){if(n&1){let e=T();I(0,"button",22),d(1,"translate"),ne("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(2),d(3,"translate"),$()}if(n&2){let e=g();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),V("aria-label",p(1,3,"form.button_close")),o(2),w(" ",p(3,5,"form.button_close")," ")}}function gl(n,c){if(n&1){let e=T();I(0,"button",22),d(1,"translate"),ne("click",function(){B(e);let t=g();return k(t.dismissModal())}),m(2),d(3,"translate"),$()}if(n&2){let e=g();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),V("aria-label",p(1,3,"form.button_close")),o(2),w(" ",p(3,5,"form.button_close")," ")}}function ul(n,c){n&1&&(I(0,"span"),m(1),d(2,"translate"),$()),n&2&&(o(),S(p(2,1,"form.button_continue")))}function _l(n,c){n&1&&J(0,"i",24)}function fl(n,c){if(n&1){let e=T();I(0,"button",23),ne("click",function(){B(e);let t=g();return k(t.doSwitch())}),_(1,ul,3,3,"span"),_(2,_l,1,0,"i",24),$()}if(n&2){let e=g();oe("disabled",e.installing()||e.uninstalling()||e.restarting()||!e.onlineUpdateOk()||e.failure()),o(),f(!e.installing()&&!e.uninstalling()&&!e.restarting()?1:-1),o(),f((e.installing()||e.uninstalling()||e.restarting())&&!e.failure()?2:-1)}}var an=(()=>{class n{$activeModal=C(K);$api=C(j);$router=C(pe);$settings=C(q);$toastr=C(U);$translate=C(R);$ws=C(xe);modalData=C(gt);plugin=this.modalData.plugin;installing=x(!1);installed=x(!1);uninstalling=x(!1);uninstalled=x(!1);restarting=x(!1);failure=x("");onlineUpdateOk=x(!1);io;term;termTarget;fitAddon=new _t;webLinksAddon=new ft;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>';get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()==="light"}constructor(){this.term=new ht(this.$settings.getTerminalOptions({disableStdin:!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(si,"").trimEnd();i&&(this.errorLog+=`${i}\r
`)})}doSwitch(){return M(this,null,function*(){if(this.plugin)try{this.installing.set(!0),yield Ue(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 Ue(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,on.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=O({type:n,selectors:[["app-switch-to-scoped"]],decls:31,vars:34,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","icon-xl"],[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","switch-steps-list"],[1,"fa"],[1,"font-monospace"],["type","button",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&&(I(0,"div",0)(1,"div",1)(2,"h5",2),m(3),d(4,"translate"),$(),I(5,"button",3),d(6,"translate"),ne("click",function(){return t.dismissModal()}),$()(),I(7,"div",4)(8,"div",5),J(9,"i",6),$(),I(10,"ul",7),J(11,"li",8),d(12,"translate"),I(13,"li"),m(14),d(15,"translate"),$(),J(16,"li",8),d(17,"translate"),_(18,ll,3,3,"li")(19,sl,5,6),$(),_(20,dl,2,3,"pre",9),_(21,cl,18,49,"div",10),_(22,ml,9,7,"div",11),J(23,"div",12),$(),I(24,"div",13)(25,"div",14),_(26,pl,4,7,"button",15),$(),I(27,"div",10),_(28,gl,4,7,"button",15),$(),I(29,"div",16),_(30,fl,3,3,"button",17),$()()()),i&2&&(o(3),S(p(4,18,"plugins.manage.scoped.switch")),o(2),oe("disabled",t.installing()||t.uninstalling()||t.restarting()),V("aria-label",p(6,20,"form.button_close")),o(6),oe("innerHTML",G(12,22,"plugins.manage.scoped.info_1",de(30,al,t.prefix)),re),o(3),S(p(15,25,"plugins.manage.scoped_message")),o(2),oe("innerHTML",G(17,27,"plugins.manage.scoped.info_2",de(32,rl,t.moreInfo)),re),o(2),f(t.onlineUpdateOk()?18:19),o(2),f(t.plugin&&!t.onlineUpdateOk()?20:-1),o(),f(t.plugin&&t.onlineUpdateOk()?21:-1),o(),f(t.failure()?22:-1),o(),D("terminal-dark-bg",!t.isLightTerminalTheme)("terminal-light-bg",t.isLightTerminalTheme),oe("hidden",!t.onlineUpdateOk()||t.failure()),o(3),f(t.onlineUpdateOk()?26:-1),o(2),f(t.onlineUpdateOk()?-1:28),o(2),f(t.onlineUpdateOk()?30:-1))},dependencies:[H],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}.switch-steps-list[_ngcontent-%COMP%]{list-style-type:none}"],changeDetection:0})}return n})();var hl=n=>({pluginName:n}),bl=(n,c)=>({setting:n,value:c});function Cl(n,c){n&1&&(r(0,"div",5),v(1,"i",13),l())}function vl(n,c){n&1&&(r(0,"li"),m(1),d(2,"translate"),l(),r(3,"li"),m(4),d(5,"translate"),l()),n&2&&(o(),S(p(2,2,"plugins.manage.confirm_disable_platform_1")),o(3),S(p(5,4,"plugins.manage.confirm_disable_platform_2")))}function xl(n,c){n&1&&(r(0,"li"),m(1),d(2,"translate"),l(),r(3,"li"),m(4),d(5,"translate"),l()),n&2&&(o(),S(p(2,2,"plugins.manage.confirm_disable_accessory_1")),o(3),S(p(5,4,"plugins.manage.confirm_disable_accessory_2")))}function yl(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"plugins.uninstall_cleanup_child_bridge")," ")}function wl(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"plugins.uninstall_cleanup_main_bridge")," ")}function Sl(n,c){if(n&1&&(r(0,"ngb-alert",16),_(1,yl,2,3)(2,wl,2,3),l()),n&2){let e=g(4);y("dismissible",!1),o(),f(e.hasChildBridges()?1:2)}}function Bl(n,c){if(n&1&&(r(0,"ul",24),v(1,"li",25),d(2,"translate"),r(3,"ul",18),_(4,vl,6,6)(5,xl,6,6),l()(),_(6,Sl,3,2,"ngb-alert",16)),n&2){let e=g(3);o(),y("innerHtml",G(2,3,e.settingTranslationKey,Yt(6,bl,e.keepOrphansName,e.keepOrphansValue)),re),o(3),f(e.willKeepAccessoriesInCache?4:5),o(2),f(e.shouldShowCleanupAlert?6:-1)}}function kl(n,c){if(n&1){let e=T();r(0,"div",19)(1,"p",20)(2,"label",21)(3,"input",22),E("ngModelChange",function(t){B(e);let a=g(2);return k(a.removeConfig.set(t))})("change",function(){B(e);let t=g(2);return k(t.onRemoveConfigChange())}),l(),m(4),d(5,"translate"),v(6,"span",23),l()()(),_(7,Bl,7,9)}if(n&2){let e=g(2);o(3),y("ngModel",e.removeConfig()),o(),w(" ",p(5,3,"plugins.uninstall_remove_plugin_config")," "),o(3),f(e.isConfiguredDynamicPlatform()?7:-1)}}function Ml(n,c){n&1&&(r(0,"ngb-alert",16),m(1),d(2,"translate"),l()),n&2&&(y("dismissible",!1),o(),w(" ",p(2,2,"plugins.uninstall_remove_config_required")," "))}function El(n,c){if(n&1&&(r(0,"div",14),v(1,"i",15),l(),_(2,kl,8,5),_(3,Ml,3,4,"ngb-alert",16),r(4,"ngb-alert",17)(5,"p",18),m(6),d(7,"translate"),l()()),n&2){let e=g();o(2),f(e.isConfigured()&&e.pluginAlias()&&e.pluginType()?2:-1),o(),f(e.isConfigured()&&(!e.pluginAlias()||!e.pluginType())?3:-1),o(),y("dismissible",!1),o(2),w(" ",G(7,4,"plugins.uninstall_remove_confirmation",de(7,hl,e.plugin==null?null:e.plugin.displayName))," ")}}function Tl(n,c){n&1&&(m(0),d(1,"translate")),n&2&&w(" ",p(1,1,"plugins.manage.uninstall")," ")}function Pl(n,c){n&1&&v(0,"i",12)}var Vl=/:/g,rn=(()=>{class n{$activeModal=C(K);$api=C(j);$modal=C(ae);$toastr=C(U);$translate=C(R);injector=C(se);modalData=C(ct);plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];action=this.modalData.action??"";keepOrphans=this.modalData.keepOrphans??!1;onRefreshPluginList=this.modalData.onRefreshPluginList??(()=>{});keepOrphansName=`<code>${this.$translate.instant("settings.startup.keep_accessories")}</code>`;keepOrphansValue="<code>false</code>";loading=x(!0);uninstalling=x(!1);removeConfig=x(!0);removeChildBridges=x(!0);hasChildBridges=x(!1);isConfigured=x(!1);isConfiguredDynamicPlatform=x(!1);pluginType=x(null);pluginAlias=x(null);ngOnInit(){this.initialize()}doUninstall(){return M(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(Vl,""))))}catch(i){console.error(i)}if(this.$activeModal.dismiss(),!this.plugin)return;let e=z([{provide:ue,useValue:{action:"Uninstall",pluginName:this.plugin.name,pluginDisplayName:this.plugin.displayName,onRefreshPluginList:this.onRefreshPluginList}}],this.injector);this.$modal.open(Le,{size:"lg",backdrop:"static",injector:e})})}dismissModal(){this.$activeModal.dismiss("Dismiss")}onRemoveConfigChange(){this.removeChildBridges.set(this.removeConfig())}settingTranslationKey=Me(()=>this.isConfiguredDynamicPlatform()&&this.keepOrphans&&this.removeConfig()?"plugins.manage.confirm_disable_setting_override":"plugins.manage.confirm_disable_setting");shouldShowCleanupAlert=Me(()=>!(this.keepOrphans&&this.isConfiguredDynamicPlatform()&&!this.removeConfig()));willKeepAccessoriesInCache=Me(()=>this.keepOrphans&&this.isConfiguredDynamicPlatform()&&!this.removeConfig());initialize(){return M(this,null,function*(){if(this.plugin)try{this.isConfigured.set(this.plugin.isConfigured),this.childBridges.length&&this.hasChildBridges.set(!0);let e=yield this.getAlias();this.pluginType.set(e.pluginType),this.pluginAlias.set(e.pluginAlias),this.pluginType()==="platform"&&this.pluginAlias()&&this.isConfiguredDynamicPlatform.set(!0),this.keepOrphansValue=`<code>${this.keepOrphans}</code>`,this.keepOrphans&&this.isConfiguredDynamicPlatform()&&this.removeConfig.set(!1),this.removeChildBridges.set(this.removeConfig())}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 M(this,null,function*(){if(!this.plugin)throw new Error("Plugin not set");return this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`)})}removePluginConfig(){return M(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 M(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=O({type:n,selectors:[["app-uninstall-plugin"]],decls:20,vars:15,consts:[[1,"modal-content","modal-min-height"],[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","icon-xl"],[1,"text-center","mb-0"],[1,"fas","fa-trash","primary-text","icon-xl"],["type","info",1,"mt-4",3,"dismissible"],["type","warning",1,"mt-4","mb-0",3,"dismissible"],[1,"mb-0"],[1,"text-center","mt-4","mb-0"],[1,"d-inline-block","text-start","mb-0"],["for","remove-plugin-config",1,"hb-uix-switch","d-block"],["id","remove-plugin-config","type","checkbox",3,"ngModelChange","change","ngModel"],[1,"hb-uix-slider","hb-uix-round"],[1,"mt-2","text-start"],[3,"innerHtml"]],template:function(i,t){i&1&&(r(0,"div",0)(1,"div",1)(2,"h5",2),m(3),l(),r(4,"button",3),d(5,"translate"),E("click",function(){return t.dismissModal()}),l()(),r(6,"div",4),_(7,Cl,2,0,"div",5)(8,El,8,9),l(),r(9,"div",6)(10,"div",7)(11,"button",8),d(12,"translate"),E("click",function(){return t.dismissModal()}),m(13),d(14,"translate"),l()(),v(15,"div",9),r(16,"div",10)(17,"button",11),E("click",function(){return t.doUninstall()}),_(18,Tl,2,3)(19,Pl,1,0,"i",12),l()()()()),i&2&&(o(3),S((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),y("disabled",t.uninstalling()),V("aria-label",p(5,9,"form.button_close")),o(3),f(t.loading()?7:8),o(4),y("disabled",t.uninstalling()),V("aria-label",p(12,11,"form.button_close")),o(2),w(" ",p(14,13,"form.button_close")," "),o(4),y("disabled",t.loading()||t.uninstalling()),o(),f(t.uninstalling()?19:18))},dependencies:[ve,tt,be,Ce,Ae,H],styles:[".modal-min-height[_ngcontent-%COMP%]{min-height:300px}"],changeDetection:0})}return n})();var we=(()=>{class n{$api=C(j);$modal=C(ae);$customPluginsService=C(ji);$settings=C(q);$toastr=C(U);$translate=C(R);injector=C(se);pluginListRefreshSubject=new ge;onPluginListRefresh=this.pluginListRefreshSubject.asObservable();installPlugin(e,i,t=null){return M(this,null,function*(){let a=z([{provide:ue,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,backToVersionModal:t}}],this.injector),s=this.$modal.open(Le,{size:"lg",backdrop:"static",injector:a});try{let u=yield s.result;u?.action==="just-installed"&&u?.plugin&&(u.plugin.isConfigured?this.$modal.open(_e,{size:"lg",backdrop:"static"}):yield this.settings(u.plugin))}catch(u){}})}uninstallPlugin(e,i){return M(this,null,function*(){let t=z([{provide:ct,useValue:{plugin:e,childBridges:i,action:"Uninstall",keepOrphans:this.$settings.keepOrphans,onRefreshPluginList:()=>this.pluginListRefreshSubject.next()}}],this.injector),a=this.$modal.open(rn,{size:"lg",backdrop:"static",injector:t});try{yield a.result,this.pluginListRefreshSubject.next()}catch(s){}})}checkAndUpdatePlugin(e,i){return M(this,null,function*(){(yield this.checkHbAndNodeVersion(e,"update"))&&(yield this.updatePlugin(e,i))})}updatePlugin(e,i,t=null){return M(this,null,function*(){let a=z([{provide:ue,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,backToVersionModal:t}}],this.injector),s=this.$modal.open(Le,{size:"lg",backdrop:"static",injector:a});try{let u=yield s.result;u?.action==="just-installed"&&u?.plugin&&(u.plugin.isConfigured?this.$modal.open(_e,{size:"lg",backdrop:"static"}):yield this.settings(u.plugin))}catch(u){}})}upgradeHomebridge(e,i){return M(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(e,"update")))return;let t=z([{provide:ue,useValue:{action:"Update",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:i,latestVersion:e.latestVersion,installedVersion:e.installedVersion}}],this.injector);this.$modal.open(Le,{size:"lg",backdrop:"static",injector:t})})}installAlternateVersion(e,i){return M(this,null,function*(){let t=z([{provide:Ve,useValue:{plugin:e,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),onSettingsChange:i}}],this.injector),a=this.$modal.open(kt,{size:"lg",backdrop:"static",injector:t});try{let{action:s,version:u,engines:b}=yield a.result;return(yield this.checkHbAndNodeVersion(F(L({},e),{updateEngines:b}),s))?e.name==="homebridge"?yield this.upgradeHomebridge(e,u):e.installedVersion?yield this.updatePlugin(e,u,e):this.installPlugin(e,u,e):void 0}catch(s){}})}bridgeSettings(e,i=!1){return M(this,null,function*(){let t;if(e.settingsSchema)try{t=yield this.loadConfigSchema(e.name)}catch(u){console.error(u),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let a=z([{provide:st,useValue:{schema:t,plugin:e,justInstalled:i}}],this.injector),s=this.$modal.open(Ki,{size:"lg",backdrop:"static",injector:a});try{(yield s.result)==="refresh"&&this.pluginListRefreshSubject.next()}catch(u){}})}settings(e){return M(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(s){console.error(s),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=z([{provide:Se,useValue:{schema:i,plugin:e}}],this.injector);return this.$modal.open(e.settingsSchema?tn:Lt,{size:"lg",backdrop:"static",injector:t}).result.catch(()=>{})})}jsonEditor(e){return M(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(s){console.error(s)}let t=z([{provide:Se,useValue:{schema:i,plugin:e}}],this.injector);return this.$modal.open(Lt,{size:"lg",backdrop:"static",injector:t}).result.catch(s=>console.error(s))})}checkHbAndNodeVersion(e,i){return M(this,null,function*(){let t=!0,a=!0;try{e.updateEngines?.node&&(0,je.lt)(this.$settings.env.nodeVersion,(0,je.minVersion)(e.updateEngines.node))&&(t=!1),e.updateEngines?.homebridge&&this.$settings.env.homebridgeVersion&&(0,je.lt)(this.$settings.env.homebridgeVersion,(0,je.minVersion)(e.updateEngines.homebridge))&&(a=!1)}catch(s){return console.error(s),this.$toastr.error(s.message,this.$translate.instant("toast.title_error")),!1}if(!t||!a)try{let s=z([{provide:pt,useValue:{plugin:e,isValidNode:t,isValidHb:a,action:i}}],this.injector);return yield this.$modal.open(Qi,{size:"lg",backdrop:"static",injector:s}).result}catch(s){return!1}return!0})}loadConfigSchema(e){return M(this,null,function*(){return this.$api.get(`/plugins/config-schema/${encodeURIComponent(e)}`)})}resetChildBridges(e){return M(this,null,function*(){let i=z([{provide:mt,useValue:{childBridges:e}}],this.injector);this.$modal.open(nn,{size:"lg",backdrop:"static",injector:i})})}switchToScoped(e){return M(this,null,function*(){let i=z([{provide:gt,useValue:{plugin:e}}],this.injector);this.$modal.open(an,{size:"lg",backdrop:"static",injector:i})})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=ke({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{Ui as a,zi as b,we as c};